通过法线旋转vtkDiskSource / vtkPolyDataMapper

时间:2018-11-10 22:31:03

标签: python data-visualization vtk

我需要在网格表面(表示为vtkPolyDataMapper)上放置多个vtkDiskSource,以使磁盘位于该表面上。 vtkRegularPolygonSource之类的对象具有SetNormal方法,该方法可用于“旋转”。也有vtkTransform,但我不知道如何计算X,Y,Z值。有人可以帮我吗?

disk = vtk.vtkDiskSource()
disk.SetInnerRadius(1.0)
disk.SetOuterRadius(2.0)

<---- rotation

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(disk.GetOutputPort())

1 个答案:

答案 0 :(得分:0)

您可以使用vtk.Transformvtk.DiskSource放置在网格表面上的正确方向。

disk = vtk.vtkDiskSource()
disk.SetInnerRadius(1.0)
disk.SetOuterRadius(2.0)
disk.Update()

# Assume we have the normal of the mesh surface in normal
# and the position in coords

z_axis = [0., 0., 1.]
axis = np.cross(z_axis, normal)
angle = np.arccos(n.dot(z_axis, normal))
transform = vtk.vtkTransform()
# Put the disks a bit above the mesh, otherwise they might be partially burried
transform.Translate(*(coords + 0.1 * normal))
transform.RotateWXYZ(n.degrees(angle), *axis)
transform_filter = vtk.vtkTransformPolyDataFilter()
transform_filter.SetTransform(transform)
transform_filter.SetInputConnection(disk.GetOutputPort())
transform_filter.Update()

diskmapper = vtk.vtkPolyDataMapper()
diskmapper.SetInputConnection(transform_filter.GetOutputPort())
# Go on setting up actors 
相关问题