]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
#3381 Clean Code Segmentation VTK
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index b3016751b1236497c2ca80c87f35646a5dc85885..6e93fadb4224064ba277a8404199059646aae5ef 100644 (file)
@@ -52,7 +52,7 @@ using namespace std;
        // Constructors & Destructors
        //------------------------------------------------------------------------------------------------------------
 
-wxContourMainFrame* wxContourMainFrame:: instance = NULL;
+wxContourMainFrame* wxContourMainFrame::instance=NULL;
 char wxContourMainFrame::COPY = 'C';
 
        wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,long style)
@@ -94,7 +94,6 @@ char wxContourMainFrame::COPY = 'C';
                _viewThresholdImage                     = NULL;
                _viewThresholdImagePanel        = NULL;
                _viewColorLayerImagePanel       = NULL;
-
                _frameShowResultImages          = NULL;
        }
 
@@ -162,28 +161,29 @@ void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
 
        wxContourMainFrame* wxContourMainFrame :: getInstance(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector<vtkImageData*> images, long style,std::string datadir )
        {
-               if(instance == NULL){
-                       instance = new wxContourMainFrame(parent, id, title, pos, size, images, style,datadir);
+               if(instance == NULL)
+               {
+                       instance=new wxContourMainFrame(parent, id, title, pos, size, images, style,datadir);
                }
                return instance;
        }
 
-       std::vector<vtkImageData*> wxContourMainFrame ::getVectImages()
+       std::vector<vtkImageData*> wxContourMainFrame::getVectImages()
        {
                return kernelManager->getVectImages();
        }
 
-       wxContourMainFrame* wxContourMainFrame :: getInstance()
+       wxContourMainFrame* wxContourMainFrame::getInstance()
        {
                return instance;
        }
 
-       void wxContourMainFrame :: resetInstance()
+       void wxContourMainFrame::resetInstance()
        {
                instance->Destroy();
        }
 
-       wxContourMainFrame :: ~wxContourMainFrame()
+       wxContourMainFrame::~wxContourMainFrame()
        {
                delete _contourextractdata;
                deleteAllContours();
@@ -212,7 +212,7 @@ void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
        // Creational and initialization methods using WxAui
        //------------------------------------------------------------------------------------------------------------
        //
-       wxAuiNotebook * wxContourMainFrame :: createNotebook()
+       wxAuiNotebook * wxContourMainFrame::createNotebook()
        {
                wxSize client_size = GetClientSize();
                wxAuiNotebook* noteBook = new wxAuiNotebook(this, -1, wxPoint(client_size.x, client_size.y), wxSize(430,200), m_notebook_style);
@@ -224,7 +224,7 @@ void wxContourMainFrame::setVectImages(std::vector<vtkImageData*> imgs)
        //------------------------------------------------------------------------------------------------------------
        // Creational and initialization methods
        //------------------------------------------------------------------------------------------------------------
-       bool wxContourMainFrame :: configurePanels( )
+       bool wxContourMainFrame::configurePanels( )
        {
                bool configured = _theViewPanel!=NULL;
 
@@ -852,7 +852,7 @@ void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName,
                mp->SetPointX( vecOut[0] );
                mp->SetPointY( vecOut[1] );
                mp->SetPointZ( vecOut[2] );
-       }
+       } // for i
 
        _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
 }
@@ -1174,12 +1174,14 @@ void wxContourMainFrame::readDimSpc(FILE *pFile, bool interactiveOption)
                {
                        wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(460,360));
                        wxSizer* buttonsSizer = dial->CreateSeparatedButtonSizer(wxOK|wxCANCEL);
-                       wxBoxSizer *dialSizer = new wxBoxSizer(wxVERTICAL);
+//                     wxBoxSizer              *dialSizer = new wxBoxSizer(wxVERTICAL);
+                       wxFlexGridSizer *dialSizer = new wxFlexGridSizer(1);
 
-                       wxString lstOptOperation[2];
-                       lstOptOperation[0]=_T("By Dimension");
-                       lstOptOperation[1]=_T("By Spacing");
-                       wxRadioBox * radioOpts = new wxRadioBox(dial, -1, _T("Type of Transformation"), wxDefaultPosition, wxSize(270,45), 2 , lstOptOperation,  2, wxRA_SPECIFY_COLS);
+                       wxString lstOptOperation[3];
+                       lstOptOperation[0]=_T("By Dimension (XY)");
+                       lstOptOperation[1]=_T("By Spacing   (XY)");
+                       lstOptOperation[2]=_T("By Spacing   (XYZ)");
+                       wxRadioBox * radioOpts = new wxRadioBox(dial, -1, _T("Type of Transformation"), wxDefaultPosition, wxSize(370,200), 3 , lstOptOperation,  3, wxRA_SPECIFY_ROWS);
 
                        dialSizer->Add( new wxStaticText(dial,-1,_T("The image resolution is not compatible with the "))  , 0, wxGROW );
                        dialSizer->Add( new wxStaticText(dial,-1,_T("selected Roi file. Do you want to tranform it?"))  , 0, wxGROW );
@@ -1191,7 +1193,7 @@ void wxContourMainFrame::readDimSpc(FILE *pFile, bool interactiveOption)
                        dial->Layout();
                        dial->ShowModal();
 
-                       int _tmpReadFileTypeOfTransformation = -1;
+                       _tmpReadFileTypeOfTransformation = -1;
 //EED                  bool transform = false;
 
                        if (dial->GetReturnCode() == wxID_OK)
@@ -1209,7 +1211,7 @@ void wxContourMainFrame::readDimSpc(FILE *pFile, bool interactiveOption)
 //AD:04-06-09
 void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, bool staticContour )
 {
-
+printf ("EED wxContourMainFrame::openContours Start \n");
        char tmp[255];
 
        vtkImageData    *image = _images[0];
@@ -1327,14 +1329,22 @@ void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, bool static
                 //nothing to do..
             } else if (_tmpReadFileTypeOfTransformation==0){
                 double transX, transY;
-                transX = (double) imageDim[0]/_tmpReadFileImageDim[0];
-                transY = (double) imageDim[1]/_tmpReadFileImageDim[1];
-                manModelContour->Transform_Ax_Plus_B(transX,0,transY,0);
+                transX = (double) imageDim[0]/_tmpReadFileImageDim[0];                    // X
+                transY = (double) imageDim[1]/_tmpReadFileImageDim[1];                    // Y
+                manModelContour->Transform_Ax_Plus_B(transX,0,transY,0);                
             } else if (_tmpReadFileTypeOfTransformation==1) {
                 double transX, transY;
-                transX = (double) _tmpReadFileImageSpac[0]/imageDim[0];
-                transY = (double) _tmpReadFileImageSpac[1]/imageDim[1];
+                transX = (double) _tmpReadFileImageSpac[0]/imageSpac[0];                  // X
+                transY = (double) _tmpReadFileImageSpac[1]/imageSpac[1];                  // Y
+                manModelContour->Transform_Ax_Plus_B(transX,0,transY,0); 
+            } else if (_tmpReadFileTypeOfTransformation==2) {  // with Z include
+                double transX, transY;
+                transX = (double) _tmpReadFileImageSpac[0]/imageSpac[0];                   // X
+                transY = (double) _tmpReadFileImageSpac[1]/imageSpac[1];                   // Y 
+                instantVector[1]=instantVector[1]*_tmpReadFileImageSpac[2]/imageSpac[2];   // Z
                 manModelContour->Transform_Ax_Plus_B(transX,0,transY,0);
+            }else {
+                   printf ("EED Warnning! wxContourMainFrame::openContours _tmpReadFileTypeOfTransformation not set. \n");
             }
 
                        fscanf(pFile,"%s",tmp); // TypeView
@@ -1363,6 +1373,8 @@ void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, bool static
 
 /*     }    */
 
+printf ("EED wxContourMainFrame::openContours END \n");
+
 }
 
 void wxContourMainFrame::RefreshInterface()
@@ -1397,473 +1409,321 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d
        int typeofcontour = 1;
        //Image Data
        vtkImageData    *imagedata      = getImageData();
-
        //Tipo de pixeles a utilizar internamente en ITK
        typedef   float  InternalPixelType;
        const     unsigned int    Dimension = 2;
        typedef itk::Image< InternalPixelType, Dimension >  InternalImageType;
-
        //Tipo de pixeles de salida 1
        typedef unsigned char OutputPixelType;
        typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
-
        //Tipo de pixeles de salida 2
        typedef unsigned short OutputPixelType2;
        typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2;
-
        //DefiniciÛn del thresholder
        typedef itk::BinaryThresholdImageFilter<
                                                        InternalImageType,
                                                        OutputImageType    >    ThresholdingFilterType;
-
        //DefiniciÛn del primer filtro de conversiÛn de pixeles
        typedef itk::CastImageFilter<
                                OutputImageType, OutputImageType2 >  CastFilterType;
-
        //DefiniciÛn del segundo tipo de conversiÛn de pixeles
        typedef itk::CastImageFilter<
                                OutputImageType2, InternalImageType >  CastFilterType2;
-
        //Tercer tipo de conversiÛn
        typedef itk::RescaleIntensityImageFilter<
                                                                InternalImageType,
                                                                OutputImageType >   CastFilterType3;
-
        //Cuarto tipo de conversiÛn
        typedef itk::RescaleIntensityImageFilter<
                                                                OutputImageType,
                                                                OutputImageType >   CastFilterType4;
-
        ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New();
-
        thresholder->SetLowerThreshold( 0.0 );
        thresholder->SetUpperThreshold( 128 );
-
        thresholder->SetOutsideValue(  255  );
        thresholder->SetInsideValue(  0 );
-
        //DefinciÛn de conexiÛnes entre VTK e ITK y el writer
        typedef itk::VTKImageToImageFilter<OutputImageType2> ConnectorType;
        typedef itk::ImageToVTKImageFilter<OutputImageType> ConnectorType2;
 //EED10JUIN2011        typedef  itk::ImageFileWriter<  OutputImageType  > WriterType;
-
-       ConnectorType::Pointer connector= ConnectorType::New();
-       ConnectorType2::Pointer connector2= ConnectorType2::New();
-
-
-       CastFilterType::Pointer filter=CastFilterType::New();
-       CastFilterType2::Pointer filter2=CastFilterType2::New();
-
+       ConnectorType::Pointer connector        = ConnectorType::New();
+       ConnectorType2::Pointer connector2      = ConnectorType2::New();
+       CastFilterType::Pointer filter   = CastFilterType::New();
+       CastFilterType2::Pointer filter2 = CastFilterType2::New();
        connector->SetInput( imagedata );
        filter2->SetInput(connector->GetOutput());
-
        typedef   itk::CurvatureAnisotropicDiffusionImageFilter<
                                                                InternalImageType,
                                                                InternalImageType >  SmoothingFilterType;
-
        SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New();
-
        typedef   itk::GradientMagnitudeRecursiveGaussianImageFilter<
                                                                InternalImageType,
                                                                InternalImageType >  GradientFilterType;
-
        typedef   itk::SigmoidImageFilter<
                                                                InternalImageType,
                                                                InternalImageType >  SigmoidFilterType;
-
        GradientFilterType::Pointer  gradientMagnitude = GradientFilterType::New();
-
        SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New();
-
        sigmoid->SetOutputMinimum(  0.0  );
        sigmoid->SetOutputMaximum(  255.0  );
-
-
        typedef  itk::FastMarchingImageFilter<
                                                                InternalImageType,
                                                                InternalImageType >    FastMarchingFilterType;
-
-
        FastMarchingFilterType::Pointer  fastMarching = FastMarchingFilterType::New();
-       
-printf("EED wxContourMainFrame::SegmentationOneSliceITK  Skypping this code.  Not compiling   GeodesicActiveContourLevelSetImageFilter     in fedora 17 with ITK 3.20.1 \n ");
-/*EED 17 sept 2010
- > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > -   Not compiling   GeodesicActiveContourLevelSetImageFilter     in fedora 17 with ITK 3.20.1
        typedef  itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType,
                                        InternalImageType >    GeodesicActiveContourFilterType;
        GeodesicActiveContourFilterType::Pointer geodesicActiveContour =
                                                                                GeodesicActiveContourFilterType::New();
-
        typedef  itk::ZeroCrossingImageFilter<
                                                                InternalImageType,
                                                                InternalImageType >    ZeroCrossingFilterType;
        ZeroCrossingFilterType::Pointer zeroCrossing =
                                                        ZeroCrossingFilterType::New();
-
        const double propagationScaling = atof( crea::wx2std(prop).c_str() );
-
        geodesicActiveContour->SetPropagationScaling( propagationScaling );
        geodesicActiveContour->SetCurvatureScaling( 1.0 );
        geodesicActiveContour->SetAdvectionScaling( 1.0 );
-
        geodesicActiveContour->SetMaximumRMSError( 0.02 );
        int it=atoi(  crea::wx2std(iter).c_str() );
        geodesicActiveContour->SetNumberOfIterations( it );
-
        smoothing->SetInput( filter2->GetOutput() );
        gradientMagnitude->SetInput( smoothing->GetOutput() );
        sigmoid->SetInput( gradientMagnitude->GetOutput() );
        fastMarching->SetInput( sigmoid->GetOutput() );
        geodesicActiveContour->SetInput( fastMarching->GetOutput() );
        geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() );
-
        zeroCrossing->SetInput( geodesicActiveContour->GetOutput() );
        //thresholder->SetInput( zeroCrossing->GetOutput() );
        thresholder->SetInput( geodesicActiveContour->GetOutput() );
        connector2->SetInput( thresholder->GetOutput()  );
-< - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - < - 
-*/
-       
-       
-       
-
        smoothing->SetTimeStep( 0.125 );
        smoothing->SetNumberOfIterations(  5 );
        smoothing->SetConductanceParameter( 9.0 );
-
-
-       const double sigma = atof(  crea::wx2std(sigm).c_str() );
+       const double sigma      = atof(  crea::wx2std(sigm).c_str() );
        gradientMagnitude->SetSigma(  sigma  );
-
-       const double alpha =  atof(  crea::wx2std(alf).c_str() );
-       const double beta  =  atof(  crea::wx2std(bet).c_str() );
-
+       const double alpha      =  atof(  crea::wx2std(alf).c_str() );
+       const double beta       =  atof(  crea::wx2std(bet).c_str() );
        sigmoid->SetAlpha( alpha );
        sigmoid->SetBeta(  beta  );
-
        typedef FastMarchingFilterType::NodeContainer  NodeContainer;
        typedef FastMarchingFilterType::NodeType       NodeType;
-
        NodeContainer::Pointer seeds = NodeContainer::New();
-
        InternalImageType::IndexType  seedPosition;
-       seedPosition[0] = x;
-       seedPosition[1] = y;
-
+       seedPosition[0]         = x;
+       seedPosition[1]         = y;
        const double initialDistance = atof( crea::wx2std(distanc).c_str() );
-
        NodeType node;
-
        const double seedValue = - initialDistance;
-
        node.SetValue( seedValue );
        node.SetIndex( seedPosition );
-
        seeds->Initialize();
        seeds->InsertElement( 0, node );
-
        fastMarching->SetTrialPoints( seeds );
