]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
Changes with manualBaseModel. It improves the functionality with the new
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index 5596ea4a2b6c5a9c4871ebac77672f5014fe4480..41a380463ed91a7f30274c5cbc61635ffa5b6293 100644 (file)
@@ -15,7 +15,8 @@
 #include "ConceptDataWrap.h"
 #include <creaWx.h>
 
-
+#include <string>
+using namespace std;
 
 //----------------------------------------------------------------------------------------------------------------
 // Class implementation
@@ -336,12 +337,21 @@ void wxContourMainFrame::onCreateContourLine( ){
        createContour( 6 );
 }
 
+// RaC 09-09 --------------------------------------
+void wxContourMainFrame::onCreateContourPoints( ){
+    //JCP 20-10-08 Undo redo implementation
+       saveState();
+       //JCP 20-10-08 Undo redo implementation 
+       createContour( 7 );
+}
+// RaC 09-09 --------------------------------------
+
 //------------------------------------------------------------------------------------------------------------
 
 void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel )
 {
-       //Creating the manualContourModel and including in the model
-       manualContourModel * manModelContour = factoryManualContourModel(panel );
+       //Creating the manualBaseModel and including in the model
+       manualBaseModel * manModelContour = factoryManualContourModel(panel );
 
        std::vector<int> instantVector;
        _instantPanel->getInstant( instantVector );
@@ -366,8 +376,7 @@ void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel )
 void wxContourMainFrame :: createContour( int typeContour )
 {
        //Creating the manualContourModel and including in the model
-       manualContourModel * manModelContour = kernelManager->factoryManualContourModel(typeContour);
-
+       manualBaseModel * manModelContour = kernelManager->factoryManualContourModel(typeContour);
 
        std::vector<int> instantVector;
        _instantPanel->getInstant( instantVector );
@@ -389,10 +398,10 @@ void wxContourMainFrame :: createContour( int typeContour )
        }       
 
 }
-manualContourModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){
+manualBaseModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){
 
        manualContourModelBullEye *manModelContourBullEye = new manualContourModelBullEye();
-       manualContourModel *manModelContour=NULL;
+       manualBaseModel *manModelContour=NULL;
        manModelContour = manModelContourBullEye;
        if (panel!=NULL){
                int iCrown,sizeCrowns,iSector,sizeSectors;
@@ -753,7 +762,7 @@ void wxContourMainFrame::onRedo(){
 void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
 {
        std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
-       manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+       manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
        _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
 }
 
@@ -761,7 +770,7 @@ void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, st
 void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
 {
        std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
-       manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
+       manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
 
        manualPoint * refPoint1 = _refLineModel->GetManualPoint(0);
        manualPoint * refPoint2 = _refLineModel->GetManualPoint(1);
@@ -840,7 +849,7 @@ void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour )
 
        std::vector<int> instantVector;
        int typeContourModel;
-       manualContourModel *manModelContour;
+       manualBaseModel *manModelContour;
        int typeView;
 
        int i;
@@ -896,11 +905,41 @@ void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour )
 void wxContourMainFrame::onLoad()
 {
        char tmp[255];
-       wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN );
-       if (dialog.ShowModal() == wxID_OK)
+       char tmpD[255];
+       std::string fileNameContourROI = GetFileLocation();
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       if(GetFileLocation().empty())
+       {
+//------------------------------------------------------------------------------------------------------------
+               wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN );
+               if (dialog.ShowModal() == wxID_OK)
+               {
+                       fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+               }
+       }
+
+       FILE *pFile =fopen(fileNameContourROI.c_str(),"r+");
+
+
+//CMRU 03-09-09- ----------------------------------------------------------------------------------------------
+       if(pFile != NULL)
        {
-               std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
-               FILE *pFile=fopen(fileNameContourROI.c_str(),"r+");
+//------------------------------------------------------------------------------------------------------------
+        fileNameContourROI.append("data");     
+               FILE *pFileData=fopen(fileNameContourROI.c_str(),"r+");
+               if(pFileData != NULL)
+               {
+                       fscanf(pFileData,"%s",tmpD); // --CreaContour--
+                       fscanf(pFileData,"%s",tmpD); // Version
+                       fscanf(pFileData,"%s",tmpD); // 1.0.2 || 1.0.1 || 1.0.0
+                       
+                       fscanf(pFileData,"%s",tmpD); // onePixelSize
+                       fscanf(pFileData,"%s",tmpD); // #
+                       _onePixelSize = atof(tmpD);             
+                       fscanf(pFileData,"%s",tmpD); // NumberOfContours  
+                       fscanf(pFileData,"%s",tmpD); // #
+               }
 
                fscanf(pFile,"%s",tmp); // --CreaContour--
 
@@ -911,24 +950,29 @@ void wxContourMainFrame::onLoad()
                //AD:02-06-09
                if (version=="1.0.2")
                {
-                       openContours(pFile,2,false);
-                       openContours(pFile,2,true);     //Load StaticContours
+                       openContours(pFile,pFileData,2,false);
+                       openContours(pFile,pFileData,2,true);   //Load StaticContours
                }
                
                //AD:02-06-09
                else if (version=="1.0.1")
                {
-                       openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing
-                       openContours(pFile,1,true); //Load StaticContours, skips ImageDimensions and ImageSpacing
+                       openContours(pFile,pFileData,1,false); //Skips ImageDimensions and ImageSpacing
+                       openContours(pFile,pFileData,1,true); //Load StaticContours, skips ImageDimensions and ImageSpacing
                }
                
                //AD:02-06-09
                else if (version=="1.0.0")
                {
-                       openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing
+                       openContours(pFile,pFileData,1,false); //Skips ImageDimensions and ImageSpacing
                }
 
                fclose(pFile);
+
+               if(pFileData != NULL)
+               {
+                       fclose(pFileData);
+               }
        }
        _theViewPanel->getSceneManager()->removeSceneContours();
        changeInstant();
@@ -936,13 +980,28 @@ void wxContourMainFrame::onLoad()
 
 //AD: 29-05-09
 void wxContourMainFrame::onSave(){
-       wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
-       if (dialog.ShowModal() == wxID_OK)
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       if(GetFileLocation().empty())
        {
-               std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+//------------------------------------------------------------------------------------------------------------
+               wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
+               if (dialog.ShowModal() == wxID_OK)
+               {
+                       std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str());
+                       kernelManager->setCurrentFileName(fileNameContourROI);
+                       saveFileWithContours( fileNameContourROI );
+               }
+       }
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       else
+       {
+               std::cout<<"Nombre del archivo: "<<GetFileLocation()<<std::endl;                
+               std::string fileNameContourROI = GetFileLocation();
+               std::cout<<"Nombre del archivo: "<<fileNameContourROI<<std::endl;               
                kernelManager->setCurrentFileName(fileNameContourROI);
-               saveFileWithContours( fileNameContourROI );
+               saveFileWithContours( fileNameContourROI);
        }
+//------------------------------------------------------------------------------------------------------------
 }
 
 //AD: 29-05-09
@@ -950,11 +1009,26 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
 {
 
        FILE *pFile=fopen(filename.c_str(),"w+");
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       filename.append("data");
+       std::cout<<"Nombre del archivo: "<<filename<<std::endl;         
+       FILE *pFileData=fopen(filename.c_str(),"w+");
+//------------------------------------------------------------------------------------------------------------
+
        std::vector< std::string > lstNameThings;
        int i,sizeLstNameThings; 
 
        fprintf(pFile,"--CreaContour--\n");
        fprintf(pFile,"Version %s\n", "1.0.2" );
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       fprintf(pFileData,"--CreaContour--\n");
+       fprintf(pFileData,"Version %s\n", "1.0.2" );
+       fprintf(pFileData,"OnePixelSize %f\n", _onePixelSize);
+       std::cout<<"Valor de un pixel: "<<_onePixelSize<<std::endl;             
+       
+//------------------------------------------------------------------------------------------------------------
        
        vtkImageData *image = _images[0];
 
@@ -974,9 +1048,22 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
        sizeLstNameThings       = lstNameThings.size(); 
        fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings );
 
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       fprintf(pFileData,"NumberOfContours %d\n", sizeLstNameThings );
+//------------------------------------------------------------------------------------------------------------
+
        for (i=0 ; i<sizeLstNameThings ; i++) 
        {
-               kernelManager->SaveThingName( pFile, lstNameThings[i] );
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
+               double sizeInPixel = manualModel ->GetPathSize();
+               double realContourSize = sizeInPixel*_onePixelSize;
+               manualModel ->SetRealSize(realContourSize);
+//------------------------------------------------------------------------------------------------------------
+
+       //int size= kernelManager->GetLstNameThings().size();
+
+               kernelManager->SaveThingName( pFile, pFileData, lstNameThings[i] );
                _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] );
        }// for i
 
