<div><br></div><div class="gmail_quote">On Fri, Mar 12, 2010 at 7:17 AM, Sebastian Gatzka <span dir="ltr">&lt;<a href="mailto:sebastian.gatzka@stud.tu-darmstadt.de">sebastian.gatzka@stud.tu-darmstadt.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


  

<div bgcolor="#ffffff" text="#000000">
<font size="-1"><font face="Helvetica, Arial, sans-serif">Or can I talk
to the textActor like this?<br>
<br>
<font color="#ff0000" face="Courier New, Courier, monospace">   
vtkTextActor *ta = reinterpret_cast&lt;vtkTextActor*&gt;(caller);<br>
    ta-&gt;SetInput(&quot;TEST&quot;);</font><br>
<br>
or like this?<br>
<br>
<font color="#ff0000" face="Courier New, Courier, monospace">  
this-&gt;TextActor-&gt;SetInput(&quot;TEST&quot;);</font><br>
<br>
No, does not work either way.<br>
</font></font></div><div bgcolor="#ffffff" text="#000000"><font size="-1"><font face="Helvetica, Arial, sans-serif"><br></font></font></div></blockquote><div><br></div><div>Ok, let&#39;s close this question - here is an example that updates a counter in the lower left corner of the renderwindow every time an interaction occurs. This should be easy to adapt to do what you want.</div>
<div><br></div><div>#include &lt;sstream&gt;</div><div><br></div><div>#include &lt;vtkSmartPointer.h&gt;</div><div>#include &lt;vtkProperty.h&gt;</div><div>#include &lt;vtkTextProperty.h&gt;</div><div><br></div><div>#include &lt;vtkXMLPolyDataReader.h&gt;</div>
<div>#include &lt;vtkSphereSource.h&gt;</div><div>#include &lt;vtkClipPolyData.h&gt;</div><div>#include &lt;vtkPlane.h&gt;</div><div><br></div><div>#include &lt;vtkCommand.h&gt;</div><div>#include &lt;vtkImplicitPlaneWidget2.h&gt;</div>
<div>#include &lt;vtkImplicitPlaneRepresentation.h&gt;</div><div> </div><div>#include &lt;vtkPolyDataMapper.h&gt;</div><div>#include &lt;vtkProperty.h&gt;</div><div>#include &lt;vtkActor.h&gt;</div><div>#include &lt;vtkTextActor.h&gt;</div>
<div>#include &lt;vtkRenderWindow.h&gt;</div><div>#include &lt;vtkRenderer.h&gt;</div><div>#include &lt;vtkRenderWindowInteractor.h&gt;</div><div><br></div><div>// Callback for the interaction</div><div>// This does the actual work: updates the vtkPlane implicit function.</div>
<div>// This in turn causes the pipeline to update and clip the object.</div><div>class vtkIPWCallback : public vtkCommand</div><div>{</div><div>  public:</div><div>    static vtkIPWCallback *New() </div><div>    {</div><div>
      return new vtkIPWCallback; </div><div>    }</div><div>    </div><div>    virtual void Execute(vtkObject *caller, unsigned long, void*)</div><div>    {</div><div>      vtkImplicitPlaneWidget2 *planeWidget = </div><div>
          reinterpret_cast&lt;vtkImplicitPlaneWidget2*&gt;(caller);</div><div>      vtkImplicitPlaneRepresentation *rep = </div><div>          reinterpret_cast&lt;vtkImplicitPlaneRepresentation*&gt;(planeWidget-&gt;GetRepresentation());</div>
<div>      rep-&gt;GetPlane(this-&gt;Plane);</div><div>      </div><div>      std::stringstream ss;</div><div>      ss &lt;&lt; this-&gt;counter;</div><div>      this-&gt;TextActor-&gt;SetInput (ss.str().c_str());</div><div>
      this-&gt;counter++;</div><div>    }</div><div>    vtkIPWCallback():Plane(0),TextActor(0),counter(0) {}</div><div>    </div><div>    void SetPlane(vtkPlane* plane) { this-&gt;Plane = plane;}</div><div>    void SetTextActor(vtkTextActor* textActor) { this-&gt;TextActor = textActor;}</div>
