X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FInterface_ManagerContour_NDimensions%2FwxContourMainFrame.cxx;h=4cfa08134be989b9946325c498bb01b7ab4ca905;hb=fce8424fdb8d78a343ccc1dd9551bbded44ab5fe;hp=e0947b072cc35f9aff7b0cf9d9efc5bdd64e87e1;hpb=b935f54c82b090852001860eb12f5433779c22c4;p=creaContours.git diff --git a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx index e0947b0..4cfa081 100644 --- a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx +++ b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx @@ -19,6 +19,7 @@ //#include "wxContour_ActionCommandsID.h" //#include "OutlineModelBuilder.h" //#include "wxContourEventHandler.h" +#include //---------------------------------------------------------------------------------------------------------------- // Class implementation @@ -42,90 +43,87 @@ char wxContourMainFrame::COPY = 'C'; _theViewPanel = NULL; // _modelManager = NULL; _instantPanel = NULL; - _buttonsBar = NULL; - _gridPanel = NULL; - _drawToolsPanel = NULL; - _operationsToolsPanel = NULL; - _autoFormsPanel = NULL; - _standardToolsPanel = NULL; - _editionToolsPanel = NULL; - _listViewPanel = NULL; - _sceneManager = NULL; +// _buttonsBar = NULL; +// _gridPanel = NULL; +// _drawToolsPanel = NULL; +// _operationsToolsPanel = NULL; + //_autoFormsPanel = NULL; +// _standardToolsPanel = NULL; +// _editionToolsPanel = NULL; +// _listViewPanel = NULL; +// _sceneManager = NULL; //_actualInstant = NULL; _numberOfVariablesStatistics = 6+1; + _refLineControl = NULL; + _refLineModel = NULL; + _refLineView = NULL; + // set up default notebook style - m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER; - m_notebook_theme = 0; +// m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER; +// m_notebook_theme = 0; //wxContour_ActionCommandsID a; } -wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector images, long style) + wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector images, long style,std::string datadir) : wxPanel(parent, id, pos, size, style) { 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; + _refLineControl = NULL; + _refLineModel = NULL; + _refLineView = NULL; // set up default notebook style 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; - _performingOperation = new PerformingOperation(); -//JCP 17 - 10 - 2008 + _datadir = datadir; + inredo = 0; inundo = 0; - kernelManager = new KernelManagerContour(images); - //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(); - //Creating the window that will show the panels + if(images.size() > 0){ + this->setVectImages(images); + } + +} - //Getting the parent for the panels ( using aui ) - wxAuiNotebook * notebook = this->createNotebook(); +void wxContourMainFrame::setVectImages( std::vector images ){ + + #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 conceptNameVect; std::vector 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); @@ -136,27 +134,14 @@ wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const w //*******************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);//, eventHandler); - -//JCP 17 -10 - 2008 - - - } +} - wxContourMainFrame* wxContourMainFrame :: getInstance(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector images, long style ){ + wxContourMainFrame* wxContourMainFrame :: getInstance(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector images, long style,std::string datadir ){ if(instance == NULL){ - instance = new wxContourMainFrame(parent, id, title, pos, size, images, style); + instance = new wxContourMainFrame(parent, id, title, pos, size, images, style,datadir); } return instance; } @@ -219,7 +204,7 @@ wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const w m_mgr.AddPane(theNoteBook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); m_mgr.Update(); - configured &= _buttonsBar!=NULL; +/* configured &= _buttonsBar!=NULL; if( _buttonsBar!=NULL ) { m_mgr.AddPane(_buttonsBar, wxAuiPaneInfo(). @@ -227,7 +212,7 @@ wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const w ToolbarPane().Top(). LeftDockable( ).RightDockable( false ).CloseButton(false)); m_mgr.Update(); - } + }*/ //CreateStatusBar(); SetMinSize(wxSize(300,300)); @@ -251,45 +236,45 @@ wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const w _instantPanel = theInstantChooserPanel; } - void wxContourMainFrame :: setButtonsBar( wxContour_ButtonsBar * theButtonsBar ) - { - _buttonsBar = theButtonsBar; - } +// void wxContourMainFrame :: setButtonsBar( wxContour_ButtonsBar * theButtonsBar ) +// { +// _buttonsBar = theButtonsBar; +// } - void wxContourMainFrame :: setGrid( wxContour_Grid * theGridPanel ) - { - _gridPanel = theGridPanel; - } +// void wxContourMainFrame :: setGrid( wxContour_Grid * theGridPanel ) +// { +// _gridPanel = theGridPanel; +// } - void wxContourMainFrame :: setDrawToolsPanel( wxContour_DrawToolsPanel * theDrawToolsPanel ) - { - _drawToolsPanel = theDrawToolsPanel; - } +// void wxContourMainFrame :: setDrawToolsPanel( wxContour_DrawToolsPanel * theDrawToolsPanel ) +// { +// _drawToolsPanel = theDrawToolsPanel; +// } - void wxContourMainFrame :: setOperationsToolsPanel( wxContour_OperationsToolsPanel * theOperationsToolsPanel ) - { - _operationsToolsPanel = theOperationsToolsPanel; - } +// void wxContourMainFrame :: setOperationsToolsPanel( wxContour_OperationsToolsPanel * theOperationsToolsPanel ) +// { +// _operationsToolsPanel = theOperationsToolsPanel; +// } - void wxContourMainFrame :: setAutomaticFormsPanel( wxContour_AutomaticFormsToolsPanel * theAutoFormsPanel ) - { - _autoFormsPanel = theAutoFormsPanel; - } +// void wxContourMainFrame :: setAutomaticFormsPanel( wxContour_AutomaticFormsToolsPanel * theAutoFormsPanel ) +// { +// _autoFormsPanel = theAutoFormsPanel; +// } - void wxContourMainFrame :: setStandardToolsPanel( wxContour_StandardToolsPanel * theStandardToolsPanel ) - { - _standardToolsPanel= theStandardToolsPanel; - } +// void wxContourMainFrame :: setStandardToolsPanel( wxContour_StandardToolsPanel * theStandardToolsPanel ) +// { +// _standardToolsPanel= theStandardToolsPanel; +// } - void wxContourMainFrame :: setEditionToolsPanel( wxContour_EdtionToolsPanel * theEditionToolsPanel ) - { - _editionToolsPanel = theEditionToolsPanel; - } +// void wxContourMainFrame :: setEditionToolsPanel( wxContour_EdtionToolsPanel * theEditionToolsPanel ) +// { +// _editionToolsPanel = theEditionToolsPanel; +// } - void wxContourMainFrame :: setListViewPanel( wxContour_ListViewPanel * theListViewPanel ) - { - _listViewPanel = theListViewPanel; - } +// void wxContourMainFrame :: setListViewPanel( wxContour_ListViewPanel * theListViewPanel ) +// { +// _listViewPanel = theListViewPanel; +// } @@ -313,6 +298,14 @@ void wxContourMainFrame::onCreateContourCircle( ){ //JCP 20-10-08 Undo redo implementation createContour( 3 ); } + +void wxContourMainFrame::onCreateContourLine( ){ + //JCP 20-10-08 Undo redo implementation + saveState(); + //JCP 20-10-08 Undo redo implementation + createContour( 6 ); +} + //------------------------------------------------------------------------------------------------------------ void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel ) @@ -466,7 +459,8 @@ void wxContourMainFrame :: deleteContours( std::vector keyNamesVec } void wxContourMainFrame :: deleteContour( std::string theKeyName ){ - /*manualContourModel * cModel; + /* + manualContourModel * cModel; manualViewBaseContour * cViewer; manualContourBaseControler * cControler; @@ -611,6 +605,7 @@ void wxContourMainFrame::updateInstantImageData(){ vtkImageData* img = kernelManager->getImageAtInstant(inst); if(img!=NULL){ _theViewPanel->changeImage(img); + showAxis(false); }else{ int z = _instantPanel->getConceptDataOf("Axe Depth")->getActualValue(); _theViewPanel->setImageSlice(z); @@ -635,6 +630,7 @@ void wxContourMainFrame::onCopy(){ _performingOperation->setStartOperationInstantVector( tempVector ); _performingOperation->setKeyNamesOperationElems( currentSelection ); } + void wxContourMainFrame::onPaste(){ @@ -671,12 +667,59 @@ void wxContourMainFrame::onRedo(){ } } -void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, std::vector &instantNoTouchData, bool append ){ +void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, std::vector &instantNoTouchData, bool append ) +{ std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData ); manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel(); _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append ); } +///AD: 03-09 Copy the object and apply the given transformation +void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName, std::vector &instantNoTouchData, bool append ) +{ + std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData ); + manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName); + + manualPoint * refPoint1 = _refLineModel->GetManualPoint(0); + manualPoint * refPoint2 = _refLineModel->GetManualPoint(1); + + double pnt1X = refPoint1->GetX(); + double pnt1Y = refPoint1->GetY(); +// double pnt1Z = refPoint1->GetZ(); + double pnt2X = refPoint2->GetX(); + double pnt2Y = refPoint2->GetY(); +// double pnt2Z = refPoint2->GetZ(); + + double angle = (atan2(pnt2Y - pnt1Y, pnt2X - pnt1X) * 180 / 3.1415926535897932384626433832795)+90; + vtkTransform *t = vtkTransform::New(); + + t->PostMultiply(); + t->Identity(); + t->Translate(-pnt1X, -pnt1Y, 0); + t->RotateZ(-angle); + t->Scale(-1,1,1); + t->RotateZ(angle); + t->Translate(pnt1X, pnt1Y, 0); + t->Update(); + + int i,size=manualModel->GetSizeLstPoints(); + for (i=0;iGetManualPoint(i); + float vecIn[3]; + float vecOut[3]; + vecIn[0]=mp->GetX(); + vecIn[1]=mp->GetY(); + vecIn[2]=mp->GetZ(); + t->TransformPoint( vecIn, vecOut ); + mp->SetPointX( vecOut[0] ); + mp->SetPointY( vecOut[1] ); + mp->SetPointZ( vecOut[2] ); + } + + _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append ); +} + void wxContourMainFrame ::loadState(std::string filename){ char tmp[255]; FILE *pFile=fopen(filename.c_str(),"r+"); @@ -731,6 +774,7 @@ void wxContourMainFrame::onSave(){ if (dialog.ShowModal() == wxID_OK) { std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str()); + kernelManager->setCurrentFileName(fileNameContourROI); saveFileWithContours( fileNameContourROI ); } } @@ -847,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 ConnectorType; + typedef itk::ImageToVTKImageFilter 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 "<GetNumberOfPoints()<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 vecX; + std::vector vecY; + std::vector vecXo; + std::vector vecYo; + std::vector::iterator vecXoi; + std::vector::iterator vecYoi; + std::vector vecZ; + + std::vector vecCtrlPointX; + std::vector vecCtrlPointY; + std::vector 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;iiGetPoint(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 <11) + { + vecXo.push_back(p[0]); + vecYo.push_back(p[1]); + } + else + { + vecX.push_back( p[0] ); + myfile <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 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 ; jAddPoint( 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 @@ -861,6 +1353,7 @@ void wxContourMainFrame::onSegmentationOneSlice(int isovalue,int sampling,int me RefreshInterface(); } + void wxContourMainFrame::SegmentationOneSlice( int x, int y, int z, int isovalue, int sampling, int method ) { int typeofcontour = 1; @@ -966,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 ); @@ -1064,6 +1557,120 @@ void wxContourMainFrame::onSegmentationAllSlice(int minZ,int maxZ,int isovalue,i RefreshInterface(); } + +//Creates a reference line to be used as the axis of the mirroring +void wxContourMainFrame::referenceLine() +{ + wxBusyCursor wait; + double spc[3]; + + vtkImageData *vtkimagedata = _theViewPanel->getImageData(); + vtkimagedata->GetSpacing(spc); + + wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView(); + + _refLineControl = new manualLineControler(); + _refLineModel = new manualContourModelLine(); + _refLineView = new manualViewLine(); + _refLineView->SetModel( _refLineModel ); + _refLineView->SetWxVtkBaseView( viewer2D ); + _refLineView->SetRange( 2 ); + _refLineView->SetZ( 1200 ); + + _refLineView->SetSpacing(spc); + + _refLineView->SetColorNormalContour(0, 0, 1); + _refLineView->SetColorEditContour(0, 0.5, 0.5); + _refLineView->SetWidthLine(4); + + _refLineControl->SetModelView( _refLineModel , _refLineView ); + 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); + _refLineModel->UpdateSpline(); + + _refLineView->UpdateViewPoint(0); + _refLineView->UpdateViewPoint(1); +*/ + + _refLineControl->SetActive(true); + _refLineView->RefreshContour(); +} + +//Hides the referenceLine +void wxContourMainFrame::refLineHide() +{ + if (_refLineControl!=NULL) + { + _refLineView->RemoveCompleteContourActor(); + _refLineControl->SetEditable(false); + _refLineControl->SetActive(false); + } +} + +//Shows the referenceLine +void wxContourMainFrame::refLineShow() +{ + if (_refLineControl!=NULL) + { + wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView(); + + _refLineView->SetModel( _refLineModel ); + _refLineView->SetWxVtkBaseView( viewer2D ); + _refLineView->SetRange( 2 ); + _refLineView->SetZ( 1200 ); + + _refLineControl->SetModelView( _refLineModel , _refLineView ); + viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); + _refLineControl->CreateNewManualContour(); + _refLineControl->SetActive(true); + _refLineView->RefreshContour(); + } +} + +void wxContourMainFrame::onMirror() +{ + //AD:02-09 + std::vector currentSelection = _theViewPanel->getSelectedObjects(); + std::vector filterCurrentSelection; + + std::vector tempVector; + _instantPanel->getInstant( tempVector ); + _performingOperation->reset(); + _performingOperation->setStartCommand( COPY ); + _performingOperation->setStartOperationInstantVector( tempVector ); + _performingOperation->setKeyNamesOperationElems( currentSelection ); + + char theStartCommand = _performingOperation->getStartCommand(); + if ( theStartCommand == COPY ) + { + //JCP 20-10-08 Undo redo implementation + saveState(); + //JCP 20-10-08 Undo redo implementation + std::vector tempVector; + _instantPanel->getInstant( tempVector ); + _performingOperation->setEndOperationInstantVector ( tempVector ); + std::vector elems = _performingOperation->getKeyNamesOperationElems(); + int i,size = elems.size(); + for( i=0; i0 ); + } + } + + //deleteContour( _refName ); + //_refName = ""; +} + void wxContourMainFrame::showAxis(bool show){ _theViewPanel->SetVisibleAxis(show); _theViewPanel->Refresh(); @@ -1419,7 +2026,8 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics); for ( iTitle=0; iTitleintToString(z) + "-cont" + kernelManager->intToString(iContourGroup); temp = temp + ".txt"; - wxString filename; + // LG 14/01/09 : using crea + wxString filename = crea::std2wx(temp); /*filename.Printf(_T("%s"),directory.c_str()); filename.append(_T("\\")); filename.append(_T("%s"),namefile.c_str()); @@ -1544,7 +2153,10 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil filename.append(_T("-cont")); filename.append(_T("%d"),iContourGroup); filename.append(_T(".txt"));*/ - filename.Printf(temp.c_str()); + // filename.Printf(temp.c_str()); + + + FILE *pFile=fopen((const char *)filename.mb_str(),"w+"); fprintf(pFile,"value \t x \t y \t z\n" ); int iLstValue,sizeLstValue=pLstValue.size(); @@ -1656,8 +2268,9 @@ void wxContourMainFrame::SaveImageResult(std::string directory,std::string namef std::string temp = directory + "/" + namefile + "-Value.mhd"; - wxString filename; - filename.Printf(_T(temp.c_str())); + wxString filename = crea::std2wx(temp); + // LG + // filename.Printf(_T(temp.c_str())); //filename.Printf(_T("%s\\%s-Value.mhd",directory.c_str(),namefile.c_str(),z); /*filename.Printf(_T("%s"),directory.c_str()); filename.append(_T("\\")); @@ -1675,7 +2288,9 @@ void wxContourMainFrame::SaveImageResult(std::string directory,std::string namef // filename.Printf("%s\\%s-Mask.mhd",directory.c_str(),namefile.c_str(),z); temp = directory + "/" + namefile + "-Mask.mhd"; - filename.Printf(_T(temp.c_str())); + // LG 14/01/09 : using crea + filename = crea::std2wx(temp); + // filename.Printf(_T(temp.c_str())); /*filename.Printf(_T("%s"),directory.c_str()); filename.append(_T("\\")); @@ -1721,8 +2336,18 @@ 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 } + +void wxContourMainFrame::saveFileWithContoursAutomatique(){ + std::string filename = kernelManager->getCurrentFileName(); + if(filename.compare("")!=0){ + saveFileWithContours(filename); + }else{ + onSave(); + } +} \ No newline at end of file