1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
import os import sys import vtkmodules.all as vtk
vtk.vtkOutputWindow.SetGlobalWarningDisplay(0)
r = vtk.vtkMultiBlockPLOT3DReader() r.SetXYZFileName('m6wing.xyz') r.Update() data = r.GetOutput() color = [[0.1, 0.3, 0.9], [0.6, 0.5, 0.1], [0.1, 0.8, 0.6], [0.9, 0.2, 0.4], ] all_actor = [] colors = vtk.vtkNamedColors() class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self, parent=None): self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)
self.LastPickedActor = None self.LastPickedProperty = vtk.vtkProperty()
def leftButtonPressEvent(self, obj, event): clickPos = self.GetInteractor().GetEventPosition()
picker = vtk.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() return
for i in range(data.GetNumberOfBlocks()): c = color[i] cell = data.GetBlock(i) g = vtk.vtkGeometryFilter() g.SetInputData(cell) MeshMapper = vtk.vtkCompositePolyDataMapper2()
MeshMapper.SetInputConnection(g.GetOutputPort()) MeshMapper.ScalarVisibilityOff() MeshActor = vtk.vtkActor() MeshActor.SetMapper(MeshMapper) MeshProp = MeshActor.GetProperty() MeshActor.GetProperty().SetColor(c[0], c[1], c[2]) all_actor.append(MeshActor) MeshRen = vtk.vtkRenderer() MeshRen.SetViewport(0, 0, 1.0, 1.0) MeshRen.GradientBackgroundOn() MeshRen.SetBackground(1, 1, 1) MeshRen.SetBackground2(0.4, 0.55, 0.75) for i in all_actor: MeshRen.AddActor(i)
renWin = vtk.vtkRenderWindow() renWin.AddRenderer(MeshRen) style = MouseInteractorHighLightActor() style.SetDefaultRenderer(MeshRen) iren = vtk.vtkRenderWindowInteractor() iren.SetInteractorStyle(style) iren.SetRenderWindow(renWin) renWin.SetSize(300, 300) renWin.Render() iren.Initialize() iren.Start()
|