[vtkusers] VTK not releasing memory, including minimal example.

P.J.Schaafsma jetze.schaafsma at gmail.com
Sun Sep 30 17:38:57 EDT 2012


Pure C++ shows the same problems, so Python isn't a factor either.

C++ code


#include <stdio.h>
#include <crtdbg.h>

#include "vtkConeSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkContourFilter.h"
#include "vtkXMLImageDataReader.h"
#include "vtkPolyDataMapper.h"
#include "vtkCallbackCommand.h"

void middle(vtkObject*, unsigned long eid, void* clientdata, void *calldata)
{
	void **data = (void **)clientdata;

	vtkXMLImageDataReader *reader = (vtkXMLImageDataReader *)data[0];
	vtkContourFilter *contour = (vtkContourFilter *)data[1];
	vtkPolyDataMapper *mapper = (vtkPolyDataMapper *)data[2];
	vtkActor *actor = (vtkActor *)data[3];
	vtkRenderer *renderer = (vtkRenderer *)data[4];

	renderer->RemoveActor(actor);

	printf("actor RC: %d\n", actor->GetReferenceCount());
	printf("mapper RC: %d\n", mapper->GetReferenceCount());
	printf("contour RC: %d\n", contour->GetReferenceCount());
	printf("reader RC: %d\n", reader->GetReferenceCount());
	
	actor->Delete();
	mapper->Delete();
	contour->Delete();
	reader->Delete();

	printf("actor RC: %d\n", actor->GetReferenceCount());
	printf("mapper RC: %d\n", mapper->GetReferenceCount());
	printf("contour RC: %d\n", contour->GetReferenceCount());
	printf("reader RC: %d\n", reader->GetReferenceCount());

}

void right(vtkObject*, unsigned long eid, void* clientdata, void *calldata)
{
	void **data = (void **)clientdata;

	vtkXMLImageDataReader *reader = (vtkXMLImageDataReader *)data[0];
	vtkContourFilter *contour = (vtkContourFilter *)data[1];
	vtkPolyDataMapper *mapper = (vtkPolyDataMapper *)data[2];
	vtkActor *actor = (vtkActor *)data[3];
	vtkRenderer *renderer = (vtkRenderer *)data[4];

	reader->SetFileName("e:\\data\\volume\\manix_low.vti");
	//reader->SetFileName("/media/Data/data/volume/manix_low.vti");

	contour->SetInputConnection(reader->GetOutputPort());
	contour->SetValue(0, 800);

	mapper->SetInputConnection(contour->GetOutputPort());

	actor->SetMapper(mapper);

	renderer->AddActor(actor);
	renderer->ResetCamera();

}

int main()
{
	vtkCamera *camera = vtkCamera::New();

	vtkRenderer *renderer = vtkRenderer::New();
	renderer->SetActiveCamera(camera);

	vtkRenderWindow *render_window = vtkRenderWindow::New();
	render_window->AddRenderer(renderer);

	vtkInteractorStyleTrackballCamera *style =
vtkInteractorStyleTrackballCamera::New();
	
	vtkRenderWindowInteractor *interactor = vtkRenderWindowInteractor::New();
	interactor->SetInteractorStyle(style);
	interactor->SetRenderWindow(render_window);
	interactor->Initialize();

	vtkXMLImageDataReader *reader = vtkXMLImageDataReader::New();
	vtkContourFilter *contour = vtkContourFilter::New();
	vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
	vtkActor *actor = vtkActor::New();

	void *data[] = {reader, contour, mapper, actor, renderer};

	vtkCallbackCommand *middle_callback = vtkCallbackCommand::New();
	middle_callback->SetCallback(middle);
	middle_callback->SetClientData(data);

	vtkCallbackCommand *right_callback = vtkCallbackCommand::New();
	right_callback->SetCallback(right);
	right_callback->SetClientData(data);

	interactor->AddObserver("MiddleButtonPressEvent", middle_callback);
	interactor->AddObserver("RightButtonPressEvent", right_callback);

	interactor->Start();

	render_window->RemoveRenderer(renderer);
	interactor->SetInteractorStyle(0);
	
	style->Delete();
	camera->Delete();
	interactor->Delete();
	renderer->Delete();
	render_window->Delete();

	return 0;
}




--
View this message in context: http://vtk.1045678.n5.nabble.com/VTK-not-releasing-memory-including-minimal-example-tp5716258p5716368.html
Sent from the VTK - Users mailing list archive at Nabble.com.



More information about the vtkusers mailing list