<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<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:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#   info = actor.GetProperty().GetInformation()<o:p></o:p></p>
<p class="MsoNormal">#   key = vtk.vtkInformationStringKey.MakeKey("CPHY_ID", "vtkActor")<o:p></o:p></p>
<p class="MsoNormal">#   info.Set(key, "CON_"+str(i))<o:p></o:p></p>
<p class="MsoNormal">    actor.key = "CON_"+str(i)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Ran with that, and the “CON_nnn” values are reported as expected.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>From:</b> vtkusers <vtkusers-bounces@public.kitware.com> <b>
On Behalf Of </b>Abhishek<br>
<b>Sent:</b> Monday, November 5, 2018 9:40 PM<br>
<b>To:</b> vtkusers@public.kitware.com<br>
<b>Subject:</b> Re: [vtkusers] Retriving vtkInformation from the actor<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Anyone? how to determine which object it is in the mouse event?<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal">On Mon, Nov 5, 2018 at 4:10 PM Abhishek <<a href="mailto:abhishekworld@gmail.com">abhishekworld@gmail.com</a>> wrote:<o:p></o:p></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>
<div>
<div>
<div>
<p class="MsoNormal">Hello,<o:p></o:p></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>)<o:p></o:p></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.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Please let me know what am I missing? Or what am I doing wrong?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Here is my code: <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">import vtk<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">NUMBER_OF_SPHERES = 10<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    def __init__(self, parent=None):<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">        self.LastPickedActor = None<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        self.LastPickedProperty = vtk.vtkProperty()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    def leftButtonPressEvent(self, obj, event):<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        clickPos = self.GetInteractor().GetEventPosition()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">        picker = vtk.vtkPropPicker()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">        # get the new<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        self.NewPickedActor = picker.GetActor()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">        # If something was selected<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        if self.NewPickedActor:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            # get the information from the new Actor<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            info = self.NewPickedActor.GetProperty().GetInformation()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            # prepare the key<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            key = vtk.vtkInformationStringKey.MakeKey("CPHY_ID", "vtkActor")<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            # get the value for the key<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            id = info.Get(key)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            print("Id is : ")<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            print(id)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">            # If we picked something before, reset its property<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            if self.LastPickedActor:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">            # Save the property of the picked actor so that we can<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            # restore it next time<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            self.LastPickedProperty.DeepCopy(self.NewPickedActor.GetProperty())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            # Highlight the picked actor by changing its properties<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            self.NewPickedActor.GetProperty().SetColor(1.0, 0.0, 0.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            self.NewPickedActor.GetProperty().SetDiffuse(1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            self.NewPickedActor.GetProperty().SetSpecular(0.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">            # save the last picked actor<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">            self.LastPickedActor = self.NewPickedActor<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">        self.OnLeftButtonDown()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        return<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"># A renderer and render window<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">renderer = vtk.vtkRenderer()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">renderer.SetBackground(.3, .4, .5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">renwin = vtk.vtkRenderWindow()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">renwin.AddRenderer(renderer)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"># An interactor<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">interactor = vtk.vtkRenderWindowInteractor()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">interactor.SetRenderWindow(renwin)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"># add the custom style<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">style = MouseInteractorHighLightActor()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">style.SetDefaultRenderer(renderer)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">interactor.SetInteractorStyle(style)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"># Add spheres to play with<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">for i in range(NUMBER_OF_SPHERES):<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    source = vtk.vtkSphereSource()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    # random position and radius<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    x = vtk.vtkMath.Random(-5, 5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    y = vtk.vtkMath.Random(-5, 5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    z = vtk.vtkMath.Random(-5, 5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    radius = vtk.vtkMath.Random(.5, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    source.SetRadius(radius)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    source.SetCenter(x, y, z)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    source.SetPhiResolution(11)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    source.SetThetaResolution(21)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    mapper = vtk.vtkPolyDataMapper()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    mapper.SetInputConnection(source.GetOutputPort())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor = vtk.vtkActor()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.SetMapper(mapper)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    r = vtk.vtkMath.Random(.4, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    g = vtk.vtkMath.Random(.4, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    b = vtk.vtkMath.Random(.4, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetDiffuseColor(r, g, b)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetDiffuse(.8)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetSpecular(.5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetSpecularColor(1.0, 1.0, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetSpecularPower(30.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    info = actor.GetProperty().GetInformation()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    key = vtk.vtkInformationStringKey.MakeKey("CPHY_ID", "vtkActor")<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    info.Set(key, "SPH_"+str(i))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    #actor.GetProperty().SetInformation(info)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    renderer.AddActor(actor)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">for i in range(NUMBER_OF_SPHERES):<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    source = vtk.vtkConeSource()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    # random position and radius<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    x = vtk.vtkMath.Random(-8, 5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    y = vtk.vtkMath.Random(-8, 5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    z = vtk.vtkMath.Random(-8, 5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    radius = vtk.vtkMath.Random(.5, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    angle = vtk.vtkMath.Random(5, 10)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    source.SetAngle(angle)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    source.SetRadius(radius)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    source.SetCenter(x, y, z)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    # source.SetPhiResolution(11)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    # source.SetThetaResolution(21)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    mapper = vtk.vtkPolyDataMapper()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    mapper.SetInputConnection(source.GetOutputPort())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor = vtk.vtkActor()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.SetMapper(mapper)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    r = vtk.vtkMath.Random(.4, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    g = vtk.vtkMath.Random(.4, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    b = vtk.vtkMath.Random(.4, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetDiffuseColor(r, g, b)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetDiffuse(.8)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetSpecular(.5)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetSpecularColor(1.0, 1.0, 1.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    actor.GetProperty().SetSpecularPower(30.0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    info = actor.GetProperty().GetInformation()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    key = vtk.vtkInformationStringKey.MakeKey("CPHY_ID", "vtkActor")<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    info.Set(key, "CON_"+str(i))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    #actor.GetProperty().SetInformation(info)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    renderer.AddActor(actor)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"># Start<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">interactor.Initialize()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">interactor.Start()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">```<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Regards,<o:p></o:p></p>
</div>
<p class="MsoNormal">-- <o:p></o:p></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><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">-- <o:p></o:p></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><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>