X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FInterface_ManagerContour_NDimensions%2FwxContourMainFrame.cxx;h=c0b9dd263a2d008a69bc51d548ac0b3d5645362b;hb=fb263161d35e038b20630dbf6566df07777ec027;hp=a45ddd8a1ff0441311795242be9ce0107ceb1a0b;hpb=ec11a783e7b5477f1d93886a6336255cd7cbecf3;p=creaContours.git diff --git a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx index a45ddd8..c0b9dd2 100644 --- a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx +++ b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx @@ -1,3 +1,28 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + //---------------------------------------------------------------------------------------------------------------- // Class definition include //---------------------------------------------------------------------------------------------------------------- @@ -27,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) @@ -45,13 +70,13 @@ char wxContourMainFrame::COPY = 'C'; // _gridPanel = NULL; // _drawToolsPanel = NULL; // _operationsToolsPanel = NULL; - //_autoFormsPanel = NULL; + //_autoFormsPanel = NULL; // _standardToolsPanel = NULL; // _editionToolsPanel = NULL; // _listViewPanel = NULL; // _sceneManager = NULL; - //_actualInstant = NULL; - _numberOfVariablesStatistics = 6+1; + //_actualInstant = NULL; + _numberOfVariablesStatistics= 6+1; _refLineControl = NULL; _refLineModel = NULL; @@ -68,18 +93,17 @@ char wxContourMainFrame::COPY = 'C'; _viewMaskImagePanel = NULL; _viewThresholdImage = NULL; _viewThresholdImagePanel = NULL; - _viewColorLayerImage = NULL; _viewColorLayerImagePanel = NULL; + _frameShowResultImages = NULL; } - wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector images, long style,std::string datadir) + 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); _contourGroup = 1; _creatingContoursActive = false; _theViewPanel = NULL; - _instantPanel = NULL; _refLineControl = NULL; _refLineModel = NULL; @@ -89,97 +113,77 @@ char wxContourMainFrame::COPY = 'C'; _viewMaskImagePanel = NULL; _viewThresholdImage = NULL; _viewThresholdImagePanel = NULL; - _viewColorLayerImage = NULL; _viewColorLayerImagePanel = 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; - _numberOfVariablesStatistics = 7; - - _datadir = datadir; - - - inredo = 0; - inundo = 0; - + _numberOfVariablesStatistics= 7; + _datadir = datadir; + inredo = 0; + inundo = 0; _pannew = interfMainPanel::getInstance(this,datadir+"/data/Icons");//, eventHandler); - _performingOperation = new PerformingOperation(); - + _performingOperation = new PerformingOperation(); if(images.size() > 0) { this->setVectImages(images); } - _contourextractdata = NULL; } void wxContourMainFrame::setVectImages(std::vector imgs) { - _images = imgs; - - #if defined(__GNUC__) + #if defined(_WIN32) + std::string str_home(getenv("USERPROFILE")); + #elif defined(__GNUC__) std::string str_home(getenv("HOME")); - #elif defined(_WIN32) - std::string str_home(getenv("USERPROFILE")); #endif - std::string strCreaContourDataTmp = str_home + "/.creaContourDataTemp/"; - - std::vector conceptNameVect; - std::vector conceptSizeVect; - - notebook = this->createNotebook(); - - - kernelManager = new KernelManagerContour( imgs , _datadir+"/data/" , strCreaContourDataTmp ); - - - _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" ); - _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook ); - + std::string strCreaContourDataTmp = str_home + "/.creaContourDataTemp/"; + std::vector conceptNameVect; + std::vector conceptSizeVect; + notebook = this->createNotebook(); + kernelManager = new KernelManagerContour( imgs , _datadir+"/data/" , strCreaContourDataTmp ); + _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" ); + _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook ); //------------------------------------------------------------- kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect); _instantPanel->addConcepts(conceptNameVect, conceptSizeVect); - - double val = _theViewPanel->getCurrentDeep(); _instantPanel->setConceptValue( "Axe Depth", (int)val ); //JCP _instantPanel->setConceptValue("time", num de imagenes); ConceptDataWrap * data = _instantPanel->getConceptDataOf( "Axe Depth" ); //*******************changeInstant(); _theViewPanel->setVerticalConcept( "Axe Depth", data->getMinValue(), data->getMaxValue(), data->getMinShowedValue(), data->getMaxShowedValue(), data->getActualValue() ); - this->configurePanels( ); - } 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,datadir); + if(instance == NULL) + { + instance=new wxContourMainFrame(parent, id, title, pos, size, images, style,datadir); } return instance; } - std::vector wxContourMainFrame ::getVectImages() + std::vector 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(); @@ -208,7 +212,7 @@ void wxContourMainFrame::setVectImages(std::vector 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); @@ -220,7 +224,7 @@ void wxContourMainFrame::setVectImages(std::vector imgs) //------------------------------------------------------------------------------------------------------------ // Creational and initialization methods //------------------------------------------------------------------------------------------------------------ - bool wxContourMainFrame :: configurePanels( ) + bool wxContourMainFrame::configurePanels( ) { bool configured = _theViewPanel!=NULL; @@ -230,17 +234,13 @@ void wxContourMainFrame::setVectImages(std::vector imgs) notebook->AddPage( _theViewPanel, wxT(" View ") ); m_mgr.Update(); } - - if( configured ) { notebook->AddPage( _instantPanel, wxT("Instant Page") ); m_mgr.Update(); } - m_mgr.AddPane(notebook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); m_mgr.Update(); - SetMinSize(wxSize(300,300)); m_mgr.Update(); return configured; @@ -321,20 +321,25 @@ void wxContourMainFrame::onCreateContourSpline( ){ createContour( 1 ); } -void wxContourMainFrame::onCreateContourRectangle( ){ + +void wxContourMainFrame::onCreateContourRectangle( ) +{ //JCP 20-10-08 Undo redo implementation saveState(); //JCP 20-10-08 Undo redo implementation createContour( 2 ); } -void wxContourMainFrame::onCreateContourCircle( ){ + +void wxContourMainFrame::onCreateContourCircle( ) +{ //JCP 20-10-08 Undo redo implementation saveState(); //JCP 20-10-08 Undo redo implementation createContour( 3 ); } -void wxContourMainFrame::onCreateContourLine( ){ +void wxContourMainFrame::onCreateContourLine( ) +{ //JCP 20-10-08 Undo redo implementation saveState(); //JCP 20-10-08 Undo redo implementation @@ -342,7 +347,8 @@ void wxContourMainFrame::onCreateContourLine( ){ } // RaC 09-09 -------------------------------------- -void wxContourMainFrame::onCreateContourPoints( ){ +void wxContourMainFrame::onCreateContourPoints( ) +{ //JCP 20-10-08 Undo redo implementation saveState(); //JCP 20-10-08 Undo redo implementation @@ -351,7 +357,8 @@ void wxContourMainFrame::onCreateContourPoints( ){ // RaC 09-09 -------------------------------------- // RaC 10-09 -------------------------------------- -void wxContourMainFrame::onCreateContourPolygon( ){ +void wxContourMainFrame::onCreateContourPolygon( ) +{ //JCP 20-10-08 Undo redo implementation saveState(); //JCP 20-10-08 Undo redo implementation @@ -386,15 +393,19 @@ void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel ) _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , 4) ; } } -void wxContourMainFrame :: createContour( int typeContour ) + +void wxContourMainFrame::createContour( int typeContour ) { //Creating the manualContourModel and including in the model manualBaseModel * manModelContour = kernelManager->factoryManualContourModel(typeContour); - std::vector instantVector; _instantPanel->getInstant( instantVector ); - std::string theName = kernelManager->createOutline(manModelContour, instantVector); + std::vector tempVector; + getInstantVector( tempVector ); + manModelContour->SetLabel2( std::to_string(tempVector[1]) ); + + std::string theName = kernelManager->createOutline(manModelContour, instantVector); /*std::vector instantVector; _instantPanel->getInstant( instantVector ); std::string theName; @@ -408,9 +419,9 @@ void wxContourMainFrame :: createContour( int typeContour ) //Adding the manualViewContour to interface objects structure //_sceneManager->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active. _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeContour) ; - } - + } // if addedModel } + manualBaseModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){ manualContourModelBullEye *manModelContourBullEye = new manualContourModelBullEye(); @@ -443,13 +454,15 @@ manualBaseModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){ return manModelContour; } -void wxContourMainFrame :: saveState(){ +void wxContourMainFrame :: saveState() +{ std::string temp = kernelManager->saveState(); saveFileWithContours(temp); } -void wxContourMainFrame::onDeleteContour(){ +void wxContourMainFrame::onDeleteContour() +{ //JCP 20-10-08 Undo redo implementation saveState(); //JCP 20-10-08 Undo redo implementation @@ -510,7 +523,8 @@ void wxContourMainFrame :: deleteContours( std::vector keyNamesVec } } -void wxContourMainFrame :: deleteContour( std::string theKeyName ){ +void wxContourMainFrame :: deleteContour( std::string theKeyName ) +{ /* manualContourModel * cModel; manualViewBaseContour * cViewer; @@ -539,11 +553,17 @@ void wxContourMainFrame :: deleteContour( std::string theKeyName ){ //JCP 21 - 11 - 08 } -void wxContourMainFrame::onDeleteContoursActSlice(){ +void wxContourMainFrame::onDeleteContoursActSlice() +{ //JCP 20-10-08 Undo redo implementation saveState(); //JCP 20-10-08 Undo redo implementation - deleteContours( (std::vector)_theViewPanel->getSceneManager()->GetlstContoursNameActualSlice() ); + + std::vector tempVector; + getInstantVector( tempVector ); + deleteContours( getOutlinesName( tempVector[1] ) ); +// deleteContours( (std::vector)_theViewPanel->getSceneManager()->GetlstContoursNameActualSlice() ); + } void wxContourMainFrame::onDeleteAllContours(){ //JCP 20-10-08 Undo redo implementation @@ -599,17 +619,20 @@ void wxContourMainFrame::deleteAllContours(){ JCP --08-09-2008 */ } -void wxContourMainFrame::setConceptValue( std::string name, int value ){ +void wxContourMainFrame::setConceptValue( std::string name, int value ) +{ _instantPanel->setConceptValue(name, value); } -ConceptDataWrap* wxContourMainFrame::getLastConceptData(){ +ConceptDataWrap* wxContourMainFrame::getLastConceptData() +{ return _instantPanel->getLastConceptData(); } -bool wxContourMainFrame::getIfConceptCheckedAt( std::string name, int pos ){ +bool wxContourMainFrame::getIfConceptCheckedAt( std::string name, int pos ) +{ return _instantPanel->getIfConceptCheckedAt( name, pos ); } @@ -627,21 +650,27 @@ void wxContourMainFrame::ShowResultImages(int typeContourGroup, int selection, i nTypeView.push_back(2); nTypeView.push_back(0); - wxFrame *frame = new wxFrame(this, -1,_T("Result image extracted.."),wxDefaultPosition,wxSize(600,600), wxDEFAULT_FRAME_STYLE|wxSTAY_ON_TOP); - wxAuiManager *m_mgr_noteBookViewerResult = new wxAuiManager(); - m_mgr_noteBookViewerResult->SetManagedWindow(frame); + if (_frameShowResultImages==NULL) + { +// wxFrame *_frameShowResultImages = new wxFrame(this, -1,_T("Result image extracted.."),wxDefaultPosition,wxSize(600,600), wxDEFAULT_FRAME_STYLE|wxSTAY_ON_TOP); + _frameShowResultImages = new wxFrame(this, -1,_T("Result image extracted.."),wxDefaultPosition,wxSize(600,600), + wxFRAME_TOOL_WINDOW|wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN |wxFRAME_FLOAT_ON_PARENT | wxRESIZE_BORDER ); + + wxAuiManager *m_mgr_noteBookViewerResult = new wxAuiManager(); + m_mgr_noteBookViewerResult->SetManagedWindow(_frameShowResultImages); - wxAuiNotebook* noteBookViewerResult = new wxAuiNotebook(frame, -1, wxPoint(600, 600), wxSize(430,200), m_notebook_style); - m_mgr_noteBookViewerResult->AddPane(noteBookViewerResult, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); + wxAuiNotebook* noteBookViewerResult = new wxAuiNotebook(_frameShowResultImages, -1, wxPoint(600, 600), wxSize(430,200), m_notebook_style); + m_mgr_noteBookViewerResult->AddPane(noteBookViewerResult, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); - wxPanel *panelViewer1 = new wxMaracas_N_ViewersWidget(noteBookViewerResult, value,&nTypeView); - wxPanel *panelViewer2 = new wxMaracas_N_ViewersWidget(noteBookViewerResult, mask,&nTypeView); + wxPanel *panelViewer1 = new wxMaracas_N_ViewersWidget(noteBookViewerResult, value,&nTypeView); + wxPanel *panelViewer2 = new wxMaracas_N_ViewersWidget(noteBookViewerResult, mask,&nTypeView); - noteBookViewerResult->AddPage( panelViewer1, wxT("Image result") ); - noteBookViewerResult->AddPage( panelViewer2, wxT("Mask result") ); - m_mgr_noteBookViewerResult->Update(); - frame->Show(); + noteBookViewerResult->AddPage( panelViewer1, wxT("Image result") ); + noteBookViewerResult->AddPage( panelViewer2, wxT("Mask result") ); + m_mgr_noteBookViewerResult->Update(); + _frameShowResultImages->Show(); + } // if _frameShowResultImages } @@ -652,11 +681,10 @@ void wxContourMainFrame::changeInstant() std::vector instantVect; _instantPanel->getInstant( instantVect ); int actualSlice = instantVect[1]; - kernelManager->setInstant(instantVect); - // Refresh Mask image - if(_viewMaskImage!=NULL){ + if(_viewMaskImage!=NULL) + { _viewMaskImage->SetZ(actualSlice); if (_viewMaskImagePanel->IsVisible()==true) { @@ -664,24 +692,16 @@ void wxContourMainFrame::changeInstant() getMaskValue(&mask,&value, _contourGroup , 0, -1, -1); _viewMaskImage->onThreshold(); } - } - + } // if _viewMaskImage // Refresh Threshold image - if(_viewThresholdImage!=NULL){ + if(_viewThresholdImage!=NULL) + { _viewThresholdImage->SetZ(actualSlice); - if (_viewThresholdImagePanel->IsVisible()==true){ + if (_viewThresholdImagePanel->IsVisible()==true) + { _viewThresholdImage->onThreshold(); } - } - - // Refresh Threshold image - if(_viewColorLayerImage!=NULL){ - _viewColorLayerImage->SetZ(actualSlice); - if (_viewColorLayerImagePanel->IsVisible()==true){ - _viewColorLayerImage->onThreshold(); - } - } - + } // if _viewThresholdImage updateInstantOutlines(); updateInstantImageData(); updateInstantAxes(); @@ -689,7 +709,7 @@ void wxContourMainFrame::changeInstant() -void wxContourMainFrame :: updateInstantOutlines() +void wxContourMainFrame::updateInstantOutlines() { _theViewPanel->removeSceneContours(); _theViewPanel->addNameWrapperToScene(); @@ -700,10 +720,13 @@ void wxContourMainFrame :: updateInstantOutlines() //} } -int wxContourMainFrame::getNamesWrappingSize(){ +int wxContourMainFrame::getNamesWrappingSize() +{ return kernelManager->getNamesWrappingSize(); } -std::string wxContourMainFrame::getNameWrapping(int i){ + +std::string wxContourMainFrame::getNameWrapping(int i) +{ return kernelManager->getNameWrapping(i); } @@ -713,13 +736,14 @@ void wxContourMainFrame::updateInstantImageData() _instantPanel->getInstant(inst); vtkImageData* img = kernelManager->getImageAtInstant(inst); - if(img!=NULL){ + if(img!=NULL) + { _theViewPanel->changeImage(img); showAxis(false); }else{ int z = _instantPanel->getConceptDataOf("Axe Depth")->getActualValue(); _theViewPanel->setImageSlice(z); - } + } // if img } void wxContourMainFrame::updateInstantAxes() @@ -735,7 +759,6 @@ void wxContourMainFrame::onChangeDeep(int val){ void wxContourMainFrame::onCopy(){ std::vector currentSelection = _theViewPanel->getSelectedObjects(); - std::vector tempVector; _instantPanel->getInstant( tempVector ); _performingOperation->reset(); @@ -744,9 +767,8 @@ void wxContourMainFrame::onCopy(){ _performingOperation->setKeyNamesOperationElems( currentSelection ); } -void wxContourMainFrame::onPaste(){ - - +void wxContourMainFrame::onPaste() +{ char theStartCommand = _performingOperation->getStartCommand(); if ( theStartCommand == COPY ) { @@ -764,7 +786,9 @@ void wxContourMainFrame::onPaste(){ } } } -void wxContourMainFrame::onUndo(){ + +void wxContourMainFrame::onUndo() +{ std::string filename; if(kernelManager->onUndoSaveFile(filename)){ saveFileWithContours(filename); @@ -828,115 +852,16 @@ 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 ); } -//EED04 -void wxContourMainFrame ::loadState(std::string filename){ - +void wxContourMainFrame ::loadState(std::string filename) +{ deleteAllContours(); onLoadContours(filename,false); - - /* EED Borrame - char tmp[255]; - FILE *pFile=fopen(filename.c_str(),"r+"); - - fscanf(pFile,"%s",tmp); // --CreaContour-- - - fscanf(pFile,"%s",tmp); // Version - fscanf(pFile,"%s",tmp); // 1.0.3 || 1.0.2 || 1.0.1 || 1.0.0 - - deleteAllContours(); - - loadContours(pFile, false); - loadContours(pFile, true); - - fclose(pFile); - */ -} - - -//EED03 -/*EED Borrame -void wxContourMainFrame::loadContours( FILE *pFile, bool staticContour ) -{ - char tmp[255]; - - if (staticContour==false) - { - fscanf(pFile,"%s",tmp); // ImageDimensions - fscanf(pFile,"%s",tmp); // X - fscanf(pFile,"%s",tmp); // Y - fscanf(pFile,"%s",tmp); // Z - - fscanf(pFile,"%s",tmp); // ImageSpacing - fscanf(pFile,"%s",tmp); // X - fscanf(pFile,"%s",tmp); // Y - fscanf(pFile,"%s",tmp); // Z - } - - fscanf(pFile,"%s",tmp); // NumberOfContours - fscanf(pFile,"%s",tmp); // ## - int numberOfContours = atoi(tmp); - - std::vector instantVector; - int typeContourModel; - manualBaseModel *manModelContour; - int typeView; - - int i; - for (i=0;ifactoryManualContourModel(typeContourModel); - manModelContour->Open(pFile); - - fscanf(pFile,"%s",tmp); // TypeView - fscanf(pFile,"%s",tmp); // ## - typeView = atoi(tmp); - - std::string theName; - theName = kernelManager->createOutline( manModelContour, instantVector ); - bool addedModel = theName.compare("") != 0; - if( addedModel ) - { - double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default - _theViewPanel->getSpacing(spc); - //Adding the manualContourControler to interface objects structure - //Adding the manualViewContour to interface objects structure - //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active. - _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ; - } - - if (staticContour==true) - { - Instant instant(&instantVector); - kernelManager->changeContourOfManager( theName , &instant ); - } - }// for numberOfContours } -*/ - void wxContourMainFrame::onLoad() { @@ -945,25 +870,59 @@ void wxContourMainFrame::onLoad() if(GetFileLocation().empty()) { //------------------------------------------------------------------------------------------------------------ +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN ); +#else + wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxFD_OPEN ); +#endif if (dialog.ShowModal() == wxID_OK) { fileNameContourROI = (const char *)(dialog.GetPath().mb_str()); - } - } - + } // if dialog + } // if FileLocation onLoadContours(fileNameContourROI,true); } +void wxContourMainFrame::SetZForAllContours(int pz) +{ + //-- Normal Contours + std::vector< std::string > lstNameThings; + int i,sizeLstNameThings; + int ii,sizeLstPoints; + lstNameThings = kernelManager->GetLstNameThings(); + sizeLstNameThings = lstNameThings.size(); + for (i=0 ; igetOutlineByKeyName(lstNameThings[i]); + sizeLstPoints = manualModel->GetSizeLstPoints(); + for (ii=0 ; iiGetManualPoint(ii)->SetPointZ(-900); + }// for ii list of points + }// for i list of Things + + //-- Static Contours + + lstNameThings = kernelManager->GetLstNameThingsStatic(); + sizeLstNameThings = lstNameThings.size(); + for (i=0 ; igetOutlineByKeyName(lstNameThings[i]); + sizeLstPoints = manualModel->GetSizeLstPoints(); + for (ii=0 ; iiGetManualPoint(ii)->SetPointZ(-900); + }// for ii list of points + }// for i list of static things +} void wxContourMainFrame::onLoadContours(std::string fileNameContourROI, bool interactiveInterface) { char tmp[255]; char tmpD[255]; - FILE *pFile =fopen(fileNameContourROI.c_str(),"r+"); - - //CMRU 03-09-09- ---------------------------------------------------------------------------------------------- if(pFile != NULL) { @@ -982,13 +941,10 @@ void wxContourMainFrame::onLoadContours(std::string fileNameContourROI, bool int fscanf(pFileData,"%s",tmpD); // NumberOfContours fscanf(pFileData,"%s",tmpD); // # } - fscanf(pFile,"%s",tmp); // --CreaContour-- - fscanf(pFile,"%s",tmp); // Version fscanf(pFile,"%s",tmp); // 1.0.3 || 1.0.2 || 1.0.1 || 1.0.0 std::string version(tmp); - //AD:02-06-09 _tmpReadFileTypeOfTransformation=-1; if (version=="1.0.3") @@ -996,88 +952,89 @@ void wxContourMainFrame::onLoadContours(std::string fileNameContourROI, bool int readDimSpc(pFile,interactiveInterface); // DimSpc interactive ON openContours(pFile,pFileData,false); openContours(pFile,pFileData,true); //Load StaticContours - } - + } if (version=="1.0.2") { //EED001 - readDimSpc(pFile,interactiveInterface); // DimSpc interactive ON + readDimSpc(pFile,interactiveInterface); // DimSpc interactive ON openContours(pFile,pFileData,false); - readDimSpc(pFile,false); // DimSpc interactive OFF - openContours(pFile,pFileData,true); //Load StaticContours - } - - //AD:02-06-09 - else if (version=="1.0.1") - { + readDimSpc(pFile,false); // DimSpc interactive OFF + openContours(pFile,pFileData,true); // Load StaticContours + SetZForAllContours(-900); + } else if (version=="1.0.1") { //AD:02-06-09 openContours(pFile,pFileData,false); //Skips ImageDimensions and ImageSpacing openContours(pFile,pFileData,true); //Load StaticContours, skips ImageDimensions and ImageSpacing - } - - //AD:02-06-09 - else if (version=="1.0.0") - { + } else if (version=="1.0.0") { //AD:02-06-09 openContours(pFile,pFileData,false); //Skips ImageDimensions and ImageSpacing } - fclose(pFile); - if(pFileData != NULL) { fclose(pFileData); - } - } + } // if + } // pFile _theViewPanel->getSceneManager()->removeSceneContours(); changeInstant(); - } - -void wxContourMainFrame::onImport(){ +void wxContourMainFrame::onImport() +{ std::string filename, filenamecontours; +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 wxFileDialog dialog(NULL, _T("Choose a XML Osirix File"), _T(""), _T(""), _T("*.xml"), wxOPEN ); - +#else + wxFileDialog dialog(NULL, _T("Choose a XML Osirix File"), _T(""), _T(""), _T("*.xml"), wxFD_OPEN ); +#endif if (dialog.ShowModal() == wxID_OK) { filename = dialog.GetPath().mb_str(); filenamecontours = kernelManager->parseOsirixFile(filename); - if(filenamecontours.compare("") != 0){ + if(filenamecontours.compare("") != 0) + { onLoadContours(filenamecontours,true); - } - - } + } // if + } // if } -void wxContourMainFrame::onTest(){ + +void wxContourMainFrame::onTest() +{ std::string filename, filenamecontours; +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 wxFileDialog dialog(NULL, _T("Choose a File"), _T(""), _T(""), _T("*.*"), wxOPEN ); - +#else + wxFileDialog dialog(NULL, _T("Choose a File"), _T(""), _T(""), _T("*.*"), wxFD_OPEN ); +#endif if (dialog.ShowModal() == wxID_OK) { filename = dialog.GetPath().mb_str(); std::cout << "This is the filename: " << filename << std::endl; - } + } // if } - //AD: 29-05-09 -void wxContourMainFrame::onSave(){ +void wxContourMainFrame::onSave() +{ //CMRU 03-09-09----------------------------------------------------------------------------------------------- if(GetFileLocation().empty()) { //------------------------------------------------------------------------------------------------------------ +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE ); +#else + wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxFD_SAVE ); +#endif if (dialog.ShowModal() == wxID_OK) { std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str()); kernelManager->setCurrentFileName(fileNameContourROI); saveFileWithContours( fileNameContourROI ); } - } -//CMRU 03-09-09----------------------------------------------------------------------------------------------- - else - { + } else {//CMRU 03-09-09----------------------------------------------------------------------------------------------- std::cout<<"Nombre del archivo: "<getOutlineByKeyName(lstNameThings[i]); - double sizeInPixel = manualModel ->GetPathSize(); + +// EED 2017-05-30 +// double sizeInPixel = manualModel ->GetPathSize( ); + double sizeInPixel = manualModel ->GetPathSize( spc ); + double realContourSize = sizeInPixel*_onePixelSize; manualModel ->SetRealSize(realContourSize); //------------------------------------------------------------------------------------------------------------ @@ -1204,14 +1172,15 @@ void wxContourMainFrame::readDimSpc(FILE *pFile, bool interactiveOption) //Compare Spacing and Dims in X and Y (Necessary in Z?) - Just for Version 2 if (imageDim[0]!=_tmpReadFileImageDim[0] || imageDim[1]!=_tmpReadFileImageDim[1] || imageSpac[0]!=_tmpReadFileImageSpac[0] || imageSpac[1]!=_tmpReadFileImageSpac[1]) { - wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(260,160)); + 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); + wxRadioBox * radioOpts = new wxRadioBox(dial, -1, _T("Type of Transformation"), wxDefaultPosition, wxSize(270,90), 2 , lstOptOperation, 2, wxRA_SPECIFY_COLS); 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 ); @@ -1397,14 +1366,16 @@ void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, bool static } -void wxContourMainFrame::RefreshInterface(){ +void wxContourMainFrame::RefreshInterface() +{ changeInstant(); _theViewPanel->RefreshInterface(); //wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)this->_theViewPanel->getWxVtkBaseView(); //wxvtk2dbaseview->Refresh(); } -vtkImageData* wxContourMainFrame::getImageData(){ +vtkImageData* wxContourMainFrame::getImageData() +{ return _theViewPanel->getImageData(); } @@ -1427,443 +1398,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 ConnectorType; typedef itk::ImageToVTKImageFilter 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 = 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(); +#else + cntVTK->SetInputData( idata ); +#endif + vtkCleanPolyData* cpd = vtkCleanPolyData::New( ); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + cpd->SetInput( cntVTK->GetOutput( ) ); + cpd->Update( ); + cpd->UpdateInformation(); +#else + cpd->SetInputData( cntVTK->GetOutput( ) ); +#endif + 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(); +#else + conn->SetInputData( cpd->GetOutput( ) ); +#endif + vtkStripper* vtkstripper = vtkStripper::New( ); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + vtkstripper->SetInput( conn->GetOutput() ); + vtkstripper->Update(); + vtkstripper->UpdateInformation(); +#else + vtkstripper->SetInputData( conn->GetOutput() ); + cntVTK->Update(); +#endif + vtkPolyData* polyDataResult = cntVTK->GetOutput(); + //std::cout<<"Points "<GetNumberOfPoints()<Update( ); + polyDataResult->UpdateInformation(); +#else + // .. +#endif + 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 <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"); + } // for - size=polyDataResult->GetNumberOfPoints(); - for (ii=0;iiGetPoint(ii); - double x=p[0]; - double y=p[1]; - /*if(fabs(yAct-y)>20) + while(!vecYo.empty()) { - if((xAct-x)>1 || (xAct-x)<-1) - { - vecX.push_back( p[0] ); - vecY.push_back( p[1] ); - myfile <11) + myfile.close(); + +// for(int l=0;lSetContour( &vecX , &vecY , &vecZ ); + + int method=2; + if (method==0) { - vecXo.push_back(p[0]); - vecYo.push_back(p[1]); - } - else - { - vecX.push_back( p[0] ); - myfile <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; - } - - while(!vecXo.empty()) - { - vecX.push_back(vecXo.back()); - //std::cout<<" x Siguiente "<factoryManualContourModel( typeofcontour ); + manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 ); + if (sizeCtrPt>=3){ + for (j=0 ; jSetContour( &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(); - - manualBaseModel *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 + 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){ @@ -1883,34 +1732,57 @@ 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 ); + int typeofcontour = 1; //--Extracting Contour - //vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData(); vtkImageData *imagedata = getImageData(); -// double *range = imagedata->GetScalarRange(); -// double thr = 1; vtkImageReslice *imageReslice = vtkImageReslice::New(); //EED -// double spc[3]; -// imagedata->GetSpacing(spc); -// x = x*spc[0]; -// y = y*spc[1]; -// z = z*spc[3]; + double spc[3]; + imagedata->GetSpacing(spc); + x = x*spc[0]; + y = y*spc[1]; + z = z; +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 imageReslice->SetInput( imagedata ); +#else + imageReslice->SetInputData( imagedata ); +#endif imageReslice->SetInformationInput(imagedata); imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1); - imageReslice->SetResliceAxesOrigin(0,0,z); + imageReslice->SetResliceAxesOrigin(0,0,z*spc[2]); imageReslice->SetOutputDimensionality(2); imageReslice->SetInterpolationModeToLinear(); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + // .. +#else + imageReslice->Update(); +#endif + imagedata = imageReslice->GetOutput(); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 imagedata->Update(); imagedata->UpdateInformation(); +#else + // .. +#endif vtkContourFilter* cntVTK = vtkContourFilter::New( ); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 cntVTK->SetInput( imagedata ); +#else + cntVTK->SetInputData( imagedata ); +#endif cntVTK->SetNumberOfContours( 1 ); //cntVTK->SetValue( 0, vmin ); @@ -1921,36 +1793,73 @@ void wxContourMainFrame::SegmentationOneSlice( int x, int y, int z, int isovalue cntVTK->UpdateInformation(); vtkCleanPolyData* cpd = vtkCleanPolyData::New( ); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 cpd->SetInput( cntVTK->GetOutput( ) ); +#else + cpd->SetInputData( cntVTK->GetOutput( ) ); +#endif cpd->ConvertLinesToPointsOff( ); cpd->Update( ); cpd->UpdateInformation(); vtkPolyDataConnectivityFilter* conn = vtkPolyDataConnectivityFilter::New( ); - conn->SetExtractionModeToClosestPointRegion( ); + +// conn->SetExtractionModeToPointSeededRegions(); +// conn->SetExtractionModeToCellSeededRegions(); +// conn->SetExtractionModeToSpecifiedRegions(); +// conn->SetExtractionModeToLargestRegion(); +// conn->SetExtractionModeToAllRegions(); + + conn->SetExtractionModeToClosestPointRegion(); + //conn->SetMaxRecursionDepth( 3000 ); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 conn->SetInput( cpd->GetOutput( ) ); +#else + conn->SetInputData( cpd->GetOutput( ) ); +#endif conn->SetClosestPoint( x, y, 0 ); conn->Update( ); conn->UpdateInformation(); vtkCleanPolyData* cpd2 = vtkCleanPolyData::New( ); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 cpd2->SetInput( conn->GetOutput( ) ); +#else + cpd2->SetInputData( conn->GetOutput( ) ); +#endif cpd2->Update(); cpd2->UpdateInformation(); vtkStripper* vtkstripper = vtkStripper::New( ); +vtkstripper->SetJoinContiguousSegments(true); + vtkstripper->SetMaximumLength(20000); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 vtkstripper->SetInput( cpd2->GetOutput() ); +#else + vtkstripper->SetInputData( cpd2->GetOutput() ); +// vtkstripper->SetInputData( cntVTK->GetOutput() ); + +#endif vtkstripper->Update(); vtkstripper->UpdateInformation(); vtkPolyData* polyDataResult = vtkstripper->GetOutput(); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 polyDataResult->Update( ); polyDataResult->UpdateInformation(); +#else + //... +#endif /* EED ofstream myfile; @@ -1961,116 +1870,144 @@ myfile << "-------------------------------------\n"; polyDataResult->GetLines()->Print(myfile); myfile.close(); */ - - cntVTK -> Delete(); - cpd2 -> Delete(); - cpd -> Delete(); - conn -> Delete(); - + cntVTK -> Delete(); + cpd2 -> Delete(); + cpd -> Delete(); + conn -> Delete(); //--Calculating control points - std::vector vecX; std::vector vecY; std::vector vecZ; - std::vector vecCtrlPointX; std::vector vecCtrlPointY; std::vector vecCtrlPointZ; +printf("EED wxContourMainFrame::SegmentationOneSlice GetNumberOfLines=%d \n",polyDataResult->GetNumberOfLines() ); - double *p; - int ii,size=polyDataResult->GetNumberOfPoints(); - int id; - for (ii=1;ii<=size;ii++) - { - id = polyDataResult->GetLines()->GetData()->GetValue(ii); - p = polyDataResult->GetPoint(id); -// double x=p[0]; -// double y=p[1]; - vecX.push_back( p[0] ); - vecY.push_back( p[1] ); - vecZ.push_back( 900 ); -// vecZ.push_back( p[2] ); - } +int numberOfPointsInCell; +int numberOfcells=polyDataResult->GetNumberOfCells(); +for (int jj=0; jjGetCell( jj ); + numberOfPointsInCell=vtkcell->GetNumberOfPoints(); + printf("EED wxContourMainFrame::SegmentationOneSlice cell=%d points=%d \n",jj,numberOfPointsInCell ); +}// for jj +printf("EED wxContourMainFrame::SegmentationOneSlice PrintSelf \n"); - ExtractControlPoints2D *extractcontrolpoints2d = new ExtractControlPoints2D(); - extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ ); +polyDataResult->PrintSelf( std::cout, vtkIndent(0) ); -//PROOFS - /*if (methodRadiobox->GetSelection()==0){ - extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); - } - if (methodRadiobox->GetSelection()==1){ - extractcontrolpoints2d->GetControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); - } - if (methodRadiobox->GetSelection()==2){ - extractcontrolpoints2d->SetSamplingControlPoints( sampling ); - extractcontrolpoints2d->GetSamplingControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); - }*/ - if (method==0){ - extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); - } - else if (method==1){ - extractcontrolpoints2d->GetControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); - } - else if (method==2){ - extractcontrolpoints2d->SetSamplingControlPoints( sampling ); - extractcontrolpoints2d->GetSamplingControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); - } + 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;iiGetLines()->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]); + // double x=p[0]; + // double y=p[1]; + vecX.push_back( p[0] ); + vecY.push_back( p[1] ); + //EED 2017-12-16 + vecZ.push_back( -900 ); + // vecZ.push_back( p[2] ); + } - //--Adding contour to the system + ExtractControlPoints2D *extractcontrolpoints2d = new ExtractControlPoints2D(); + extractcontrolpoints2d->SetContour( &vecX , &vecY , &vecZ ); - std::vector actualInstantVector; - _instantPanel->getInstant( actualInstantVector ); - actualInstantVector[1]=z; + //PROOFS + /*if (methodRadiobox->GetSelection()==0){ + extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); + } + if (methodRadiobox->GetSelection()==1){ + extractcontrolpoints2d->GetControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); + } + if (methodRadiobox->GetSelection()==2){ + extractcontrolpoints2d->SetSamplingControlPoints( sampling ); + extractcontrolpoints2d->GetSamplingControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); + }*/ - int j,sizeCtrPt = vecCtrlPointX.size(); - manualBaseModel *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 ) + extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); + } else if (method==1){ + extractcontrolpoints2d->GetControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); + } else if (method==2){ + extractcontrolpoints2d->SetSamplingControlPoints( sampling ); + extractcontrolpoints2d->GetSamplingControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); + } + + //--Adding contour to the system + std::vector actualInstantVector; + _instantPanel->getInstant( actualInstantVector ); + actualInstantVector[1]=z; + + int j,sizeCtrPt = vecCtrlPointX.size(); + manualBaseModel *manModelContour = kernelManager->factoryManualContourModel( typeofcontour ); + manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 *2 ); + manModelContour->SetLabel2( std::to_string(z) ); + if (sizeCtrPt>=3) { - 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 + for (j=0 ; jAddPoint( vecCtrlPointX[j] / spc[0], vecCtrlPointY[j] / spc[1], 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 + } // if NumberOfCells > 0 + +printf("EED wxContourMainFrame::SegmentationOneSlice End\n"); } -int wxContourMainFrame::GetImageDataSizeZ(){ + +int wxContourMainFrame::GetImageDataSizeZ() +{ return _theViewPanel->GetImageDataSizeZ(); } -void wxContourMainFrame::GetImageDataRange(double *range){ +void wxContourMainFrame::GetImageDataRange(double *range) +{ _theViewPanel->GetImageDataRange(range); } -void wxContourMainFrame::onSegmentationAllSlice(int minZ,int maxZ,int isovalue,int sampling,int method){ +void wxContourMainFrame::onSegmentationAllSlice(int minZ,int maxZ,int isovalue,int sampling,int method) +{ //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; - double porcent; - wxString tmpString; - double totalZ = maxZ-minZ+1; + int x = _theViewPanel->GetX(); + int y = _theViewPanel->GetY(); + int z; + double porcent; + wxString tmpString; + double totalZ = maxZ-minZ+1; for( z=minZ ; z<=maxZ ; z++ ) { porcent = 100.0* (z-minZ)/totalZ; @@ -2296,29 +2233,59 @@ int wxContourMainFrame::getWindowLevel() return _theViewPanel->getWindowLevel(); } -void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){ +void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel) +{ _theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel); RefreshInterface(); } -void wxContourMainFrame::onInterpolation(bool interpolate){ +void wxContourMainFrame::onInterpolation(bool interpolate) +{ _theViewPanel->onInterpolation(interpolate); RefreshInterface(); } -void wxContourMainFrame::onChangeInstant(std::string name,int actual){ - _instantPanel->setConceptValue( name, actual ); +void wxContourMainFrame::onBeforeAfterContour(bool before,bool after) +{ + _theViewPanel->onBeforeAfterContour(before,after); + RefreshInterface(); } +void wxContourMainFrame::onJumpSlice(int step, int shift) +{ + std::vector tempVector; + _instantPanel->getInstant( tempVector ); + int ss = abs(step); + int pos = tempVector[1]; + int maxZ = interfMainPanel::getInstance()->GetImageDataSizeZ(); + pos=(pos/ss)*ss+step+shift; + if ((pos>=0) && (possetInstant( tempVector ); + RefreshInterface(); + } // if pos +} -void wxContourMainFrame::resetAppend(){ - kernelManager->resetAppend(); +void wxContourMainFrame::onShowTextContour(bool show) +{ + _theViewPanel->onShowTextContour(show); + RefreshInterface(); +} +void wxContourMainFrame::onChangeInstant(std::string name,int actual) +{ + _instantPanel->setConceptValue( name, actual ); } +void wxContourMainFrame::resetAppend() +{ + kernelManager->resetAppend(); +} -void wxContourMainFrame::onSpreadAdd(){ +void wxContourMainFrame::onSpreadAdd() +{ std::vector vecX; std::vector vecY; std::vector vecZ; @@ -2330,7 +2297,8 @@ void wxContourMainFrame::onSpreadAdd(){ } -void wxContourMainFrame::onSpreadAddAll(){ +void wxContourMainFrame::onSpreadAddAll() +{ //EED02 std::vector tempVector; _instantPanel->getInstant( tempVector ); @@ -2368,7 +2336,8 @@ void wxContourMainFrame::onSpreadAddAll(){ } -void wxContourMainFrame::onSpreadGo(int type){ +void wxContourMainFrame::onSpreadGo(int type) +{ //JCP 20-10-08 Undo redo implementation saveState(); //JCP 20-10-08 Undo redo implementation @@ -2423,11 +2392,13 @@ void wxContourMainFrame::onSpreadGo(int type){ //RefreshInterface(); } -void wxContourMainFrame::getInstantVector(std::vector& tempVector){ - +void wxContourMainFrame::getInstantVector(std::vector& tempVector) +{ + _instantPanel->getInstant( tempVector ); } -std::vector wxContourMainFrame::getOutlinesName(int slide){ +std::vector wxContourMainFrame::getOutlinesName(int slide) +{ std::vector tempVector; _instantPanel->getInstant(tempVector); //Asignation of slide number should be different ex by name @@ -2444,7 +2415,6 @@ void wxContourMainFrame::SetScalarRange(int grayRangeMin, int grayRangeMax) void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ,int grayRangeMin, int grayRangeMax) { -//EED01Juillet2009 GenerateContourExtractData(); wxString tempString; int maxContourGroup = 0; @@ -2469,8 +2439,6 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel std::vector tempVector; _instantPanel->getInstant( tempVector ); -//EED01Juillet2009 vtkImageData *imagedata = _theViewPanel->getImageData(); -// int sizeZ = _theViewPanel->GetImageDataSizeZ(); int z; int ii,sizeLstContourThings; @@ -2493,7 +2461,6 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel totalZ = maxZ-minZ+1; -//EED01Juillet2009 _contourextractdata->SetImage( imagedata); _contourextractdata->InitVolumeStatistics(); @@ -2757,7 +2724,6 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup) { wxBusyCursor wait; -//EED01Juillet2009 GenerateContourExtractData(); //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection(); _contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); @@ -2773,7 +2739,6 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil std::vector tempVector; _instantPanel->getInstant( tempVector ); -//EED01Juillet2009 vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData(); int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ(); int z; int ii,sizeLstContourThings; @@ -2787,7 +2752,6 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil maxZ = sizeZ;//_mbarrange->GetEnd(); totalZ = maxZ-minZ+1; -//EED01Juillet2009 _contourextractdata->SetImage( imagedata); // For each slice.. for ( z=0 ; z_radiolstboxContourGroup->GetSelection(); if (typeContourGroup==3) @@ -2908,7 +2871,6 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value int z; int ii,sizeLstContourThings; - double totalZ; double porcent; @@ -2924,7 +2886,6 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value totalZ = maxZ-minZ; -//EED01Juillet2009 _contourextractdata->SetImage( imagedata); // cleanning image before range for (z=0; zGetScalarType()==VTK_CHAR ) + { + result="CHAR"; + } else if ( image->GetScalarType()==VTK_UNSIGNED_CHAR ){ + result="UCHAR"; + } else if ( image->GetScalarType()==VTK_FLOAT ){ + result="FLOAT"; + } else if ( image->GetScalarType()==VTK_DOUBLE ){ + result="DOUBLE"; + } else if ( image->GetScalarType()==VTK_INT ){ + result="INT"; + } else if ( image->GetScalarType()==VTK_UNSIGNED_INT ){ + result="UINT"; + } else if ( image->GetScalarType()==VTK_SHORT ){ + result="SHORT"; + } else if ( image->GetScalarType()==VTK_UNSIGNED_SHORT ){ + result="USHORT"; + } else if ( image->GetScalarType()==VTK_LONG ){ + result="LONG"; + } else if ( image->GetScalarType()==VTK_UNSIGNED_LONG ){ + result="ULONG"; + } + return result; +} +void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value) +{ + std::string stringType; double spc[3]; kernelManager->GetSpacing(spc,0); // returns the spacing of the first image - - std::string temp = directory + "/" + namefile + "-image-Value.mhd"; + stringType = GetStringTypeImage(value); + std::string temp = directory + "/" + namefile + "-image-Value-"+stringType+".mhd"; wxString filename = crea::std2wx(temp); // Image Value vtkImageChangeInformation *valueChInfo = vtkImageChangeInformation::New(); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 valueChInfo->SetInput(value); +#else + valueChInfo->SetInputData(value); +#endif valueChInfo->SetSpacingScale(spc); + valueChInfo->Update(); vtkMetaImageWriter *writerValueImage = vtkMetaImageWriter::New( ); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 writerValueImage->SetInput( valueChInfo->GetOutput() ); +#else + writerValueImage->SetInputData( valueChInfo->GetOutput() ); +#endif writerValueImage->SetFileName( (const char *)filename.mb_str() ); writerValueImage->SetFileDimensionality( 3 ); writerValueImage->SetCompression(false); writerValueImage->Write( ); // Image Mask - temp = directory + "/" + namefile + "-image-Mask.mhd"; + stringType = GetStringTypeImage(mask); + temp = directory + "/" + namefile + "-image-Mask-"+stringType+".mhd"; // LG 14/01/09 : using crea filename = crea::std2wx(temp); @@ -3021,10 +3023,23 @@ void wxContourMainFrame::SaveImageResult(std::string directory,std::string namef vtkImageChangeInformation *maskChInfo = vtkImageChangeInformation::New(); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 maskChInfo->SetInput(mask); +#else + maskChInfo->SetInputData(mask); +#endif maskChInfo->SetSpacingScale(spc); + maskChInfo->Update(); vtkMetaImageWriter *writerMaskImage = vtkMetaImageWriter::New( ); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 writerMaskImage->SetInput( maskChInfo->GetOutput() ); +#else + writerMaskImage->SetInputData( maskChInfo->GetOutput() ); +#endif + writerMaskImage->SetFileName( (const char *)filename.mb_str() ); writerMaskImage->SetFileDimensionality( 3 ); writerMaskImage->SetCompression(false); @@ -3072,7 +3087,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); @@ -3080,7 +3097,8 @@ void wxContourMainFrame::saveFileWithContoursAutomatique(){ onSave(); } } -void wxContourMainFrame::ShowToolsPanel(bool show){ +void wxContourMainFrame::ShowToolsPanel(bool show) +{ _pannew->Show(show); } @@ -3094,7 +3112,7 @@ void wxContourMainFrame::SetContourGroup(int contourGroup) wxPanel *wxContourMainFrame::getMaskImageViewPanel(wxWindow *parent) { - + if (_viewMaskImagePanel==NULL) { _contourextractdata = new ContourExtractData(true); @@ -3103,15 +3121,29 @@ wxPanel *wxContourMainFrame::getMaskImageViewPanel(wxWindow *parent) // _theViewPanel->getImageData()->GetScalarRange(range); //int min = (int)floor (range[0]); //int max = (int)ceil (range[1]); + +//EED 2017-12-17 int min = 254; int max = 256; - _viewMaskImagePanel = new ThresholdImageViewPanel( parent, -1, -1 , 0); + + _viewMaskImagePanel = new ThresholdImageViewPanel( parent, -1, -1 , -1,-1, 0); _viewMaskImage = new ThresholdImageView(); - _viewMaskImage->SetImage(_contourextractdata->GetVtkImageMaskResult() ); + _viewMaskImage->SetImage( _contourextractdata->GetVtkImageMaskResult() ); _viewMaskImage->SetminMaxValue( min, max); _viewMaskImage->SetBaseColor( 0,0,1 ); + + + std::vector colorbarposition; + colorbarposition.push_back( -999 ); + colorbarposition.push_back( -999 ); + _viewMaskImage->SetColorBarPosition( colorbarposition ); + double spc[3]; + _viewMaskImage->SetSpcBase( _theViewPanel->getImageData()->GetSpacing() ); + _viewMaskImage->SetNewSpacingLayer( _theViewPanel->getImageData()->GetSpacing() ); + _viewMaskImagePanel->SetThresholdImageView( _viewMaskImage ); _viewMaskImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() ); + _viewMaskImage->onThresholdChangeOpacity( 25 ); } return _viewMaskImagePanel; } @@ -3125,16 +3157,38 @@ wxPanel *wxContourMainFrame::getColorLayerImageViewPanel(wxWindow *parent) _theViewPanel->getImageData()->GetScalarRange(range); int min = (int)floor (range[0]); int max = (int)ceil (range[1]); - _viewColorLayerImagePanel = new ColorLayerImageViewPanel( parent, min, max , 1); - _viewColorLayerImage = new ColorLayerImageView(); -// _viewColorLayerImage->SetImage( _theViewPanel->getImageData() ); - _viewColorLayerImage->SetImage( NULL ); - _viewColorLayerImagePanel->SetColorLayerImageView( _viewColorLayerImage ); - _viewColorLayerImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() ); + _viewColorLayerImagePanel = new ColorLayerImageViewPanel( parent, min, max, 100, 1); + _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetwxVtkBaseView( 0 , _theViewPanel->getWxVtkBaseView() ); + // std::vector range = bbGetInputlstRangeForColorBar(); + // clivp->GetColorLayerImageViewManager()->SetRangeForColorBar( range ); + std::vector colorbarposition; + colorbarposition.push_back( 50 ); + colorbarposition.push_back( 105 ); + _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetColorBarPosition( colorbarposition ); + // std::vector base_color; + // _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetBaseColors( base_color ); + // std::vector grey_level_boundaries; + // clivp->GetColorLayerImageViewManager()->SetGreyLevelBoundaries( grey_level_boundaries ); + std::vector transparence_level_boundaries; + transparence_level_boundaries.push_back(0); + _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetBaseTransparence( transparence_level_boundaries ); + _viewColorLayerImagePanel->GetColorLayerImageViewManager()->SetPlainOrGradientColor( false ); +// _viewColorLayerImagePanel->SetFittingMode( 3 ); } return _viewColorLayerImagePanel; } +void wxContourMainFrame::SetColorLayerImage(vtkImageData* img) +{ + if (_viewColorLayerImagePanel!=NULL) + { + if (img!=NULL) + { + _viewColorLayerImagePanel->SetImage( img ); + RefreshInterface(); + } // img + } // _viewColorLayerImagePanel +} wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent) { @@ -3142,15 +3196,28 @@ wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent) { double range[2]; _theViewPanel->getImageData()->GetScalarRange(range); - int min = (int)floor (range[0]); - int max = (int)ceil (range[1]); - _viewThresholdImagePanel = new ThresholdImageViewPanel( parent, min, max , 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() ); - _viewThresholdImage->SetminMaxValue( min, max); + std::vector colorbarposition; + colorbarposition.push_back( 10 ); + colorbarposition.push_back( 105 ); + _viewThresholdImage->SetColorBarPosition( colorbarposition ); + double spc[3]; + _viewThresholdImage->SetSpcBase( _theViewPanel->getImageData()->GetSpacing() ); + _viewThresholdImage->SetNewSpacingLayer( _theViewPanel->getImageData()->GetSpacing() ); + _viewThresholdImage->SetBaseColor( 1,0,0 ); _viewThresholdImagePanel->SetThresholdImageView( _viewThresholdImage ); _viewThresholdImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() ); + _viewThresholdImage->onThresholdChangeOpacity( 25 ); + RefreshInterface(); } return _viewThresholdImagePanel; } @@ -3180,10 +3247,18 @@ double wxContourMainFrame::getContourSizeInPixels() std::string cloneName = currentSelection [0]; manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel(); - contourSize = manualModel-> GetPathSize(); + +// EED 2017-05-30 +// contourSize = manualModel->GetPathSize(); + double spc[3]; + spc[0]=1; + spc[1]=1; + spc[2]=1; + contourSize = manualModel->GetPathSize( spc ); } return contourSize; } + manualBaseModel * wxContourMainFrame::getContour () { std::vector currentSelection = _theViewPanel->getSelectedObjects(); @@ -3213,9 +3288,16 @@ void wxContourMainFrame::onPrintLabel (wxString label, manualBaseModel* manualMo } void wxContourMainFrame::onInsertCalculation(manualBaseModel* manualModel) { - double sizeInPixel = manualModel ->GetPathSize(); +// EED 2017-05-30 +// double sizeInPixel = manualModel ->GetPathSize( ); + double spc[3]; + spc[0]=1; // ???? + spc[1]=1; // ???? + spc[2]=1; // ???? + double sizeInPixel = manualModel ->GetPathSize( spc ); + double onePixelRealSize = interfMainPanel::getInstance()->GetPixelValue();; - double realContourSize = sizeInPixel*onePixelRealSize; + double realContourSize = sizeInPixel*onePixelRealSize; manualModel ->SetRealSize(realContourSize); } @@ -3233,5 +3315,109 @@ void wxContourMainFrame::SetFileLocation(std::string newFileLocation) { _fileLocation = newFileLocation; std::cout<<"GETFILELOCATION:"<<_fileLocation<setCurrentFileName(_fileLocation); } //------------------------------------------------------------------------------------------------------------ + + + + + + + + +void wxContourMainFrame::FlipSelectedContours(int flipDirection) +{ + FlipLstOfContours( + (std::vector)_theViewPanel->getSceneManager()->getSelectedObjects() , + flipDirection + ); + +} + +void wxContourMainFrame::FlipActualSliceContours(int flipDirection) +{ + FlipLstOfContours( + (std::vector)_theViewPanel->getSceneManager()->GetlstContoursNameActualSlice() , + flipDirection + ); +} + +void wxContourMainFrame::FlipAllContours(int flipDirection) +{ + FlipLstOfContours( + kernelManager->GetLstNameThings() , + flipDirection + ); +} + +void wxContourMainFrame::FlipLstOfContours(std::vector lstNameThings, int flipDirection) +{ + int ext[6]; + getImageData()->GetExtent(ext); + int sizeX = ext[1]-ext[0]; + int sizeY = ext[3]-ext[2]; + + + int i,sizeLstNameThings; + int ii,sizeLstPoints; + + sizeLstNameThings = lstNameThings.size(); + for (i=0 ; igetOutlineByKeyName(lstNameThings[i]); + if (flipDirection==0) + { + manualModel->Transform_Ax_Plus_B(-1,sizeX,1,0 ); + } else { + manualModel->Transform_Ax_Plus_B(1,0,-1,sizeY ); + } + }// for i list of Things + + //-- Static Contours + + lstNameThings = kernelManager->GetLstNameThingsStatic(); + sizeLstNameThings = lstNameThings.size(); + for (i=0 ; igetOutlineByKeyName(lstNameThings[i]); + if (flipDirection==0) + { + manualModel->Transform_Ax_Plus_B(-1,sizeX,1,0 ); + } else { + manualModel->Transform_Ax_Plus_B(1,0,-1,sizeY ); + } + }// for i list of static things +} + +void wxContourMainFrame::FlipContours(int typeContourFlip, int flipDirection) +{ + saveState(); + + if (typeContourFlip==0) // + { + FlipSelectedContours(flipDirection); + } + + if (typeContourFlip==1) // + { + FlipActualSliceContours(flipDirection); + } + + if (typeContourFlip==2) // + { + FlipAllContours(flipDirection); + } + RefreshInterface(); +} + +void wxContourMainFrame::SetXY(int x, int y) +{ + _theViewPanel->SetXY(x,y); +} + + + +