[vtkusers] Freeing memory error!!!
jose manjon
jmanjon at fis.upv.es
Thu Oct 3 04:10:12 EDT 2002
Hi there,
I have made a class for three orthogonal planes visualization and works ok but I can not free the memory after class destruction.
I do all the Delete() for all the objects but it has no response.
can anyone tell me what I am doing wrong??
thanks
jose
the code:
CRenderView::CRenderView()
{
opacidad=0;
}
CRenderView::~CRenderView()
{
AfxMessageBox("freeing ...");
datos1->Delete();
datos2->Delete();
datos3->Delete();
lut->Delete();
plane1->Delete();
plane2->Delete();
plane3->Delete();
planeMapper1->Delete();
planeMapper2->Delete();
planeMapper3->Delete();
text1->Delete();
text2->Delete();
text3->Delete();
planeActor1->Delete();
planeActor2->Delete();
planeActor3->Delete();
AfxMessageBox("free");
}
void CRenderView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// ORTHOGONAL VIEWER
unsigned short * p;
C3DFrame* frame;
CImageView* v1;
CImageView* v2;
CImageView* v3;
CACRNEMAViewerDoc *pDoc = (CACRNEMAViewerDoc *) GetDocument();
frame=((C3DFrame*)GetParentFrame());
v1=frame->GetView(0,1);
v2=frame->GetView(1,0);
v3=frame->GetView(1,1);
int nx=v1->IA;
int ny=v2->IA;
int nz=v3->IA;
lut=vtkLookupTable::New();
lut->SetNumberOfColors(256);
double B,G,R;
for(int i=0;i<1024;i=i+4)
{
B=(double)v1->ani->m_pDIB[40+i]/255;
G=(double)v1->ani->m_pDIB[40+i+1]/255;
R=(double)v1->ani->m_pDIB[40+i+2]/255;
if(i/4<opacidad) lut->SetTableValue(i/4,R,G,B,0);
else lut->SetTableValue(i/4,R,G,B,1);
}
lut->SetTableRange(0,255);
/////////// PLANO AXIAL /////////////////////////////////////////////////////
datos1=vtkStructuredPoints::New();
datos1->SetDimensions(v1->ani->Columns,v1->ani->Rows,1);
datos1->SetScalarType(VTK_UNSIGNED_SHORT);
datos1->SetNumberOfScalarComponents(1);
datos1->AllocateScalars();
p=(unsigned short *) datos1->GetScalarPointer();
for(int y=0;y<v1->ani->Rows;y++)
for(int x=0;x<v1->ani->Columns;x++)
{
*p++ = v1->ani->Bitmap[y*v1->ani->Columns+x];
}
plane1=vtkPlaneSource::New();
plane1->SetNormal(0,0,1);
planeMapper1=vtkPolyDataMapper::New();
planeMapper1->SetInput(plane1->GetOutput());
text1=vtkTexture::New();
text1->SetInput(datos1);
text1->SetLookupTable(lut);
text1->InterpolateOn();
planeActor1=vtkActor::New();
planeActor1->SetMapper(planeMapper1);
planeActor1->SetTexture(text1);
/////////// PLANO CORONAL /////////////////////////////////////////////////////
datos2=vtkStructuredPoints::New();
datos2->SetDimensions(pDoc->m_ani[0].Columns,pDoc->fuentes,1);
datos2->SetScalarType(VTK_UNSIGNED_SHORT);
datos2->SetNumberOfScalarComponents(1);
datos2->AllocateScalars();
p=(unsigned short *) datos2->GetScalarPointer();
for(y=0;y<v2->ani->Rows;y++)
for(int x=0;x<v2->ani->Columns;x++)
{
*p++ = v2->ani->Bitmap[y*v2->ani->Columns+v2->ani->Columns-1-x];
}
double yr=((double)pDoc->fuentes/(double)pDoc->m_ani[0].Rows)/2.0;
yr=yr*(pDoc->resz/pDoc->resx);
plane2=vtkPlaneSource::New();
plane2->SetNormal(0,1,0);
plane2->SetOrigin(-0.5,0,-yr);
plane2->SetPoint1(0.5,0,-yr);
plane2->SetPoint2(-0.5,0,yr);
plane2->SetXResolution(1);
plane2->SetYResolution(1);
planeMapper2=vtkPolyDataMapper::New();
planeMapper2->SetInput(plane2->GetOutput());
text2=vtkTexture::New();
text2->SetInput(datos2);
text2->SetLookupTable(lut);
text2->InterpolateOn();
planeActor2=vtkActor::New();
planeActor2->SetMapper(planeMapper2);
planeActor2->SetTexture(text2);
/////////// PLANO SAGITAL /////////////////////////////////////////////////////
datos3=vtkStructuredPoints::New();
datos3->SetDimensions(pDoc->m_ani[0].Columns,pDoc->fuentes,1);
datos3->SetScalarType(VTK_UNSIGNED_SHORT);
datos3->SetNumberOfScalarComponents(1);
datos3->AllocateScalars();
p=(unsigned short *) datos3->GetScalarPointer();
for(y=0;y<v3->ani->Rows;y++)
for(int x=0;x<v3->ani->Columns;x++)
{
*p++ = v3->ani->Bitmap[y*v3->ani->Columns+v3->ani->Columns-1-x];
}
plane3=vtkPlaneSource::New();
plane3->SetNormal(1,0,0);
plane3->SetOrigin(0,-0.5,-yr);
plane3->SetPoint1(0, 0.5,-yr);
plane3->SetPoint2(0,-0.5, yr);
plane3->SetXResolution(1);
plane3->SetYResolution(1);
planeMapper3=vtkPolyDataMapper::New();
planeMapper3->SetInput(plane3->GetOutput());
text3=vtkTexture::New();
text3->SetInput(datos3);
text3->SetLookupTable(lut);
text3->InterpolateOn();
planeActor3=vtkActor::New();
planeActor3->SetMapper(planeMapper3);
planeActor3->SetTexture(text3);
/////////// CUBO /////////////////////////////////////////////////////
vtkCubeSource * cube=vtkCubeSource::New();
cube->SetBounds(-0.5,0.5,-0.5,0.5,-yr,yr);
vtkPolyDataMapper *cubeMapper=vtkPolyDataMapper::New();
cubeMapper->SetInput(cube->GetOutput());
vtkActor *cubeActor=vtkActor::New();
cubeActor->SetMapper(cubeMapper);
cubeActor->GetProperty()->SetRepresentationToWireframe();
/////////// RENDER /////////////////////////////////////////////////////
this->Renderer->SetBackground(0.05,0.15,0.45);
this->Renderer->AddActor(planeActor1);
this->Renderer->AddActor(planeActor2);
this->Renderer->AddActor(planeActor3);
this->Renderer->AddActor(cubeActor);
vtkCamera * cam=this->Renderer->GetActiveCamera();
cam->Elevation(90);
cam->Azimuth(180);
vtkLight *light1 = vtkLight::New();
light1->SetPosition(1,0,1);
vtkLight *light2 = vtkLight::New();
light2->SetPosition(0,1,1);
vtkLight *light3 = vtkLight::New();
light3->SetPosition(-1,0,1);
vtkLight *light4 = vtkLight::New();
light4->SetPosition(0,-1,1);
this->Renderer->AddLight(light1);
this->Renderer->AddLight(light2);
this->Renderer->AddLight(light3);
this->Renderer->AddLight(light4);
cube->Delete();
cubeMapper->Delete();
cubeActor->Delete();
Actualizar();
}
void CRenderView::Actualizar()
{
this->Renderer->RemoveActor(planeActor1);
this->Renderer->RemoveActor(planeActor2);
this->Renderer->RemoveActor(planeActor3);
unsigned short * p;
C3DFrame* frame;
CImageView* v1;
CImageView* v2;
CImageView* v3;
CACRNEMAViewerDoc *pDoc = (CACRNEMAViewerDoc *) GetDocument();
frame=((C3DFrame*)GetParentFrame());
v1=frame->GetView(0,1);
v2=frame->GetView(1,0);
v3=frame->GetView(1,1);
int nx=v3->IA;
int ny=v2->IA;
int nz=v1->IA;
double B,G,R;
for(int i=0;i<1024;i=i+4)
{
B=(double)v1->ani->m_pDIB[40+i]/255;
G=(double)v1->ani->m_pDIB[40+i+1]/255;
R=(double)v1->ani->m_pDIB[40+i+2]/255;
if(i/4<opacidad) lut->SetTableValue(i/4,R,G,B,0);
else lut->SetTableValue(i/4,R,G,B,1);
}
lut->SetTableRange(0,255);
/////////// PLANO AXIAL /////////////////////////////////////////////////////
p=(unsigned short *) datos1->GetScalarPointer();
for(int y=0;y<v1->ani->Rows;y++)
for(int x=0;x<v1->ani->Columns;x++)
{
*p++ = v1->ani->Bitmap[y*v1->ani->Columns+x];
}
double yr=((double)pDoc->fuentes/(double)pDoc->m_ani[0].Rows)/2.0;
yr=yr*(pDoc->resz/pDoc->resx);
plane1->SetCenter(0,0,-yr+2*yr*((double)nz/(double)(pDoc->fuentes-1)));
planeMapper1->SetInput(plane1->GetOutput());
text1->SetInput(datos1);
text1->SetLookupTable(lut);
text1->InterpolateOn();
planeActor1->SetMapper(planeMapper1);
planeActor1->SetTexture(text1);
/////////// PLANO CORONAL /////////////////////////////////////////////////////
p=(unsigned short *) datos2->GetScalarPointer();
for(y=0;y<v2->ani->Rows;y++)
for(int x=0;x<v2->ani->Columns;x++)
{
*p++ = v2->ani->Bitmap[y*v2->ani->Columns+v2->ani->Columns-1-x];
}
plane2->SetCenter(0,0.5-((double)ny/(double)v2->alto),0);
planeMapper2->SetInput(plane2->GetOutput());
text2->SetInput(datos2);
text2->SetLookupTable(lut);
text2->InterpolateOn();
planeActor2->SetMapper(planeMapper2);
planeActor2->SetTexture(text2);
/////////// PLANO SAGITAL /////////////////////////////////////////////////////
p=(unsigned short *) datos3->GetScalarPointer();
for(y=0;y<v3->ani->Rows;y++)
for(int x=0;x<v3->ani->Columns;x++)
{
*p++ = v3->ani->Bitmap[y*v3->ani->Columns+v3->ani->Columns-1-x];
}
plane3->SetCenter(-0.5+((double)nx/(double)v3->ancho),0,0);
planeMapper3->SetInput(plane3->GetOutput());
text3->SetInput(datos3);
text3->SetLookupTable(lut);
text3->InterpolateOn();
planeActor3->SetMapper(planeMapper3);
planeActor3->SetTexture(text3);
this->Renderer->AddActor(planeActor1);
this->Renderer->AddActor(planeActor2);
this->Renderer->AddActor(planeActor3);
this->Renderer->GetRenderWindow()->Render();
}
void CRenderView::SetOpacity(double opa)
{
opacidad=opa*256;
Actualizar();
}
\\|//
(@ @)
+--------------------oOO----(_)----OOo-----------------------+
| |
| Prof. Jose Vicente Manjón Herrera |
| |
| Group of Medical Bioinformatics |
| Department of Aplied Physics |
| Computer Science High School |
| Technical University of Valencia |
| Spain |
| |
| Email:jmanjon at fis.upv.es |
| |
+------------------------------------------------------------+
|__|__|
|| ||
ooO Ooo
More information about the vtkusers
mailing list