如何使用 vtkPolyDataNormals 在 vtkPolyData vtkCylinderSource 上显示法线?

问题描述

我正在尝试显示圆柱源 table.whitelist 的每个单元格的法线。 我正在使用 vtkCylinderSource 类和 vtkpolyDatanormals 但法线没有显示在 QT 视图中。 我不明白我做错了什么。 这是我现在使用的代码

vtkGlyph3D

解决方法

如果您使用此 example 中的字形配置并将比例因子设置为 1.0,则它会起作用。

在此处查看修改后的函数 draw_Electrode():

def draw_Electrode(self):
    source = vtk.vtkCylinderSource()
    source.SetCenter(0,0)
    source.SetRadius(20)
    source.SetResolution(100)
    source.SetHeight(10)

    trans = vtk.vtkTransform()
    trans.PostMultiply()
    trans.RotateX(90)
    trans.RotateY(0)
    trans.Translate(0,0)

    trans_filter = vtk.vtkTransformPolyDataFilter()
    trans_filter.SetInputConnection(source.GetOutputPort())
    trans_filter.SetTransform(trans)

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

    actor = vtk.vtkActor()
    actor.SetMapper(mapper)
    actor.GetProperty().SetColor(1,1,1)
    actor.GetProperty().SetOpacity(0.5)

    self.ren.AddActor(actor)

    normals = vtk.vtkPolyDataNormals()
    normals.SetInputConnection(trans_filter.GetOutputPort())

    arrow= vtk.vtkArrowSource()

    glyph = vtk.vtkGlyph3D()
    glyph.SetInputConnection(normals.GetOutputPort())
    glyph.SetSourceConnection(arrow.GetOutputPort())
    glyph.SetVectorModeToUseNormal()
    glyph.SetScaleModeToScaleByVector()
    glyph.SetScaleFactor(1)

    mapper2 = vtk.vtkPolyDataMapper()
    mapper2.SetInputConnection(glyph.GetOutputPort())

    actor2 = vtk.vtkActor()
    actor2.SetMapper(mapper2)
    actor2.GetProperty().SetColor(1,0)

    self.ren.AddActor(actor2)
    self.set_center()
    self.Render()