首页 > 解决方案 > 具有重叠单元的 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 非结构化网格,并为其他操作合并网格,但这似乎很浪费。

标签: pythonvtk

解决方案


推荐阅读