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

OverlappingAMR 创建并可视化一个 “分层自适应网格” 数据集,粗网格表示大范围区域,高分辨率用于重要区域

一:主要的知识点

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()
http://www.cnnetsun.cn/news/178924.html

相关文章:

  • ColoredElevationMap 根据标量进行颜色映射
  • LangFlow B站视频内容创作方向建议
  • LangFlow代码质量检查工具集成(ESLint/Prettier)
  • LangFlow Google排名冲顶可能性分析
  • TLS 1.0/1.1停用倒计时,Open-AutoGLM如何快速适配TLS 1.2+?
  • 基于springboot的家教管理系统的设计与实现
  • 解锁科研新维度:书匠策AI期刊论文模块,开启学术写作的“智变”时代
  • LangFlow百度搜索排名优化技巧
  • 数智时代,openGauss Summit 2025即将发布哪些技术创新破局
  • LangFlow CI/CD流水线搭建实践
  • 论指针运算
  • 面试官:多模态 Transformer 如何处理不同模态的序列长度差异?
  • LangFlow结合RAG架构构建企业知识库问答
  • 480万人才缺口!网络安全,一个被低估的“金饭碗”!
  • Web 安全入门:从 OWASP Top 10 到常见漏洞,从零基础入门到精通,收藏这一篇就够了!_web top10
  • TOSHIBA 2SA1162-GR,LF SOT-23-3 三极管(BJT)
  • 【MWORKS使用技巧84】Sysplorer中使用Constants组件时,如何产生向量信号?
  • 掌握这4种异常处理模式,轻松应对Open-AutoGLM解密崩溃危机
  • 如何在30分钟内完成Open-AutoGLM加密传输配置?高效运维必看
  • NetSupport Manager 路径遍历漏洞 (CVE-2025-34181) 技术深度解析
  • Electron 实战项目
  • Open-AutoGLM解密异常频发?(企业级容错架构设计实践)
  • 你还在用传统加密?Open-AutoGLM的这4个优势已彻底改写行业规则
  • 企业级城市垃圾分类管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 为什么你的系统总被Open-AutoGLM误封?一文看懂白名单配置核心要点
  • 【数据安全突围战】:Open-AutoGLM为何成为2024年最值得掌握的加密技术?
  • 使用机器学习简化机构沟通,提升可读性与包容性
  • LangFlow降低AI开发门槛:非技术人员也能构建智能应用
  • LangFlow与LangChain协同工作原理深度剖析
  • 16.2 对齐方法论:FineTune与RAG两大技术路径