Broken Selection for vtkMolecules in 9.1.0, 9.2.0rc1, and 9.2.0rc2
The following code:
import vtk
def main_molecule():
ren1 = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
def selectionCallback(caller, eventId):
hsel = vtk.vtkHardwareSelector()
hsel.SetRenderer(ren1)
hsel.CaptureBuffers()
x, y = caller.GetRenderWindow().GetSize()
position = renWin.GetInteractor().GetEventPosition()
hsel.SetArea(position[0], position[1], position[0], position[1])
res = hsel.Select()
res.Dump()
colors = vtk.vtkNamedColors()
molecule = vtk.vtkMolecule()
molecule.AppendAtom(1, -0.5, 0.0, 0.0);
molecule.AppendAtom(1, 0.5, 0.0, 0.0);
filtr = vtk.vtkSimpleBondPerceiver()
moleculeMapper = vtk.vtkMoleculeMapper()
moleculeMapper.SetInputConnection(filtr.GetOutputPort())
filtr.SetInputData(molecule)
moleculeActor = vtk.vtkActor()
moleculeActor.SetMapper(moleculeMapper)
moleculeActor.GetProperty().SetColor(colors.GetColor3d('Bisque'))
ren1.AddActor(moleculeActor)
ren1.SetBackground(0.1, 0.2, 0.4)
ren1.GetActiveCamera().ParallelProjectionOn()
ren1.SetBackground(colors.GetColor3d('Navy'))
renWin.AddRenderer(ren1)
renWin.SetSize(600, 600)
renWin.Render()
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
style = vtk.vtkInteractorStyleTrackballCamera()
iren.SetInteractorStyle(style)
renWin.GetInteractor().SetInteractorStyle(style)
iren.AddObserver('LeftButtonPressEvent', selectionCallback)
ren1.ResetCamera()
renWin.Render()
iren.Initialize()
iren.Start()
if __name__ == '__main__':
main_molecule()
Correctly reports selection ids 0-2 for the drawn atoms (ID: 0,1) and their bond (ID 2) in version 9.0.1. With version 9.1.0 of the python bindings all three result in the same ID (0).
For reference, the same code, picking Polygons on a sphere works fine in both versions:
def main_sphere():
ren1 = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
def selectionCallback(caller, eventId):
hsel = vtk.vtkHardwareSelector()
hsel.SetRenderer(ren1)
hsel.CaptureBuffers()
x, y = caller.GetRenderWindow().GetSize()
position = renWin.GetInteractor().GetEventPosition()
hsel.SetArea(position[0], position[1], position[0], position[1])
res = hsel.Select()
res.Dump()
colors = vtk.vtkNamedColors()
sphere = vtk.vtkSphereSource()
sphere.SetCenter(0, 0, 0)
sphere.SetRadius(5.0)
sphereMapper = vtk.vtkPolyDataMapper()
sphereMapper.SetInputConnection(sphere.GetOutputPort())
sphereActor = vtk.vtkActor()
sphereActor.SetMapper(sphereMapper)
sphereActor.GetProperty().SetColor(colors.GetColor3d('Bisque'))
ren1.AddActor(sphereActor)
ren1.SetBackground(0.1, 0.2, 0.4)
ren1.GetActiveCamera().ParallelProjectionOn()
ren1.SetBackground(colors.GetColor3d('Navy'))
renWin.AddRenderer(ren1)
renWin.SetSize(600, 600)
renWin.Render()
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
style = vtk.vtkInteractorStyleTrackballCamera()
iren.SetInteractorStyle(style)
renWin.GetInteractor().SetInteractorStyle(style)
iren.AddObserver('LeftButtonPressEvent', selectionCallback)
ren1.ResetCamera()
renWin.Render()
iren.Initialize()
iren.Start()
This leads me to believe that some of the code behind the following lines:
molecule = vtk.vtkMolecule()
molecule.AppendAtom(1, -0.5, 0.0, 0.0);
molecule.AppendAtom(1, 0.5, 0.0, 0.0);
filtr = vtk.vtkSimpleBondPerceiver()
moleculeMapper = vtk.vtkMoleculeMapper()
moleculeMapper.SetInputConnection(filtr.GetOutputPort())
filtr.SetInputData(molecule)
moleculeActor = vtk.vtkActor()
moleculeActor.SetMapper(moleculeMapper)
is bugged.
Maybe I have just missed something while upgrading from 9.0.1 to 9.1.0.
Would appreciate any feedback.
Edited by Jan Unsleber