<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->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<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();</div>
<div> polydata->SetPoints(points);</div><div> polydata->Modified();</div><div><br></div><div> vtkSmartPointer<vtkPolyData> suction_polydata = vtkSmartPointer<vtkPolyData>::New();</div><div> suction_polydata->SetPoints(suction_points);</div>
<div> suction_polydata->Modified();</div><div><br></div><div><br></div><div> vtkSmartPointer<vtkDoubleArray> weights = vtkSmartPointer<vtkDoubleArray>::New();</div><div> weights->SetNumberOfValues(ScalarValues_pressure.GetSize());</div>
<div> for(int i=0; i< ScalarValues_pressure.GetSize();i++){</div><div> weights->SetValue(i, ScalarValues_pressure[i]);</div><div> }</div><div><br></div><div> </div><div> vtkSmartPointer<vtkDoubleArray> suction_weights = vtkSmartPointer<vtkDoubleArray>::New();</div>
<div> suction_weights->SetNumberOfValues(ScalarValues_suction.GetSize());</div><div> for(int i=0; i< ScalarValues_suction.GetSize();i++){</div><div> suction_weights->SetValue(i, ScalarValues_suction[i]);</div>
<div> }</div><div><br></div><div> </div><div> vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New();</div><div> glyphFilter->SetInputConnection(polydata->GetProducerPort());</div>
<div> glyphFilter->Update();</div><div><br></div><div> vtkSmartPointer<vtkVertexGlyphFilter> suction_glyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New();</div><div> suction_glyphFilter->SetInputConnection(suction_polydata->GetProducerPort());</div>
<div> suction_glyphFilter->Update();</div><div> </div><div> //Create a plane </div><div> vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New();</div><div> plane->SetOrigin(polydata->GetCenter());</div>
<div> plane->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<vtkSurfaceReconstructionFilter> surf = vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();</div>
<div><br></div><div> surf->SetInput(polydata);</div><div> //</div><div> vtkSmartPointer<vtkContourFilter> cf = vtkSmartPointer<vtkContourFilter>::New();</div><div> cf->SetInputConnection(surf->GetOutputPort());</div>
<div> cf->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<vtkSurfaceReconstructionFilter> suction_surf = vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();</div>
<div><br></div><div> suction_surf->SetInput(suction_polydata);</div><div> //</div><div> vtkSmartPointer<vtkContourFilter> suction_cf = vtkSmartPointer<vtkContourFilter>::New();</div><div> suction_cf->SetInputConnection(suction_surf->GetOutputPort());</div>
<div> suction_cf->Update();</div><div><br></div><div> vtkPolyData* outputPolyData = cf->GetOutput(); </div><div> outputPolyData->Modified();</div><div> vtkPolyData* suction_outputPolyData = suction_cf->GetOutput(); </div>
<div> suction_outputPolyData->Modified();</div><div><br></div><div> //double bounds[6];</div><div> //outputPolyData->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<vtkLookupTable> colorLookupTable = vtkSmartPointer<vtkLookupTable>::New();</div><div>colorLookupTable->SetHueRange(0.667,0.0);</div>
<div>colorLookupTable->SetNumberOfColors(16);</div><div><br></div><div> </div><div><br></div><div> colorLookupTable->Build();</div><div> colorLookupTable->Modified();</div><div><br></div><div> // Create the color map</div>
<div> vtkSmartPointer<vtkLookupTable> colorLookupTable_s = vtkSmartPointer<vtkLookupTable>::New();</div><div>colorLookupTable_s->SetHueRange(0.667,0.0);</div><div>colorLookupTable_s->SetNumberOfColors(16);</div>
<div><br></div><div><br></div><div><br></div><div> colorLookupTable_s->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<length; i++)</div>
<div> {</div><div> if(ScalarValues_pressure[i] > 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<length; i++)</div><div> {</div><div> if(ScalarValues_pressure[i] < min)</div><div> min = ScalarValues_pressure[i];</div>
<div> }</div><div> </div><div><br></div><div> colorLookupTable->SetTableRange( min,max);</div><div> colorLookupTable_s->Modified();</div><div> outputPolyData->GetPointData()->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<length_s; i++)</div><div> {</div><div> if(ScalarValues_suction[i] > 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<length_s; i++)</div><div> {</div><div> if(ScalarValues_suction[i] < min_s)</div><div> min_s = ScalarValues_suction[i];</div><div> }</div><div> </div>
<div><br></div><div> colorLookupTable_s->SetTableRange( min_s,max_s);</div><div> suction_outputPolyData->GetPointData()->SetScalars(suction_weights);</div><div> </div><div> // Create a mapper and actor</div><div>
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();</div><div> mapper->SetInputConnection(/*reverse->GetOutputPort()*/cf->GetOutputPort());</div><div> mapper->Modified();</div>
<div> mapper->ScalarVisibilityOn();</div><div> mapper->SetColorModeToMapScalars();</div><div> mapper->SetLookupTable(colorLookupTable);</div><div> mapper->SetScalarMaterialModeToDefault();</div><div> mapper->SetScalarRange(min,max);</div>
<div> vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();</div><div> //actor->GetProperty()->SetColor(1.0, 0.8941, 0.7686); // bisque</div><div> actor->SetMapper(mapper);</div><div>
actor->Modified();</div><div><br></div><div> </div><div> // Create a mapper and actor for suction blade</div><div> vtkSmartPointer<vtkPolyDataMapper> suction_mapper = vtkSmartPointer<vtkPolyDataMapper>::New();</div>
<div> suction_mapper->SetInputConnection(/*reverse->GetOutputPort()*/suction_cf->GetOutputPort());</div><div> suction_mapper->Modified();</div><div> suction_mapper->ScalarVisibilityOn();</div><div> suction_mapper->SetColorModeToMapScalars();</div>
<div> suction_mapper->SetLookupTable(colorLookupTable_s);</div><div> suction_mapper->SetScalarMaterialModeToDefault();</div><div> suction_mapper->SetScalarRange(min_s,max_s);</div><div> vtkSmartPointer<vtkActor> suction_actor = vtkSmartPointer<vtkActor>::New();</div>
<div> // actor->GetProperty()->SetColor(1.0, 0.8941, 0.7686); // bisque</div><div> suction_actor->SetMapper(suction_mapper);</div><div> suction_actor->Modified();</div><div> </div><div> //Create a renderer, render window, and interactor</div>
<div><br></div><div> Renderer->SetBackground( 1, 1, 1 );</div><div> Renderer->Modified();</div><div> RenderWindow->AddRenderer(Renderer);</div><div> RenderWindow->Modified();</div><div> Interactor->SetRenderWindow(RenderWindow);</div>
<div> Interactor->Modified();</div><div> Renderer->AddActor(suction_actor);</div><div> Renderer->AddActor(actor);</div><div><br></div><div> RenderWindow->Render();</div><div> Interactor->Start();</div>
<div> </div><div><br></div><div> </div><div> points->Delete();</div><div> suction_points->Delete();</div><div> polydata->Delete();</div><div> suction_polydata->Delete();</div><div> outputPolyData->Delete();</div>
<div> suction_outputPolyData->Delete();</div><div> colorLookupTable->Delete();</div><div> colorLookupTable_s->Delete();</div><div> Renderer->Delete();</div><div> RenderWindow->Delete();</div><div> Interactor->Delete();</div>
<div> mapper->Delete();</div><div> suction_mapper->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->getCFDData(pAirfoil,m_radioVal);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>doc->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->Reset();</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>newPtsSuction->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 <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 < userAirfoil->coolingObject->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 = &userAirfoil->coolingObject->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->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->InsertNextPoint(pt2->xx,pt2->y,pt2->z);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>ScalarValues_pressure.Add(pt2->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->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->InsertNextPoint(pt2->xx,pt2->y,pt2->z);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>ScalarValues_pressure.Add(pt2->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 < 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 < userAirfoil->coolingObject->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 = &userAirfoil->coolingObject->cfdModelSections[plane].SSpoints[j];</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>if (pt3->P0 != 0) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>newPtsSuction->InsertNextPoint(pt3->xx,pt3->y,pt3->z);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>ScalarValues_suction.Add(pt3->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>