一:主要的知识点
1、说明
本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①vtkPropPicker选取一个prop对象
二:代码及注释
import vtkmodules.vtkInteractionStyle import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkRenderingCore import vtkRenderer, vtkActor, vtkPolyDataMapper, vtkRenderWindow, \ vtkRenderWindowInteractor, vtkPropPicker, vtkProperty from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera from vtkmodules.vtkCommonCore import vtkMinimalStandardRandomSequence from vtkmodules.vtkFiltersSources import vtkSphereSource class MouseInteractorHighLightActor(vtkInteractorStyleTrackballCamera): def __init__(self): self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent) self.LastPickedActor = None self.LastPickedProperty = vtkProperty() def leftButtonPressEvent(self, obj, event): colors = vtkNamedColors() clickPos = self.GetInteractor().GetEventPosition() """ vtkPropPicker 在屏幕坐标中拾取(Pick)一个 vtkProp 对象 """ picker = vtkPropPicker() picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer()) self.NewPickedActor = picker.GetActor() if self.NewPickedActor: if self.LastPickedActor: self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty) self.LastPickedProperty.DeepCopy(self.NewPickedActor.GetProperty()) self.NewPickedActor.GetProperty().SetColor(colors.GetColor3d('Red')) self.NewPickedActor.GetProperty().SetDiffuse(1.0) self.NewPickedActor.GetProperty().SetSpecular(0.0) self.NewPickedActor.GetProperty().EdgeVisibilityOn() self.LastPickedActor = self.NewPickedActor self.OnLeftButtonDown() def main(): NUMBER_OF_SPHERES = 10 colors = vtkNamedColors() renderer = vtkRenderer() renderer.SetBackground(colors.GetColor3d("SteelBlue")) renwin = vtkRenderWindow() renwin.AddRenderer(renderer) renwin.SetSize(640, 480) renwin.SetWindowName('HighlightPickedActor') interactor = vtkRenderWindowInteractor() interactor.SetRenderWindow(renwin) # 自定义交互 style = MouseInteractorHighLightActor() style.SetDefaultRenderer(renderer) interactor.SetInteractorStyle(style) randomSequence = vtkMinimalStandardRandomSequence() randomSequence.SetSeed(8775070) for i in range(NUMBER_OF_SPHERES): source = vtkSphereSource() x = randomSequence.GetRangeValue(-5.0, 5.0) randomSequence.Next() y = randomSequence.GetRangeValue(-5.0, 5.0) randomSequence.Next() z = randomSequence.GetRangeValue(-5.0, 5.0) randomSequence.Next() radius = randomSequence.GetRangeValue(0.5, 1.0) randomSequence.Next() source.SetRadius(radius) source.SetCenter(x, y, z) source.SetPhiResolution(11) source.SetThetaResolution(21) mapper = vtkPolyDataMapper() mapper.SetInputConnection(source.GetOutputPort()) actor = vtkActor() actor.SetMapper(mapper) r = randomSequence.GetRangeValue(0.4, 1.0) randomSequence.Next() g = randomSequence.GetRangeValue(0.4, 1.0) randomSequence.Next() b = randomSequence.GetRangeValue(0.4, 1.0) randomSequence.Next() actor.GetProperty().SetDiffuseColor(r, g, b) actor.GetProperty().SetDiffuse(.8) actor.GetProperty().SetSpecular(.5) actor.GetProperty().SetSpecularColor(colors.GetColor3d('White')) actor.GetProperty().SetSpecularPower(30.0) renderer.AddActor(actor) interactor.Initialize() renwin.Render() interactor.Start() if __name__ == '__main__': main()