You are welcome. <div><br>Glad that I was able to help. </div><div><br><br><div class="gmail_quote">On Tue, Dec 14, 2010 at 6:02 AM, Rodrigo M. <span dir="ltr">&lt;<a href="mailto:rodrigo.geof@gmail.com">rodrigo.geof@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Aashish,<br>
<br>
Thanks a lot, this is exactly what I was looking for. =)<br>
<br>
2010/12/14 Aashish Chaudhary &lt;<a href="mailto:aashish.chaudhary@kitware.com">aashish.chaudhary@kitware.com</a>&gt;:<br>
<div><div></div><div class="h5">&gt; Hi Rodrigo,<br>
&gt; If you have not found the answer this might help:<br>
&gt; On the style you can query GetStartPosition() and GetEndPosition()<br>
&gt; Convert these positions to world coordinate using vtkViewPort functions<br>
&gt; something like this:<br>
&gt;<br>
&gt; double startWorldPosition[4], endWorldPosition[4];<br>
&gt;<br>
&gt;   this-&gt;MainRenderer-&gt;SetViewPoint(<br>
&gt;<br>
&gt;     (startPosition[0] - halfWidth) / halfWidth,<br>
&gt;<br>
&gt;     (startPosition[1] - halfHeight) / halfHeight,<br>
&gt;<br>
&gt;     1);<br>
&gt;<br>
&gt;   this-&gt;MainRenderer-&gt;ViewToWorld();<br>
&gt;<br>
&gt;   this-&gt;MainRenderer-&gt;GetWorldPoint(startWorldPosition);<br>
&gt;<br>
&gt;   this-&gt;MainRenderer-&gt;SetViewPoint(<br>
&gt;<br>
&gt;     (endPosition[0] - halfWidth) / halfWidth,<br>
&gt;<br>
&gt;     (endPosition[1] - halfHeight) / halfHeight,<br>
&gt;<br>
&gt;     1);<br>
&gt;<br>
&gt;   this-&gt;MainRenderer-&gt;ViewToWorld();<br>
&gt;<br>
&gt;   this-&gt;MainRenderer-&gt;GetWorldPoint(endWorldPosition);<br>
&gt;<br>
&gt;   int targetExtents[4] = {<br>
&gt;<br>
&gt;     startWorldPosition[0] &lt; endWorldPosition[0] ? startWorldPosition[0] :<br>
&gt; endWorldPosition[0],<br>
&gt;<br>
&gt;     startWorldPosition[0] &gt; endWorldPosition[0] ? startWorldPosition[0] :<br>
&gt; endWorldPosition[0],<br>
&gt;<br>
&gt;     startWorldPosition[1] &lt; endWorldPosition[1] ? startWorldPosition[1] :<br>
&gt; endWorldPosition[1],<br>
&gt;<br>
&gt;     startWorldPosition[1] &gt; endWorldPosition[1] ? startWorldPosition[1] :<br>
&gt; endWorldPosition[1]};<br>
&gt;<br>
&gt; Once you get target extents you can set camera center to center of these<br>
&gt; extents something like this:<br>
&gt;<br>
&gt;<br>
&gt;     camera-&gt;SetPosition(newCenter[0], newCenter[1], 1);<br>
&gt;<br>
&gt;     camera-&gt;SetFocalPoint(newCenter[0], newCenter[1], 0);<br>
&gt;<br>
&gt;     camera-&gt;SetViewUp(0, 1, 0); // just to make sure<br>
&gt;<br>
&gt;     camera-&gt;SetParallelScale((newExtents[3] - newExtents[2]) / 2.0);<br>
&gt;<br>
&gt; Hope this helps.<br>
&gt; On Tue, Dec 7, 2010 at 4:14 PM, rodrigo &lt;<a href="mailto:rodrigo.geof@gmail.com">rodrigo.geof@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hello, I&#39;m new to vtk, what I want to do is to zoom on a 2D image using a<br>
&gt;&gt; Rubber band box, and to have my mouse coordinates showed up.<br>
&gt;&gt;<br>
&gt;&gt; I tried to modify one of the wiki examples, but I couldn&#39;t make the mouse<br>
&gt;&gt; coordinates be showed up and have the rubber band  at the same time.<br>
&gt;&gt; Besides<br>
&gt;&gt; that, I have no idea on how to make the rubber band zoom my image. I<br>
&gt;&gt; really<br>
&gt;&gt; want to use the coordinates grabbed by the rubber box to zoom the image.<br>
&gt;&gt;<br>
&gt;&gt; Here is my code:<br>
&gt;&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkAssemblyPath.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkCell.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkCommand.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkCornerAnnotation.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkImageActor.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkImageData.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkImageViewer2.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkInteractorStyleImage.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkJPEGReader.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkPointData.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkPropPicker.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkRenderer.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkRenderWindow.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkRenderWindowInteractor.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkSmartPointer.h&gt;<br>
&gt;&gt; #include &lt;vtk-5.2/vtkTextProperty.h&gt;<br>
&gt;&gt; #include &lt;vtkInteractorStyleRubberBand2D.h&gt;<br>
&gt;&gt; #include &lt;vtkCallbackCommand.h&gt;<br>
&gt;&gt;<br>
&gt;&gt; // The mouse motion callback, to pick the image and recover pixel values<br>
&gt;&gt; class vtkImageInteractionCallback1 : public vtkCommand<br>
&gt;&gt; {<br>
&gt;&gt; public:<br>
&gt;&gt;<br>
&gt;&gt;        static vtkImageInteractionCallback1 *New()<br>
&gt;&gt;        {<br>
&gt;&gt;                return new vtkImageInteractionCallback1;<br>
&gt;&gt;        }<br>
&gt;&gt;<br>
&gt;&gt;        vtkImageInteractionCallback1()<br>
&gt;&gt;        {<br>
&gt;&gt;                this-&gt;Viewer = 0;<br>
&gt;&gt;                this-&gt;Picker = 0;<br>
&gt;&gt;                this-&gt;Annotation = 0;<br>
&gt;&gt;                this-&gt;PointData = vtkPointData::New();<br>
&gt;&gt;        }<br>
&gt;&gt;<br>
&gt;&gt;        ~vtkImageInteractionCallback1()<br>
&gt;&gt;        {<br>
&gt;&gt;                this-&gt;Viewer = 0;<br>
&gt;&gt;                this-&gt;Picker = 0;<br>
&gt;&gt;                this-&gt;Annotation = 0;<br>
&gt;&gt;                this-&gt;PointData-&gt;Delete();<br>
&gt;&gt;        }<br>
&gt;&gt;<br>
&gt;&gt;        void SetPicker(vtkPropPicker *picker)<br>
&gt;&gt;        {<br>
&gt;&gt;                this-&gt;Picker = picker;<br>
&gt;&gt;        }<br>
&gt;&gt;<br>
&gt;&gt;        void SetAnnotation(vtkCornerAnnotation *annotation)<br>
&gt;&gt;        {<br>
&gt;&gt;                this-&gt;Annotation = annotation;<br>
&gt;&gt;        }<br>
&gt;&gt;<br>
&gt;&gt;        void SetViewer(vtkImageViewer2 *viewer)<br>
&gt;&gt;        {<br>
&gt;&gt;                this-&gt;Viewer = viewer;<br>
&gt;&gt;        }<br>
&gt;&gt;<br>
&gt;&gt;        virtual void Execute(vtkObject *, unsigned long vtkNotUsed(event),<br>
&gt;&gt; void *)<br>
&gt;&gt;        {<br>
&gt;&gt;                //this-&gt;Viewer;<br>
&gt;&gt;                vtkRenderWindowInteractor *interactor =<br>
&gt;&gt;                        this-&gt;Viewer-&gt;GetRenderWindow()-&gt;GetInteractor();<br>
&gt;&gt;                vtkRenderer* renderer = this-&gt;Viewer-&gt;GetRenderer();<br>
&gt;&gt;                vtkImageActor* actor = this-&gt;Viewer-&gt;GetImageActor();<br>
&gt;&gt;                vtkImageData* image = this-&gt;Viewer-&gt;GetInput();<br>
&gt;&gt;                vtkInteractorStyle *style =<br>
&gt;&gt; vtkInteractorStyle::SafeDownCast(<br>
&gt;&gt;                                interactor-&gt;GetInteractorStyle());<br>
&gt;&gt;<br>
&gt;&gt;                image-&gt;Update();<br>
&gt;&gt;<br>
&gt;&gt;                // Pick at the mouse location provided by the interactor<br>
&gt;&gt;                this-&gt;Picker-&gt;Pick( interactor-&gt;GetEventPosition()[0],<br>
&gt;&gt;                                    interactor-&gt;GetEventPosition()[1],<br>
&gt;&gt;                                    0.0, renderer );<br>
&gt;&gt;<br>
&gt;&gt;                // There could be other props assigned to this picker, so<br>
&gt;&gt;                // make sure we picked the image actor<br>
&gt;&gt;                vtkAssemblyPath* path = this-&gt;Picker-&gt;GetPath();<br>
&gt;&gt;                bool validPick = false;<br>
&gt;&gt;<br>
&gt;&gt;                if( path )<br>
&gt;&gt;                {<br>
&gt;&gt;                        vtkCollectionSimpleIterator sit;<br>
&gt;&gt;                        path-&gt;InitTraversal( sit );<br>
&gt;&gt;                        vtkAssemblyNode *node;<br>
&gt;&gt;                        for( int i = 0; i &lt; path-&gt;GetNumberOfItems() &amp;&amp;<br>
&gt;&gt; !validPick; ++i )<br>
&gt;&gt;                        {<br>
&gt;&gt;                                node = path-&gt;GetNextNode( sit );<br>
&gt;&gt;                                if( actor == vtkImageActor::SafeDownCast(<br>
&gt;&gt; node-&gt;GetViewProp() ) )<br>
&gt;&gt;                                {<br>
&gt;&gt;                                        validPick = true;<br>
&gt;&gt;                                }<br>
&gt;&gt;                        }<br>
&gt;&gt;                }<br>
&gt;&gt;<br>
&gt;&gt;                if( !validPick )<br>
&gt;&gt;                {<br>
&gt;&gt;                        this-&gt;Annotation-&gt;SetText( 0, &quot;Off Image&quot; );<br>
&gt;&gt;                        interactor-&gt;Render();<br>
&gt;&gt;                        // Pass the event further on<br>
&gt;&gt;                        style-&gt;OnMouseMove();<br>
&gt;&gt;                        return;<br>
&gt;&gt;                }<br>
&gt;&gt;<br>
&gt;&gt;                // Get the world coordinates of the pick<br>
&gt;&gt;                double pos[3];<br>
&gt;&gt;                this-&gt;Picker-&gt;GetPickPosition( pos );<br>
&gt;&gt;                // Fixes some numerical problems with the picking<br>
&gt;&gt;                double *bounds = actor-&gt;GetDisplayBounds();<br>
&gt;&gt;                int axis = this-&gt;Viewer-&gt;GetSliceOrientation();<br>
&gt;&gt;                pos[axis] = bounds[2*axis];<br>
&gt;&gt;<br>
&gt;&gt;                vtkPointData* pd = image-&gt;GetPointData();<br>
&gt;&gt;                if( !pd )<br>
&gt;&gt;                {<br>
&gt;&gt;                        return;<br>
&gt;&gt;                }<br>
&gt;&gt;<br>
&gt;&gt;                this-&gt;PointData-&gt;InterpolateAllocate( pd, 1, 1 );<br>
&gt;&gt;<br>
&gt;&gt;                // Use tolerance as a function of size of source data<br>
&gt;&gt;                double tol2 = image-&gt;GetLength();<br>
&gt;&gt;                tol2 = tol2 ? tol2*tol2 / 1000.0 : 0.001;<br>
&gt;&gt;<br>
&gt;&gt;                // Find the cell that contains pos<br>
&gt;&gt;                int subId;<br>
&gt;&gt;                double pcoords[3], weights[8];<br>
&gt;&gt;                vtkCell* cell = image-&gt;FindAndGetCell(<br>
&gt;&gt;                                pos, NULL, -1, tol2, subId, pcoords,<br>
&gt;&gt; weights );<br>
&gt;&gt;                if( cell )<br>
&gt;&gt;                {<br>
&gt;&gt;                        // Interpolate the point data<br>
&gt;&gt;                        this-&gt;PointData-&gt;InterpolatePoint( pd, 0,<br>
&gt;&gt; cell-&gt;PointIds, weights );<br>
&gt;&gt;                        int components =<br>
&gt;&gt;<br>
&gt;&gt;  this-&gt;PointData-&gt;GetScalars()-&gt;GetNumberOfComponents();<br>
&gt;&gt;                        double* tuple =<br>
&gt;&gt; this-&gt;PointData-&gt;GetScalars()-&gt;GetTuple( 0 );<br>
&gt;&gt;<br>
&gt;&gt;                        std::string message = &quot;Location: ( &quot;;<br>
&gt;&gt;                        message += vtkVariant( pos[0] ).ToString();<br>
&gt;&gt;                        message += &quot;, &quot;;<br>
&gt;&gt;                        message += vtkVariant( pos[1] ).ToString();<br>
&gt;&gt;                        message += &quot;, &quot;;<br>
&gt;&gt;                        message += vtkVariant( pos[2] ).ToString();<br>
&gt;&gt;                        message += &quot; )\nValue: ( &quot;;<br>
&gt;&gt;<br>
&gt;&gt;                        for( int c = 0; c &lt; components; ++c )<br>
&gt;&gt;                        {<br>
&gt;&gt;                                message += vtkVariant( tuple[ c ]<br>
&gt;&gt; ).ToString();<br>
&gt;&gt;                                if( c != components - 1 )<br>
&gt;&gt;                                {<br>
&gt;&gt;                                        message += &quot;, &quot;;<br>
&gt;&gt;                                }<br>
&gt;&gt;                        }<br>
&gt;&gt;                        message += &quot; )&quot;;<br>
&gt;&gt;                        this-&gt;Annotation-&gt;SetText( 0, message.c_str() );<br>
&gt;&gt;                        interactor-&gt;Render();<br>
&gt;&gt;                        style-&gt;OnMouseMove();<br>
&gt;&gt;                }<br>
&gt;&gt;        }<br>
&gt;&gt;<br>
&gt;&gt; private:<br>
&gt;&gt;<br>
&gt;&gt;        // Pointer to the viewer<br>
&gt;&gt;        vtkImageViewer2 *Viewer;<br>
&gt;&gt;<br>
&gt;&gt;        // Pointer to the picker<br>
&gt;&gt;        vtkPropPicker *Picker;<br>
&gt;&gt;<br>
&gt;&gt;        // Pointer to the annotation<br>
&gt;&gt;        vtkCornerAnnotation *Annotation;<br>
&gt;&gt;<br>
&gt;&gt;        // Interpolator<br>
&gt;&gt;        vtkPointData* PointData;<br>
&gt;&gt; };<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; void SelectionChangedCallbackFunction ( vtkObject* vtkNotUsed(caller),<br>
&gt;&gt;                                        long unsigned int<br>
&gt;&gt; vtkNotUsed(eventId), void* vtkNotUsed(clientData),<br>
&gt;&gt; void* callData )<br>
&gt;&gt; {<br>
&gt;&gt;        std::cout &lt;&lt; &quot;SelectionChanged callback&quot; &lt;&lt; std::endl;<br>
&gt;&gt;<br>
&gt;&gt;        unsigned int* rect = reinterpret_cast&lt;unsigned int*&gt; ( callData );<br>
&gt;&gt;        unsigned int pos1X = rect[0];<br>
&gt;&gt;        unsigned int pos1Y = rect[1];<br>
&gt;&gt;        unsigned int pos2X = rect[2];<br>
&gt;&gt;        unsigned int pos2Y = rect[3];<br>
&gt;&gt;<br>
&gt;&gt;        std::cout &lt;&lt; &quot;Start x: &quot; &lt;&lt; pos1X &lt;&lt; &quot; Start y: &quot; &lt;&lt; pos1Y<br>
&gt;&gt;                &lt;&lt; &quot; End x: &quot; &lt;&lt; pos2X &lt;&lt; &quot; End y: &quot; &lt;&lt; pos2Y &lt;&lt; std::endl;<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; int main ( int argc, char* argv[] )<br>
&gt;&gt; {<br>
&gt;&gt;        //Verify input arguments<br>
&gt;&gt;        if ( argc != 2 )<br>
&gt;&gt;        {<br>
&gt;&gt;                std::cout &lt;&lt; &quot;Usage: &quot; &lt;&lt; argv[0]<br>
&gt;&gt;                        &lt;&lt; &quot; Filename(jpeg)&quot; &lt;&lt; std::endl;<br>
&gt;&gt;                return EXIT_FAILURE;<br>
&gt;&gt;        }<br>
&gt;&gt;<br>
&gt;&gt;        //Parse input argument<br>
&gt;&gt;        std::string inputFilename = argv[1];<br>
&gt;&gt;<br>
&gt;&gt;        //Read the image<br>
&gt;&gt;        vtkSmartPointer&lt;vtkJPEGReader&gt; jpegReader =<br>
&gt;&gt;                vtkSmartPointer&lt;vtkJPEGReader&gt;::New();<br>
&gt;&gt;        if( !jpegReader-&gt;CanReadFile( inputFilename.c_str() ) )<br>
&gt;&gt;        {<br>
&gt;&gt;                std::cout &lt;&lt; argv[0] &lt;&lt; &quot;: Error reading file &quot;<br>
&gt;&gt;                        &lt;&lt; inputFilename &lt;&lt; endl &lt;&lt; &quot;Exiting...&quot; &lt;&lt; endl;<br>
&gt;&gt;                return EXIT_FAILURE;<br>
&gt;&gt;        }<br>
&gt;&gt;        jpegReader-&gt;SetFileName ( inputFilename.c_str() );<br>
&gt;&gt;<br>
&gt;&gt;        // Picker to pick pixels<br>
&gt;&gt;        vtkSmartPointer&lt;vtkPropPicker&gt; propPicker =<br>
&gt;&gt;                vtkSmartPointer&lt;vtkPropPicker&gt;::New();<br>
&gt;&gt;        propPicker-&gt;PickFromListOn();<br>
&gt;&gt;<br>
&gt;&gt;        // Give the picker a prop to pick<br>
&gt;&gt;        vtkSmartPointer&lt;vtkImageViewer2&gt; imageViewer =<br>
&gt;&gt;                vtkSmartPointer&lt;vtkImageViewer2&gt;::New();<br>
&gt;&gt;        propPicker-&gt;AddPickList( imageViewer-&gt;GetImageActor() );<br>
&gt;&gt;<br>
&gt;&gt;        // Visualize<br>
&gt;&gt;        vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor =<br>
&gt;&gt;                vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<br>
&gt;&gt;        imageViewer-&gt;SetInputConnection( jpegReader-&gt;GetOutputPort() );<br>
&gt;&gt;        imageViewer-&gt;SetupInteractor( renderWindowInteractor );<br>
&gt;&gt;        imageViewer-&gt;SetSize( 600, 600 );<br>
&gt;&gt;<br>
&gt;&gt;        vtkRenderer* renderer = imageViewer-&gt;GetRenderer();<br>
&gt;&gt;        renderer-&gt;ResetCamera();<br>
&gt;&gt;        renderer-&gt;GradientBackgroundOn();<br>
&gt;&gt;        renderer-&gt;SetBackground(0,0,0);<br>
&gt;&gt;        renderer-&gt;SetBackground2(1,1,1);<br>
&gt;&gt;<br>
&gt;&gt;        // Annotate the image with window/level and mouse over pixel<br>
&gt;&gt; information<br>
&gt;&gt;        vtkSmartPointer&lt;vtkCornerAnnotation&gt; cornerAnnotation =<br>
&gt;&gt;                vtkSmartPointer&lt;vtkCornerAnnotation&gt;::New();<br>
&gt;&gt;        cornerAnnotation-&gt;SetLinearFontScaleFactor( 2 );<br>
&gt;&gt;        cornerAnnotation-&gt;SetNonlinearFontScaleFactor( 1 );<br>
&gt;&gt;        cornerAnnotation-&gt;SetMaximumFontSize( 20 );<br>
&gt;&gt;        cornerAnnotation-&gt;SetText( 0, &quot;Off Image&quot; );<br>
&gt;&gt;        cornerAnnotation-&gt;SetText( 3, &quot;&lt;window&gt;\n&lt;level&gt;&quot; );<br>
&gt;&gt;        cornerAnnotation-&gt;GetTextProperty()-&gt;SetColor( 1,0,0);<br>
&gt;&gt;<br>
&gt;&gt;        imageViewer-&gt;GetRenderer()-&gt;AddViewProp( cornerAnnotation );<br>
&gt;&gt;<br>
&gt;&gt;        // Callback listens to MouseMoveEvents invoked by the interactor&#39;s<br>
&gt;&gt; style<br>
&gt;&gt;        vtkSmartPointer&lt;vtkImageInteractionCallback1&gt; callback =<br>
&gt;&gt;                vtkSmartPointer&lt;vtkImageInteractionCallback1&gt;::New();<br>
&gt;&gt;        callback-&gt;SetViewer( imageViewer );<br>
&gt;&gt;        callback-&gt;SetAnnotation( cornerAnnotation );<br>
&gt;&gt;        callback-&gt;SetPicker( propPicker );<br>
&gt;&gt;<br>
&gt;&gt;        // InteractorStyleImage allows for the following controls:<br>
&gt;&gt;        // 1) middle mouse + move = camera pan<br>
&gt;&gt;        // 2) left mouse + move = window/level<br>
&gt;&gt;        // 3) right mouse + move = camera zoom<br>
&gt;&gt;        // 4) middle mouse wheel scroll = zoom<br>
&gt;&gt;        // 5) &#39;r&#39; = reset window/level<br>
&gt;&gt;        // 6) shift + &#39;r&#39; = reset camera<br>
&gt;&gt;        vtkInteractorStyleImage* imageStyle =<br>
&gt;&gt; imageViewer-&gt;GetInteractorStyle();<br>
&gt;&gt;        imageStyle-&gt;AddObserver( vtkCommand::MouseMoveEvent, callback );<br>
&gt;&gt;<br>
&gt;&gt;        vtkSmartPointer&lt;vtkCallbackCommand&gt; selectionChangedCallback =<br>
&gt;&gt;                vtkSmartPointer&lt;vtkCallbackCommand&gt;::New();<br>
&gt;&gt;        selectionChangedCallback-&gt;SetCallback (<br>
&gt;&gt; SelectionChangedCallbackFunction );<br>
&gt;&gt;<br>
&gt;&gt;        vtkSmartPointer&lt;vtkInteractorStyleRubberBand2D&gt; style =<br>
&gt;&gt;                vtkSmartPointer&lt;vtkInteractorStyleRubberBand2D&gt;::New();<br>
&gt;&gt;        style-&gt;AddObserver ( vtkCommand::SelectionChangedEvent,<br>
&gt;&gt; selectionChangedCallback );<br>
&gt;&gt;        renderWindowInteractor-&gt;SetInteractorStyle( style );<br>
&gt;&gt;<br>
&gt;&gt;        renderWindowInteractor-&gt;Initialize();<br>
&gt;&gt;        renderWindowInteractor-&gt;Start();<br>
&gt;&gt;<br>
&gt;&gt;        return EXIT_SUCCESS;<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; View this message in context:<br>
&gt;&gt; <a href="http://vtk.1045678.n5.nabble.com/Rubber-band-zoom-and-pick-on-2d-image-tp3296495p3296495.html" target="_blank">http://vtk.1045678.n5.nabble.com/Rubber-band-zoom-and-pick-on-2d-image-tp3296495p3296495.html</a><br>


&gt;&gt; Sent from the VTK - Users mailing list archive at Nabble.com.<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt;<br>
&gt;&gt; Visit other Kitware open-source projects at<br>
&gt;&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt;<br>
&gt;&gt; Please keep messages on-topic and check the VTK FAQ at:<br>
&gt;&gt; <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
&gt;&gt;<br>
&gt;&gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; | Aashish Chaudhary<br>
&gt; | R&amp;D Engineer<br>
&gt; | Kitware Inc.<br>
&gt; | <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>| Aashish Chaudhary <br>| R&amp;D Engineer         <br>| Kitware Inc.            <br>| <a href="http://www.kitware.com">www.kitware.com</a>    <br>
</div>