@@ -989,16 +1076,22 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
        lstNameThings           = kernelManager->GetLstNameThingsStatic();
        sizeLstNameThings       = lstNameThings.size(); 
        fprintf(pFile,"NumberOfContoursStatic %d\n", sizeLstNameThings );
+
+//CMRU 03-09-09-----------------------------------------------------------------------------------------------
+       fprintf(pFileData,"NumberOfContoursStatic %d\n", sizeLstNameThings );
+//------------------------------------------------------------------------------------------------------------
+
        for (i=0 ; i<sizeLstNameThings ; i++) 
        {
-               kernelManager->SaveThingName( pFile, lstNameThings[i] );
+               kernelManager->SaveThingName( pFile, pFileData, lstNameThings[i] );
                _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] );
        }// for i
        fclose(pFile);
+       fclose(pFileData);
 }
 
 //AD:04-06-09
-void wxContourMainFrame::openContours( FILE *pFile, int version, bool staticContour )
+void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, int version, bool staticContour )
 {
        char tmp[255];
        
@@ -1045,7 +1138,7 @@ void wxContourMainFrame::openContours( FILE *pFile, int version, bool staticCont
 
        std::vector<int> instantVector;
        int typeContourModel;
-       manualContourModel *manModelContour;
+       manualBaseModel *manModelContour;
        int typeView;
 
        if (compatible==true)
@@ -1076,6 +1169,10 @@ void wxContourMainFrame::openContours( FILE *pFile, int version, bool staticCont
 
                        manModelContour =  kernelManager->factoryManualContourModel(typeContourModel);
                        manModelContour->Open(pFile);
+                       if(pFileData != NULL)
+                       {
+                               manModelContour->OpenData(pFileData);
+                       }
 
                        fscanf(pFile,"%s",tmp); // TypeView
                        fscanf(pFile,"%s",tmp); // ##
@@ -1158,7 +1255,10 @@ void wxContourMainFrame::openContours( FILE *pFile, int version, bool staticCont
 
                        manModelContour =  kernelManager->factoryManualContourModel(typeContourModel);
                        manModelContour->Open(pFile);
-
+                       if(pFileData != NULL)
+                       {
+                               manModelContour->OpenData(pFileData);
+                       }
                        if (transform==true)
                        {
                                if (typeOfTransformation==0)
@@ -1579,7 +1679,7 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
 
        int j,sizeCtrPt = vecCtrlPointX.size();
        
-       manualContourModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
+       manualBaseModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
        manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
        if (sizeCtrPt>=3){
                for (j=0 ; j<sizeCtrPt ; j++)
@@ -1823,7 +1923,7 @@ myfile.close();
        actualInstantVector[1]=z;
 
        int j,sizeCtrPt = vecCtrlPointX.size();
-       manualContourModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
+       manualBaseModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
        manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
        if (sizeCtrPt>=3){
                for (j=0 ; j<sizeCtrPt ; j++)
@@ -2162,7 +2262,7 @@ void wxContourMainFrame::onSpreadGo(int type){
 
                int typeofcontour = 1;
                std::string theName;
-               manualContourModel* manModelContour = kernelManager->GetPoints(z, type, &vecCtrlPointX,&vecCtrlPointY,&vecCtrlPointZ, theName,typeofcontour, tempVector);
+               manualBaseModel* manModelContour = kernelManager->GetPoints(z, type, &vecCtrlPointX,&vecCtrlPointY,&vecCtrlPointZ, theName,typeofcontour, tempVector);
 
                if( manModelContour!=NULL ){
                        double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
@@ -2206,9 +2306,9 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
        
        _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
 
-       std::vector<manualContourModel*> lstManConMod;
-       std::vector<manualContourModel*> lstManConModTmp;
-       std::vector<manualContourModel*> lstManConModExp;
+       std::vector<manualBaseModel*> lstManConMod;
+       std::vector<manualBaseModel*> lstManConModTmp;
+       std::vector<manualBaseModel*> lstManConModExp;
        std::vector<double> pLstValue;
        std::vector<double> pLstValuePosX;
        std::vector<double> pLstValuePosY;
@@ -2276,8 +2376,8 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
                        ContourThing **contourthing = lstContourThings[ii];
                        lstManConMod.push_back( (*contourthing)->getModel() );
                }
-               lstManConModExp =  kernelManager->ExploseEachModel( lstManConMod );
 
+               lstManConModExp =  kernelManager->ExploseEachModel( lstManConMod );
 
                tempString.Printf(_T("%d - %d"),z, sizeLstContourThings);
                interfMainPanel::getInstance()->setRowLabelInfoPanel(z, tempString);
@@ -2298,10 +2398,11 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
 
                int tmpIntA;
 
-
-
                for( iContourGroup=0 ; iContourGroup<sizeContourGroup ; iContourGroup++ ){
                        lstManConModTmp.clear();
+
+                       
+
                        if (typeContourGroup==3) // contour separete
                        {
                                lstManConModTmp.push_back( lstManConModExp[iContourGroup]);
@@ -2319,6 +2420,7 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
                                                                                                                &pLstValuePosX,
                                                                                                                &pLstValuePosY,
                                                                                                                &pLstValuePosZ);
+
                        // Statistics of each slice.
                        _contourextractdata->Statistics( &pLstValue,
                                                                                        grayRangeMin,
@@ -2508,9 +2610,9 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil
        //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection();
        _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
 
-       std::vector<manualContourModel*> lstManConMod;
-       std::vector<manualContourModel*> lstManConModTmp;
-       std::vector<manualContourModel*> lstManConModExp;
+       std::vector<manualBaseModel*> lstManConMod;
+       std::vector<manualBaseModel*> lstManConModTmp;
+       std::vector<manualBaseModel*> lstManConModExp;
        std::vector<double> pLstValue;
        std::vector<double> pLstValuePosX;
        std::vector<double> pLstValuePosY;
@@ -2638,9 +2740,9 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value
        }
        _contourextractdata ->SetTypeOperation( typeContourGroup % 3 );
 
-       std::vector<manualContourModel*> lstManConMod;
-       std::vector<manualContourModel*> lstManConModTmp;
-       std::vector<manualContourModel*> lstManConModExp;
+       std::vector<manualBaseModel*> lstManConMod;
+       std::vector<manualBaseModel*> lstManConModTmp;
+       std::vector<manualBaseModel*> lstManConModExp;
 
        std::vector<int> tempVector;
        _instantPanel->getInstant( tempVector );
@@ -2882,8 +2984,82 @@ wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent)
        return _viewThresholdImagePanel;
 }
 
+//CMRU 17-08-09-----------------------------------------------------------------------------------------------
+int wxContourMainFrame::getType ()
+{
+       int tipo = 0;
+       std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
+
+       if(!currentSelection.empty())
+       {
+               std::string cloneName = currentSelection [0];
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
+               tipo = manualModel-> GetTypeModel();    
+               return tipo;
+       }
+}
+double wxContourMainFrame::getContourSizeInPixels()
+{
+       double contourSize = 0; 
+
+       std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();        if(!currentSelection.empty())
+       if(!currentSelection.empty())
+       {
+               std::string cloneName = currentSelection [0];
+               
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+               contourSize = manualModel-> GetPathSize();
+       }       
+       return contourSize;
+}
+manualBaseModel * wxContourMainFrame::getContour ()
+{
+       std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
+
+       if(!currentSelection.empty())
+       {
+               std::string cloneName = currentSelection [0];
+               manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
+               return manualModel; 
+       }
+       return NULL;
+}
+void wxContourMainFrame::onPrintLabel (wxString label, manualBaseModel* manualModel) 
+{
+       std::string labelAscii(label.ToAscii());
+       int pos = labelAscii.find(" ");
 
+       int j;
+       
+       for (j=0 ; pos != string::npos;j++) 
+       {
+               labelAscii.replace( pos, 1, "_" );
+               pos= labelAscii.find(" ");
+       }
 
+       manualModel -> SetLabel(labelAscii); 
+}
+void wxContourMainFrame::onInsertCalculation(manualBaseModel* manualModel)
+{
+       double sizeInPixel = manualModel ->GetPathSize();
+       double onePixelRealSize = interfMainPanel::getInstance()->GetPixelValue();;
+       double realContourSize = sizeInPixel*onePixelRealSize;
+       manualModel ->SetRealSize(realContourSize); 
+}
 
+double wxContourMainFrame::onePixelSize( double value)
+{
+       return _onePixelSize = value;   
+}
 
+std::string wxContourMainFrame::GetFileLocation()
+{
+       return _fileLocation;
+}
 
+void wxContourMainFrame::SetFileLocation(std::string newFileLocation)
+{
+       _fileLocation = newFileLocation;
+       std::cout<<"GETFILELOCATION:"<<_fileLocation<<std::endl;
+}
+//------------------------------------------------------------------------------------------------------------
\ No newline at end of file