<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    In case this is eventually used by anyone, I fixed a bug in
    UpdateCenterOfRotation(). Here's the fixed code for posterity.<br>
    <title>Snippet</title>
    <pre style="font-family:Consolas;font-size:13;color:black;background:white;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;Calculate&nbsp;the&nbsp;center&nbsp;of&nbsp;the&nbsp;visible&nbsp;actors.</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">void</span>&nbsp;<span style="color:#880000;">UpdateCenterOfRotation</span>(<span style="color:blue;">vtkRenderer</span>&nbsp;*<span style="color:navy;">ren</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkActorCollection</span>&nbsp;*<span style="color:navy;">actors</span>=&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">GetActors</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">int</span>&nbsp;<span style="color:navy;">number_of_actors</span>=&nbsp;<span style="color:navy;">actors</span>-&gt;<span style="color:#880000;">GetNumberOfItems</span>();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[0]=&nbsp;<span style="color:navy;">m_center</span>[1]=&nbsp;<span style="color:navy;">m_center</span>[2]=&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;(<span style="color:navy;">number_of_actors</span>&nbsp;&gt;&nbsp;0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkCollectionSimpleIterator</span>&nbsp;<span style="color:navy;">cookie</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkActor</span>&nbsp;*<span style="color:navy;">actor</span>;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">actors</span>-&gt;<span style="color:#880000;">InitTraversal</span>(<span style="color:navy;">cookie</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">while</span>&nbsp;((<span style="color:navy;">actor</span>=&nbsp;<span style="color:navy;">actors</span>-&gt;<span style="color:#880000;">GetNextActor</span>(<span style="color:navy;">cookie</span>))&nbsp;!=&nbsp;<span style="color:#a000a0;">NULL</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;(<span style="color:navy;">actor</span>-&gt;<span style="color:#880000;">GetVisibility</span>())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;*<span style="color:navy;">actor_center</span>=&nbsp;<span style="color:navy;">actor</span>-&gt;<span style="color:#880000;">GetCenter</span>();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[0]+=&nbsp;<span style="color:navy;">actor_center</span>[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[1]+=&nbsp;<span style="color:navy;">actor_center</span>[1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[2]+=&nbsp;<span style="color:navy;">actor_center</span>[2];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[0]/=&nbsp;<span style="color:navy;">number_of_actors</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[1]/=&nbsp;<span style="color:navy;">number_of_actors</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[2]/=&nbsp;<span style="color:navy;">number_of_actors</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
</pre>
    <br>
    <div class="moz-cite-prefix">On 8/20/2013 3:12 PM, Serge Lalonde
      wrote:<br>
    </div>
    <blockquote cite="mid:5213BF91.9000602@infolytica.com" type="cite">
      <meta content="text/html; charset=ISO-8859-1"
        http-equiv="Content-Type">
      Well, since I got no responses, I dug deeper and found the code in
      ParaView that does the rotation and spinning around the center of
      the visible actors, extracted it and put it into a
      vtkInteractorStyleTrackballCamera subclass. It hasn't been
      extensively tested yet, but it seems to work well.<br>
      <br>
      Here it is in case it helps save anybody else 3 days of work.<br>
      <br>
      <title>Snippet</title>
      <pre style="font-family:Consolas;font-size:13;color:black;background:white;">&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;Our&nbsp;subclass&nbsp;of&nbsp;the&nbsp;trackball&nbsp;camera&nbsp;to&nbsp;change&nbsp;the&nbsp;center&nbsp;of&nbsp;rotation&nbsp;to&nbsp;be&nbsp;the&nbsp;average</span>
&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;center&nbsp;of&nbsp;all&nbsp;visible&nbsp;actors&nbsp;instead&nbsp;of&nbsp;the&nbsp;center&nbsp;of&nbsp;the&nbsp;viewport,&nbsp;which&nbsp;always&nbsp;gets&nbsp;clipped.</span>
&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;The&nbsp;default&nbsp;implementation&nbsp;is&nbsp;badly&nbsp;broken&nbsp;and doesn't look to be fixed anytime soon.</span>
&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;The&nbsp;clipping&nbsp;might&nbsp;be&nbsp;fixed&nbsp;with&nbsp;the&nbsp;changes&nbsp;I&nbsp;submitted:&nbsp;<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.vtk.org/Bug/view.php?id=7823">http://www.vtk.org/Bug/view.php?id=7823</a></span>
&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;The&nbsp;new&nbsp;rotation&nbsp;code&nbsp;was&nbsp;taken&nbsp;from&nbsp;ParaView.&nbsp;Specifically,</span>
&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;-&nbsp;Rotate():&nbsp;vtkPVTrackballRotate.cxx&nbsp;OnMouseMove()</span>
&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;-&nbsp;Spin():&nbsp;vtkPVTrackballRoll.cxx&nbsp;OnMouseMove()</span>
&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;-&nbsp;UpdateScreenCenterOfRotation():&nbsp;vtkCameraManipulator.cxx&nbsp;ComputeDisplayCenter()</span>
&nbsp;&nbsp;&nbsp;<span style="color:blue;">class</span>&nbsp;<span style="color:blue;">InteractorStyleTrackballCamera</span>:&nbsp;<span style="color:blue;">public</span>&nbsp;<span style="color:blue;">vtkInteractorStyleTrackballCamera</span>
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;<span style="color:blue;">public</span>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">static</span>&nbsp;<span style="color:blue;">InteractorStyleTrackballCamera</span>&nbsp;*<span style="color:#880000;">New</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#a000a0;">vtkTypeMacro</span>(<span style="color:blue;">InteractorStyleTrackballCamera</span>,&nbsp;<span style="color:blue;">vtkInteractorStyleTrackballCamera</span>);
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;This&nbsp;only&nbsp;gets&nbsp;called&nbsp;is&nbsp;CurrentRenderer&nbsp;isn't&nbsp;NULL.</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">virtual</span>&nbsp;<span style="color:blue;">void</span>&nbsp;<span style="color:#880000;">StartRotate</span>()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">Superclass</span>::<span style="color:#880000;">StartRotate</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880000;">UpdateCenterOfRotation</span>(<span style="color:navy;">CurrentRenderer</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;This&nbsp;only&nbsp;gets&nbsp;called&nbsp;is&nbsp;CurrentRenderer&nbsp;isn't&nbsp;NULL.</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">virtual</span>&nbsp;<span style="color:blue;">void</span>&nbsp;<span style="color:#880000;">StartSpin</span>()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">Superclass</span>::<span style="color:#880000;">StartSpin</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880000;">UpdateCenterOfRotation</span>(<span style="color:navy;">CurrentRenderer</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#880000;">UpdateScreenCenterOfRotation</span>(<span style="color:navy;">CurrentRenderer</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">virtual</span>&nbsp;<span style="color:blue;">void</span>&nbsp;<span style="color:#880000;">Rotate</span>()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;(<span style="color:navy;">CurrentRenderer</span>&nbsp;==&nbsp;<span style="color:#a000a0;">NULL</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">return</span>;
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkRenderer</span>&nbsp;*<span style="color:navy;">ren</span>=&nbsp;<span style="color:navy;">CurrentRenderer</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkCamera</span>&nbsp;*<span style="color:navy;">camera</span>=&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">GetActiveCamera</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkRenderWindowInteractor</span>&nbsp;*<span style="color:navy;">rwi</span>=&nbsp;<span style="color:navy;">Interactor</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkTransform</span>&nbsp;*<span style="color:navy;">transform</span>=&nbsp;<span style="color:blue;">vtkTransform</span>::<span style="color:#880000;">New</span>();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;<span style="color:navy;">scale</span>=&nbsp;<span style="color:blue;">vtkMath</span>::<span style="color:#880000;">Norm</span>(<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetPosition</span>());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;(<span style="color:navy;">scale</span>&nbsp;&lt;=&nbsp;0.0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">scale</span>=&nbsp;<span style="color:blue;">vtkMath</span>::<span style="color:#880000;">Norm</span>(<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetFocalPoint</span>());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;(<span style="color:navy;">scale</span>&nbsp;&lt;=&nbsp;0.0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">scale</span>=&nbsp;1.0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;*<span style="color:navy;">temp</span>=&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetFocalPoint</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">SetFocalPoint</span>(<span style="color:navy;">temp</span>[0]/<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">temp</span>[1]/<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">temp</span>[2]/<span style="color:navy;">scale</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">temp</span>=&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetPosition</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">SetPosition</span>(<span style="color:navy;">temp</span>[0]/<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">temp</span>[1]/<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">temp</span>[2]/<span style="color:navy;">scale</span>);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;<span style="color:navy;">v2</span>[3];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;translate&nbsp;to&nbsp;center</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">Identity</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">Translate</span>(<span style="color:navy;">m_center</span>[0]/<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">m_center</span>[1]/<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">m_center</span>[2]/<span style="color:navy;">scale</span>);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">int</span>&nbsp;<span style="color:navy;">dx</span>=&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">GetLastEventPosition</span>()[0]&nbsp;-&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">GetEventPosition</span>()[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">int</span>&nbsp;<span style="color:navy;">dy</span>=&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">GetLastEventPosition</span>()[1]&nbsp;-&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">GetEventPosition</span>()[1];

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;azimuth</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">OrthogonalizeViewUp</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;*<span style="color:navy;">viewUp</span>=&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetViewUp</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">int</span>&nbsp;*<span style="color:navy;">size</span>=&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">GetSize</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">RotateWXYZ</span>(360.0*<span style="color:navy;">dx</span>/<span style="color:navy;">size</span>[0],&nbsp;<span style="color:navy;">viewUp</span>[0],&nbsp;<span style="color:navy;">viewUp</span>[1],&nbsp;<span style="color:navy;">viewUp</span>[2]);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;elevation</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkMath</span>::<span style="color:#880000;">Cross</span>(<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetDirectionOfProjection</span>(),&nbsp;<span style="color:navy;">viewUp</span>,&nbsp;<span style="color:navy;">v2</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">RotateWXYZ</span>(-360.0*<span style="color:navy;">dy</span>/<span style="color:navy;">size</span>[1],&nbsp;<span style="color:navy;">v2</span>[0],&nbsp;<span style="color:navy;">v2</span>[1],&nbsp;<span style="color:navy;">v2</span>[2]);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;translate&nbsp;back</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">Translate</span>(-<span style="color:navy;">m_center</span>[0]/<span style="color:navy;">scale</span>,&nbsp;-<span style="color:navy;">m_center</span>[1]/<span style="color:navy;">scale</span>,&nbsp;-<span style="color:navy;">m_center</span>[2]/<span style="color:navy;">scale</span>);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">ApplyTransform</span>(<span style="color:navy;">transform</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">OrthogonalizeViewUp</span>();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;For&nbsp;rescale&nbsp;back.</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">temp</span>=&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetFocalPoint</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">SetFocalPoint</span>(<span style="color:navy;">temp</span>[0]*<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">temp</span>[1]*<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">temp</span>[2]*<span style="color:navy;">scale</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">temp</span>=&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetPosition</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">SetPosition</span>(<span style="color:navy;">temp</span>[0]*<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">temp</span>[1]*<span style="color:navy;">scale</span>,&nbsp;<span style="color:navy;">temp</span>[2]*<span style="color:navy;">scale</span>);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">ResetCameraClippingRange</span>();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">Render</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">Delete</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">virtual</span>&nbsp;<span style="color:blue;">void</span>&nbsp;<span style="color:#880000;">Spin</span>()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;(<span style="color:navy;">CurrentRenderer</span>&nbsp;==&nbsp;<span style="color:#a000a0;">NULL</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">return</span>;
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkRenderer</span>&nbsp;*<span style="color:navy;">ren</span>=&nbsp;<span style="color:navy;">CurrentRenderer</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkCamera</span>&nbsp;*<span style="color:navy;">camera</span>=&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">GetActiveCamera</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkRenderWindowInteractor</span>&nbsp;*<span style="color:navy;">rwi</span>=&nbsp;<span style="color:navy;">Interactor</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;<span style="color:navy;">axis</span>[3];

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;compute&nbsp;view&nbsp;vector&nbsp;(rotation&nbsp;axis)</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;*<span style="color:navy;">pos</span>=&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetPosition</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;*<span style="color:navy;">fp</span>=&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">GetFocalPoint</span>();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">axis</span>[0]=&nbsp;<span style="color:navy;">fp</span>[0]&nbsp;-&nbsp;<span style="color:navy;">pos</span>[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">axis</span>[1]=&nbsp;<span style="color:navy;">fp</span>[1]&nbsp;-&nbsp;<span style="color:navy;">pos</span>[1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">axis</span>[2]=&nbsp;<span style="color:navy;">fp</span>[2]&nbsp;-&nbsp;<span style="color:navy;">pos</span>[2];

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">int</span>&nbsp;<span style="color:navy;">x1</span>,&nbsp;<span style="color:navy;">x2</span>,&nbsp;<span style="color:navy;">y1</span>,&nbsp;<span style="color:navy;">y2</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">x1</span>=&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">GetLastEventPosition</span>()[0]&nbsp;-&nbsp;(<span style="color:blue;">int</span>)&nbsp;<span style="color:navy;">m_display_center</span>[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">x2</span>=&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">GetEventPosition</span>()[0]&nbsp;-&nbsp;(<span style="color:blue;">int</span>)&nbsp;<span style="color:navy;">m_display_center</span>[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">y1</span>=&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">GetLastEventPosition</span>()[1]&nbsp;-&nbsp;(<span style="color:blue;">int</span>)&nbsp;<span style="color:navy;">m_display_center</span>[1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">y2</span>=&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">GetEventPosition</span>()[1]&nbsp;-&nbsp;(<span style="color:blue;">int</span>)&nbsp;<span style="color:navy;">m_display_center</span>[1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;((<span style="color:navy;">x2</span>&nbsp;==&nbsp;0.0&nbsp;&amp;&amp;&nbsp;<span style="color:navy;">y2</span>&nbsp;==&nbsp;0.0)&nbsp;||&nbsp;(<span style="color:navy;">x1</span>&nbsp;==&nbsp;0.0&nbsp;&amp;&amp;&nbsp;<span style="color:navy;">y1</span>&nbsp;==&nbsp;0.0))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//don't&nbsp;ever&nbsp;want&nbsp;to&nbsp;divide&nbsp;by&nbsp;zero</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">return</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;-&nbsp;divide&nbsp;by&nbsp;magnitudes&nbsp;to&nbsp;get&nbsp;angle</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;<span style="color:navy;">angle</span>=&nbsp;<span style="color:blue;">vtkMath</span>::<span style="color:#880000;">DegreesFromRadians</span>((<span style="color:navy;">x1</span>*<span style="color:navy;">y2</span>&nbsp;-&nbsp;<span style="color:navy;">y1</span>*<span style="color:navy;">x2</span>)/(<span style="color:#a000a0;">sqrt</span>(<span style="color:blue;">static_cast</span>&lt;<span style="color:blue;">double</span>&gt;(<span style="color:navy;">x1</span>*<span style="color:navy;">x1</span>&nbsp;+&nbsp;<span style="color:navy;">y1</span>*<span style="color:navy;">y1</span>))*<span style="color:#a000a0;">sqrt</span>(<span style="color:blue;">static_cast</span>&lt;<span style="color:blue;">double</span>&gt;(<span style="color:navy;">x2</span>*<span style="color:navy;">x2</span>&nbsp;+&nbsp;<span style="color:navy;">y2</span>*<span style="color:navy;">y2</span>))));

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;translate&nbsp;to&nbsp;center</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkTransform</span>&nbsp;*<span style="color:navy;">transform</span>=&nbsp;<span style="color:blue;">vtkTransform</span>::<span style="color:#880000;">New</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">Identity</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">Translate</span>(<span style="color:navy;">m_center</span>[0],&nbsp;<span style="color:navy;">m_center</span>[1],&nbsp;<span style="color:navy;">m_center</span>[2]);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;roll</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">RotateWXYZ</span>(<span style="color:navy;">angle</span>,&nbsp;<span style="color:navy;">axis</span>[0],&nbsp;<span style="color:navy;">axis</span>[1],&nbsp;<span style="color:navy;">axis</span>[2]);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;translate&nbsp;back</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">Translate</span>(-<span style="color:navy;">m_center</span>[0],&nbsp;-<span style="color:navy;">m_center</span>[1],&nbsp;-<span style="color:navy;">m_center</span>[2]);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">ApplyTransform</span>(<span style="color:navy;">transform</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">camera</span>-&gt;<span style="color:#880000;">OrthogonalizeViewUp</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">ResetCameraClippingRange</span>();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">rwi</span>-&gt;<span style="color:#880000;">Render</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">transform</span>-&gt;<span style="color:#880000;">Delete</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 
&nbsp;&nbsp;&nbsp;<span style="color:blue;">protected</span>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">InteractorStyleTrackballCamera</span>()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[0]=&nbsp;<span style="color:navy;">m_center</span>[1]=&nbsp;<span style="color:navy;">m_center</span>[2]=&nbsp;<span style="color:navy;">m_display_center</span>[0]=&nbsp;<span style="color:navy;">m_display_center</span>[1]=&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;Calculate&nbsp;the&nbsp;center&nbsp;of&nbsp;the&nbsp;visible&nbsp;actors.</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">void</span>&nbsp;<span style="color:#880000;">UpdateCenterOfRotation</span>(<span style="color:blue;">vtkRenderer</span>&nbsp;*<span style="color:navy;">ren</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkActorCollection</span>&nbsp;*<span style="color:navy;">actors</span>=&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">GetActors</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkCollectionSimpleIterator</span>&nbsp;<span style="color:navy;">cookie</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">vtkActor</span>&nbsp;*<span style="color:navy;">actor</span>;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[0]=&nbsp;<span style="color:navy;">m_center</span>[1]=&nbsp;<span style="color:navy;">m_center</span>[2]=&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">actors</span>-&gt;<span style="color:#880000;">InitTraversal</span>(<span style="color:navy;">cookie</span>);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">while</span>&nbsp;((<span style="color:navy;">actor</span>=&nbsp;<span style="color:navy;">actors</span>-&gt;<span style="color:#880000;">GetNextActor</span>(<span style="color:navy;">cookie</span>))&nbsp;!=&nbsp;<span style="color:#a000a0;">NULL</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">if</span>&nbsp;(<span style="color:navy;">actor</span>-&gt;<span style="color:#880000;">GetVisibility</span>())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;*<span style="color:navy;">actor_center</span>=&nbsp;<span style="color:navy;">actor</span>-&gt;<span style="color:#880000;">GetCenter</span>();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[0]+=&nbsp;<span style="color:navy;">actor_center</span>[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[1]+=&nbsp;<span style="color:navy;">actor_center</span>[1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[2]+=&nbsp;<span style="color:navy;">actor_center</span>[2];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[0]/=&nbsp;<span style="color:navy;">actors</span>-&gt;<span style="color:#880000;">GetNumberOfItems</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[1]/=&nbsp;<span style="color:navy;">actors</span>-&gt;<span style="color:#880000;">GetNumberOfItems</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_center</span>[2]/=&nbsp;<span style="color:navy;">actors</span>-&gt;<span style="color:#880000;">GetNumberOfItems</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;Updates&nbsp;the&nbsp;screen&nbsp;center&nbsp;of&nbsp;rotation.&nbsp;Must&nbsp;be&nbsp;called&nbsp;after&nbsp;UpdateCenterOfRotation(),</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">void</span>&nbsp;<span style="color:#880000;">UpdateScreenCenterOfRotation</span>(<span style="color:blue;">vtkRenderer</span>&nbsp;*<span style="color:navy;">ren</span>)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;*<span style="color:navy;">pt</span>;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;save&nbsp;the&nbsp;center&nbsp;of&nbsp;rotation&nbsp;in&nbsp;screen&nbsp;coordinates</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">SetWorldPoint</span>(<span style="color:navy;">m_center</span>[0],&nbsp;<span style="color:navy;">m_center</span>[1],&nbsp;<span style="color:navy;">m_center</span>[2],&nbsp;1.0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">WorldToDisplay</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">pt</span>=&nbsp;<span style="color:navy;">ren</span>-&gt;<span style="color:#880000;">GetDisplayPoint</span>();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_display_center</span>[0]=&nbsp;<span style="color:navy;">pt</span>[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_display_center</span>[1]=&nbsp;<span style="color:navy;">pt</span>[1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 
&nbsp;&nbsp;&nbsp;<span style="color:blue;">private</span>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:blue;">double</span>&nbsp;<span style="color:navy;">m_center</span>[3],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:green;">//&nbsp;In&nbsp;model&nbsp;coordinates.</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:navy;">m_display_center</span>[2];&nbsp;<span style="color:green;">//&nbsp;In&nbsp;display&nbsp;coordinates.</span>
&nbsp;&nbsp;&nbsp;};
&nbsp;&nbsp;&nbsp;<span style="color:#a000a0;">vtkStandardNewMacro</span>(<span style="color:blue;">InteractorStyleTrackballCamera</span>);
</pre>
      <br>
      <br>
      <div class="moz-cite-prefix">On 8/13/2013 8:59 AM, Serge Lalonde
        wrote:<br>
      </div>
      <blockquote cite="mid:520A2DB1.2090309@infolytica.com" type="cite">
        <meta content="text/html; charset=ISO-8859-1"
          http-equiv="Content-Type">
        I've gotten no replies to this question. Does that mean that no
        one else has had this problem?<br>
        <br>
        Can someone please confirm that they're using panning with
        vtkInteractorStyleTrackballCamera without any problems in 5.10?<br>
        <br>
        Thanks.<br>
        <br>
        <div class="moz-cite-prefix">On 8/6/2013 10:49 AM, Serge Lalonde
          wrote:<br>
        </div>
        <blockquote cite="mid:52010CDD.7000607@infolytica.com"
          type="cite">
          <meta content="text/html; charset=ISO-8859-1"
            http-equiv="Content-Type">
          I tried panning in ParaView and the clipping works properly.
          Is it using the vtkInteractorStyleTrackballCamera or something
          else?<br>
          <br>
          The problem is that it looks like the rotation center is wrong
          after panning, causing the model to be rotated out of the
          clipping range. It looks like the rotation center is the
          center of the window instead of the center of the model. Also,
          I have multiple actors in the scene. Could that be a problem?<br>
          <br>
          I'm not doing anything (that I can tell) to affect this. Could
          it be a bug in VTK 5.10? If so, does anyone know of a
          workaround?<br>
          <br>
          Thanks!<br>
          <br>
          <div class="moz-cite-prefix">On 8/2/2013 3:59 PM, Serge
            Lalonde wrote:<br>
          </div>
          <blockquote cite="mid:51FC0FB4.50209@infolytica.com"
            type="cite">
            <meta http-equiv="content-type" content="text/html;
              charset=ISO-8859-1">
            I notice that when using the
            vtkInteractorStyleTrackballCamera panning, I'll subsequently
            see a clipping problem if I rotate the actors afterwards.<br>
            Calling ResetCameraClippingRange() on the renderer has no
            effect. I'm using VTK 5.10.<br>
            <br>
            Is there a workaround for this? It seems like a pretty
            serious problem. I searched the archives without much
            success for a fix for this.<br>
            <br>
            Note: Back in October 2008 (5 years already!), when I was
            prototyping with VTK, I posted a fix to vtkusers and <a
              moz-do-not-send="true" class="moz-txt-link-abbreviated"
              href="http://www.vtk.org/bug">www.vtk.org/bug</a> for
            vtkRenderer and vtkCamera that fixed a similar clipping
            problem in VTK 5.2. After examining the 5.10 source code, it
            looks like the fix was never integrated into VTK's official
            code branch. The page is <a moz-do-not-send="true"
              class="moz-txt-link-freetext"
              href="http://www.vtk.org/Bug/view.php?id=7823">http://www.vtk.org/Bug/view.php?id=7823</a>
            and I noticed that its status is expired. Other users
            commented in that bug report that it fixed their problems
            and some even improved the fix.
            <title>Snippet</title>
            <br>
          </blockquote>
          <br>
          <div class="moz-signature">-- <br>
            <meta http-equiv="content-type" content="text/html;
              charset=ISO-8859-1">
            <title>Signature</title>
            <a moz-do-not-send="true" href="http:://www.infolytica.com">www.infolytica.com


            </a><br>
            300 Leo Pariseau, Suite 2222, Montreal, QC, Canada, H2X 4B3<br>
            (514) 849-8752 x236, Fax: (514) 849-4239 </div>
          <br>
          <fieldset class="mimeAttachmentHeader"></fieldset>
          <br>
          <pre wrap="">_______________________________________________
Powered by <a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="http://www.kitware.com">www.kitware.com</a>

Visit other Kitware open-source projects at <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a>

Please keep messages on-topic and check the VTK FAQ at: <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.vtk.org/Wiki/VTK_FAQ">http://www.vtk.org/Wiki/VTK_FAQ</a>

Follow this link to subscribe/unsubscribe:
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.vtk.org/mailman/listinfo/vtkusers">http://www.vtk.org/mailman/listinfo/vtkusers</a>
</pre>
        </blockquote>
        <br>
        <div class="moz-signature">-- <br>
          <meta http-equiv="content-type" content="text/html;
            charset=ISO-8859-1">
          <title>Signature</title>
          <a moz-do-not-send="true" href="http:://www.infolytica.com">www.infolytica.com

          </a><br>
          300 Leo Pariseau, Suite 2222, Montreal, QC, Canada, H2X 4B3<br>
          (514) 849-8752 x236, Fax: (514) 849-4239 </div>
        <br>
        <fieldset class="mimeAttachmentHeader"></fieldset>
        <br>
        <pre wrap="">_______________________________________________
Powered by <a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="http://www.kitware.com">www.kitware.com</a>

Visit other Kitware open-source projects at <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a>

Please keep messages on-topic and check the VTK FAQ at: <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.vtk.org/Wiki/VTK_FAQ">http://www.vtk.org/Wiki/VTK_FAQ</a>

Follow this link to subscribe/unsubscribe:
<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.vtk.org/mailman/listinfo/vtkusers">http://www.vtk.org/mailman/listinfo/vtkusers</a>
</pre>
      </blockquote>
      <br>
      <div class="moz-signature">-- <br>
        <meta http-equiv="content-type" content="text/html;
          charset=ISO-8859-1">
        <title>Signature</title>
        <a moz-do-not-send="true" href="http:://www.infolytica.com">www.infolytica.com
        </a><br>
        300 Leo Pariseau, Suite 2222, Montreal, QC, Canada, H2X 4B3<br>
        (514) 849-8752 x236, Fax: (514) 849-4239 </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Powered by <a class="moz-txt-link-abbreviated" href="http://www.kitware.com">www.kitware.com</a>

Visit other Kitware open-source projects at <a class="moz-txt-link-freetext" href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a>

Please keep messages on-topic and check the VTK FAQ at: <a class="moz-txt-link-freetext" href="http://www.vtk.org/Wiki/VTK_FAQ">http://www.vtk.org/Wiki/VTK_FAQ</a>

Follow this link to subscribe/unsubscribe:
<a class="moz-txt-link-freetext" href="http://www.vtk.org/mailman/listinfo/vtkusers">http://www.vtk.org/mailman/listinfo/vtkusers</a>
</pre>
    </blockquote>
    <br>
    <div class="moz-signature">-- <br>
      <meta http-equiv="content-type" content="text/html;
        charset=ISO-8859-1">
      <title>Signature</title>
      <a href="http:://www.infolytica.com">www.infolytica.com </a><br>
      300 Leo Pariseau, Suite 2222, Montreal, QC, Canada, H2X 4B3<br>
      (514) 849-8752 x236, Fax: (514) 849-4239
    </div>
  </body>
</html>