在加载了 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
在您的场景中使用点标量或单元标量可以发现差别很小。
我想在加载了 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
在您的场景中使用点标量或单元标量可以发现差别很小。