X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2FCutModule%2Fkernel%2FCutModelData.cxx;h=546e416cd15547c95f1a67fd552615074fba483b;hb=a236b3d0da0e436f9027b701df86c3576e9c25fe;hp=d4b46fbd9c92845fc60ddca642e90cfa3db841b5;hpb=9e16e29818047ef5e7f4cd8031a61cc09e8efc3b;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/CutModule/kernel/CutModelData.cxx b/lib/maracasVisuLib/src/CutModule/kernel/CutModelData.cxx index d4b46fb..546e416 100644 --- a/lib/maracasVisuLib/src/CutModule/kernel/CutModelData.cxx +++ b/lib/maracasVisuLib/src/CutModule/kernel/CutModelData.cxx @@ -3,8 +3,8 @@ Program: wxMaracas Module: $RCSfile: CutModelData.cxx,v $ Language: C++ - Date: $Date: 2009/11/25 16:35:37 $ - Version: $Revision: 1.5 $ + Date: $Date: 2011/02/07 10:30:05 $ + Version: $Revision: 1.9 $ Copyright: (c) 2002, 2003 License: @@ -15,15 +15,15 @@ =========================================================================*/ #include "CutModelData.h" - +#include "vtkRenderWindow.h" /** ** Start of the manager class **/ CutModelData::CutModelData(int id, vtkRenderWindowInteractor* interactor, vtkCommand* observer, vtkImageData* img){ initializeData(id, interactor, observer, img); - } + CutModelData::CutModelData(){ } @@ -35,8 +35,10 @@ void CutModelData::initializeData(int id, vtkRenderWindowInteractor* interactor, createActor(); createShapes(); ChangeShape(0); + interactor->GetRenderWindow ()->Render(); checkInvariant(); } + CutModelData::~CutModelData(){ checkInvariant(); _boxWidgetVolume->RemoveAllObservers(); @@ -53,11 +55,11 @@ CutModelData::~CutModelData(){ inversModel->Delete(); _id = -1; } + void CutModelData::RefreshViewBox(){ } void CutModelData::createBoxWidget(vtkRenderWindowInteractor* interactor, vtkCommand* observer){ - _boxWidgetVolume = vtkBoxWidget::New(); _boxWidgetVolume->SetInteractor( interactor ); //_boxWidgetVolume->SetPlaceFactor(1); @@ -73,6 +75,7 @@ void CutModelData::createBoxWidget(vtkRenderWindowInteractor* interactor, vtkCom //_boxWidgetVolume->GetHandleProperty()->SetOpacity(0.5); //_boxWidgetVolume->GetOutlineProperty()->SetOpacity(0.5); } + void CutModelData::setTransform(vtkImageData* img)throw( CutModelException){ currentmatrix = vtkTransform::New(); @@ -80,48 +83,49 @@ void CutModelData::setTransform(vtkImageData* img)throw( CutModelException){ inversModel = vtkTransform::New(); vtkMatrix4x4* matrix = vtkMatrix4x4::New(); - matrix->Identity(); + matrix->Identity(); + double *ori = img->GetOrigin(); int *ext = img->GetExtent(); double *spc = img->GetSpacing(); - matrix->SetElement(0,0,(ext[1]-ext[0])/4*spc[0]); matrix->SetElement(1,1,(ext[3]-ext[2])/4*spc[1]); matrix->SetElement(2,2,(ext[5]-ext[4])/4*spc[2]); - double orgx = (ext[1]-ext[0])/2*spc[0]; - double orgy = (ext[3]-ext[2])/2*spc[1]; - double orgz = (ext[5]-ext[4])/2*spc[2]; + double orgx = (ext[1]+ext[0])/2.*spc[0]; + double orgy = (ext[3]+ext[2])/2.*spc[1]; + double orgz = (ext[5]+ext[4])/2.*spc[2]; matrix->SetElement(0,3,orgx); matrix->SetElement(1,3,orgy); matrix->SetElement(2,3,orgz); - currentmatrix->SetMatrix(matrix); - _boxWidgetVolume->SetTransform(currentmatrix); - + _boxWidgetVolume->SetTransform(currentmatrix); } + void CutModelData::createActor(){ _Mapper = vtkPolyDataMapper::New(); _Actor = vtkActor::New(); _Actor->SetMapper(_Mapper); _Actor->GetProperty()->SetColor(1, 0, 0); - _Actor->GetProperty()->SetOpacity(0.5); - + _Actor->GetProperty()->SetOpacity(0.5); } + void CutModelData::udapteActorDirection()throw( CutModelException){ checkInvariant(); _boxWidgetVolume->GetTransform(currentmatrix); _Actor->SetUserMatrix(currentmatrix->GetMatrix());//SetUserTransform(currentmatrix ); } + void CutModelData::createShapes(){ _cubefigure = new CutModelFigureCube(); _cylinderfigure = new CutModelFigureCylinder(); _spherefigure = new CutModelFigureSphere(); } + void CutModelData::changeOpacity(int opacity)throw( CutModelException){ checkInvariant(); _Actor->GetProperty()->SetOpacity((double)opacity/100.0); @@ -148,7 +152,6 @@ void CutModelData::ChangeShape(int selection)throw( CutModelException){ }else{ throw CutModelException("Shape type not found"); } - _currentshape=selection; } @@ -170,8 +173,7 @@ void CutModelData::checkInvariant()throw( CutModelException){ } if(_spherefigure==NULL){ throw CutModelException("Sphere not created"); - } - + } } vtkActor* CutModelData::getActor()throw( CutModelException){ @@ -183,6 +185,7 @@ void CutModelData::changeColor(double r,double g,double b)throw( CutModelExcepti checkInvariant(); _Actor->GetProperty()->SetColor( r,g,b ); } + CutModelFigure* CutModelData::getCurentCuttingModel(){ checkInvariant(); @@ -196,9 +199,9 @@ CutModelFigure* CutModelData::getCurentCuttingModel(){ throw CutModelException("Shape type not found"); } } + void CutModelData::ExecuteCut( double* range, bool isinside, vtkImageData* copyimage)throw( CutModelException) { - wxBusyCursor wait; CutModelFigure* actualCuttingModel = getCurentCuttingModel(); @@ -209,26 +212,25 @@ void CutModelData::ExecuteCut( double* range, bool isinside, vtkImageData* copyi actualCuttingModel->SetInversVtkTransform(getModelTransformInvers()); bool inside; - bool volInt, volExt; - int xx,yy,zz; - unsigned short* pOrg; - int ext[6]; - double spc[3]; - long int contAfter = 0; - long int contBefor = 0; + //bool volInt, volExt; // unused + int xx,yy,zz; + unsigned short* pOrg; + int ext[6]; + //double spc[3]; // unused + //long int contAfter = 0; // unused + //long int contBefor = 0; // unused double minvalue = range[0]; double value = range[1]; double maxvalue = range[2]; - - + copyimage->GetExtent(ext); - for (xx=ext[0];xxIfPointInside(xx,yy,zz); if ( ((inside==true)&&(isinside==true)) || ((!inside==true)&&(!isinside)) ) @@ -246,40 +248,36 @@ void CutModelData::ExecuteCut( double* range, bool isinside, vtkImageData* copyi } // for zz } // for yy } // for xx - } void CutModelData::ExecuteUnCut(bool isinside, vtkImageData* image, vtkImageData* copyimage)throw( CutModelException) { - wxBusyCursor wait; CutModelFigure* actualCuttingModel = getCurentCuttingModel(); - + actualCuttingModel->SetVtkTransform(getModelTransform(copyimage)); - + actualCuttingModel->SetInversVtkTransform(getModelTransformInvers()); bool inside; - bool volInt, volExt; - int xx,yy,zz; + // bool volInt, volExt; // unused // JPRx + int xx,yy,zz; unsigned short* pOrg; - int ext[6]; - double spc[3]; - long int contAfter = 0; - long int contBefor = 0; - + int ext[6]; + //double spc[3]; // unused // JPRx + //long int contAfter = 0; // unused // JPRx + //long int contBefor = 0; // unused // JPRx + double value; - - copyimage->GetExtent(ext); - - for (xx=ext[0];xxIfPointInside(xx,yy,zz); if ( ((inside==true)&&(isinside==true)) || ((!inside==true)&&(!isinside)) ) @@ -292,7 +290,6 @@ void CutModelData::ExecuteUnCut(bool isinside, vtkImageData* image, vtkImageData } // for zz } // for yy } // for xx - } vtkTransform* CutModelData::getModelTransform(vtkImageData* copyimage){ @@ -300,7 +297,7 @@ vtkTransform* CutModelData::getModelTransform(vtkImageData* copyimage){ double *spc = copyimage->GetSpacing(); modeltransform->Identity(); - vtkMatrix4x4* matrix = currentmatrix->GetMatrix(); + vtkMatrix4x4* matrix = currentmatrix->GetMatrix(); vtkMatrix4x4* matrixmodel = modeltransform->GetMatrix(); matrixmodel->SetElement(0,0,matrix->GetElement(0,0)/spc[0]); matrixmodel->SetElement(1,0,matrix->GetElement(1,0)/spc[0]); @@ -316,7 +313,6 @@ vtkTransform* CutModelData::getModelTransform(vtkImageData* copyimage){ matrixmodel->SetElement(2,3,matrix->GetElement(2,3)/spc[2]); /* - double* pos = currentmatrix->GetPosition(); modeltransform->Translate(pos[0]/spc[0],pos[1]/spc[1],pos[2]/spc[2]); @@ -329,20 +325,16 @@ vtkTransform* CutModelData::getModelTransform(vtkImageData* copyimage){ //modeltransform->RotateX(orient[0]); double* orient = currentmatrix->GetOrientationWXYZ(); modeltransform->RotateWXYZ(orient[0],orient[1],orient[2],orient[3]); - */ - modeltransform->Update(); return modeltransform; - - } -void CutModelData::setTransform(vtkTransform* transform, vtkImageData* img)throw( CutModelException){ - - double *spc = img->GetSpacing(); +void CutModelData::setTransform(vtkTransform* transform, vtkImageData* img)throw( CutModelException){ + +// double *spc = img->GetSpacing(); // spc unused // JPR currentmatrix->Identity(); @@ -356,7 +348,7 @@ void CutModelData::setTransform(vtkTransform* transform, vtkImageData* img)throw currentmatrix->Scale(scal[0]/spc[0],scal[1]/spc[1],scal[2]/spc[2]); currentmatrix->Update(); */ - + _boxWidgetVolume->SetTransform(transform); /*vtkMatrix4x4* matrix = transform->GetMatrix(); @@ -374,11 +366,10 @@ void CutModelData::setTransform(vtkTransform* transform, vtkImageData* img)throw matrixcurrent->SetElement(1,3,matrix->GetElement(1,3)/spc[1]); matrixcurrent->SetElement(2,3,matrix->GetElement(2,3)/spc[2]); */ - udapteActorDirection(); getModelTransform(img); - } + vtkTransform* CutModelData::getModelTransformInvers(){ inversModel->Identity (); inversModel->Concatenate ( modeltransform );