当前位置: 首页 > news >正文

SGrid 创建和可视化一个带有矢量数据(Vector Data)的 3D 结构化网格

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①vtkHedgeHog将数据关联到网格上的顶点


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonCore import vtkDoubleArray, vtkMath, vtkPoints from vtkmodules.vtkCommonDataModel import vtkStructuredGrid from vtkmodules.vtkCommonColor import vtkNamedColors import math from vtkmodules.vtkFiltersCore import vtkHedgeHog from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() rMin = 0.5 rMax = 1.0 dims = [13, 11, 11] sgrid = vtkStructuredGrid() sgrid.SetDimensions(dims) vectors = vtkDoubleArray() vectors.SetNumberOfComponents(3) vectors.SetNumberOfTuples(dims[0] * dims[1] * dims[2]) points = vtkPoints() points.Allocate(dims[0] * dims[1] * dims[2]) # 计算了网格中点的总数,分配了空间 deltaZ = 2.0 / (dims[2] - 1) deltaRad = (rMax - rMin) / (dims[1] - 1) x = [0.0] * 3 v = [0.0] * 3 for k in range(0, dims[2]): x[2] = -1.0 + k * deltaZ kOffset = k * dims[0] * dims[1] for j in range(0, dims[1]): radius = rMin + j * deltaRad jOffset = j * dims[0] for i in range(0, dims[0]): theta = i * vtkMath.RadiansFromDegrees(15.0) x[0] = radius * math.cos(theta) x[1] = radius * math.sin(theta) v[0] = -x[1] v[1] = x[0] offset = i + jOffset + kOffset points.InsertPoint(offset, x) vectors.InsertTuple(offset, v) sgrid.SetPoints(points) """ SetVectors 将计算出的 3D 矢量数据场(vectors)作为属性,绑定到结构化网格(sgrid)的每一个点上 点数据 (Point Data):这些属性与几何体上的点一一对应。常见的点数据包括: 标量 (Scalars):如温度、压力(单个数值)。 矢量 (Vectors):如速度、力(三个分量 V ) 张量 (Tensors):用于应力分析等 """ sgrid.GetPointData().SetVectors(vectors) """ vtkHedgeHog 将数据集(如结构化网格、非结构化网格等)上每个点关联的矢量数据, 转化成一系列可渲染的 3D 箭头或直线,从而直观地展示矢量场的方向和强度 """ hedgehog = vtkHedgeHog() hedgehog.SetInputData(sgrid) """ SetScaleFactor 用于控制生成的箭头相对于原始矢量大小的缩放比例 如果矢量值很小,可能需要设置一个较大的 factor 来使箭头清晰可见 如果矢量值很大,可能需要设置一个较小的 factor 来防止箭头互相重叠或溢出屏幕 """ hedgehog.SetScaleFactor(0.1) # 绘制的箭头长度=原始矢量的大小×0.1 sgridMapper = vtkPolyDataMapper() sgridMapper.SetInputConnection(hedgehog.GetOutputPort()) sgridActor = vtkActor() sgridActor.SetMapper(sgridMapper) sgridActor.GetProperty().SetColor(colors.GetColor3d('Gold')) # Create the usual rendering stuff renderer = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(renderer) renWin.SetWindowName('SGrid') iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) renderer.AddActor(sgridActor) renderer.SetBackground(colors.GetColor3d('MidnightBlue')) renderer.ResetCamera() renderer.GetActiveCamera().Elevation(60.0) renderer.GetActiveCamera().Azimuth(30.0) renderer.GetActiveCamera().Dolly(1.0) renWin.SetSize(640, 480) # Interact with the data. renWin.Render() iren.Start() if __name__ == '__main__': main()
http://www.jsqmd.com/news/135412/

相关文章:

  • python+vue美特超市进销存管理系统_91crh
  • 利用AI技术提升论文效率,9款平台开题与降重功能实测推荐
  • 轻松搭建个人知识库:访答软件使用全攻略
  • 科普丨乌诺地尔是什么?与咖啡因、酮康唑相比哪个防脱效果好? - 速递信息
  • 百万医疗保险哪个保险公司的比较好?2025 热门产品精简 QA 指南 - 速递信息
  • 2025银川最新水电暖维修机构TOP5 评测!兴庆、金凤、西夏、贺兰县等地区优质企业权威榜单发布,专业高效解决居家难题 - 全局中转站
  • 【工具】ScreenToGif 视频转动图完整教程
  • gmock 如何mock一个模板类单例
  • 学术写作必备:9个AI平台实测对比,轻松搞定论文从开题到降重
  • 从开题到降重,这9款AI论文平台实测表现优秀,助力学术写作
  • Bazzite 完全攻略:3步打造专业级Linux游戏平台
  • 2025-2026年中国GEO优化公司盘点:综合型与细分型公司对比 - 速递信息
  • 保险怎么买合适年轻人?2025 京东金融专属配置 QA 指南 - 速递信息
  • python+vue的大学生创客创业项目申请答辩平台的设计与实现_4a271
  • python+vue篮球人才球员管理系统vue
  • 星拓广告助力跨境电商圣诞季爆单的三大核心策略 - 速递信息
  • 《人工智能:原理与技术》学习笔记 II —— Reinforcement Learning
  • 解锁AI开发新效率:AI Ping平台与免费明星模型MiniMax-M2.1、GLM-4.7深度解析
  • 技术分享 / 客户 Demo 时,敏感数据防泄露的一种工程化方案
  • 为什么 Tailwind CSS 最适合用于 AI 驱动的前端编码
  • 2025.12.24
  • 健身教程资源合集
  • maixcam离线训练YOLO模型的格式转换问题(py/onnx转cvimodel) - -zolo
  • 工业质检多缺陷漏检,后来才知道融合X射线与热成像数据对齐特征
  • 2025最新!10个AI论文平台测评:本科生写论文还能这么快?
  • 9大AI论文平台实测对比:开题报告撰写与降重效果深度评测
  • M9A游戏助手:智能化任务执行的终极解放方案
  • 实用指南:统信UOS arm64架构JDK离线安装包(亲测可用,零依赖部署)
  • 精选9款AI论文助手:高效完成开题报告与论文降重任务
  • 【创建计算机断层扫描金属制品】创建的计算机断层扫描金属伪影、该模拟为平行束CT附Matlab代码