python - 具有重叠单元的 vtkCellLocator
问题描述
我有一个混合了 2d 和 3d 单元的非结构化网格,可以共享点。我需要按位置查找特定单元格。是否有一种干净的方法可以强制 vtkCellLocator 在搜索时忽略特定的单元格(例如按类型)?在示例中,我希望顶部选择选择 HEX 单元格,而不是 QUAD。
import vtk
# Create points
points = vtk.vtkPoints()
points.SetNumberOfPoints(8)
points.SetPoint(0,[-.5,-.5,-.5])
points.SetPoint(1,[ .5,-.5,-.5])
points.SetPoint(2,[ .5, .5,-.5])
points.SetPoint(3,[-.5, .5,-.5])
points.SetPoint(4,[-.5,-.5, .5])
points.SetPoint(5,[ .5,-.5, .5])
points.SetPoint(6,[ .5, .5, .5])
points.SetPoint(7,[-.5, .5, .5])
# Create Unstructured Grid and add Cells
ugrid = vtk.vtkUnstructuredGrid()
if vtk.VTK_MAJOR_VERSION <= 9:
ugrid.Allocate(2)
else:
ugrid.AllocateExact(2,8)
ugrid.InsertNextCell(vtk.VTK_QUAD,4,[4,5,6,7])
ugrid.InsertNextCell(vtk.VTK_HEXAHEDRON,8,[0,1,2,3,4,5,6,7])
ugrid.SetPoints(points)
# Create a locator
locator = vtk.vtkCellLocator()
locator.SetDataSet(ugrid)
locator.BuildLocator()
# Pick a point at the top
quad_cell_id = locator.FindCell([0,0,.5])
quad_cell = ugrid.GetCell(quad_cell_id)
# Pick a point close to the top
hex_cell_id = locator.FindCell([0,0,.49])
hex_cell = ugrid.GetCell(hex_cell_id)
我能想到的唯一方法是将数据拆分为 2d 和 3d 非结构化网格,并为其他操作合并网格,但这似乎很浪费。
解决方案
推荐阅读
- azure - Azure CLI。是否可以更新/设置 Web 应用程序的默认文档?
- vba - 更改主题中的占位符
- batch-file - 加载用户的注册表,通过批处理文件导出数据?
- javascript - 将组件添加到页面,而不是重新呈现页面
- php - 将带有子查询的 SQL 转换为 Doctrine Query Builder
- r - R语言下载镜像文件失败(3.5版)
- gitlab - Error 404 after install gitlab
- gitlab-api - How to run Save-GitLabAPIConfiguration from PSGitLab 2.7.0
- c++11 - Parameter pack and constexpr static
- c# - 如何在 C# 中对图像执行 DCT