<div>    </div><div>  private:</div><div>    unsigned int counter;</div><div>    vtkPlane* Plane;</div><div>    vtkTextActor* TextActor;</div><div><br></div><div>};</div><div><br></div><div>int main(int argc, char *argv[])</div>
<div>{</div><div>  vtkSmartPointer&lt;vtkSphereSource&gt; sphereSource =</div><div>      vtkSmartPointer&lt;vtkSphereSource&gt;::New();</div><div>  sphereSource-&gt;SetRadius(10.0);</div><div><br></div><div>  vtkSmartPointer&lt;vtkXMLPolyDataReader&gt; reader =</div>
<div>      vtkSmartPointer&lt;vtkXMLPolyDataReader&gt;::New();</div><div><br></div><div>  // Setup a visualization pipeline</div><div><br></div><div>  vtkSmartPointer&lt;vtkPlane&gt; plane =</div><div>      vtkSmartPointer&lt;vtkPlane&gt;::New();</div>
<div>  vtkSmartPointer&lt;vtkClipPolyData&gt; clipper =</div><div>      vtkSmartPointer&lt;vtkClipPolyData&gt;::New();</div><div>  clipper-&gt;SetClipFunction(plane);</div><div>  clipper-&gt;InsideOutOn();</div><div>  if (argc &lt; 2)</div>
<div>  {</div><div>    clipper-&gt;SetInputConnection(sphereSource-&gt;GetOutputPort());</div><div>  }</div><div>  else</div><div>  {</div><div>    reader-&gt;SetFileName(argv[1]);</div><div>    clipper-&gt;SetInputConnection(reader-&gt;GetOutputPort());</div>
<div>  }</div><div>  //Create a mapper and actor</div><div>  vtkSmartPointer&lt;vtkPolyDataMapper&gt; mapper =</div><div>      vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();</div><div>  mapper-&gt;SetInputConnection(clipper-&gt;GetOutputPort());</div>
<div>  vtkSmartPointer&lt;vtkActor&gt; actor =</div><div>      vtkSmartPointer&lt;vtkActor&gt;::New();</div><div>  actor-&gt;SetMapper(mapper);</div><div><br></div><div>  vtkSmartPointer&lt;vtkProperty&gt; backFaces =</div>
<div>      vtkSmartPointer&lt;vtkProperty&gt;::New();</div><div>  backFaces-&gt;SetDiffuseColor(.8, .8, .4);</div><div><br></div><div>  actor-&gt;SetBackfaceProperty(backFaces);</div><div> </div><div>  // a renderer and render window</div>
<div>  vtkSmartPointer&lt;vtkRenderer&gt; renderer =</div><div>      vtkSmartPointer&lt;vtkRenderer&gt;::New();</div><div>  vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow =</div><div>      vtkSmartPointer&lt;vtkRenderWindow&gt;::New();</div>
<div>  renderWindow-&gt;AddRenderer(renderer);</div><div>  renderer-&gt;AddActor(actor);</div><div> </div><div>  // an interactor</div><div>  vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor =</div>
<div>      vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();</div><div>  renderWindowInteractor-&gt;SetRenderWindow(renderWindow);</div><div> </div><div>  renderWindow-&gt;Render();</div><div><br></div><div>  // The callback will do the work</div>
<div>  vtkSmartPointer&lt;vtkIPWCallback&gt; myCallback = </div><div>      vtkSmartPointer&lt;vtkIPWCallback&gt;::New();</div><div>  myCallback-&gt;SetPlane(plane);</div><div>  </div><div>  vtkSmartPointer&lt;vtkTextActor&gt; textActor = </div>
<div>      vtkSmartPointer&lt;vtkTextActor&gt;::New();</div><div>  textActor-&gt;SetInput ( &quot;Hello world&quot; );</div><div>  textActor-&gt;GetTextProperty()-&gt;SetColor ( 1.0,0.0,0.0 );</div><div>  myCallback-&gt;SetTextActor(textActor);</div>
<div>  renderer-&gt;AddActor2D ( textActor );</div><div><br></div><div>  vtkSmartPointer&lt;vtkImplicitPlaneRepresentation&gt; rep = </div><div>      vtkSmartPointer&lt;vtkImplicitPlaneRepresentation&gt;::New();</div><div>
  rep-&gt;SetPlaceFactor(1.25); // This must be set prior to placing the widget</div><div>  rep-&gt;PlaceWidget(actor-&gt;GetBounds());</div><div>  rep-&gt;SetNormal(plane-&gt;GetNormal());</div><div>  rep-&gt;SetOrigin(0,0,50);</div>
<div>  </div><div>  vtkSmartPointer&lt;vtkImplicitPlaneWidget2&gt; planeWidget =</div><div>      vtkSmartPointer&lt;vtkImplicitPlaneWidget2&gt;::New();</div><div>  planeWidget-&gt;SetInteractor(renderWindowInteractor);</div>
<div>  planeWidget-&gt;SetRepresentation(rep);</div><div>  planeWidget-&gt;AddObserver(vtkCommand::InteractionEvent,myCallback);</div><div><br></div><div>  // render an image (lights and cameras are created automatically)</div>
<div> </div><div>  renderWindowInteractor-&gt;Initialize();</div><div>  renderWindow-&gt;Render();</div><div>  planeWidget-&gt;On();</div><div> </div><div>  // begin mouse interaction</div><div>  renderWindowInteractor-&gt;Start();</div>
<div> </div><div>  return EXIT_SUCCESS;;</div><div>}</div><div><br></div>Thanks,<br><br>David</div>