<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=KOI8-R">
  <title></title>
</head>
<body text="#000000" bgcolor="#ffffff">
Hi Amy,<br>
<br>
There is critical memory leak with vtkInteractorStyleRubberBandZoom.<br>
Always happen very soon during playing with
vtkInteractorStyleRubberBandZoom in combination Reset View.<br>
<br>
To get it try this:<br>
1) Run simple example (below) with vtkInteractorStyleRubberBandZoom<br>
2) Start zoom and ResetView ("r" in vtkRenderWindowInteractor) in
different combinations.<br>
<br>
In my case less than 100 operation will give you memory leak.<br>
One more, after around 50 such<big><font size="-1"><big><font
 color="#000000"> exercises, zooming will stop working at all (Zoom =
Pan). </font></big></font></big><br>
<br>
Result:<br>
1) Very soon swap will be empty, computer will slow down.<br>
I am not happy with it. :(<br>
<br>
Example for testing:<br>
===========================================================================<br>
#include &lt;vtkConeSource.h&gt;<br>
#include &lt;vtkPolyDataMapper.h&gt;<br>
#include &lt;vtkRenderWindow.h&gt;<br>
#include &lt;vtkRenderWindowInteractor.h&gt;<br>
#include &lt;vtkCamera.h&gt;<br>
#include &lt;vtkActor.h&gt;<br>
#include &lt;vtkRenderer.h&gt;<br>
<br>
#include "vtkInteractorStyleTrackballCamera.h"<br>
#include "vtkInteractorStyleJoystickCamera.h"<br>
#include "vtkInteractorStyleTerrain.h"<br>
#include "vtkInteractorStyleRubberBandZoom.h"<br>
<br>
#include &lt;unistd.h&gt;<br>
<br>
void usage() {<br>
š fprintf(stderr, "style: (testing for different interaction
styles)\n\n");<br>
š fprintf(stderr, "usage: style [-s style] [-h]\n\n");<br>
š fprintf(stderr, "-s 1 : InteractorStyleTrackballCamera\n");<br>
š fprintf(stderr, "-s 2 : InteractorStyleJoystickCamera\n");<br>
š fprintf(stderr, "-s 3 : InteractorStyleTerrain\n");ššš <br>
š fprintf(stderr, "-s 4 : InteractorStyleRubberBandZoom\n");<br>
š fprintf(stderr, "-hšš : this (help) message\n");<br>
š fprintf(stderr, "\nusage examples:\n"<br>
ššššššššššššššššš "šš $style -s 1\n\n");<br>
}<br>
<br>
int main( int argc, char *argv[] )<br>
{<br>
š int StyleId = 0; // Style for testing<br>
š extern char *optarg;<br>
š extern int optind;<br>
š <br>
š char *options = "s:h";<br>
š int o, err = 0;<br>
<br>
š // If no arguments, just print help and exit<br>
š if (argc == 1) { usage(); exit(0);}<br>
<br>
š // Parse command line options<br>
š while ((o = getopt(argc,argv,options)) != -1) {<br>
ššš switch(o) {<br>
šššš case 's':<br>
šššš StyleId = atoi((const char*)optarg);ššš š<br>
šššš break;<br>
šššš case 'h':<br>
šššš usage();<br>
šššš exit(0);<br>
šššš default:<br>
šššš usage();<br>
šššš err = 1;<br>
šššš } <br>
š }<br>
<br>
š vtkInteractorStyle *style = NULL;<br>
<br>
š switch(StyleId)<br>
ššš {<br>
ššš case 1:<br>
ššš style = vtkInteractorStyleTrackballCamera::New();<br>
ššš break;<br>
ššš case 2:<br>
ššš style = vtkInteractorStyleJoystickCamera::New();<br>
ššš break;<br>
ššš case 3:<br>
ššš style = vtkInteractorStyleTerrain::New();<br>
ššš break;<br>
ššš case 4:<br>
ššš style = vtkInteractorStyleRubberBandZoom::New();<br>
ššš break;<br>
ššš default:<br>
ššš usage();<br>
ššš exit(0);ššš <br>
ššš } <br>
š <br>
š // Main staff<br>
š vtkRenderer *ren = vtkRenderer::New();<br>
š <br>
š vtkConeSource *cone = vtkConeSource::New();<br>
š cone-&gt;SetHeight( 3.0 );<br>
š cone-&gt;SetRadius( 1.0 );<br>
š cone-&gt;SetResolution( 10 );<br>
š <br>
š vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New();<br>
š coneMapper-&gt;SetInput( cone-&gt;GetOutput() );<br>
<br>
š vtkActor *coneActor = vtkActor::New();<br>
š coneActor-&gt;SetMapper( coneMapper );<br>
<br>
š ren-&gt;AddActor( coneActor );<br>
š ren-&gt;SetBackground( 0.5, 0.5, 0.5 );<br>
<br>
š vtkRenderWindow *renWin = vtkRenderWindow::New();<br>
š renWin-&gt;AddRenderer( ren );<br>
š renWin-&gt;SetSize( 300, 300 );<br>
<br>
š vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();<br>
š iren-&gt;SetRenderWindow(renWin);<br>
<br>
š iren-&gt;SetInteractorStyle(style);<br>
<br>
š iren-&gt;Initialize();<br>
š iren-&gt;Start();<br>
š <br>
š cone-&gt;Delete();<br>
š coneMapper-&gt;Delete();<br>
š coneActor-&gt;Delete();<br>
š ren-&gt;Delete();<br>
š renWin-&gt;Delete();<br>
š iren-&gt;Delete();<br>
<br>
š return 0;<br>
}<br>
===========================================================================<br>
<pre cols="72" class="moz-signature">-- 
Denis Shamonin
Section Computational Science
University of Amsterdam
Kruislaan 403, 1098 SJ Amsterdam
the Netherlands
<a class="moz-txt-link-freetext"
 href="http://carol.wins.uva.nl/%7Edshamoni/">http://carol.wins.uva.nl/~dshamoni/</a>
</pre>
</body>
</html>