聊城集团网站建设费用,嘉兴 网站 建设,网站开发流程甘特图,装修设计图包括哪些图纸前言#xff1a; 本文主要介绍了如何使用Python VTK高亮显示actor#xff0c;使用Python语言#xff0c;高亮显示选中的actor。当窗口中的圆球actor被选中时#xff0c;会变成红色#xff0c;并且会显示actor三遍面片边缘信息。 效果#xff1a; VTK VTK#xff0c; 本文主要介绍了如何使用Python VTK高亮显示actor使用Python语言高亮显示选中的actor。当窗口中的圆球actor被选中时会变成红色并且会显示actor三遍面片边缘信息。 效果 VTK VTKvisualizationtoolkit是一个开放资源的免费软件系统主要用于三维计算机图形学、图像处理和可视化。Vtk是在面向对象原理的基础上设计和实现的它的内核是用C构建。
主要函数介绍
NewPickedActor.GetProperty()
通过该函数可以设置actor的性质如颜色、表面样式等。
vtk.vtkSphereSource()
创建球体的函数文中通过一个for循环创建了6个球体。
vtk.vtkMinimalStandardRandomSequence() VTK的随机数生成器用于代码中的球体随机生成球体的大小和位置。
MouseInteractorHighLightActor
定义actor操作方法这个是一个鼠标操作控件的控制方法。
leftButtonPressEvent(self, obj, event)
这是一个事件触发函数当鼠标左键点击对应的actor时会触发函数对点的actor高亮显示。
Code:
#!/usr/bin/env python# noinspection PyUnresolvedReferences
import vtkcolors vtk.vtkNamedColors()
NUMBER_OF_SPHERES 6class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):def __init__(self, parentNone):self.AddObserver(LeftButtonPressEvent, self.leftButtonPressEvent)self.LastPickedActor Noneself.LastPickedProperty vtk.vtkProperty()def leftButtonPressEvent(self, obj, event):clickPos self.GetInteractor().GetEventPosition()picker vtk.vtkPropPicker()picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer())# 创建一个新的actorself.NewPickedActor picker.GetActor()# If something was selectedif self.NewPickedActor:# If we picked something before, reset its propertyif self.LastPickedActor:self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)if self.LastPickedActor self.NewPickedActor:self.NewPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)self.LastPickedActorNoneelse:# Save the property of the picked actor so that we can# restore it next timeself.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()# 保存最后一个选中的actorself.LastPickedActor self.NewPickedActorself.OnLeftButtonDown()returndef main():# 创建render和windowrenderer vtk.vtkRenderer()renderer.SetBackground(colors.GetColor3d(SteelBlue))renwin vtk.vtkRenderWindow()renwin.AddRenderer(renderer)renwin.SetSize(640, 600)renwin.SetWindowName(HighlightPickedActor)# 建立interactor(交互操作)interactor vtk.vtkRenderWindowInteractor()interactor.SetRenderWindow(renwin)# 交互操作方法style MouseInteractorHighLightActor()style.SetDefaultRenderer(renderer)interactor.SetInteractorStyle(style)randomSequence vtk.vtkMinimalStandardRandomSequence()randomSequence.SetSeed(8775070)# 添加球体for i in range(NUMBER_OF_SPHERES):source vtk.vtkSphereSource()# random position and radiusx 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 vtk.vtkPolyDataMapper()mapper.SetInputConnection(source.GetOutputPort())actor vtk.vtkActor()actor.SetMapper(mapper)r randomSequence.GetRangeValue(0.4, 1.0)randomSequence.Next()g randomSequence.GetRangeValue(0.1, 1.0)randomSequence.Next()b randomSequence.GetRangeValue(0.6, 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(10.0)renderer.AddActor(actor)# 运行interactor.Initialize()renwin.Render()interactor.Start()if __name__ __main__:main()