]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
*** empty log message ***
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index a3aba8df4f7abfb90b94decc93fc664c475cdd58..4cfa08134be989b9946325c498bb01b7ab4ca905 100644 (file)
@@ -72,19 +72,8 @@ char wxContourMainFrame::COPY = 'C';
                m_mgr.SetManagedWindow(this);
                _creatingContoursActive         = false;
                _theViewPanel                           = NULL;
-//             _modelManager                           = NULL;
-               _instantPanel                           = NULL;
-//             _buttonsBar                                     = NULL;
-//             _gridPanel                                      = NULL; 
-//             _drawToolsPanel                         = NULL;
-//             _operationsToolsPanel           = NULL;
-//             _autoFormsPanel                         = NULL; 
-//             _standardToolsPanel                     = NULL;
-//             _editionToolsPanel                      = NULL;
-//             _listViewPanel                          = NULL;
-//             _sceneManager                           = NULL;
-//             _actualInstant                          = NULL;
 
+               _instantPanel                           = NULL;
                _refLineControl                         = NULL;
                _refLineModel                           = NULL;
                _refLineView                            = NULL;
@@ -93,48 +82,48 @@ char wxContourMainFrame::COPY = 'C';
                m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
                m_notebook_theme = 0;   
                //wxContour_ActionCommandsID a;
-               _numberOfVariablesStatistics = 6+1;
+               _numberOfVariablesStatistics = 7;
 
+               _datadir = datadir;
 
-               _performingOperation                    = new PerformingOperation();
-//JCP 17 - 10 - 2008
-
+       
        inredo = 0;
        inundo = 0;
 
-       kernelManager = new KernelManagerContour(images,datadir+"/data/");
-       //kernelManager->setVectImages(images);
-       //kernelManager->initializeEnvironment();
-                       
-       //vtkImageData* selectedimage = kernelManager->getVectImages()[0];
-       
-//-------------------------------------------------------------
+       interfMainPanel* pannew = interfMainPanel::getInstance(parent,datadir+"/data/Icons");//, eventHandler);
+       _performingOperation                    = new PerformingOperation();
+
 
-       /*frame = new wxContourMainFrame(_builder->getImSourceEnv(), _builder->getImSectionEnv(), _builder->getAxesEnv(),  _builder->getContourEnv(),NULL, wxID_ANY, wxT("ROI Application Sample"), wxPoint(50,50), wxSize(800, 600)); 
-       frame->Show(TRUE);*/
 
-       //Creating the evtHandler of the panels
-       //wxContourEventHandler * eventHandler = new wxContourEventHandler();
+       if(images.size() > 0){
+               this->setVectImages(images);
+       }
+
+}
 
-       //Creating the window that will show the panels
+void wxContourMainFrame::setVectImages( std::vector<vtkImageData*> images ){
 
-       //Getting the parent for the panels ( using aui )
-       wxAuiNotebook * notebook = this->createNotebook();
+       #if defined(__GNUC__)
+               std::string str_home(getenv("HOME"));
+       #elif defined(_WIN32)
+                       std::string str_home(getenv("USERPROFILE"));
+       #endif
+               std::string strCreaContourDataTmp = str_home + "/.creaContourDataTemp/";
 
-       //JCP 17 - 11 - 08
-       //wxInstantChooserPanel * instantPanel                          = new wxInstantChooserPanel( notebook, "Instant Chooser", true);
-       //JCP 17 - 11 - 08
        std::vector<std::string> conceptNameVect;
        std::vector<int> conceptSizeVect;
-       
 
+       wxAuiNotebook * notebook = this->createNotebook();              
 
-       _instantPanel                           = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
-       _theViewPanel                           = new wxContourViewPanel( kernelManager->getSourceImage(), notebook );  
 
+       kernelManager = new KernelManagerContour( images , _datadir+"/data/" , strCreaContourDataTmp );
 
 
-    kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect);
+       _instantPanel                           = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" );
+       _theViewPanel                           = new wxContourViewPanel( kernelManager->getSourceImage(), notebook );  
+               
+//-------------------------------------------------------------
+       kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect);
        _instantPanel->addConcepts(conceptNameVect, conceptSizeVect);
                
 
@@ -145,22 +134,9 @@ char wxContourMainFrame::COPY = 'C';
        //*******************changeInstant();
        _theViewPanel->setVerticalConcept( "Axe Depth", data->getMinValue(), data->getMaxValue(), data->getMinShowedValue(),  data->getMaxShowedValue(), data->getActualValue() );
 
