📄 cone6.py
字号:
#!/usr/bin/env python## This example introduces 3D widgets. 3D widgets take advantage of the# event/observer design pattern introduced previously. They typically# have a particular representation in the scene which can be interactively# selected and manipulated using the mouse and keyboard. As the widgets# are manipulated, they in turn invoke events such as StartInteractionEvent,# InteractionEvent, and EndInteractionEvent which can be used to manipulate# the scene that the widget is embedded in. 3D widgets work in the context# of the event loop which was set up in the previous example.## Note: there are more 3D widget examples in VTK/Examples/GUI/.## First we import the VTK Python package that will make available all# of the VTK commands to Python.import vtk# Next we create an instance of vtkConeSource and set some of its# properties. The instance of vtkConeSource "cone" is part of a# visualization pipeline (it is a source process object); it produces# data (output type is vtkPolyData) which other filters may process.cone = vtk.vtkConeSource()cone.SetHeight(3.0)cone.SetRadius(1.0)cone.SetResolution(10)# In this example we terminate the pipeline with a mapper process object.# (Intermediate filters such as vtkShrinkPolyData could be inserted in# between the source and the mapper.) We create an instance of# vtkPolyDataMapper to map the polygonal data into graphics primitives. We# connect the output of the cone souece to the input of this mapper.coneMapper = vtk.vtkPolyDataMapper()coneMapper.SetInput(cone.GetOutput())# Create an actor to represent the cone. The actor orchestrates rendering of# the mapper's graphics primitives. An actor also refers to properties via a# vtkProperty instance, and includes an internal transformation matrix. We# set this actor's mapper to be coneMapper which we created above.coneActor = vtk.vtkActor()coneActor.SetMapper(coneMapper)# Create the Renderer and assign actors to it. A renderer is like a# viewport. It is part or all of a window on the screen and it is# responsible for drawing the actors it has. We also set the# background color here.ren1 = vtk.vtkRenderer()ren1.AddActor(coneActor)ren1.SetBackground(0.1, 0.2, 0.4)# Finally we create the render window which will show up on the screen# We put our renderer into the render window using AddRenderer. We# also set the size to be 300 pixels by 300.renWin = vtk.vtkRenderWindow()renWin.AddRenderer(ren1)renWin.SetSize(300, 300)# The vtkRenderWindowInteractor class watches for events (e.g., keypress,# mouse) in the vtkRenderWindow. These events are translated into# event invocations that VTK understands (see VTK/Common/vtkCommand.h# for all events that VTK processes). Then observers of these VTK# events can process them as appropriate.iren = vtk.vtkRenderWindowInteractor()iren.SetRenderWindow(renWin)# By default the vtkRenderWindowInteractor instantiates an instance# of vtkInteractorStyle. vtkInteractorStyle translates a set of events# it observes into operations on the camera, actors, and/or properties# in the vtkRenderWindow associated with the vtkRenderWinodwInteractor. # Here we specify a particular interactor style.style = vtk.vtkInteractorStyleTrackballCamera()iren.SetInteractorStyle(style)# Here we use a vtkBoxWidget to transform the underlying coneActor (by# manipulating its transformation matrix). Many other types of widgets# are available for use, see the documentation for more details.## The SetInteractor method is how 3D widgets are associated with the render# window interactor. Internally, SetInteractor sets up a bunch of callbacks# using the Command/Observer mechanism (AddObserver()). The place factor # controls the initial size of the widget with respect to the bounding box# of the input to the widget.boxWidget = vtk.vtkBoxWidget()boxWidget.SetInteractor(iren)boxWidget.SetPlaceFactor(1.25)# Place the interactor initially. The input to a 3D widget is used to# initially position and scale the widget. The EndInteractionEvent is# observed which invokes the SelectPolygons callback.boxWidget.SetProp3D(coneActor)boxWidget.PlaceWidget()# Similar to Step2/Python/Cone2.py, we define a callback for# interaction. As can be seen the callback takes two arguments. The# first being the object that generates the event and the second# argument the event name (which is a string).def myCallback(widget, event_string): t = vtk.vtkTransform() boxWidget.GetTransform(t) boxWidget.GetProp3D().SetUserTransform(t) # Now for every interaction event that is generated by the boxWidget,# call our callback function.boxWidget.AddObserver("InteractionEvent", myCallback)# Normally the user presses the "i" key to bring a 3D widget to# life. Here we will manually enable it so it appears with the cone.boxWidget.On()# Start the event loop.iren.Initialize()iren.Start()# There is no explicit need to free any objects at this point.# Once Python exits, memory is automatically freed.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -