]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
*** empty log message ***
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index 4261ef1ee6b6c15d9e272d986921fa462ecf9ae8..0c8433570f22364d0e07e1108b16f6ba24cdef6f 100644 (file)
@@ -99,12 +99,14 @@ char wxContourMainFrame::COPY = 'C';
 
                if(images.size() > 0)
                {
-                       this->setVectImages(images);
+                       _images = images;
+                       this->setVectImages();
                }
 
 }
 
-void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
+void wxContourMainFrame::setVectImages( )
+{
 
        #if defined(__GNUC__)
                std::string str_home(getenv("HOME"));
@@ -119,7 +121,7 @@ void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
        notebook = this->createNotebook();              
 
 
-       kernelManager = new KernelManagerContour( images , _datadir+"/data/" , strCreaContourDataTmp );
+       kernelManager = new KernelManagerContour( _images , _datadir+"/data/" , strCreaContourDataTmp );
 
 
        _instantPanel                           = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
@@ -166,7 +168,7 @@ void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
 
        wxContourMainFrame :: ~wxContourMainFrame()
        {
-
+               deleteAllContours();
                _pannew->Close();
                interfMainPanel::resetInstance();
                delete kernelManager;
@@ -780,11 +782,16 @@ void wxContourMainFrame::onLoad(){
                fscanf(pFile,"%s",tmp); // --CreaContour--
 
                fscanf(pFile,"%s",tmp); // Version
-               fscanf(pFile,"%s",tmp); // 1.0.1
+               fscanf(pFile,"%s",tmp); // 1.0.1 || 1.0.0
                std::string version(tmp);
 
-               openContours(pFile,false);
-               if (version!="1.0.0"){
+               if (version=="1.0.1")
+               {
+                       openContours(pFile,false);
+               }
+
+               else if (version=="1.0.0")
+               {
                        openContours(pFile,true);
                }
 //                       _theViewPanel->getSceneManager()->openFileWithContours(ff);
@@ -794,6 +801,8 @@ void wxContourMainFrame::onLoad(){
        _theViewPanel->getSceneManager()->removeSceneContours();
        changeInstant();
 }
+
+//AD: 29-05-09
 void wxContourMainFrame::onSave(){
        wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE );
        if (dialog.ShowModal() == wxID_OK)
@@ -803,6 +812,8 @@ void wxContourMainFrame::onSave(){
                saveFileWithContours( fileNameContourROI );
        }
 }
+
+//AD: 29-05-09
 void wxContourMainFrame::saveFileWithContours( std::string filename )
 {
 
@@ -817,6 +828,19 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
        lstNameThings           = kernelManager->GetLstNameThings();
        sizeLstNameThings       = lstNameThings.size(); 
        fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings );
+
+       vtkImageData *image = _images[0];
+
+       int dimRange[3];
+       image->GetDimensions(dimRange);
+
+       fprintf(pFile,"ImageDimensions %d %d %d\n", dimRange[0], dimRange[1], dimRange[2] );
+
+       double spaRange[3];
+       image->GetSpacing(spaRange);
+
+       fprintf(pFile,"ImageSpacing %f %f %f\n", spaRange[0], spaRange[1], spaRange[2] );
+
        for (i=0 ; i<sizeLstNameThings ; i++) 
        {
                kernelManager->SaveThingName( pFile, lstNameThings[i] );
@@ -835,6 +859,7 @@ void wxContourMainFrame::saveFileWithContours( std::string filename )
        fclose(pFile);
 }
 
+//AD:02-06-09: TODO: Adjust spacing and dimensions to Rois comming from images with different specifications
 void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){
        char tmp[255];
        fscanf(pFile,"%s",tmp); // NumberOfContours 
@@ -846,64 +871,105 @@ void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){
        manualContourModel *manModelContour;
        int typeView;
 
-       int i;
-       for (i=0;i<numberOfContours;i++)
+       vtkImageData *image = _images[0];
+       int imageDim[3];
+       image->GetDimensions(imageDim);
+       double imageSpac[3];
+       image->GetSpacing(imageSpac);
+
+       int tempDim[3];
+       double tempSpac[3];
+
+       fscanf(pFile,"%s",tmp); // ImageDimensions
+       fscanf(pFile,"%s",tmp); // X
+       tempDim[0] = atoi(tmp);
+       fscanf(pFile,"%s",tmp); // Y
+       tempDim[1] = atoi(tmp);
+       fscanf(pFile,"%s",tmp); // Z
+       tempDim[2] = atoi(tmp);
+
+       fscanf(pFile,"%s",tmp); // ImageSpacing
+       fscanf(pFile,"%s",tmp); // X
+       tempSpac[0] = atof(tmp);
+       fscanf(pFile,"%s",tmp); // Y
+       tempSpac[1] = atof(tmp);
+       fscanf(pFile,"%s",tmp); // Z
+       tempSpac[2] = atof(tmp);
+
+       bool compatible = true;
+
+       //Compare Spacing and Dims in X and Y (Necessary in Z?)
+       if (imageDim[0]!=tempDim[0] || imageDim[1]!=tempDim[1] || 
+               imageSpac[0]!=tempSpac[0] || imageSpac[1]!=tempSpac[1])
        {
-               instantVector.clear();
-               fscanf(pFile,"%s",tmp); // Instant
+               compatible = false;
+       }
 
-               fscanf(pFile,"%s",tmp); // 1
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 2
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 3
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 4
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 5
-               instantVector.push_back( atoi(tmp) );
-               fscanf(pFile,"%s",tmp); // 6
-               instantVector.push_back( atoi(tmp) );
+       if (compatible==true)
+       {
+               int i;
+               for (i=0;i<numberOfContours;i++)
+               {
+                       instantVector.clear();
+                       fscanf(pFile,"%s",tmp); // Instant
 
+                       fscanf(pFile,"%s",tmp); // 1
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 2
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 3
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 4
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 5
+                       instantVector.push_back( atoi(tmp) );
+                       fscanf(pFile,"%s",tmp); // 6
+                       instantVector.push_back( atoi(tmp) );
 
-               fscanf(pFile,"%s",tmp); // TypeContourModel
-               fscanf(pFile,"%s",tmp); // ##
-               typeContourModel = atoi(tmp);
 
-               manModelContour =  kernelManager->factoryManualContourModel(typeContourModel);
-               manModelContour->Open(pFile);
+                       fscanf(pFile,"%s",tmp); // TypeContourModel
+                       fscanf(pFile,"%s",tmp); // ##
+                       typeContourModel = atoi(tmp);
 
-               fscanf(pFile,"%s",tmp); // TypeView
-               fscanf(pFile,"%s",tmp); // ##
-               typeView = atoi(tmp);  
+                       manModelContour =  kernelManager->factoryManualContourModel(typeContourModel);
+                       manModelContour->Open(pFile);
 
+                       fscanf(pFile,"%s",tmp); // TypeView
+                       fscanf(pFile,"%s",tmp); // ##
+                       typeView = atoi(tmp);  
 
-//                     if (typeView==1) 
-//                     {
-//                     }
 
+       //                      if (typeView==1) 
+       //                      {
+       //                      }
 
-               std::string theName;
-               theName = kernelManager->createOutline( manModelContour, instantVector );
-               bool addedModel = theName.compare("") != 0;
-               if( addedModel )
-               {
-                       double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
-                       _theViewPanel->getSpacing(spc);                                 
-                       //Adding the manualContourControler to interface objects structure
-                       //Adding the manualViewContour to interface objects structure           
-                       //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active.
-                       _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ;
-               }       
 
-               if (staticContour==true)
-               {
-                       Instant instant(&instantVector);
-                       kernelManager->changeContourOfManager( theName , &instant );
-               }
+                       std::string theName;
+                       theName = kernelManager->createOutline( manModelContour, instantVector );
+                       bool addedModel = theName.compare("") != 0;
+                       if( addedModel )
+                       {
+                               double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default
+                               _theViewPanel->getSpacing(spc);                                 
+                               //Adding the manualContourControler to interface objects structure
+                               //Adding the manualViewContour to interface objects structure           
+                               //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active.
+                               _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ;
+                       }       
+
+                       if (staticContour==true)
+                       {
+                               Instant instant(&instantVector);
+                               kernelManager->changeContourOfManager( theName , &instant );
+                       }
 
-       }// for  numberOfContours
+               }// for  numberOfContours
+       }
 
+       else if (compatible==false)
+       {
+               wxMessageBox(_T("The actual image is not compatible with the selected Roi file"), _T("Error"), wxICON_ERROR | wxOK);
+       }
 }
 
 void wxContourMainFrame::RefreshInterface(){
@@ -1943,10 +2009,32 @@ void wxContourMainFrame::onWidthOfContour(double width){
 
        RefreshInterface();
 }
-int wxContourMainFrame::getColorWindow(){
+
+int wxContourMainFrame::getColorWindow()
+{
+       /*
+       double range[2];
+       vtkImageData * img = getImageData();
+       img->GetScalarRange(range);
+
+       std::cout<<"Val 1: "<<range[0]<<" Val 2: "<<range[1]<<std::endl;
+       
+       return (int)range[1];
+       */
        return _theViewPanel->getColorWindow();
 }
-int wxContourMainFrame::getWindowLevel(){
+
+int wxContourMainFrame::getWindowLevel()
+{
+       /*
+       double range[2];
+       vtkImageData * img = getImageData();
+       img->GetScalarRange(range);
+
+       std::cout<<"Val 1: "<<range[0]<<" Val 2: "<<range[1]<<std::endl;
+       
+       return (int)range[1];
+       */
        return _theViewPanel->getWindowLevel();
 }
 
@@ -2246,6 +2334,7 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel
        delete contourextractdata;
 }
 
+//AD: 29-05-09
 void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, 
        int typeContourGroup, bool XYZValues, bool contourImage, bool statistics)
 {
@@ -2264,7 +2353,11 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil
        
        if (statistics)
        {
-               FILE *pFile=fopen(filename.c_str(),"w+");
+               std::ostringstream name;
+               name << filename << ".xls";
+               
+
+               FILE *pFile=fopen(name.str().c_str(),"w+");
 
                int sizeZ = _theViewPanel->GetImageDataSizeZ();
 
@@ -2296,6 +2389,7 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil
        }
 }
 
+//AD: 29-05-09
 void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup)
 {
        wxBusyCursor wait;