错题网站开发,全网零售管理系统,行业协会网站建设方案,南宁企业建站系统一#xff1a;主要的知识点
1、说明
本文只是教程内容的一小段#xff0c;因博客字数限制#xff0c;故进行拆分。主教程链接#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①vtkOverlappingAMR分层多块的数据容器主要的知识点1、说明本文只是教程内容的一小段因博客字数限制故进行拆分。主教程链接vtk教程——逐行解析官网所有Python示例-CSDN博客2、知识点纪要本段代码主要涉及的有①vtkOverlappingAMR分层多块的数据容器存储不同分辨率的结构化网格二代码及注释import vtkmodules.vtkRenderingOpenGL2 import vtkmodules.vtkInteractionStyle from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonDataModel import vtkOverlappingAMR, vtkUniformGrid, vtkAMRBox, vtkSphere from vtkmodules.vtkCommonCore import vtkFloatArray from vtkmodules.vtkFiltersModeling import vtkOutlineFilter from vtkmodules.vtkFiltersCore import vtkContourFilter from vtkmodules.vtkFiltersGeometry import vtkCompositeDataGeometryFilter from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def MakeScalars(dims, origin, spacing, scalars): sphere vtkSphere() sphere.SetRadius(3) sphere.SetCenter(5, 5, 5) scalars.SetNumberOfTuples(dims[0] * dims[1] * dims[2]) for k in range(0, dims[2]): z origin[2] spacing[2] * k for j in range(0, dims[1]): y origin[1] spacing[1] * j for i in range(0, dims[0]): x origin[0] spacing[0] * i # 使用扁平索引Flattened Index, 即一维数组索引将计算得到的标量值存入 scalars 数组中 scalars.SetValue(k * dims[0] * dims[1] j * dims[0] i, sphere.EvaluateFunction(x, y, z)) def main(): colors vtkNamedColors() vtkOverlappingAMR 是一个 分层多块multi-level, multi-block数据容器 用于存储具有**不同空间分辨率refinement ratio**的结构化网格vtkUniformGrid。 它能表示那种 “部分区域加密、其他地方保持粗糙” 的数据 amr vtkOverlappingAMR() blockPerLevel [1, 2] vtkOverlappingAMR 分多层级每一层级对应一种分辨率且每一层可包含多个vtkUniformGrid 各层之间的网格可以部分重叠本身不保存网格数据只是一个层次组织器真正的数据存在每个 block的vtkUniformGrid中 amr.Initialize(2, blockPerLevel) # 这段代码表示有两个层级第0个层级1个粗网格第2个层级2个细化网格 origin [0, 0, 0] spacing [1.0, 1.0, 1.0] dims [11, 11, 11] vtkUniformGrid 是 VTK 中非常核心的一个数据结构之一 它代表的是一种 规则结构化网格Uniform Structured Grid 在科学计算和体数据Volume Data可视化中非常常见 是一种 规则三维网格数据类型其中所有单元的大小spacing相同点的位置由 origin spacing × index 自动计算出来 可以看作是 vtkImageData 的“更通用版本”允许你显式设置单元和点的数据而不仅限于图像 ug1 vtkUniformGrid() ug1.SetSpacing(spacing) ug1.SetOrigin(origin) ug1.SetDimensions(dims) scalars vtkFloatArray() MakeScalars(dims, origin, spacing, scalars) ug1.GetPointData().SetScalars(scalars) vtkAMRBox 在使用vtkOverlappingAMR时vtkAMRBox 是其中最核心的“空间描述单元” 简单说它是一个包围盒bounding box定义了该块在整个 AMR 层级结构中覆盖的网格区域范围。 box1 vtkAMRBox([0, 0, 0], [9, 9, 9]) #lo / hi 表示该块在索引空间中的范围10×10×10 个单元格 amr.SetAMRBox(0, 0, box1) amr.SetDataSet(0, 0, ug1) spacing2 [0.5, 0.5, 0.5] ug2 vtkUniformGrid() ug2.SetOrigin(origin) ug2.SetSpacing(spacing2) ug2.SetDimensions(dims) scalars2 vtkFloatArray() MakeScalars(dims, origin, spacing2, scalars2) ug2.GetPointData().SetScalars(scalars2) lo2 [0, 0, 0] hi2 [9, 9, 9] box2 vtkAMRBox(lo2, hi2) amr.SetAMRBox(1, 0, box2) amr.SetDataSet(1, 0, ug2) origin3 [5, 5, 5] ug3 vtkUniformGrid() # Geometry ug3.SetOrigin(origin3) ug3.SetSpacing(spacing2) ug3.SetDimensions(dims) # Data scalars3 vtkFloatArray() ug3.GetPointData().SetScalars(scalars3) MakeScalars(dims, origin3, spacing2, scalars3) lo3 [10, 10, 10] hi3 [19, 19, 19] box3 vtkAMRBox(lo3, hi3) amr.SetAMRBox(1, 1, box3) amr.SetDataSet(1, 1, ug3) amr.SetRefinementRatio(0, 2) # SetRefinementRatio Level1网格的体素尺寸将是Level0的网格体素尺寸尺寸的1/2 of vtkOutlineFilter() of.SetInputData(amr) # geomFilter vtkCompositeDataGeometryFilter() # geomFilter.SetInputConnection(of.GetOutputPort()) cf vtkContourFilter() cf.SetInputData(amr) cf.SetNumberOfContours(1) cf.SetValue(0, 10.0) geomFilter2 vtkCompositeDataGeometryFilter() geomFilter2.SetInputConnection(cf.GetOutputPort()) # Create the render window, renderer, and interactor. aren vtkRenderer() renWin vtkRenderWindow() renWin.AddRenderer(aren) iren vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # Associate the geometry with a mapper and the mapper to an actor. mapper vtkPolyDataMapper() mapper.SetInputConnection(of.GetOutputPort()) actor1 vtkActor() actor1.GetProperty().SetColor(colors.GetColor3d(Yellow)) actor1.SetMapper(mapper) # Associate the geometry with a mapper and the mapper to an actor. mapper2 vtkPolyDataMapper() mapper2.SetInputConnection(geomFilter2.GetOutputPort()) actor2 vtkActor() actor2.SetMapper(mapper2) # Add the actor to the renderer and start handling events. aren.AddActor(actor1) aren.AddActor(actor2) aren.SetBackground(colors.GetColor3d(CornflowerBlue)) renWin.SetWindowName(OverlappingAMR) renWin.Render() iren.Start() if __name__ __main__: main()