-       //eventHandler->setModelManager( kernelManager->getOutlineModelManager() );
-       //eventHandler->setViewPanel( _theViewPanel );
-       //_theViewPanel->initializeScenceManager();
-       //eventHandler->setInstantChooserPanel( _instantPanel );
-       
-       //bool successConfiuration = eventHandler->configureEventsHandling();
-
-       //successConfiuration &= this->configurePanels( notebook );
        this->configurePanels( notebook );
 
-       interfMainPanel* pannew = interfMainPanel::getInstance(parent,datadir+"/data/Icons");//, eventHandler);
-
-//JCP 17 -10 - 2008
-
-
-       }
+}
 
 
        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 ){
@@ -709,10 +685,10 @@ void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName,
 
        double pnt1X = refPoint1->GetX();
        double pnt1Y = refPoint1->GetY();
-       double pnt1Z = refPoint1->GetZ();
+//     double pnt1Z = refPoint1->GetZ();
        double pnt2X = refPoint2->GetX();
        double pnt2Y = refPoint2->GetY();
-       double pnt2Z = refPoint2->GetZ();
+//     double pnt2Z = refPoint2->GetZ();
 
        double angle = (atan2(pnt2Y - pnt1Y, pnt2X - pnt1X) * 180 / 3.1415926535897932384626433832795)+90;
        vtkTransform *t = vtkTransform::New();
@@ -915,6 +891,454 @@ vtkImageData* wxContourMainFrame::getImageData(){
        return _theViewPanel->getImageData();
 }
 
+void wxContourMainFrame::onSegmentationOneSliceITK(wxString distance, wxString sigma, wxString alfa, wxString beta, wxString propagation, wxString iterations, wxString inflation)
+{
+       //JCP 20-10-08 Undo redo implementation
+       saveState();
+       //JCP 20-10-08 Undo redo implementation
+       
+       wxBusyCursor wait;
+       int                                     x                                       = _theViewPanel->GetX();
+       int                                     y                                       = _theViewPanel->GetY();
+       int                                     z                                       = _theViewPanel->GetZ();
+       SegmentationOneSliceITK( x,y,z,distance, sigma, alfa, beta, propagation, iterations, inflation);
+       RefreshInterface();
+}
+
+void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString distanc, wxString sigm, wxString alf, wxString bet, wxString prop, wxString iter, wxString inflation)
+{
+       
+       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;
+  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();
+
+  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();
+
+  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( prop );
+
+  geodesicActiveContour->SetPropagationScaling( propagationScaling );
+  geodesicActiveContour->SetCurvatureScaling( 1.0 );
+  geodesicActiveContour->SetAdvectionScaling( 1.0 );
+
+  geodesicActiveContour->SetMaximumRMSError( 0.02 );
+  int it=atoi( iter );
+  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( sigm );
+  gradientMagnitude->SetSigma(  sigma  );
+
+  const double alpha =  atof( alf );
+  const double beta  =  atof( bet );
+
+  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;
+
+  const double initialDistance = atof( distanc );
+
+  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->SetStoppingValue( 800 );
+  try
+    {
+               
+       connector2->Update();
+       vtkImageData *idata = connector2->GetOutput();
+
+       vtkMarchingContourFilter* cntVTK = vtkMarchingContourFilter::New( );
+       
+       cntVTK->SetInput( idata );
+       
+       cntVTK->SetNumberOfContours( 1 );
+       cntVTK->SetValue( 0, 255 );
+       cntVTK->Update( );
+       cntVTK->UpdateInformation();
+               
+       vtkCleanPolyData* cpd = vtkCleanPolyData::New( );
+       cpd->SetInput( cntVTK->GetOutput( ) );
+       cpd->Update( );
+       cpd->UpdateInformation();
+
+       vtkPolyDataConnectivityFilter* conn = vtkPolyDataConnectivityFilter::New( );
+       conn->SetExtractionModeToLargestRegion( );
+       conn->SetInput( cpd->GetOutput( ) );
+       conn->Update( );
+       conn->UpdateInformation();
+
+       vtkStripper* vtkstripper = vtkStripper::New( );
+       vtkstripper->SetInput( conn->GetOutput() );
+       vtkstripper->Update();
+       vtkstripper->UpdateInformation();
+
+
+       vtkPolyData* polyDataResult =  cntVTK->GetOutput();
+       std::cout<<"Points "<<polyDataResult->GetNumberOfPoints()<<std::endl;
+       polyDataResult->Update( );
+       polyDataResult->UpdateInformation();
+
+//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)
+               {
+                       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
+               {
+               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] );
+               vecZ.push_back( -900 );
+               xAct=x;
+               yAct=y;
+               }
+               
+               
+       }
+
+       while(!vecXo.empty())
+       {
+               vecX.push_back(vecXo.back());
+               std::cout<<" x Siguiente "<<vecXo.back();
+               vecXo.pop_back();
+               vecZ.push_back( -900 );
+       }
+       while(!vecYo.empty())
+       {
+               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]==)
+                       {
+                       }
+               }
+
+       }*/
+
+       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
+
+       std::vector<int> actualInstantVector;
+       _instantPanel->getInstant( actualInstantVector );
+       actualInstantVector[1]=z;
+
+       int j,sizeCtrPt = vecCtrlPointX.size();
+       
+       manualContourModel *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
+
+               
+                
+                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){
        
        //JCP 20-10-08 Undo redo implementation
@@ -1035,8 +1459,8 @@ myfile.close();
        {
                id      = polyDataResult->GetLines()->GetData()->GetValue(ii);
                p       = polyDataResult->GetPoint(id);
-               double x=p[0];
-               double y=p[1];
+//             double x=p[0];
+//             double y=p[1];
                vecX.push_back( p[0] );
                vecY.push_back( p[1] );
                vecZ.push_back( -900 );
@@ -1163,21 +1587,21 @@ void wxContourMainFrame::referenceLine()
        viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
        _refLineModel->SetCloseContour(false);
        _refLineControl->CreateNewManualContour();
-/*
+
        double z = _refLineControl->GetZ();
+/*
+       _refLineControl->AddPoint(50,100,z);
+       _refLineControl->AddPoint(80,40,z);
+       _refLineControl->SetCompleteCreation(true);
 
        _refLineModel->AddPoint(50,100,z);
        _refLineModel->AddPoint(80,40,z);
-
-       _refLineControl->AddPoint(50,100,z);
-       _refLineControl->AddPoint(80,40,z);
+       _refLineModel->UpdateSpline();
 
        _refLineView->UpdateViewPoint(0);
        _refLineView->UpdateViewPoint(1);
-
-       _refLineControl->SetCompleteCreation(true);
-       _refLineControl->SetEditable(true);
 */
+
        _refLineControl->SetActive(true);
        _refLineView->RefreshContour();
 }
@@ -1187,7 +1611,9 @@ void wxContourMainFrame::refLineHide()
 {
        if (_refLineControl!=NULL)
        {
-               _refLineView->RemoveCompleteContourActor();     
+               _refLineView->RemoveCompleteContourActor();
+               _refLineControl->SetEditable(false);
+               _refLineControl->SetActive(false);
        }
 }
 
@@ -1206,8 +1632,7 @@ void wxContourMainFrame::refLineShow()
                _refLineControl->SetModelView( _refLineModel , _refLineView );
                viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
                _refLineControl->CreateNewManualContour();
-               //_refLineControl->SetActive(true);
-               //_refLineControl->SetEditable(true);
+               _refLineControl->SetActive(true);
                _refLineView->RefreshContour();
        }
 }
@@ -1601,7 +2026,8 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil
        int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics);
        for ( iTitle=0; iTitle<sizeTitle ; iTitle++)
        {
-               fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle,tmpString.c_str() );
+               //              fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle,tmpString.c_str() );
+               fprintf(pFile,"-- \t %d-Size \t SizeRange \t Min \t Max \t Ave \t StDv \t" , iTitle );
        }
        fprintf(pFile,"\n" );
 
@@ -1910,7 +2336,8 @@ void wxContourMainFrame::onSnakePressed(){
 
                wxDialog* dialog = new wxDialog(this, -1, wxString(_T("Snake")));
                wxPanel* panel = new wxPanel(dialog,-1); 
-               wxStaticText* sttext = new wxStaticText(panel, -1, wxString(_T("Panel para snake")));
+               //              wxStaticText* sttext = new wxStaticText(panel, -1, wxString(_T("Panel para snake")));
+         new wxStaticText(panel, -1, wxString(_T("Panel para snake")));
                dialog->ShowModal();
        } // if