-
        fastMarching->SetSpeedConstant( 1.0 );
-
-       fastMarching->SetOutputSize(
-                       connector->GetOutput()->GetBufferedRegion().GetSize() );
-
+       fastMarching->SetOutputSize( connector->GetOutput()->GetBufferedRegion().GetSize() );
        fastMarching->SetStoppingValue( 800 );
        try
     {
-
-       connector2->Update();
-       vtkImageData *idata = connector2->GetOutput();
-
-       vtkMarchingContourFilter* cntVTK = vtkMarchingContourFilter::New( );
-
-       cntVTK->SetNumberOfContours( 1 );
-       cntVTK->SetValue( 0, 255 );
+//             connector2->Update();
+               vtkImageData *idata = NULL;
+               idata                           = connector2->GetOutput();
+               vtkMarchingContourFilter* cntVTK = vtkMarchingContourFilter::New( );
+               cntVTK->SetNumberOfContours( 1 );
+               cntVTK->SetValue( 0, 255 );
 //EED 2017-01-01 Migration VTK7
 #if VTK_MAJOR_VERSION <= 5
-       cntVTK->SetInput( idata );
-       cntVTK->Update( );
-       cntVTK->UpdateInformation();
+               cntVTK->SetInput( idata );
+               cntVTK->Update( );
+               cntVTK->UpdateInformation();
 #else
-       cntVTK->SetInputData( idata );
+               cntVTK->SetInputData( idata );
 #endif
-
-       vtkCleanPolyData* cpd = vtkCleanPolyData::New( );
-
+               vtkCleanPolyData* cpd = vtkCleanPolyData::New( );
 //EED 2017-01-01 Migration VTK7
 #if VTK_MAJOR_VERSION <= 5
-       cpd->SetInput( cntVTK->GetOutput( ) );
-       cpd->Update( );
-       cpd->UpdateInformation();
+               cpd->SetInput( cntVTK->GetOutput( ) );
+               cpd->Update( );
+               cpd->UpdateInformation();
 #else
-       cpd->SetInputData( cntVTK->GetOutput( ) );
+               cpd->SetInputData( cntVTK->GetOutput( ) );
 #endif
-
-
-       vtkPolyDataConnectivityFilter* conn = vtkPolyDataConnectivityFilter::New( );
-       conn->SetExtractionModeToLargestRegion( );
+               vtkPolyDataConnectivityFilter* conn = vtkPolyDataConnectivityFilter::New( );
+               conn->SetExtractionModeToLargestRegion( );
 //EED 2017-01-01 Migration VTK7
 #if VTK_MAJOR_VERSION <= 5
-       conn->SetInput( cpd->GetOutput( ) );
-       conn->Update( );
-       conn->UpdateInformation();
+               conn->SetInput( cpd->GetOutput( ) );
+               conn->Update( );
+               conn->UpdateInformation();
 #else
-       conn->SetInputData( cpd->GetOutput( ) );
+               conn->SetInputData( cpd->GetOutput( ) );
 #endif
-
-
-       vtkStripper* vtkstripper = vtkStripper::New( );
-
+               vtkStripper* vtkstripper = vtkStripper::New( );
 //EED 2017-01-01 Migration VTK7
 #if VTK_MAJOR_VERSION <= 5
-       vtkstripper->SetInput( conn->GetOutput() );
-       vtkstripper->Update();
-       vtkstripper->UpdateInformation();
+               vtkstripper->SetInput( conn->GetOutput() );
+               vtkstripper->Update();
+               vtkstripper->UpdateInformation();
 #else
-       vtkstripper->SetInputData( conn->GetOutput() );
-       cntVTK->Update();
+               vtkstripper->SetInputData( conn->GetOutput() );
+               cntVTK->Update();
 #endif
-
-       vtkPolyData* polyDataResult =  cntVTK->GetOutput();
-       //std::cout<<"Points "<<polyDataResult->GetNumberOfPoints()<<std::endl;
+               vtkPolyData* polyDataResult =  cntVTK->GetOutput();
+               //std::cout<<"Points "<<polyDataResult->GetNumberOfPoints()<<std::endl;
 
 //EED 2017-01-01 Migration VTK7
 #if VTK_MAJOR_VERSION <= 5
-       polyDataResult->Update( );
-       polyDataResult->UpdateInformation();
+               polyDataResult->Update( );
+               polyDataResult->UpdateInformation();
 #else
        // ..
 #endif
-
-       //EED
-               /*
-       ofstream myfile;
-       myfile.open ("C:/Creatis/example.txt");
-       myfile << "\n";
-       polyDataResult->Print(myfile);
-       myfile << "-------------------------------------\n";
-       polyDataResult->GetLines()->Print(myfile);
-       myfile.close();*/
-
-       cntVTK          -> Delete();
-       cpd                     -> Delete();
-       conn            -> Delete();
-
-
-       //--Calculating control points
-
-       std::vector<double> vecX;
-       std::vector<double> vecY;
-       std::vector<double> vecXo;
-       std::vector<double> vecYo;
-       std::vector<double>::iterator vecXoi;
-       std::vector<double>::iterator vecYoi;
-       std::vector<double> vecZ;
-
-       std::vector<double> vecCtrlPointX;
-       std::vector<double> vecCtrlPointY;
-       std::vector<double> vecCtrlPointZ;
-
-
-       double *p;
-       double xAct=0;
-       double yAct=0;
-       int ii,size=polyDataResult->GetNumberOfPoints();
-       ofstream myfile;
-       myfile.open ("C:/Creatis/example2.txt");
-
-       size=polyDataResult->GetNumberOfPoints();
-       for (ii=0;ii<size;ii++)
-       {
-               if(ii==0)
-               {
-                       xAct=x;
-                       yAct=y;
-               }
-               p       = polyDataResult->GetPoint(ii);
-               double x=p[0];
-               double y=p[1];
-               /*if(fabs(yAct-y)>20)
+               cntVTK          -> Delete();
+               cpd                     -> Delete();
+               conn            -> Delete();
+               //--Calculating control points
+               std::vector<double> vecX;
+               std::vector<double> vecY;
+               std::vector<double> vecXo;
+               std::vector<double> vecYo;
+               std::vector<double>::iterator vecXoi;
+               std::vector<double>::iterator vecYoi;
+               std::vector<double> vecZ;
+               std::vector<double> vecCtrlPointX;
+               std::vector<double> vecCtrlPointY;
+               std::vector<double> vecCtrlPointZ;
+               double *p;
+               double xAct=0;
+               double yAct=0;
+               int ii,size=polyDataResult->GetNumberOfPoints();
+               ofstream myfile;
+               myfile.open ("C:/Creatis/example2.txt");
+               size=polyDataResult->GetNumberOfPoints();
+               for (ii=0;ii<size;ii++)
                {
-                       if((xAct-x)>1 || (xAct-x)<-1)
+                       if(ii==0)
                        {
-                       vecX.push_back( p[0] );
-                       vecY.push_back( p[1] );
-                       myfile <<p[0]<<","<<p[1]<<"\n";
-                       std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
-               std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
-               std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
-                       vecZ.push_back( 900 );
-                       xAct=x;
-                       yAct=y;
+                               xAct=x;
+                               yAct=y;
                        }
-                       else
+                       p       = polyDataResult->GetPoint(ii);
+                       double x=p[0];
+                       double y=p[1];
+//                     if(fabs(yAct-y)>20)
+//                     {
+//                             if((xAct-x)>1 || (xAct-x)<-1)
+//                             {
+//                                     vecX.push_back( p[0] );
+//                                     vecY.push_back( p[1] );
+//                                     myfile <<p[0]<<","<<p[1]<<"\n";
+//                                     std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
+//                                     std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
+//                                     std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
+//                                     vecZ.push_back( 900 );
+//                                     xAct=x;
+//                                     yAct=y;
+//                             } else {
+//                                     vecXo.push_back(p[0]);
+//                                     vecYo.push_back(p[1]);
+//                             }
+//                     } else
+
+                       if(fabs(xAct-x)>11)
                        {
                                vecXo.push_back(p[0]);
                                vecYo.push_back(p[1]);
-                       }
-
-               }
-               else*/ if(fabs(xAct-x)>11)
-               {
-                       vecXo.push_back(p[0]);
-                       vecYo.push_back(p[1]);
-               } else {
-                       vecX.push_back( p[0] );
-                       myfile <<p[0]<<","<<p[1]<<"\n";
-                       //std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
-                       //std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
-                       //std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
-                       vecY.push_back( p[1] );
+                       } else {
+                               vecX.push_back( p[0] );
+                               myfile <<p[0]<<","<<p[1]<<"\n";
+                               //std::cout<<" x Anterior "<<xAct<<" x actual "<<x<<std::endl;
+                               //std::cout<<" y Anterior "<<yAct<<" y actual "<<y<<std::endl;
+                               //std::cout<<" x "<<p[0]<<" y "<<p[1]<<std::endl;
+                               vecY.push_back( p[1] );
 //EED 2017-12-16
-                       vecZ.push_back( -900 );
-                       xAct = x;
-                       yAct = y;
-               } // if xAct
-
+                               vecZ.push_back( -900 );
+                               xAct = x;
+                               yAct = y;
+                       } // if xAct
 
-       }
 
