<div>Hi all,</div><div><br></div><div>I  have created a vtk render window and I want to change the data in the window each time user select an option from a set of radio buttons in a MFC window.</div><div>To do this I called vtkrender window each time an option is selected. </div>
<div>This is working fine, but when I tried to close the vtk window. I get a debug assertion from vtkgarbagecollector saying that object-&gt;getreferencecount == 1.</div><div><br></div><div>Below is the code I am using to render vtk window.</div>
<div><br></div><div><div>vtkPoints *points = newPts;</div><div> vtkPoints *suction_points = newPtsSuction;</div><div> </div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div>  vtkSmartPointer&lt;vtkPolyData&gt; polydata = vtkSmartPointer&lt;vtkPolyData&gt;::New();</div>
<div>  polydata-&gt;SetPoints(points);</div><div>  polydata-&gt;Modified();</div><div><br></div><div>  vtkSmartPointer&lt;vtkPolyData&gt; suction_polydata = vtkSmartPointer&lt;vtkPolyData&gt;::New();</div><div>  suction_polydata-&gt;SetPoints(suction_points);</div>
<div>  suction_polydata-&gt;Modified();</div><div><br></div><div><br></div><div>  vtkSmartPointer&lt;vtkDoubleArray&gt; weights = vtkSmartPointer&lt;vtkDoubleArray&gt;::New();</div><div>  weights-&gt;SetNumberOfValues(ScalarValues_pressure.GetSize());</div>
<div>  for(int i=0; i&lt; ScalarValues_pressure.GetSize();i++){</div><div>  weights-&gt;SetValue(i, ScalarValues_pressure[i]);</div><div>  }</div><div><br></div><div>  </div><div>  vtkSmartPointer&lt;vtkDoubleArray&gt; suction_weights = vtkSmartPointer&lt;vtkDoubleArray&gt;::New();</div>
<div>  suction_weights-&gt;SetNumberOfValues(ScalarValues_suction.GetSize());</div><div>  for(int i=0; i&lt; ScalarValues_suction.GetSize();i++){</div><div>  suction_weights-&gt;SetValue(i, ScalarValues_suction[i]);</div>
<div>  }</div><div><br></div><div> </div><div>  vtkSmartPointer&lt;vtkVertexGlyphFilter&gt; glyphFilter = vtkSmartPointer&lt;vtkVertexGlyphFilter&gt;::New();</div><div>  glyphFilter-&gt;SetInputConnection(polydata-&gt;GetProducerPort());</div>
<div>  glyphFilter-&gt;Update();</div><div><br></div><div>  vtkSmartPointer&lt;vtkVertexGlyphFilter&gt; suction_glyphFilter = vtkSmartPointer&lt;vtkVertexGlyphFilter&gt;::New();</div><div>  suction_glyphFilter-&gt;SetInputConnection(suction_polydata-&gt;GetProducerPort());</div>
<div>  suction_glyphFilter-&gt;Update();</div><div> </div><div>   //Create a plane </div><div>  vtkSmartPointer&lt;vtkPlane&gt; plane = vtkSmartPointer&lt;vtkPlane&gt;::New();</div><div>  plane-&gt;SetOrigin(polydata-&gt;GetCenter());</div>
<div>  plane-&gt;SetNormal(1,1,1);</div><div><br></div><div>  </div><div>  // Construct the surface and create isosurface.<span class="Apple-tab-span" style="white-space:pre">        </span></div><div>  vtkSmartPointer&lt;vtkSurfaceReconstructionFilter&gt; surf = vtkSmartPointer&lt;vtkSurfaceReconstructionFilter&gt;::New();</div>
<div><br></div><div>  surf-&gt;SetInput(polydata);</div><div> //</div><div>  vtkSmartPointer&lt;vtkContourFilter&gt; cf =  vtkSmartPointer&lt;vtkContourFilter&gt;::New();</div><div>  cf-&gt;SetInputConnection(surf-&gt;GetOutputPort());</div>
<div>  cf-&gt;Update();</div><div><br></div><div>  // Construct the suction blade surface and create isosurface.<span class="Apple-tab-span" style="white-space:pre">        </span></div><div>  vtkSmartPointer&lt;vtkSurfaceReconstructionFilter&gt; suction_surf = vtkSmartPointer&lt;vtkSurfaceReconstructionFilter&gt;::New();</div>
<div><br></div><div>  suction_surf-&gt;SetInput(suction_polydata);</div><div> //</div><div>  vtkSmartPointer&lt;vtkContourFilter&gt; suction_cf =  vtkSmartPointer&lt;vtkContourFilter&gt;::New();</div><div>  suction_cf-&gt;SetInputConnection(suction_surf-&gt;GetOutputPort());</div>
<div>  suction_cf-&gt;Update();</div><div><br></div><div> vtkPolyData* outputPolyData = cf-&gt;GetOutput(); </div><div> outputPolyData-&gt;Modified();</div><div> vtkPolyData* suction_outputPolyData = suction_cf-&gt;GetOutput(); </div>
<div> suction_outputPolyData-&gt;Modified();</div><div><br></div><div>  //double bounds[6];</div><div>  //outputPolyData-&gt;GetBounds(bounds);</div><div> </div><div>  // Find min and max z</div><div> // double minz = bounds[4];</div>
<div> // double maxz = bounds[5];</div><div> </div><div> </div><div>  // Create the color map</div><div>  vtkSmartPointer&lt;vtkLookupTable&gt; colorLookupTable = vtkSmartPointer&lt;vtkLookupTable&gt;::New();</div><div>colorLookupTable-&gt;SetHueRange(0.667,0.0);</div>
<div>colorLookupTable-&gt;SetNumberOfColors(16);</div><div><br></div><div> </div><div><br></div><div>  colorLookupTable-&gt;Build();</div><div>  colorLookupTable-&gt;Modified();</div><div><br></div><div>  // Create the color map</div>
<div>  vtkSmartPointer&lt;vtkLookupTable&gt; colorLookupTable_s = vtkSmartPointer&lt;vtkLookupTable&gt;::New();</div><div>colorLookupTable_s-&gt;SetHueRange(0.667,0.0);</div><div>colorLookupTable_s-&gt;SetNumberOfColors(16);</div>
<div><br></div><div><br></div><div><br></div><div>  colorLookupTable_s-&gt;Build();</div><div> </div><div>  // Generate the colors for each point based on the color map</div><div><br></div><div> // double min = minimumValue(PoValues);</div>
<div>     int length = ScalarValues_pressure.GetSize();// establish size of array</div><div>    double max = ScalarValues_pressure[0];       // start with max = first element</div><div><br></div><div>     for(int i = 1; i&lt;length; i++)</div>
<div>     {</div><div>          if(ScalarValues_pressure[i] &gt; max)</div><div>                max = ScalarValues_pressure[i];</div><div>     }</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span> double min = ScalarValues_pressure[0];</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span> for(int i = 1; i&lt;length; i++)</div><div>     {</div><div>          if(ScalarValues_pressure[i] &lt; min)</div><div>                min = ScalarValues_pressure[i];</div>
<div>     }</div><div> </div><div><br></div><div>  colorLookupTable-&gt;SetTableRange( min,max);</div><div>  colorLookupTable_s-&gt;Modified();</div><div>  outputPolyData-&gt;GetPointData()-&gt;SetScalars(weights);</div><div>
<br></div><div><br></div><div>  int length_s = ScalarValues_suction.GetSize();// establish size of array</div><div>     double max_s = ScalarValues_suction[0];       // start with max = first element</div><div><br></div><div>
     for(int i = 1; i&lt;length_s; i++)</div><div>     {</div><div>          if(ScalarValues_suction[i] &gt; max_s)</div><div>                max_s = ScalarValues_suction[i];</div><div>     }</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span> double min_s = ScalarValues_suction[0];</div>
