0

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

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

但它是为整个 .stl 模型着色。

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

注意:您不必担心模型颜色以外的任何事情。

在我为 .stl 模型上色之前

在我为 .stl 模型上色后

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

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


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 应用程序。

4

1 回答 1

0

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

示例: 按点标量和单元标量为模型着色

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

于 2021-06-17T00:56:29.543 回答