You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.5 KiB
86 lines
2.5 KiB
2 years ago
|
#!/usr/bin/env python
|
||
|
|
||
|
# This example demonstrates cell picking using vtkCellPicker. It
|
||
|
# displays the results of picking using a vtkTextMapper.
|
||
|
|
||
|
import vtk
|
||
|
|
||
|
# create a sphere source, mapper, and actor
|
||
|
sphere = vtk.vtkSphereSource()
|
||
|
sphereMapper = vtk.vtkPolyDataMapper()
|
||
|
sphereMapper.SetInputConnection(sphere.GetOutputPort())
|
||
|
sphereMapper.GlobalImmediateModeRenderingOn()
|
||
|
sphereActor = vtk.vtkLODActor()
|
||
|
sphereActor.SetMapper(sphereMapper)
|
||
|
|
||
|
# create the spikes by glyphing the sphere with a cone. Create the
|
||
|
# mapper and actor for the glyphs.
|
||
|
cone = vtk.vtkConeSource()
|
||
|
glyph = vtk.vtkGlyph3D()
|
||
|
glyph.SetInputConnection(sphere.GetOutputPort())
|
||
|
glyph.SetSource(cone.GetOutput())
|
||
|
glyph.SetVectorModeToUseNormal()
|
||
|
glyph.SetScaleModeToScaleByVector()
|
||
|
glyph.SetScaleFactor(0.25)
|
||
|
spikeMapper = vtk.vtkPolyDataMapper()
|
||
|
spikeMapper.SetInputConnection(glyph.GetOutputPort())
|
||
|
spikeActor = vtk.vtkLODActor()
|
||
|
spikeActor.SetMapper(spikeMapper)
|
||
|
|
||
|
# Create a text mapper and actor to display the results of picking.
|
||
|
textMapper = vtk.vtkTextMapper()
|
||
|
tprop = textMapper.GetTextProperty()
|
||
|
tprop.SetFontFamilyToArial()
|
||
|
tprop.SetFontSize(10)
|
||
|
tprop.BoldOn()
|
||
|
tprop.ShadowOn()
|
||
|
tprop.SetColor(1, 0, 0)
|
||
|
textActor = vtk.vtkActor2D()
|
||
|
textActor.VisibilityOff()
|
||
|
textActor.SetMapper(textMapper)
|
||
|
|
||
|
# Create a cell picker.
|
||
|
picker = vtk.vtkCellPicker()
|
||
|
|
||
|
# Create a Python function to create the text for the text mapper used
|
||
|
# to display the results of picking.
|
||
|
def annotatePick(object, event):
|
||
|
global picker, textActor, textMapper
|
||
|
if picker.GetCellId() < 0:
|
||
|
textActor.VisibilityOff()
|
||
|
else:
|
||
|
selPt = picker.GetSelectionPoint()
|
||
|
pickPos = picker.GetPickPosition()
|
||
|
textMapper.SetInput("(%.6f, %.6f, %.6f)"%pickPos)
|
||
|
textActor.SetPosition(selPt[:2])
|
||
|
textActor.VisibilityOn()
|
||
|
|
||
|
# Now at the end of the pick event call the above function.
|
||
|
picker.AddObserver("EndPickEvent", annotatePick)
|
||
|
|
||
|
# Create the Renderer, RenderWindow, etc. and set the Picker.
|
||
|
ren = vtk.vtkRenderer()
|
||
|
renWin = vtk.vtkRenderWindow()
|
||
|
renWin.AddRenderer(ren)
|
||
|
iren = vtk.vtkRenderWindowInteractor()
|
||
|
iren.SetRenderWindow(renWin)
|
||
|
iren.SetPicker(picker)
|
||
|
|
||
|
# Add the actors to the renderer, set the background and size
|
||
|
ren.AddActor2D(textActor)
|
||
|
ren.AddActor(sphereActor)
|
||
|
ren.AddActor(spikeActor)
|
||
|
ren.SetBackground(1, 1, 1)
|
||
|
renWin.SetSize(300, 300)
|
||
|
|
||
|
# Get the camera and zoom in closer to the image.
|
||
|
ren.ResetCamera()
|
||
|
cam1 = ren.GetActiveCamera()
|
||
|
cam1.Zoom(1.4)
|
||
|
|
||
|
iren.Initialize()
|
||
|
# Initially pick the cell at this location.
|
||
|
picker.Pick(85, 126, 0, ren)
|
||
|
renWin.Render()
|
||
|
iren.Start()
|