Skip to content
Snippets Groups Projects
Commit db1f57bf authored by Andrew Maclean's avatar Andrew Maclean
Browse files

Updated Picking

parent c0ed8353
No related branches found
No related tags found
1 merge request!234Only allow specific imports for python 5
#!/usr/bin/env python
import vtkmodules.all as vtk
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonCore import vtkIdTypeArray
from vtkmodules.vtkCommonDataModel import (
vtkSelection,
vtkSelectionNode,
vtkUnstructuredGrid
)
from vtkmodules.vtkFiltersCore import vtkTriangleFilter
from vtkmodules.vtkFiltersExtraction import vtkExtractSelection
from vtkmodules.vtkFiltersSources import vtkPlaneSource
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkCellPicker,
vtkDataSetMapper,
vtkPolyDataMapper,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
# Catch mouse events
class MouseInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
class MouseInteractorStyle(vtkInteractorStyleTrackballCamera):
def __init__(self, data):
self.AddObserver('LeftButtonPressEvent', self.left_button_press_event)
self.data = data
self.selected_mapper = vtk.vtkDataSetMapper()
self.selected_actor = vtk.vtkActor()
self.selected_mapper = vtkDataSetMapper()
self.selected_actor = vtkActor()
def left_button_press_event(self, obj, event):
colors = vtk.vtkNamedColors()
colors = vtkNamedColors()
# Get the location of the click (in window coordinates)
pos = self.GetInteractor().GetEventPosition()
picker = vtk.vtkCellPicker()
picker = vtkCellPicker()
picker.SetTolerance(0.0005)
# Pick from this location.
......@@ -29,25 +50,25 @@ class MouseInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
if picker.GetCellId() != -1:
print(f'Pick position is: ({world_position[0]:.6g}, {world_position[1]:.6g}, {world_position[2]:.6g})')
ids = vtk.vtkIdTypeArray()
ids = vtkIdTypeArray()
ids.SetNumberOfComponents(1)
ids.InsertNextValue(picker.GetCellId())
selection_node = vtk.vtkSelectionNode()
selection_node.SetFieldType(vtk.vtkSelectionNode.CELL)
selection_node.SetContentType(vtk.vtkSelectionNode.INDICES)
selection_node = vtkSelectionNode()
selection_node.SetFieldType(vtkSelectionNode.CELL)
selection_node.SetContentType(vtkSelectionNode.INDICES)
selection_node.SetSelectionList(ids)
selection = vtk.vtkSelection()
selection = vtkSelection()
selection.AddNode(selection_node)
extract_selection = vtk.vtkExtractSelection()
extract_selection = vtkExtractSelection()
extract_selection.SetInputData(0, self.data)
extract_selection.SetInputData(1, selection)
extract_selection.Update()
# In selection
selected = vtk.vtkUnstructuredGrid()
selected = vtkUnstructuredGrid()
selected.ShallowCopy(extract_selection.GetOutput())
print(f'Number of points in the selection: {selected.GetNumberOfPoints()}')
......@@ -67,27 +88,27 @@ class MouseInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
def main(argv):
colors = vtk.vtkNamedColors()
colors = vtkNamedColors()
plane_source = vtk.vtkPlaneSource()
plane_source = vtkPlaneSource()
plane_source.Update()
triangle_filter = vtk.vtkTriangleFilter()
triangle_filter = vtkTriangleFilter()
triangle_filter.SetInputConnection(plane_source.GetOutputPort())
triangle_filter.Update()
mapper = vtk.vtkPolyDataMapper()
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(triangle_filter.GetOutputPort())
actor = vtk.vtkActor()
actor = vtkActor()
actor.GetProperty().SetColor(colors.GetColor3d('SeaGreen'))
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
ren_win = vtk.vtkRenderWindow()
renderer = vtkRenderer()
ren_win = vtkRenderWindow()
ren_win.AddRenderer(renderer)
ren_win.SetWindowName('CellPicking')
iren = vtk.vtkRenderWindowInteractor()
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(ren_win)
renderer.AddActor(actor)
......
import vtkmodules.all as vtk
colors = vtk.vtkNamedColors()
#!/usr/bin/env python
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonCore import vtkMinimalStandardRandomSequence
from vtkmodules.vtkFiltersSources import vtkSphereSource
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkPropPicker,
vtkProperty,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
colors = vtkNamedColors()
NUMBER_OF_SPHERES = 10
class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):
class MouseInteractorHighLightActor(vtkInteractorStyleTrackballCamera):
def __init__(self, parent=None):
self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)
self.LastPickedActor = None
self.LastPickedProperty = vtk.vtkProperty()
self.LastPickedProperty = vtkProperty()
def leftButtonPressEvent(self, obj, event):
clickPos = self.GetInteractor().GetEventPosition()
picker = vtk.vtkPropPicker()
picker = vtkPropPicker()
picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer())
# get the new
......@@ -45,16 +61,16 @@ class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):
def main():
# A renderer and render window
renderer = vtk.vtkRenderer()
renderer = vtkRenderer()
renderer.SetBackground(colors.GetColor3d('SteelBlue'))
renwin = vtk.vtkRenderWindow()
renwin = vtkRenderWindow()
renwin.AddRenderer(renderer)
renwin.SetSize(640, 480)
renwin.SetWindowName('HighlightPickedActor')
# An interactor
interactor = vtk.vtkRenderWindowInteractor()
interactor = vtkRenderWindowInteractor()
interactor.SetRenderWindow(renwin)
# add the custom style
......@@ -62,13 +78,13 @@ def main():
style.SetDefaultRenderer(renderer)
interactor.SetInteractorStyle(style)
randomSequence = vtk.vtkMinimalStandardRandomSequence()
randomSequence = vtkMinimalStandardRandomSequence()
# randomSequence.SetSeed(1043618065)
# randomSequence.SetSeed(5170)
randomSequence.SetSeed(8775070)
# Add spheres to play with
for i in range(NUMBER_OF_SPHERES):
source = vtk.vtkSphereSource()
source = vtkSphereSource()
# random position and radius
x = randomSequence.GetRangeValue(-5.0, 5.0)
......@@ -85,9 +101,9 @@ def main():
source.SetPhiResolution(11)
source.SetThetaResolution(21)
mapper = vtk.vtkPolyDataMapper()
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(source.GetOutputPort())
actor = vtk.vtkActor()
actor = vtkActor()
actor.SetMapper(mapper)
r = randomSequence.GetRangeValue(0.4, 1.0)
......
# !/usr/bin/env python
import vtkmodules.all as vtk
# noinspection PyUnresolvedReferences
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkCommonCore import vtkMinimalStandardRandomSequence
from vtkmodules.vtkFiltersHybrid import vtkPolyDataSilhouette
from vtkmodules.vtkFiltersSources import vtkSphereSource
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleTrackballCamera
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkPropPicker,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def get_program_parameters():
......@@ -18,7 +32,7 @@ The selected object is highlighted with a silhouette.
return args.numberOfSpheres
class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):
class MouseInteractorHighLightActor(vtkInteractorStyleTrackballCamera):
def __init__(self, silhouette=None, silhouetteActor=None):
self.AddObserver("LeftButtonPressEvent", self.onLeftButtonDown)
......@@ -30,7 +44,7 @@ class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):
clickPos = self.GetInteractor().GetEventPosition()
# Pick from this location.
picker = vtk.vtkPropPicker()
picker = vtkPropPicker()
picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer())
self.LastPickedActor = picker.GetActor()
......@@ -56,27 +70,27 @@ class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):
def main():
numberOfSpheres = get_program_parameters()
colors = vtk.vtkNamedColors()
colors = vtkNamedColors()
# A renderer and render window
renderer = vtk.vtkRenderer()
renderer = vtkRenderer()
renderer.SetBackground(colors.GetColor3d('SteelBlue'))
renderWindow = vtk.vtkRenderWindow()
renderWindow = vtkRenderWindow()
renderWindow.SetSize(640, 480)
renderWindow.AddRenderer(renderer)
# An interactor
interactor = vtk.vtkRenderWindowInteractor()
interactor = vtkRenderWindowInteractor()
interactor.SetRenderWindow(renderWindow)
randomSequence = vtk.vtkMinimalStandardRandomSequence()
randomSequence = vtkMinimalStandardRandomSequence()
# randomSequence.SetSeed(1043618065)
# randomSequence.SetSeed(5170)
randomSequence.SetSeed(8775070)
# Add spheres to play with
for i in range(numberOfSpheres):
source = vtk.vtkSphereSource()
source = vtkSphereSource()
# random position and radius
x = randomSequence.GetRangeValue(-5.0, 5.0)
......@@ -93,9 +107,9 @@ def main():
source.SetPhiResolution(11)
source.SetThetaResolution(21)
mapper = vtk.vtkPolyDataMapper()
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(source.GetOutputPort())
actor = vtk.vtkActor()
actor = vtkActor()
actor.SetMapper(mapper)
r = randomSequence.GetRangeValue(0.4, 1.0)
......@@ -118,14 +132,14 @@ def main():
# Create the silhouette pipeline, the input data will be set in the
# interactor
silhouette = vtk.vtkPolyDataSilhouette()
silhouette = vtkPolyDataSilhouette()
silhouette.SetCamera(renderer.GetActiveCamera())
# Create mapper and actor for silhouette
silhouetteMapper = vtk.vtkPolyDataMapper()
silhouetteMapper = vtkPolyDataMapper()
silhouetteMapper.SetInputConnection(silhouette.GetOutputPort())
silhouetteActor = vtk.vtkActor()
silhouetteActor = vtkActor()
silhouetteActor.SetMapper(silhouetteMapper)
silhouetteActor.GetProperty().SetColor(colors.GetColor3d("Tomato"))
silhouetteActor.GetProperty().SetLineWidth(5)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment