按法线旋转vtkDiskSource/vtkPolyDataMapper

2024-10-04 09:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在网格表面上放置多个vtkDiskSource(表示为vtkPolyDataMapper),以便磁盘位于表面上。像vtkRegularPolygonSource这样的对象具有SetNormal方法,可以用于“旋转”。还有vtk变换,但我不知道如何计算X,Y,Z值。有人能帮我吗?你知道吗

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

<---- rotation

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

Tags: 对象方法网格表面磁盘diskmappervtk
1条回答
网友
1楼 · 发布于 2024-10-04 09:25:03

可以使用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 

相关问题 更多 >