在加载了 vtk 的 .stl 模型上部分着色的方法

Way to partially color on .stl model loaded with vtk

我想在加载了 vtk 的 .stl 模型上进行部分着色。

我在搜索这个的时候发现了一个类似的东西。

但是是给整个.stl模型上色

以下是我要在 .stl 模型上更改的内容。

注意:除了模型的颜色,您无需担心任何其他问题。

Before I color on .stl model

After I color on .stl model

有什么好的方法可以解决我的问题吗? 或者这是不可能的?

下面是整个代码中的渲染部分:


class ModelRenderWindow(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()
        colors = vtk.vtkNamedColors()
        stl_filename = 'savetostl.stl'

        self.title = '3D Model Rendering ' + stl_filename
        self.setWindowTitle(self.title)

        self.frame = Qt.QFrame()
        self.layout = Qt.QVBoxLayout()

        # Read a .vtu file

        reader = vtk.vtkSTLReader()

        reader.SetFileName(stl_filename)

        # Create a mapper
        mapper = vtk.vtkPolyDataMapper() # use only for .STL file
        mapper.SetInputConnection(reader.GetOutputPort())
    
        # Create an actor
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        
        renderer = vtk.vtkRenderer()
        renderer.AddActor(actor)
        renderer.SetBackground(colors.GetColor3d('Wheat'))
        renderer.ResetCamera()
        self.frame.setLayout(self.layout)  # set layout manager

        # Create a renderer window interactor
        interactor = vtk.QVTKRenderWindowInteractor(self.frame)
        self.layout.addWidget(interactor)
        interactor.GetRenderWindow().AddRenderer(renderer)
        iren = interactor.GetRenderWindow().GetInteractor()
        iren.Initialize()
        
        self.setLayout(self.layout)

注意:我正在创建一个 pyqt 应用程序。

设置标量和颜色传递函数可以解决您的问题。您可以在初始表面上用不同颜色标记几个部分,并使其他部分保持相同颜色。

示例: Color The Model By Point Scalars And Cell Scalars

在您的场景中使用点标量或单元标量可以发现差别很小。