-       while(!vecXo.empty())
-       {
-               vecX.push_back(vecXo.back());
-               //std::cout<<" x Siguiente "<<vecXo.back();
-               vecXo.pop_back();
-//EED 2017-12-16
-               vecZ.push_back( -900 );
-       }
-       while(!vecYo.empty())
-       {
-               vecY.push_back(vecYo.back());
-                       vecYo.pop_back();
-       }
-       myfile.close();
+               } // for
 
-       /*for(int l=0;l<vecX.size();l++)
-       {
-               if(l==0)
+               while(!vecXo.empty())
                {
-            vecXo.push_back(p[0]);
-                       vecYo.push_back(p[1]);
+                       vecX.push_back(vecXo.back());
+                       //std::cout<<" x Siguiente "<<vecXo.back();
+                       vecXo.pop_back();
+       //EED 2017-12-16
+                       vecZ.push_back( -900 );
                }
-               else
+               while(!vecYo.empty())
                {
-                       if(vecXoi[l-1]==)
-                       {
-                       }
+                       vecY.push_back(vecYo.back());
+                               vecYo.pop_back();
                }
+               myfile.close();
+
+//             for(int l=0;l<vecX.size();l++)
+//             {
+//                     if(l==0)
+//                     {
+//               vecXo.push_back(p[0]);
+//                             vecYo.push_back(p[1]);
+//                     } else {
+//                             if(vecXoi[l-1]==)
+//                             {
+//                             }
+//                     } // if
+//             } // for
 
-       }*/
-
-       ExtractControlPoints2D *extractcontrolpoints2d = new ExtractControlPoints2D();
-
-       extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ );
+               ExtractControlPoints2D *extractcontrolpoints2d = new ExtractControlPoints2D();
+               extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ );
 