<div><br></div><div> for(int i = 1; i&lt;length_s; i++)</div><div>     {</div><div>         if(ScalarValues_suction[i] &lt; min_s)</div><div>               min_s = ScalarValues_suction[i];</div><div>     }</div><div>     </div>
<div><br></div><div>  colorLookupTable_s-&gt;SetTableRange( min_s,max_s);</div><div>  suction_outputPolyData-&gt;GetPointData()-&gt;SetScalars(suction_weights);</div><div> </div><div>  // Create a mapper and actor</div><div>
  vtkSmartPointer&lt;vtkPolyDataMapper&gt; mapper = vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();</div><div>  mapper-&gt;SetInputConnection(/*reverse-&gt;GetOutputPort()*/cf-&gt;GetOutputPort());</div><div>  mapper-&gt;Modified();</div>
<div> mapper-&gt;ScalarVisibilityOn();</div><div>  mapper-&gt;SetColorModeToMapScalars();</div><div>  mapper-&gt;SetLookupTable(colorLookupTable);</div><div>  mapper-&gt;SetScalarMaterialModeToDefault();</div><div> mapper-&gt;SetScalarRange(min,max);</div>
<div>  vtkSmartPointer&lt;vtkActor&gt; actor = vtkSmartPointer&lt;vtkActor&gt;::New();</div><div>   //actor-&gt;GetProperty()-&gt;SetColor(1.0, 0.8941, 0.7686); // bisque</div><div>  actor-&gt;SetMapper(mapper);</div><div>
  actor-&gt;Modified();</div><div><br></div><div>  </div><div>  // Create a mapper and actor for suction blade</div><div>  vtkSmartPointer&lt;vtkPolyDataMapper&gt; suction_mapper = vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();</div>
