<div dir="ltr">Thanks for the tip even I was thinking of keeping the list of objects as a worst-case scenario. :) </div><br><div class="gmail_quote"><div dir="ltr">On Thu, Nov 8, 2018 at 2:42 AM Fahlgren, Eric <<a href="mailto:eric.fahlgren@smith-nephew.com">eric.fahlgren@smith-nephew.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div lang="EN-US" link="blue" vlink="purple">
<div class="m_-3278732963696720180WordSection1">
<p class="MsoNormal">Hmm, yeah, that’s much harder if the Get/SetInformation doesn’t work out. Maybe keep a
<span style="font-family:Consolas">map<vtkActor*, some_data></span> from the actor’s object pointer to your data? (Or just use Python.
<span style="font-family:"Segoe UI Emoji",sans-serif">😊</span>)<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><b>From:</b> Abhishek <<a href="mailto:abhishekworld@gmail.com" target="_blank">abhishekworld@gmail.com</a>> <br>
<b>Sent:</b> Tuesday, November 6, 2018 5:18 PM<br>
<b>To:</b> Fahlgren, Eric <<a href="mailto:eric.fahlgren@smith-nephew.com" target="_blank">eric.fahlgren@smith-nephew.com</a>><br>
<b>Cc:</b> <a href="mailto:vtkusers@public.kitware.com" target="_blank">vtkusers@public.kitware.com</a><br>
<b>Subject:</b> Re: [vtkusers] Retriving vtkInformation from the actor<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi Eric,<u></u><u></u></p>
<div>
<p class="MsoNormal">Thanks for the response. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">they `actor.key` hack works fine in python but what would be equivalent of that in c++?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">I don't think there is an easy way in C++ and that's why I was going through vtkinformationStringKey.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Any thoughts?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Wed, Nov 7, 2018 at 1:57 AM Fahlgren, Eric <<a href="mailto:eric.fahlgren@smith-nephew.com" target="_blank">eric.fahlgren@smith-nephew.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">I can’t tell what version of VTK you are running, but your code fails for me on the GetProperty().GetInformation() calls (I’m using VTK 8.0 today), so I just hacked a local member
on the actor:<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"># info = actor.GetProperty().GetInformation()<u></u><u></u></p>
<p class="MsoNormal"># key = vtk.vtkInformationStringKey.MakeKey("CPHY_ID", "vtkActor")<u></u><u></u></p>
<p class="MsoNormal"># info.Set(key, "CON_"+str(i))<u></u><u></u></p>
<p class="MsoNormal"> actor.key = "CON_"+str(i)<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Ran with that, and the “CON_nnn” values are reported as expected.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal"><b>From:</b> vtkusers <<a href="mailto:vtkusers-bounces@public.kitware.com" target="_blank">vtkusers-bounces@public.kitware.com</a>>
<b>On Behalf Of </b>Abhishek<br>
<b>Sent:</b> Monday, November 5, 2018 9:40 PM<br>
<b>To:</b> <a href="mailto:vtkusers@public.kitware.com" target="_blank">vtkusers@public.kitware.com</a><br>
<b>Subject:</b> Re: [vtkusers] Retriving vtkInformation from the actor<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Anyone? how to determine which object it is in the mouse event?<u></u><u></u></p>
<div>
<div>
<p class="MsoNormal">On Mon, Nov 5, 2018 at 4:10 PM Abhishek <<a href="mailto:abhishekworld@gmail.com" target="_blank">abhishekworld@gmail.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Hello,<u></u><u></u></p>
<div>
<p class="MsoNormal">I have multiple actors in the scene, and I have re-implemented the vtkInteractorStyleTrackballCamera to capture the click event on them (modified
<a href="https://lorensen.github.io/VTKExamples/site/Python/Interaction/HighlightPickedActor/" target="_blank">
https://lorensen.github.io/VTKExamples/site/Python/Interaction/HighlightPickedActor/</a>)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">In the click event, I want to know which actor has been clicked to do so I am adding vtkInformationStringKey to every actor. But at the click event, I am not able to retrieve it
back.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Please let me know what am I missing? Or what am I doing wrong?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Here is my code: <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">```<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">import vtk<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">NUMBER_OF_SPHERES = 10<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> def __init__(self, parent=None):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.LastPickedActor = None<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.LastPickedProperty = vtk.vtkProperty()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> def leftButtonPressEvent(self, obj, event):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> clickPos = self.GetInteractor().GetEventPosition()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> picker = vtk.vtkPropPicker()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # get the new<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.NewPickedActor = picker.GetActor()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # If something was selected<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> if self.NewPickedActor:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # get the information from the new Actor<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> info = self.NewPickedActor.GetProperty().GetInformation()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # prepare the key<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> key = vtk.vtkInformationStringKey.MakeKey("CPHY_ID", "vtkActor")<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # get the value for the key<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> id = info.Get(key)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> print("Id is : ")<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> print(id)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # If we picked something before, reset its property<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> if self.LastPickedActor:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # Save the property of the picked actor so that we can<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # restore it next time<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.LastPickedProperty.DeepCopy(self.NewPickedActor.GetProperty())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # Highlight the picked actor by changing its properties<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.NewPickedActor.GetProperty().SetColor(1.0, 0.0, 0.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.NewPickedActor.GetProperty().SetDiffuse(1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.NewPickedActor.GetProperty().SetSpecular(0.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # save the last picked actor<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.LastPickedActor = self.NewPickedActor<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> self.OnLeftButtonDown()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> return<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"># A renderer and render window<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">renderer = vtk.vtkRenderer()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">renderer.SetBackground(.3, .4, .5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">renwin = vtk.vtkRenderWindow()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">renwin.AddRenderer(renderer)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"># An interactor<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">interactor = vtk.vtkRenderWindowInteractor()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">interactor.SetRenderWindow(renwin)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"># add the custom style<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">style = MouseInteractorHighLightActor()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">style.SetDefaultRenderer(renderer)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">interactor.SetInteractorStyle(style)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"># Add spheres to play with<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">for i in range(NUMBER_OF_SPHERES):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source = vtk.vtkSphereSource()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # random position and radius<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> x = vtk.vtkMath.Random(-5, 5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> y = vtk.vtkMath.Random(-5, 5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> z = vtk.vtkMath.Random(-5, 5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> radius = vtk.vtkMath.Random(.5, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source.SetRadius(radius)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source.SetCenter(x, y, z)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source.SetPhiResolution(11)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source.SetThetaResolution(21)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> mapper = vtk.vtkPolyDataMapper()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> mapper.SetInputConnection(source.GetOutputPort())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor = vtk.vtkActor()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.SetMapper(mapper)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> r = vtk.vtkMath.Random(.4, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> g = vtk.vtkMath.Random(.4, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> b = vtk.vtkMath.Random(.4, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetDiffuseColor(r, g, b)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetDiffuse(.8)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetSpecular(.5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetSpecularColor(1.0, 1.0, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetSpecularPower(30.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> info = actor.GetProperty().GetInformation()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> key = vtk.vtkInformationStringKey.MakeKey("CPHY_ID", "vtkActor")<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> info.Set(key, "SPH_"+str(i))<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> #actor.GetProperty().SetInformation(info)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> renderer.AddActor(actor)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">for i in range(NUMBER_OF_SPHERES):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source = vtk.vtkConeSource()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # random position and radius<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> x = vtk.vtkMath.Random(-8, 5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> y = vtk.vtkMath.Random(-8, 5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> z = vtk.vtkMath.Random(-8, 5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> radius = vtk.vtkMath.Random(.5, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> angle = vtk.vtkMath.Random(5, 10)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source.SetAngle(angle)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source.SetRadius(radius)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> source.SetCenter(x, y, z)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # source.SetPhiResolution(11)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> # source.SetThetaResolution(21)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> mapper = vtk.vtkPolyDataMapper()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> mapper.SetInputConnection(source.GetOutputPort())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor = vtk.vtkActor()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.SetMapper(mapper)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> r = vtk.vtkMath.Random(.4, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> g = vtk.vtkMath.Random(.4, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> b = vtk.vtkMath.Random(.4, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetDiffuseColor(r, g, b)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetDiffuse(.8)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetSpecular(.5)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetSpecularColor(1.0, 1.0, 1.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> actor.GetProperty().SetSpecularPower(30.0)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> info = actor.GetProperty().GetInformation()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> key = vtk.vtkInformationStringKey.MakeKey("CPHY_ID", "vtkActor")<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> info.Set(key, "CON_"+str(i))<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> #actor.GetProperty().SetInformation(info)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> renderer.AddActor(actor)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"># Start<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">interactor.Initialize()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">interactor.Start()<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">```<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<p class="MsoNormal">--
<u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Abhishek<br>
<a href="http://zeroth.me" target="_blank">http://zeroth.me</a><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">--
<u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Abhishek<br>
<a href="http://zeroth.me" target="_blank">http://zeroth.me</a><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Abhishek<br>
<a href="http://zeroth.me" target="_blank">http://zeroth.me</a><u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Abhishek<br><a href="http://zeroth.me" target="_blank">http://zeroth.me</a><br><br></div></div></div>