-       int method=2;
-       if (method==0){
-               extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
-       }
-       else if (method==1){
-               extractcontrolpoints2d->GetControlPoints(  &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
-       }
-       else if (method==2){
-               extractcontrolpoints2d->SetSamplingControlPoints( 15 );
-               extractcontrolpoints2d->GetSamplingControlPoints(  &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
-       }
-       //--Adding contour to the system
+               int method=2;
+               if (method==0)
+               {
+                       extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
+               } else if (method==1){
+                       extractcontrolpoints2d->GetControlPoints(  &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
+               } else if (method==2){
+                       extractcontrolpoints2d->SetSamplingControlPoints( 15 );
+                       extractcontrolpoints2d->GetSamplingControlPoints(  &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
+               }
+               //--Adding contour to the system
 
-       std::vector<int> actualInstantVector;
-       _instantPanel->getInstant( actualInstantVector );
-       actualInstantVector[1]=z;
+               std::vector<int> actualInstantVector;
+               _instantPanel->getInstant( actualInstantVector );
+               actualInstantVector[1]=z;
 
-       int j,sizeCtrPt = vecCtrlPointX.size();
+               int j,sizeCtrPt = vecCtrlPointX.size();
 
-       manualBaseModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
-       manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
-       if (sizeCtrPt>=3){
-               for (j=0 ; j<sizeCtrPt ; j++)
-               {
-                       manModelContour->AddPoint( vecCtrlPointX[j] , vecCtrlPointY[j] , vecCtrlPointZ[j]  );
-               } // for
-               std::string theName;
-               //theName = _modelManager->createOutline( manModelContour, actualInstantVector );
-               theName = kernelManager->createOutline( manModelContour, actualInstantVector );
-               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->configureViewControlTo(theName, manModelContour, spc, typeofcontour);
-                       //_theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc, typeofcontour ) ;
-               }       // if addedModel
-       } // if sizeCtrPt
+               manualBaseModel *manModelContour =  kernelManager->factoryManualContourModel( typeofcontour );
+               manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 );
+               if (sizeCtrPt>=3){
+                       for (j=0 ; j<sizeCtrPt ; j++)
+                       {
+                               manModelContour->AddPoint( vecCtrlPointX[j] , vecCtrlPointY[j] , vecCtrlPointZ[j]  );
+                       } // for
+                       std::string theName;
+                       //theName = _modelManager->createOutline( manModelContour, actualInstantVector );
+                       theName = kernelManager->createOutline( manModelContour, actualInstantVector );
+                       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->configureViewControlTo(theName, manModelContour, spc, typeofcontour);
+                               //_theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc, typeofcontour ) ;
+                       }       // if addedModel
+               } // if sizeCtrPt
 
+    }   catch( itk::ExceptionObject & excep ) {
+               std::cerr << "Exception caught !" << std::endl;
+               std::cerr << excep << std::endl;
+    } // try
 