<div>  suction_mapper-&gt;SetInputConnection(/*reverse-&gt;GetOutputPort()*/suction_cf-&gt;GetOutputPort());</div><div>  suction_mapper-&gt;Modified();</div><div> suction_mapper-&gt;ScalarVisibilityOn();</div><div>  suction_mapper-&gt;SetColorModeToMapScalars();</div>
<div>  suction_mapper-&gt;SetLookupTable(colorLookupTable_s);</div><div>  suction_mapper-&gt;SetScalarMaterialModeToDefault();</div><div> suction_mapper-&gt;SetScalarRange(min_s,max_s);</div><div>  vtkSmartPointer&lt;vtkActor&gt; suction_actor = vtkSmartPointer&lt;vtkActor&gt;::New();</div>
<div> //  actor-&gt;GetProperty()-&gt;SetColor(1.0, 0.8941, 0.7686); // bisque</div><div>  suction_actor-&gt;SetMapper(suction_mapper);</div><div>  suction_actor-&gt;Modified();</div><div> </div><div>  //Create a renderer, render window, and interactor</div>
<div><br></div><div>  Renderer-&gt;SetBackground( 1, 1, 1 );</div><div>  Renderer-&gt;Modified();</div><div>  RenderWindow-&gt;AddRenderer(Renderer);</div><div>  RenderWindow-&gt;Modified();</div><div>  Interactor-&gt;SetRenderWindow(RenderWindow);</div>
<div>  Interactor-&gt;Modified();</div><div>  Renderer-&gt;AddActor(suction_actor);</div><div>  Renderer-&gt;AddActor(actor);</div><div><br></div><div>  RenderWindow-&gt;Render();</div><div>  Interactor-&gt;Start();</div>
<div>  </div><div><br></div><div>  </div><div>  points-&gt;Delete();</div><div>  suction_points-&gt;Delete();</div><div>  polydata-&gt;Delete();</div><div>  suction_polydata-&gt;Delete();</div><div>  outputPolyData-&gt;Delete();</div>
<div>  suction_outputPolyData-&gt;Delete();</div><div>  colorLookupTable-&gt;Delete();</div><div>  colorLookupTable_s-&gt;Delete();</div><div>   Renderer-&gt;Delete();</div><div>   RenderWindow-&gt;Delete();</div><div>   Interactor-&gt;Delete();</div>
<div>   mapper-&gt;Delete();</div><div>   suction_mapper-&gt;Delete();</div><div><br></div><div>  And below is the code I used everytime user clicks an option. </div></div><div><br></div><div><div>void VTKRenderer::OnBnClickedP0button()</div>
<div>{</div><div><span class="Apple-tab-span" style="white-space:pre">        </span> UpdateData(TRUE);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>doc-&gt;getCFDData(pAirfoil,m_radioVal);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>doc-&gt;viewCFData();</div>
<div>}</div></div><div><br></div><div><div>void CCooledTurbineDoc::getCFDData(CAirfoilObject *userAirfoil,int val){</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>double cfdVal;</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>newPts-&gt;Reset();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>newPtsSuction-&gt;Reset();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>ScalarValues_pressure.RemoveAll();</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>ScalarValues_suction.RemoveAll();</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>for (plane = 0; plane &lt;t; plane++)</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>for (int j = 0; j &lt; userAirfoil-&gt;coolingObject-&gt;cfdModelSections[plane].PSpoints.GetSize(); j++)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>CFDPointObject *pt2 = &amp;userAirfoil-&gt;coolingObject-&gt;cfdModelSections[plane].PSpoints[j];</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>switch (val){</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>case 0:</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>cfdVal = pt2-&gt;P0;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (cfdVal != 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>newPts-&gt;InsertNextPoint(pt2-&gt;xx,pt2-&gt;y,pt2-&gt;z);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>ScalarValues_pressure.Add(pt2-&gt;P0);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>break;</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>case 1:</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>cfdVal = pt2-&gt;T0;</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (cfdVal != 0) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>newPts-&gt;InsertNextPoint(pt2-&gt;xx,pt2-&gt;y,pt2-&gt;z);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>ScalarValues_pressure.Add(pt2-&gt;T0);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><br></div><div><br></div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span></div><div><span class="Apple-tab-span" style="white-space:pre">                        </span></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>for (plane = 0; plane &lt; t; plane++)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>for (int j = 0; j &lt; userAirfoil-&gt;coolingObject-&gt;cfdModelSections[plane].SSpoints.GetSize(); j++)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>CFDPointObject *pt3 = &amp;userAirfoil-&gt;coolingObject-&gt;cfdModelSections[plane].SSpoints[j];</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (pt3-&gt;P0 != 0) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>newPtsSuction-&gt;InsertNextPoint(pt3-&gt;xx,pt3-&gt;y,pt3-&gt;z);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>ScalarValues_suction.Add(pt3-&gt;P0);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span></div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span></div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div><br></div><div>}</div></div><div><br></div><div>Please help me. </div>
<div><br></div><div><br></div>