-/*
-//EED10JUIN2011
-                WriterType::Pointer writer = WriterType::New();
-         CastFilterType3::Pointer caster = CastFilterType3::New();
-
-                caster->SetInput( gradientMagnitude->GetOutput() );
-                writer->SetInput( caster->GetOutput() );
-                writer->SetFileName("Gradient Magnitude.png");
-                caster->SetOutputMinimum(   0 );
-                caster->SetOutputMaximum( 255 );
-                writer->Update();
-
-                CastFilterType3::Pointer caster2 = CastFilterType3::New();
-                WriterType::Pointer writer2 = WriterType::New();
-
-                caster2->SetInput( sigmoid->GetOutput() );
-                writer2->SetInput( caster2->GetOutput() );
-                writer2->SetFileName("Sigmoid.png");
-                caster2->SetOutputMinimum(   0 );
-                caster2->SetOutputMaximum( 255 );
-                writer2->Update();
-
-                CastFilterType3::Pointer caster3 = CastFilterType3::New();
-                WriterType::Pointer writer3 = WriterType::New();
-
-                caster3->SetInput( fastMarching->GetOutput() );
-                writer3->SetInput( caster3->GetOutput() );
-                writer3->SetFileName("FastMarching.bmp");
-                caster3->SetOutputMinimum(   0 );
-                caster3->SetOutputMaximum( 255 );
-                writer3->Update();
-
-                CastFilterType3::Pointer caster4 = CastFilterType3::New();
-                WriterType::Pointer writer4 = WriterType::New();
-
-                caster4->SetInput( geodesicActiveContour->GetOutput() );
-                writer4->SetInput( caster4->GetOutput() );
-                writer4->SetFileName("GeodesicActiveContour.png");
-                caster4->SetOutputMinimum(   0 );
-                caster4->SetOutputMaximum( 255 );
-                writer4->Update();
-
-                CastFilterType3::Pointer caster5 = CastFilterType3::New();
-                WriterType::Pointer writer5 = WriterType::New();
-
-                caster5->SetInput( zeroCrossing->GetOutput() );
-                writer5->SetInput( caster5->GetOutput() );
-                writer5->SetFileName("ZeroCrossing.bmp");
-                caster5->SetOutputMinimum(   0 );
-                caster5->SetOutputMaximum( 255 );
-                writer5->Update();
-*/
-    }
-  catch( itk::ExceptionObject & excep )
-    {
-    std::cerr << "Exception caught !" << std::endl;
-    std::cerr << excep << std::endl;
-    }
 }
 
 void wxContourMainFrame::onSegmentationOneSlice(int isovalue,int sampling,int method){
@@ -1884,8 +1744,8 @@ void wxContourMainFrame::onSegmentationOneSlice(int isovalue,int sampling,int me
 void wxContourMainFrame::SegmentationOneSlice( int x, int y, int z, int isovalue, int sampling, int method )
 {
 
-printf("EED wxContourMainFrame::SegmentationOneSlice Start=%d  %d\n",sampling,method );
-printf("EED wxContourMainFrame::SegmentationOneSlice %d %d %d  \n",x,y,z );
+//printf("EED wxContourMainFrame::SegmentationOneSlice Start=%d  %d\n",sampling,method );
+//printf("EED wxContourMainFrame::SegmentationOneSlice %d %d %d  \n",x,y,z );
 
        int typeofcontour = 1;
        //--Extracting Contour
@@ -2034,39 +1894,32 @@ myfile.close();
        std::vector<double> vecCtrlPointY;
        std::vector<double> vecCtrlPointZ;
 
-printf("EED wxContourMainFrame::SegmentationOneSlice GetNumberOfLines=%d \n",polyDataResult->GetNumberOfLines() );
-
-int numberOfPointsInCell;
-int numberOfcells=polyDataResult->GetNumberOfCells();
-for (int jj=0; jj<numberOfcells ; jj++)
-{
-       vtkCell* vtkcell = polyDataResult->GetCell( jj );
-       numberOfPointsInCell=vtkcell->GetNumberOfPoints();
-       printf("EED wxContourMainFrame::SegmentationOneSlice cell=%d  points=%d \n",jj,numberOfPointsInCell );
-}// for jj
-
-printf("EED wxContourMainFrame::SegmentationOneSlice PrintSelf \n");
-
-polyDataResult->PrintSelf( std::cout, vtkIndent(0) );
+//printf("EED wxContourMainFrame::SegmentationOneSlice GetNumberOfLines=%d \n",polyDataResult->GetNumberOfLines() );
+//int numberOfPointsInCell;
+//int numberOfcells=polyDataResult->GetNumberOfCells();
+//for (int jj=0; jj<numberOfcells ; jj++)
+//{
+//     vtkCell* vtkcell = polyDataResult->GetCell( jj );
+//     numberOfPointsInCell=vtkcell->GetNumberOfPoints();
+//     printf("EED wxContourMainFrame::SegmentationOneSlice cell=%d  points=%d \n",jj,numberOfPointsInCell );
+//}// for jj
+// printf("EED wxContourMainFrame::SegmentationOneSlice PrintSelf \n");
+// polyDataResult->PrintSelf( std::cout, vtkIndent(0) );
 
 
        if (polyDataResult->GetNumberOfCells()>0)
        {
                double *p;
-       printf("EED wxContourMainFrame::SegmentationOneSlice A \n");
                vtkCell* vtkcell = polyDataResult->GetCell( 0 );
-       printf("EED wxContourMainFrame::SegmentationOneSlice B \n");
        //      int ii,size=polyDataResult->GetNumberOfPoints();
                int ii,size=vtkcell->GetNumberOfPoints();
-       printf("EED wxContourMainFrame::SegmentationOneSlice C \n");
                int id;
                for (ii=0;ii<size;ii++)
                {
        //              id      = polyDataResult->GetLines()->GetData()->GetValue(ii);
        //              p       = polyDataResult->GetPoint(id);
                        p       = vtkcell->GetPoints()->GetPoint(ii);
-
-       printf("EED wxContourMainFrame::SegmentationOneSlice (%d) id=%d  px=%f py=%f\n",ii,id, p[0],p[1]);
+//     printf("EED wxContourMainFrame::SegmentationOneSlice (%d) id=%d  px=%f py=%f\n",ii,id, p[0],p[1]);
        //              double x=p[0];
        //              double y=p[1];
                        vecX.push_back( p[0] );
@@ -2075,10 +1928,8 @@ polyDataResult->PrintSelf( std::cout, vtkIndent(0) );
                        vecZ.push_back( -900 );
        //                      vecZ.push_back( p[2] );
                }
-
                ExtractControlPoints2D *extractcontrolpoints2d = new ExtractControlPoints2D();
                extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ );
-
        //PROOFS
                /*if (methodRadiobox->GetSelection()==0){
                        extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ );
@@ -2132,8 +1983,7 @@ polyDataResult->PrintSelf( std::cout, vtkIndent(0) );
                        }       // if addedModel
                } // if sizeCtrPt
        } // if NumberOfCells > 0
-
-printf("EED wxContourMainFrame::SegmentationOneSlice  End\n");
+//printf("EED wxContourMainFrame::SegmentationOneSlice  End\n");
 }
 
 int wxContourMainFrame::GetImageDataSizeZ()
@@ -3238,7 +3088,9 @@ void wxContourMainFrame::onSnakePressed(){
 
 }
 
-void wxContourMainFrame::saveFileWithContoursAutomatique(){
+void wxContourMainFrame::saveFileWithContoursAutomatique()
+{
+printf("EED wxContourMainFrame::saveFileWithContoursAutomatique \n");
        std::string filename = kernelManager->getCurrentFileName();
        if(filename.compare("")!=0){
                saveFileWithContours(filename);
@@ -3246,7 +3098,8 @@ void wxContourMainFrame::saveFileWithContoursAutomatique(){
                onSave();
        }
 }
-void wxContourMainFrame::ShowToolsPanel(bool show){
+void wxContourMainFrame::ShowToolsPanel(bool show)
+{
        _pannew->Show(show);
 }
 
@@ -3326,6 +3179,18 @@ wxPanel *wxContourMainFrame::getColorLayerImageViewPanel(wxWindow *parent)
        return _viewColorLayerImagePanel;
 }
 
+void wxContourMainFrame::SetColorLayerImage(vtkImageData* img)
+{
+       if (_viewColorLayerImagePanel!=NULL) 
+       {
+               if (img!=NULL)
+               {
+                       _viewColorLayerImagePanel->SetActive(true);
+                       _viewColorLayerImagePanel->SetImage( img );
+//                     RefreshInterface();
+               } // img
+       } // _viewColorLayerImagePanel
+}
 
 wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent)
 {
@@ -3333,13 +3198,14 @@ wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent)
        {
                double range[2];
                _theViewPanel->getImageData()->GetScalarRange(range);
-               int min = (int)floor (range[0]);
-               int max = (int)ceil (range[1]);
-               int start= (max+min)/2 - (max-min)*0.25; 
-               int end= (max+min)/2 + (max-min)*0.25; 
-               _viewThresholdImagePanel = new ThresholdImageViewPanel( parent, min, max, start, end , 1);
-               _viewThresholdImage = new ThresholdImageView();
+               int min                                         = (int)floor (range[0]);
+               int max                                         = (int)ceil (range[1]);
+               int start                                       = (max+min)/2 - (max-min)*0.25; 
+               int end                                         = (max+min)/2 + (max-min)*0.25; 
+               _viewThresholdImagePanel        = new ThresholdImageViewPanel( parent, min, max, start, end , 1);
+               _viewThresholdImage             = new ThresholdImageView();
                _viewThresholdImage->SetminMaxValue(start,end);
+//             _viewThresholdImage->SetminMaxValue(range[0],range[1]);
                _viewThresholdImage->SetImage( _theViewPanel->getImageData() );
                std::vector<int> colorbarposition;
                colorbarposition.push_back( 10 );
@@ -3451,6 +3317,9 @@ void wxContourMainFrame::SetFileLocation(std::string newFileLocation)
 {
        _fileLocation = newFileLocation;
        std::cout<<"GETFILELOCATION:"<<_fileLocation<<std::endl;
+
+//EED 2019-12-17
+       kernelManager->setCurrentFileName(_fileLocation);
 }
 //------------------------------------------------------------------------------------------------------------
 
@@ -3500,7 +3369,6 @@ void wxContourMainFrame::FlipLstOfContours(std::vector<std::string> lstNameThing
        sizeLstNameThings       = lstNameThings.size(); 
        for (i=0 ; i<sizeLstNameThings ; i++)
        {
-               printf("EED wxContourMainFrame::FlipAllContours contour=%d \n", i );
                manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(lstNameThings[i]);
                if (flipDirection==0)
                {
@@ -3528,8 +3396,6 @@ void wxContourMainFrame::FlipLstOfContours(std::vector<std::string> lstNameThing
 
 void wxContourMainFrame::FlipContours(int typeContourFlip, int flipDirection)
 {
-       printf("EED wxContourMainFrame::FlipContours( %d , %d ) \n",typeContourFlip,  flipDirection );
-
        saveState();
        
        if (typeContourFlip==0) // 
@@ -3549,12 +3415,20 @@ void wxContourMainFrame::FlipContours(int typeContourFlip, int flipDirection)
        RefreshInterface();
 }
 
-
 void wxContourMainFrame::SetXY(int x, int y)
 {
        _theViewPanel->SetXY(x,y);
 }
 
+wxVtkBaseView* wxContourMainFrame::GetWxVtkBaseView()
+{
+       if (_theViewPanel!=NULL)
+       {
+               return _theViewPanel->getWxVtkBaseView();;
+       } else {
+               return NULL;
+       }
+}