X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FInterface_ManagerContour_NDimensions%2FwxContourMainFrame.cxx;h=1957a9e4d37aed7e1a61f5576abc4e8e7f95cb0d;hb=40033c782c0c68ecc676bb59de5c7fe9eb3cac44;hp=256008211255846d9b8ce3e40c998e1a3949549e;hpb=6e3c929c883c405e0075fa8df10b12a935979367;p=creaContours.git diff --git a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx index 2560082..1957a9e 100644 --- a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx +++ b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx @@ -13,12 +13,10 @@ #include "NameWrapper.h" #include "wx/artprov.h" #include "ConceptDataWrap.h" +#include -#include -//#include "ImageSourceThing.h" -//#include "wxContour_ActionCommandsID.h" -//#include "OutlineModelBuilder.h" -//#include "wxContourEventHandler.h" +#include +using namespace std; //---------------------------------------------------------------------------------------------------------------- // Class implementation @@ -38,94 +36,108 @@ char wxContourMainFrame::COPY = 'C'; : wxPanel(parent, id, pos, size, style) { m_mgr.SetManagedWindow(this); + _contourGroup = 1; _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; +// _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; +// _actorPresent = false; + // 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; + + _contourextractdata = NULL; + _viewMaskImage = NULL; + _viewMaskImagePanel = NULL; + _viewThresholdImage = NULL; + _viewThresholdImagePanel = NULL; } -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); + _contourGroup = 1; _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; +// _actorPresent = false; + _viewMaskImage = NULL; + _viewMaskImagePanel = NULL; + _viewThresholdImage = NULL; + _viewThresholdImagePanel = 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; + _datadir = datadir; - _performingOperation = new PerformingOperation(); -//JCP 17 - 10 - 2008 - - inredo = 0; - inundo = 0; - - kernelManager = new KernelManagerContour(images); - //kernelManager->setVectImages(images); - //kernelManager->initializeEnvironment(); - - //vtkImageData* selectedimage = kernelManager->getVectImages()[0]; -//------------------------------------------------------------- + inredo = 0; + inundo = 0; + + _pannew = interfMainPanel::getInstance(this,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);*/ + if(images.size() > 0) + { + this->setVectImages(images); + } + + _contourextractdata = NULL; +} - //Creating the evtHandler of the panels - //wxContourEventHandler * eventHandler = new wxContourEventHandler(); +void wxContourMainFrame::setVectImages(std::vector imgs) +{ - //Creating the window that will show the panels + _images = imgs; - //Getting the parent for the panels ( using aui ) - wxAuiNotebook * notebook = this->createNotebook(); + #if defined(__GNUC__) + std::string str_home(getenv("HOME")); + #elif defined(_WIN32) + std::string str_home(getenv("USERPROFILE")); + #endif + std::string strCreaContourDataTmp = str_home + "/.creaContourDataTemp/"; - //JCP 17 - 11 - 08 - //wxInstantChooserPanel * instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true); - //JCP 17 - 11 - 08 std::vector conceptNameVect; std::vector conceptSizeVect; - + notebook = this->createNotebook(); - _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" ); - _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook ); + kernelManager = new KernelManagerContour( imgs , _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,50 +148,55 @@ 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 + this->configurePanels( ); - - } +} - 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; } - std::vector wxContourMainFrame ::getVectImages(){ + std::vector wxContourMainFrame ::getVectImages() + { return kernelManager->getVectImages(); } - wxContourMainFrame* wxContourMainFrame :: getInstance(){ - return instance; - + + wxContourMainFrame* wxContourMainFrame :: getInstance() + { + return instance; + } + + void wxContourMainFrame :: resetInstance() + { + instance->Destroy(); } wxContourMainFrame :: ~wxContourMainFrame() { - m_mgr.UnInit(); - //El problema al cerrar la aplicacion puede estar asociado - //a que wxAUINotebook esta en la aplicacion - //principal (wxContourGUIExample)tambien -//EED???? delete _theViewPanel; -//EED???? delete _instantPanel; -//EED???? delete _buttonsBar; -//EED???? delete _actualInstant; -//EED???? delete _sceneManager; + delete _contourextractdata; + deleteAllContours(); + _pannew->Close(); + interfMainPanel::resetInstance(); + delete kernelManager; + instance = NULL; + //_pannew->Destroy(); + //delete _pannew; + + m_mgr.UnInit(); + //delete m_mgr; + + //El problema al cerrar la aplicacion puede estar asociado + //a que wxAUINotebook esta en la aplicacion + //principal (wxContourGUIExample)tambien + //EED???? delete _theViewPanel; + //EED???? delete _instantPanel; + //EED???? delete _buttonsBar; + //EED???? delete _actualInstant; + //EED???? delete _sceneManager; } @@ -199,45 +216,44 @@ wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const w //------------------------------------------------------------------------------------------------------------ // Creational and initialization methods //------------------------------------------------------------------------------------------------------------ - bool wxContourMainFrame :: configurePanels(wxAuiNotebook* theNoteBook) + bool wxContourMainFrame :: configurePanels( ) { bool configured = _theViewPanel!=NULL; configured &= _theViewPanel!=NULL; if( _theViewPanel!=NULL ) { - theNoteBook->AddPage( _theViewPanel, wxT(" View ") ); + notebook->AddPage( _theViewPanel, wxT(" View ") ); m_mgr.Update(); } if( configured ) { - theNoteBook->AddPage( _instantPanel, wxT("Instant Page") ); + notebook->AddPage( _instantPanel, wxT("Instant Page") ); m_mgr.Update(); } - m_mgr.AddPane(theNoteBook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); + m_mgr.AddPane(notebook, wxAuiPaneInfo().Name(wxT("notebook_content")).CenterPane().PaneBorder(false)); m_mgr.Update(); - configured &= _buttonsBar!=NULL; - if( _buttonsBar!=NULL ) - { - m_mgr.AddPane(_buttonsBar, wxAuiPaneInfo(). - Name(wxT("TB")).Caption(wxT("Buttons Bar")). - ToolbarPane().Top(). - LeftDockable( ).RightDockable( false ).CloseButton(false)); - m_mgr.Update(); - } - //CreateStatusBar(); - + SetMinSize(wxSize(300,300)); m_mgr.Update(); return configured; } - void wxContourMainFrame :: setNotebook( wxAuiNotebook * noteBook ) - { + bool wxContourMainFrame::addNewPanel(wxPanel* panel) + { + bool configured = panel!=NULL; + configured &= panel!=NULL; + + if( configured ) + { + notebook->AddPage( panel, wxT(" Viewer "), true ); + m_mgr.Update(); + } + return configured; } //------------------------------------------------------------------------------------------------------------ @@ -251,45 +267,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,12 +329,38 @@ 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 ); +} + +// RaC 09-09 -------------------------------------- +void wxContourMainFrame::onCreateContourPoints( ){ + //JCP 20-10-08 Undo redo implementation + saveState(); + //JCP 20-10-08 Undo redo implementation + createContour( 7 ); +} +// RaC 09-09 -------------------------------------- + +// RaC 10-09 -------------------------------------- +void wxContourMainFrame::onCreateContourPolygon( ){ + //JCP 20-10-08 Undo redo implementation + saveState(); + //JCP 20-10-08 Undo redo implementation + createContour( 10 ); +} +// RaC 10-09 -------------------------------------- + //------------------------------------------------------------------------------------------------------------ void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel ) { - //Creating the manualContourModel and including in the model - manualContourModel * manModelContour = factoryManualContourModel(panel ); + //Creating the manualBaseModel and including in the model + manualBaseModel * manModelContour = factoryManualContourModel(panel ); std::vector instantVector; _instantPanel->getInstant( instantVector ); @@ -343,8 +385,7 @@ void wxContourMainFrame :: onCreateContourBullEye(wxPanel* panel ) void wxContourMainFrame :: createContour( int typeContour ) { //Creating the manualContourModel and including in the model - manualContourModel * manModelContour = kernelManager->factoryManualContourModel(typeContour); - + manualBaseModel * manModelContour = kernelManager->factoryManualContourModel(typeContour); std::vector instantVector; _instantPanel->getInstant( instantVector ); @@ -366,10 +407,10 @@ void wxContourMainFrame :: createContour( int typeContour ) } } -manualContourModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){ +manualBaseModel * wxContourMainFrame::factoryManualContourModel(wxPanel* panel){ manualContourModelBullEye *manModelContourBullEye = new manualContourModelBullEye(); - manualContourModel *manModelContour=NULL; + manualBaseModel *manModelContour=NULL; manModelContour = manModelContourBullEye; if (panel!=NULL){ int iCrown,sizeCrowns,iSector,sizeSectors; @@ -466,7 +507,8 @@ void wxContourMainFrame :: deleteContours( std::vector keyNamesVec } void wxContourMainFrame :: deleteContour( std::string theKeyName ){ - /*manualContourModel * cModel; + /* + manualContourModel * cModel; manualViewBaseContour * cViewer; manualContourBaseControler * cControler; @@ -486,11 +528,6 @@ void wxContourMainFrame :: deleteContour( std::string theKeyName ){ //cViewer = conwrapviewControl->getViewer(); //_theViewPanel->getSceneManager()->removeWrap( theKeyName ); //cControler* conwrapviewControl->getControler(); -//EED Borrame -//FILE *ff = fopen("c:/temp/wxVtkBaseView_SceneManagerStadistics.txt","a+"); -//fprintf(ff,"EED wxContourEventHandler::deleteContours() \n" ); -//fprintf(ff," %s %p\n",keyNamesVector[i].c_str(), cControler ); -//fclose(ff); // delete cModel; // delete cViewer; // delete cControler; @@ -562,32 +599,86 @@ void wxContourMainFrame::setConceptValue( std::string name, int value ){ _instantPanel->setConceptValue(name, value); } + ConceptDataWrap* wxContourMainFrame::getLastConceptData(){ return _instantPanel->getLastConceptData(); } + + bool wxContourMainFrame::getIfConceptCheckedAt( std::string name, int pos ){ return _instantPanel->getIfConceptCheckedAt( name, pos ); } -void wxContourMainFrame::changeInstant(){ + + +void wxContourMainFrame::ShowResultImages(int typeContourGroup, int selection, int minZ, int maxZ) +{ + vtkImageData * mask; + vtkImageData * value; + this->getMaskValue(&mask, &value, typeContourGroup, selection, minZ, maxZ); + + std::vector nTypeView; + nTypeView.push_back(5); + nTypeView.push_back(1); + 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); + + 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)); + + 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(); +} + + + + +void wxContourMainFrame::changeInstant() +{ std::vector instantVect; _instantPanel->getInstant( instantVect ); -// Instant * theInstant = new Instant ( &instantVect ); - - //Setting the actual instant - //_actualInstant = theInstant; + int actualSlice = instantVect[1]; kernelManager->setInstant(instantVect); - //_modelManager->setInstant( _actualInstant ); - + + // Refresh Mask image + if(_viewMaskImage!=NULL){ + _viewMaskImage->SetZ(actualSlice); + if (_viewMaskImagePanel->IsVisible()==true) + { + vtkImageData *mask, *value; + getMaskValue(&mask,&value, _contourGroup , 0, -1, -1); + _viewMaskImage->onThreshold(); + } + } + + // Refresh Threshold image + if(_viewThresholdImage!=NULL){ + _viewThresholdImage->SetZ(actualSlice); + if (_viewThresholdImagePanel->IsVisible()==true){ + _viewThresholdImage->onThreshold(); + } + } + updateInstantOutlines(); updateInstantImageData(); updateInstantAxes(); - - } -void wxContourMainFrame :: updateInstantOutlines(){ - + + + +void wxContourMainFrame :: updateInstantOutlines() +{ _theViewPanel->removeSceneContours(); _theViewPanel->addNameWrapperToScene(); @@ -604,18 +695,26 @@ std::string wxContourMainFrame::getNameWrapping(int i){ return kernelManager->getNameWrapping(i); } -void wxContourMainFrame::updateInstantImageData(){ +void wxContourMainFrame::updateInstantImageData() +{ std::vector inst; _instantPanel->getInstant(inst); vtkImageData* img = kernelManager->getImageAtInstant(inst); if(img!=NULL){ _theViewPanel->changeImage(img); - } + showAxis(false); + }else{ + int z = _instantPanel->getConceptDataOf("Axe Depth")->getActualValue(); + _theViewPanel->setImageSlice(z); + } } -void wxContourMainFrame::updateInstantAxes(){ + +void wxContourMainFrame::updateInstantAxes() +{ } + void wxContourMainFrame::onChangeDeep(int val){ _instantPanel->setConceptValue( "Axe Depth", (int)val ); changeInstant(); @@ -632,6 +731,7 @@ void wxContourMainFrame::onCopy(){ _performingOperation->setStartOperationInstantVector( tempVector ); _performingOperation->setKeyNamesOperationElems( currentSelection ); } + void wxContourMainFrame::onPaste(){ @@ -668,9 +768,56 @@ 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 ); + manualBaseModel * 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);//_modelManager->getOutlineByKeyName( cloneName )->getModel(); + manualBaseModel * 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 ); } @@ -681,96 +828,37 @@ void wxContourMainFrame ::loadState(std::string filename){ fscanf(pFile,"%s",tmp); // --CreaContour-- fscanf(pFile,"%s",tmp); // Version - fscanf(pFile,"%s",tmp); // 1.0.1 - std::string version(tmp); + fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0 deleteAllContours(); - openContours(pFile,false); - if (version!="1.0.0"){ - openContours(pFile,true); - } + loadContours(pFile, false); + loadContours(pFile, true); fclose(pFile); - - //_theViewPanel->getSceneManager()->removeSceneContours(); - //changeInstant(); - } -void wxContourMainFrame::onLoad(){ +void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour ) +{ char tmp[255]; - wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN ); - if (dialog.ShowModal() == wxID_OK) - { - std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str()); - FILE *pFile=fopen(fileNameContourROI.c_str(),"r+"); - - fscanf(pFile,"%s",tmp); // --CreaContour-- - - fscanf(pFile,"%s",tmp); // Version - fscanf(pFile,"%s",tmp); // 1.0.1 - std::string version(tmp); - - openContours(pFile,false); - if (version!="1.0.0"){ - openContours(pFile,true); - } -// _theViewPanel->getSceneManager()->openFileWithContours(ff); - - fclose(pFile); - } - _theViewPanel->getSceneManager()->removeSceneContours(); - changeInstant(); -} -void wxContourMainFrame::onSave(){ - wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE ); - if (dialog.ShowModal() == wxID_OK) - { - std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str()); - saveFileWithContours( fileNameContourROI ); - } -} -void wxContourMainFrame::saveFileWithContours( std::string filename ){ - - FILE *pFile=fopen(filename.c_str(),"w+"); - std::vector< std::string > lstNameThings; - int i,sizeLstNameThings; - - fprintf(pFile,"--CreaContour--\n"); - fprintf(pFile,"Version %s\n", "1.0.1" ); - - // Normal Contours - lstNameThings = kernelManager->GetLstNameThings(); - sizeLstNameThings = lstNameThings.size(); - fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings ); - for (i=0 ; iSaveThingName( pFile, lstNameThings[i] ); - _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] ); - }// for i - //-- Contours Statics - lstNameThings = kernelManager->GetLstNameThingsStatic(); - sizeLstNameThings = lstNameThings.size(); - fprintf(pFile,"NumberOfContoursStatic %d\n", sizeLstNameThings ); - for (i=0 ; iSaveThingName( pFile, lstNameThings[i] ); - _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] ); - }// for i - fclose(pFile); -} + fscanf(pFile,"%s",tmp); // ImageDimensions + fscanf(pFile,"%s",tmp); // X + fscanf(pFile,"%s",tmp); // Y + fscanf(pFile,"%s",tmp); // Z -void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){ - char tmp[255]; + 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; - manualContourModel *manModelContour; + manualBaseModel *manModelContour; int typeView; int i; @@ -778,7 +866,6 @@ void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){ { instantVector.clear(); fscanf(pFile,"%s",tmp); // Instant - fscanf(pFile,"%s",tmp); // 1 instantVector.push_back( atoi(tmp) ); fscanf(pFile,"%s",tmp); // 2 @@ -792,7 +879,6 @@ void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){ fscanf(pFile,"%s",tmp); // 6 instantVector.push_back( atoi(tmp) ); - fscanf(pFile,"%s",tmp); // TypeContourModel fscanf(pFile,"%s",tmp); // ## typeContourModel = atoi(tmp); @@ -804,12 +890,6 @@ void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){ fscanf(pFile,"%s",tmp); // ## typeView = atoi(tmp); - -// if (typeView==1) -// { -// } - - std::string theName; theName = kernelManager->createOutline( manModelContour, instantVector ); bool addedModel = theName.compare("") != 0; @@ -822,74 +902,920 @@ void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){ //_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::RefreshInterface(){ - changeInstant(); - _theViewPanel->RefreshInterface(); - //wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)this->_theViewPanel->getWxVtkBaseView(); - //wxvtk2dbaseview->Refresh(); -} - -vtkImageData* wxContourMainFrame::getImageData(){ - return _theViewPanel->getImageData(); -} - -void wxContourMainFrame::onSegmentationOneSlice(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 = _theViewPanel->GetZ(); - SegmentationOneSlice( x,y,z,isovalue, sampling, method ); - RefreshInterface(); -} +void wxContourMainFrame::onLoad() +{ + char tmp[255]; + char tmpD[255]; + std::string fileNameContourROI = GetFileLocation(); -void wxContourMainFrame::SegmentationOneSlice( int x, int y, int z, int isovalue, int sampling, int method ) -{ - int typeofcontour = 1; - //--Extracting Contour - //vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData(); - vtkImageData *imagedata = getImageData(); -// double *range = imagedata->GetScalarRange(); -// double thr = 1; +//CMRU 03-09-09----------------------------------------------------------------------------------------------- + if(GetFileLocation().empty()) + { +//------------------------------------------------------------------------------------------------------------ + wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN ); + if (dialog.ShowModal() == wxID_OK) + { + fileNameContourROI = (const char *)(dialog.GetPath().mb_str()); + } + } - vtkImageReslice *imageReslice = vtkImageReslice::New(); -//EED -// double spc[3]; -// imagedata->GetSpacing(spc); -// x = x*spc[0]; -// y = y*spc[1]; -// z = z*spc[3]; + FILE *pFile =fopen(fileNameContourROI.c_str(),"r+"); - imageReslice->SetInput( imagedata ); - imageReslice->SetInformationInput(imagedata); - imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1); - imageReslice->SetResliceAxesOrigin(0,0,z); - imageReslice->SetOutputDimensionality(2); - imageReslice->SetInterpolationModeToLinear(); - imagedata = imageReslice->GetOutput(); - imagedata->Update(); - imagedata->UpdateInformation(); +//CMRU 03-09-09- ---------------------------------------------------------------------------------------------- + if(pFile != NULL) + { +//------------------------------------------------------------------------------------------------------------ + fileNameContourROI.append("data"); + FILE *pFileData=fopen(fileNameContourROI.c_str(),"r+"); + if(pFileData != NULL) + { + fscanf(pFileData,"%s",tmpD); // --CreaContour-- + fscanf(pFileData,"%s",tmpD); // Version + fscanf(pFileData,"%s",tmpD); // 1.0.2 || 1.0.1 || 1.0.0 + + fscanf(pFileData,"%s",tmpD); // onePixelSize + fscanf(pFileData,"%s",tmpD); // # + _onePixelSize = atof(tmpD); + fscanf(pFileData,"%s",tmpD); // NumberOfContours + fscanf(pFileData,"%s",tmpD); // # + } - vtkContourFilter* cntVTK = vtkContourFilter::New( ); - cntVTK->SetInput( imagedata ); + fscanf(pFile,"%s",tmp); // --CreaContour-- - cntVTK->SetNumberOfContours( 1 ); + fscanf(pFile,"%s",tmp); // Version + fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0 + std::string version(tmp); + + //AD:02-06-09 + if (version=="1.0.2") + { + openContours(pFile,pFileData,2,false); + openContours(pFile,pFileData,2,true); //Load StaticContours + } + + //AD:02-06-09 + else if (version=="1.0.1") + { + openContours(pFile,pFileData,1,false); //Skips ImageDimensions and ImageSpacing + openContours(pFile,pFileData,1,true); //Load StaticContours, skips ImageDimensions and ImageSpacing + } + + //AD:02-06-09 + else if (version=="1.0.0") + { + openContours(pFile,pFileData,1,false); //Skips ImageDimensions and ImageSpacing + } + + fclose(pFile); + + if(pFileData != NULL) + { + fclose(pFileData); + } + } + _theViewPanel->getSceneManager()->removeSceneContours(); + changeInstant(); +} + +//AD: 29-05-09 +void wxContourMainFrame::onSave(){ +//CMRU 03-09-09----------------------------------------------------------------------------------------------- + if(GetFileLocation().empty()) + { +//------------------------------------------------------------------------------------------------------------ + wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE ); + if (dialog.ShowModal() == wxID_OK) + { + std::string fileNameContourROI = (const char *)(dialog.GetPath().mb_str()); + kernelManager->setCurrentFileName(fileNameContourROI); + saveFileWithContours( fileNameContourROI ); + } + } +//CMRU 03-09-09----------------------------------------------------------------------------------------------- + else + { + std::cout<<"Nombre del archivo: "<setCurrentFileName(fileNameContourROI); + saveFileWithContours( fileNameContourROI); + } +//------------------------------------------------------------------------------------------------------------ +} + +//AD: 29-05-09 +void wxContourMainFrame::saveFileWithContours( std::string filename ) +{ + + FILE *pFile=fopen(filename.c_str(),"w+"); + +//CMRU 03-09-09----------------------------------------------------------------------------------------------- + filename.append("data"); + std::cout<<"Nombre del archivo: "< lstNameThings; + int i,sizeLstNameThings; + + fprintf(pFile,"--CreaContour--\n"); + fprintf(pFile,"Version %s\n", "1.0.2" ); + +//CMRU 03-09-09----------------------------------------------------------------------------------------------- + fprintf(pFileData,"--CreaContour--\n"); + fprintf(pFileData,"Version %s\n", "1.0.2" ); + fprintf(pFileData,"OnePixelSize %f\n", _onePixelSize); + +//------------------------------------------------------------------------------------------------------------ + + vtkImageData *image = _images[0]; + + int dimRange[3]; + image->GetDimensions(dimRange); + + fprintf(pFile,"ImageDimensions %d %d %d\n", dimRange[0], dimRange[1], dimRange[2] ); + + double spaRange[3]; + image->GetSpacing(spaRange); + + fprintf(pFile,"ImageSpacing %f %f %f\n", spaRange[0], spaRange[1], spaRange[2] ); + + // Normal Contours + + lstNameThings = kernelManager->GetLstNameThings(); + sizeLstNameThings = lstNameThings.size(); + fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings ); + +//CMRU 03-09-09----------------------------------------------------------------------------------------------- + fprintf(pFileData,"NumberOfContours %d\n", sizeLstNameThings ); +//------------------------------------------------------------------------------------------------------------ + + for (i=0 ; igetOutlineByKeyName(lstNameThings[i]); + double sizeInPixel = manualModel ->GetPathSize(); + double realContourSize = sizeInPixel*_onePixelSize; + manualModel ->SetRealSize(realContourSize); +//------------------------------------------------------------------------------------------------------------ + + //int size= kernelManager->GetLstNameThings().size(); + + kernelManager->SaveThingName( pFile, pFileData, lstNameThings[i] ); + _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] ); + }// for i + + //-- Static Contours + + fprintf(pFile,"ImageDimensions %d %d %d\n", dimRange[0], dimRange[1], dimRange[2] ); + + fprintf(pFile,"ImageSpacing %f %f %f\n", spaRange[0], spaRange[1], spaRange[2] ); + + lstNameThings = kernelManager->GetLstNameThingsStatic(); + sizeLstNameThings = lstNameThings.size(); + fprintf(pFile,"NumberOfContoursStatic %d\n", sizeLstNameThings ); + +//CMRU 03-09-09----------------------------------------------------------------------------------------------- + fprintf(pFileData,"NumberOfContoursStatic %d\n", sizeLstNameThings ); +//------------------------------------------------------------------------------------------------------------ + + for (i=0 ; iSaveThingName( pFile, pFileData, lstNameThings[i] ); + _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] ); + }// for i + fclose(pFile); + fclose(pFileData); +} + +//AD:04-06-09 +void wxContourMainFrame::openContours( FILE *pFile, FILE *pFileData, int version, bool staticContour ) +{ + char tmp[255]; + + vtkImageData *image = _images[0]; + int imageDim[3]; + double imageSpac[3]; + int tempDim[3]; + double tempSpac[3]; + + bool compatible = true; + + //Version==2 + if (version==2) + { + image->GetDimensions(imageDim); + image->GetSpacing(imageSpac); + + fscanf(pFile,"%s",tmp); // ImageDimensions + fscanf(pFile,"%s",tmp); // X + tempDim[0] = atoi(tmp); + fscanf(pFile,"%s",tmp); // Y + tempDim[1] = atoi(tmp); + fscanf(pFile,"%s",tmp); // Z + tempDim[2] = atoi(tmp); + + fscanf(pFile,"%s",tmp); // ImageSpacing + fscanf(pFile,"%s",tmp); // X + tempSpac[0] = atof(tmp); + fscanf(pFile,"%s",tmp); // Y + tempSpac[1] = atof(tmp); + fscanf(pFile,"%s",tmp); // Z + tempSpac[2] = atof(tmp); + + //Compare Spacing and Dims in X and Y (Necessary in Z?) - Just for Version 2 + if (imageDim[0]!=tempDim[0] || imageDim[1]!=tempDim[1] || imageSpac[0]!=tempSpac[0] || imageSpac[1]!=tempSpac[1]) + { + compatible = false; + } + } + + fscanf(pFile,"%s",tmp); // NumberOfContours + fscanf(pFile,"%s",tmp); // ## + int numberOfContours = atoi(tmp); + + std::vector instantVector; + int typeContourModel; + manualBaseModel *manModelContour; + int typeView; + + if (compatible==true) + { + int i; + for (i=0;ifactoryManualContourModel(typeContourModel); + manModelContour->Open(pFile); + if(pFileData != NULL) + { + manModelContour->OpenData(pFileData); + } + + 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) //StaticContours (will appear in all slices) + { + Instant instant(&instantVector); + kernelManager->changeContourOfManager( theName , &instant ); + } + + }// for numberOfContours + } + + else if (compatible==false) + { + wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(260,160)); + wxSizer* buttonsSizer = dial->CreateSeparatedButtonSizer(wxOK|wxCANCEL); + wxBoxSizer *dialSizer = new wxBoxSizer(wxVERTICAL); + + 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); + + 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 ); + dialSizer->Add( new wxStaticText(dial,-1,_T(" ")) , 0, wxGROW ); + dialSizer->Add(radioOpts,0,wxGROW); + dialSizer->Add( new wxStaticText(dial,-1,_T(" ")) , 0, wxGROW ); + dialSizer->Add(buttonsSizer,0,wxGROW); + dial->SetSizer(dialSizer, true); + dial->Layout(); + dial->ShowModal(); + + int typeOfTransformation = -1; + bool transform = false; + + if (dial->GetReturnCode() == wxID_OK) + { + typeOfTransformation = radioOpts->GetSelection(); + transform = true; + } + + int i; + for (i=0;ifactoryManualContourModel(typeContourModel); + manModelContour->Open(pFile); + if(pFileData != NULL) + { + manModelContour->OpenData(pFileData); + } + if (transform==true) + { + if (typeOfTransformation==0) + { + double transX, transY; + transX = (double) imageDim[0]/tempDim[0]; + transY = (double) imageDim[1]/tempDim[1]; + manModelContour->Transform_Ax_Plus_B(transX,0,transY,0); + } + else if (typeOfTransformation==1) + { + double transX, transY; + transX = (double) tempSpac[0]/imageSpac[0]; + transY = (double) tempSpac[1]/imageSpac[1]; + manModelContour->Transform_Ax_Plus_B(transX,0,transY,0); + } + } + + 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) //StaticContours (will appear in all slices) + { + Instant instant(&instantVector); + kernelManager->changeContourOfManager( theName , &instant ); + } + }// for numberOfContours + } +} + +void wxContourMainFrame::RefreshInterface(){ + changeInstant(); + _theViewPanel->RefreshInterface(); + //wxVtk2DBaseView *wxvtk2dbaseview = (wxVtk2DBaseView*)this->_theViewPanel->getWxVtkBaseView(); + //wxvtk2dbaseview->Refresh(); +} + +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( 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() ); + gradientMagnitude->SetSigma( sigma ); + + 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; + + 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->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(); + + 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 + + + + 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 + saveState(); + //JCP 20-10-08 Undo redo implementation + + wxBusyCursor wait; + int x = _theViewPanel->GetX(); + int y = _theViewPanel->GetY(); + int z = _theViewPanel->GetZ(); + SegmentationOneSlice( x,y,z,isovalue, sampling, method ); + RefreshInterface(); +} + + +void wxContourMainFrame::SegmentationOneSlice( int x, int y, int z, int isovalue, int sampling, int method ) +{ + 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]; + + imageReslice->SetInput( imagedata ); + imageReslice->SetInformationInput(imagedata); + imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1); + imageReslice->SetResliceAxesOrigin(0,0,z); + imageReslice->SetOutputDimensionality(2); + imageReslice->SetInterpolationModeToLinear(); + + imagedata = imageReslice->GetOutput(); + imagedata->Update(); + imagedata->UpdateInformation(); + + vtkContourFilter* cntVTK = vtkContourFilter::New( ); + cntVTK->SetInput( imagedata ); + + cntVTK->SetNumberOfContours( 1 ); //cntVTK->SetValue( 0, vmin ); // cntVTK->SetValue( 0, (range[1]*thr/100) ); cntVTK->SetValue( 1, isovalue ); @@ -963,11 +1889,11 @@ 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 ); + vecZ.push_back( 900 ); // vecZ.push_back( p[2] ); } @@ -1005,7 +1931,7 @@ myfile.close(); actualInstantVector[1]=z; int j,sizeCtrPt = vecCtrlPointX.size(); - manualContourModel *manModelContour = kernelManager->factoryManualContourModel( typeofcontour ); + manualBaseModel *manModelContour = kernelManager->factoryManualContourModel( typeofcontour ); manModelContour->SetNumberOfPointsSpline( ((sizeCtrPt/100)+1)*100 ); if (sizeCtrPt>=3){ for (j=0 ; jGetImageDataSizeZ(); +} + +void wxContourMainFrame::GetImageDataRange(double *range){ + _theViewPanel->GetImageDataRange(range); +} + +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; + for( z=minZ ; z<=maxZ ; z++ ) + { + porcent = 100.0* (z-minZ)/totalZ; + tmpString.Printf(_T(" %d %c %d/%d %d"), (int)porcent , 37 , z-minZ+1, (int)totalZ,z ); + interfMainPanel::getInstance()->setLabelSegmentationPanelVTK(tmpString); + //_staticTextSegmentation->SetLabel(tmpString); + SegmentationOneSlice( x,y,z,isovalue, sampling,method ); + } + interfMainPanel::getInstance()->setLabelSegmentationPanelVTK(_T(" ")); + RefreshInterface(); +} + + +//Creates a reference line to be used as the axis of the mirroring +void wxContourMainFrame::referenceLine() +{ + if (_refLineControl==NULL) + { + 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 ); + vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView(); + style->AddInteractorStyleMaracas( _refLineControl ); + _refLineModel->SetCloseContour(false); + _refLineControl->CreateNewManualContour(); + +//AD: Inicializar el mirroring con una linea ya pintada + /* + double z = _refLineControl->GetZ(); + + int imageDim[3]; + image->GetDimensions(imageDim); + double x = (double) imageDim[0]/2; + double y1 = (double) (imageDim[1]/2)+15; + double y2 = (double) (imageDim[1]/2)-15; + + _refLineControl->AddPoint(x,y1,z); + _refLineControl->AddPoint(x,y2,z); + _refLineControl->SetCompleteCreation(true); + + _refLineModel->AddPoint(x,y1,z); + _refLineModel->AddPoint(x,y2,z); + _refLineModel->UpdateSpline(); + + _refLineView->UpdateViewPoint(0); + _refLineView->UpdateViewPoint(1); + */ + + _refLineControl->SetActive(true); + _refLineView->RefreshContour(); + } +} + +//Hides the referenceLine +void wxContourMainFrame::refLineHide() +{ + if (_refLineControl!=NULL) + { + if (_refLineControl->GetActive()) + { + _refLineView->RemoveCompleteContourActor(); + _refLineControl->SetEditable(false); + _refLineControl->SetActive(false); + + RefreshInterface(); + } + } +} -int wxContourMainFrame::GetImageDataSizeZ(){ - return _theViewPanel->GetImageDataSizeZ(); +//Shows the referenceLine +void wxContourMainFrame::refLineShow() +{ + if (_refLineControl!=NULL) + { + if (_refLineControl->GetActive()==false) + { + wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView(); + + _refLineView->SetModel( _refLineModel ); + _refLineView->SetWxVtkBaseView( viewer2D ); + _refLineView->SetRange( 2 ); + _refLineView->SetZ( 1200 ); + + _refLineControl->SetModelView( _refLineModel , _refLineView ); + vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView(); + style->AddInteractorStyleMaracas( _refLineControl ); + _refLineControl->CreateNewManualContour(); + _refLineControl->SetActive(true); + _refLineView->RefreshContour(); + + RefreshInterface(); + } + } } -void wxContourMainFrame::GetImageDataRange(double *range){ - _theViewPanel->GetImageDataRange(range); +void wxContourMainFrame::refLineChangeWidth(int width) +{ + _refLineView->SetWidthLine(width); + _refLineView->RefreshContour(); + + RefreshInterface(); } -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; - for( z=minZ ; z<=maxZ ; z++ ) + +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 ) { - porcent = 100.0* (z-minZ)/totalZ; - tmpString.Printf(_T(" %d %c %d/%d %d"), (int)porcent , 37 , z-minZ+1, (int)totalZ,z ); - interfMainPanel::getInstance()->setLabelSegmentationPanelVTK(tmpString); - //_staticTextSegmentation->SetLabel(tmpString); - SegmentationOneSlice( x,y,z,isovalue, sampling,method ); + //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 ); + } } - interfMainPanel::getInstance()->setLabelSegmentationPanelVTK(_T(" ")); - RefreshInterface(); + + //deleteContour( _refName ); + //_refName = ""; } -void wxContourMainFrame::showAxis(bool show){ + +void wxContourMainFrame::showAxis(bool show) +{ _theViewPanel->SetVisibleAxis(show); _theViewPanel->Refresh(); } @@ -1097,17 +2170,38 @@ void wxContourMainFrame::onWidthOfContour(double width){ RefreshInterface(); } -int wxContourMainFrame::getColorWindow(){ + +int wxContourMainFrame::getColorWindow() +{ + /* + double range[2]; + vtkImageData * img = getImageData(); + img->GetScalarRange(range); + + std::cout<<"Val 1: "<getColorWindow(); } -int wxContourMainFrame::getWindowLevel(){ + +int wxContourMainFrame::getWindowLevel() +{ + /* + double range[2]; + vtkImageData * img = getImageData(); + img->GetScalarRange(range); + + std::cout<<"Val 1: "<getWindowLevel(); } void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){ _theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel); - RefreshInterface(); } @@ -1176,7 +2270,7 @@ void wxContourMainFrame::onSpreadGo(int type){ int typeofcontour = 1; std::string theName; - manualContourModel* manModelContour = kernelManager->GetPoints(z, type, &vecCtrlPointX,&vecCtrlPointY,&vecCtrlPointZ, theName,typeofcontour, tempVector); + manualBaseModel* manModelContour = kernelManager->GetPoints(z, type, &vecCtrlPointX,&vecCtrlPointY,&vecCtrlPointZ, theName,typeofcontour, tempVector); if( manModelContour!=NULL ){ double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default @@ -1209,16 +2303,20 @@ std::vector wxContourMainFrame::getOutlinesName(int slide){ return kernelManager->getOutlinesNameAtInstant(tempVector); } -void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ){ - int maxContourGroup = 0; - ContourExtractData *contourextractdata = new ContourExtractData(); + +void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ,int grayRangeMin, int grayRangeMax) +{ +//EED01Juillet2009 GenerateContourExtractData(); + + wxString tempString; + int maxContourGroup = 0; - contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); + _contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); - std::vector lstManConMod; - std::vector lstManConModTmp; - std::vector lstManConModExp; + std::vector lstManConMod; + std::vector lstManConModTmp; + std::vector lstManConModExp; std::vector pLstValue; std::vector pLstValuePosX; std::vector pLstValuePosY; @@ -1234,8 +2332,8 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel std::vector tempVector; _instantPanel->getInstant( tempVector ); - vtkImageData *imagedata = _theViewPanel->getImageData(); - int sizeZ = _theViewPanel->GetImageDataSizeZ(); +//EED01Juillet2009 vtkImageData *imagedata = _theViewPanel->getImageData(); +// int sizeZ = _theViewPanel->GetImageDataSizeZ(); int z; int ii,sizeLstContourThings; @@ -1245,31 +2343,23 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel double porcent; wxString tmpString; - if (selection==0 ) // actual slice { - std::vector tempVector; - _instantPanel->getInstant( tempVector ); int actualSlice = tempVector[1]; minZ = actualSlice; maxZ = actualSlice; - } - else if (selection==2 ) // All slices - { - minZ = 0; - maxZ = sizeZ-1; - } - else if (selection==1 ) // slice range - { + } else { // slice range minZ = minimumZ; maxZ = maximumZ; } totalZ = maxZ-minZ+1; - contourextractdata->SetImage( imagedata); +//EED01Juillet2009 _contourextractdata->SetImage( imagedata); + _contourextractdata->InitVolumeStatistics(); + // For each slice.. for ( z=minZ ; z<=maxZ ; z++ ) { @@ -1281,7 +2371,7 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel //_staticTextInformation->SetLabel(tmpString); //Extraction data from contours of each slice - contourextractdata->SetZtoBeAnalys( z); + _contourextractdata->SetZtoBeAnalys(z); tempVector[1]=z; Instant instant(&tempVector); @@ -1294,10 +2384,9 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel ContourThing **contourthing = lstContourThings[ii]; lstManConMod.push_back( (*contourthing)->getModel() ); } - lstManConModExp = kernelManager->ExploseEachModel( lstManConMod ); + lstManConModExp = kernelManager->ExploseEachModel( lstManConMod ); - wxString tempString; tempString.Printf(_T("%d - %d"),z, sizeLstContourThings); interfMainPanel::getInstance()->setRowLabelInfoPanel(z, tempString); //_grid->SetRowLabelValue(z, tempString ); @@ -1317,10 +2406,11 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel int tmpIntA; - - for( iContourGroup=0 ; iContourGroupSetLstManualContourModel( lstManConModTmp ); + _contourextractdata->SetLstManualContourModel( lstManConModTmp ); pLstValue.clear(); pLstValuePosX.clear(); pLstValuePosY.clear(); pLstValuePosZ.clear(); - contourextractdata->GetValuesInsideCrown( &pLstValue, + _contourextractdata->GetValuesInsideCrown( &pLstValue, &pLstValuePosX, &pLstValuePosY, &pLstValuePosZ); + // Statistics of each slice. - contourextractdata->Statistics( &pLstValue, - minimumZ, - maximumZ, + _contourextractdata->Statistics( &pLstValue, + grayRangeMin, + grayRangeMax, &resultGrayRangeCount, &resultSize, &resultMin, @@ -1378,6 +2469,45 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel } // for iContourGroup } // for z + // Print Volume Statistics + + + int vol_rCountRange; + int vol_rsize; + double vol_minValue; + double vol_maxValue; + double vol_average; + double vol_standardeviation; + + if (selection!=0 ) // actual slice + { + + _contourextractdata->GetVolumeStatistics(&vol_rCountRange, &vol_rsize, + &vol_minValue, &vol_maxValue, + &vol_average, &vol_standardeviation); + + interfMainPanel::getInstance()->setRowLabelInfoPanel(maxZ+2, _T("Total:")); + + tempString.Printf(_T("%d"),vol_rsize); + interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 0, tempString); + + tempString.Printf(_T("%d"),vol_rCountRange); + interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 1, tempString); + + tempString.Printf(_T("%f"),vol_minValue); + interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 2, tempString); + + tempString.Printf(_T("%f"),vol_maxValue); + interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 3, tempString); + + tempString.Printf(_T("%f"),vol_average); + interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 4, tempString); + + tempString.Printf(_T("%f"),vol_standardeviation); + interfMainPanel::getInstance()->setCellValueInfoPanel(maxZ+2, 5, tempString); + } + //----------------------------------------- + int iTitleGroup; wxString tmpTitleString; int tmpIntB; @@ -1394,57 +2524,103 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 4, _T("Average") ); interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 5, _T("St.Dev.") ); interfMainPanel::getInstance()->setColLableInfoPanel( tmpIntB + 6, _T(" ") ); - } - + }// for title interfMainPanel::getInstance()->setStringInfoPanel( _T("") ); - delete contourextractdata; } -void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, int typeContourGroup){ - SaveValuesXYZ( directory , namefile, typeContourGroup ); - SaveImageResult( directory , namefile, typeContourGroup); +//AD: 29-05-09 +void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, + int typeContourGroup, int selection, int minZ, int maxZ, bool XYZValues, bool contourImage, bool statistics) +{ + if (XYZValues) + { + SaveValuesXYZ( directory , namefile, typeContourGroup ); + } + if (contourImage) + { + vtkImageData * mask; + vtkImageData * value; + this->getMaskValue(&mask, &value, typeContourGroup,selection,minZ,maxZ); + this->SaveImageResult( directory , namefile, mask, value); + } - FILE *pFile=fopen(filename.c_str(),"w+"); - - int sizeZ = _theViewPanel->GetImageDataSizeZ(); + if (statistics) + { + std::ostringstream name; + name << filename << ".xls"; + - wxString tmpString; - int i,j,maxX,maxY=sizeZ; - maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols(); + FILE *pFile=fopen(name.str().c_str(),"w+"); - int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics); - for ( iTitle=0; iTitleGetImageDataSizeZ(); +// int maxY=sizeZ+2; + + maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols(); + // -- Title -- + int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics); + for ( iTitle=0; iTitlegetCellValue(j, i);//_grid->GetCellValue( j , i ); - fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) ); - } // for i - fprintf(pFile,"\n" ); - } // for j + + + if (selection==0 ) // actual slice + { + std::vector tempVector; + _instantPanel->getInstant( tempVector ); + int actualSlice = tempVector[1]; + minZ = actualSlice; + maxZ = actualSlice; + } + + // Stadistics... + for ( j=minZ; j<=maxZ ; j++) + { + fprintf(pFile,"%d\t" , j ); + for (i=0 ; igetCellValue(j, i);//_grid->GetCellValue( j , i ); + fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) ); + } // for i + fprintf(pFile,"\n" ); + } // for j - fclose(pFile); + + // Total of stadistics..... + if (selection!=0) + { + fprintf(pFile,"\n Total:\t" ); + for (i=0 ; igetCellValue(maxZ+2, i);//_grid->GetCellValue( maxZ+2 , i ); + fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) ); + } // for i + fprintf(pFile,"\n" ); + } + + fclose(pFile); + } } +//AD: 29-05-09 void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup) { wxBusyCursor wait; - ContourExtractData *contourextractdata = new ContourExtractData(); +//EED01Juillet2009 GenerateContourExtractData(); + //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection(); - contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); + _contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); - std::vector lstManConMod; - std::vector lstManConModTmp; - std::vector lstManConModExp; + std::vector lstManConMod; + std::vector lstManConModTmp; + std::vector lstManConModExp; std::vector pLstValue; std::vector pLstValuePosX; std::vector pLstValuePosY; @@ -1453,7 +2629,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil std::vector tempVector; _instantPanel->getInstant( tempVector ); - vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData(); +//EED01Juillet2009 vtkImageData *imagedata = _theViewPanel->getSceneManager()->GetImageData(); int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ(); int z; int ii,sizeLstContourThings; @@ -1467,7 +2643,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil maxZ = sizeZ;//_mbarrange->GetEnd(); totalZ = maxZ-minZ+1; - contourextractdata->SetImage( imagedata); +//EED01Juillet2009 _contourextractdata->SetImage( imagedata); // For each slice.. for ( z=0 ; zSetZtoBeAnalys( z); + _contourextractdata->SetZtoBeAnalys( z); tempVector[1]=z; Instant instant(&tempVector); @@ -1517,13 +2693,13 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil lstManConModTmp = lstManConModExp; } - contourextractdata->SetLstManualContourModel( lstManConModTmp ); + _contourextractdata->SetLstManualContourModel( lstManConModTmp ); pLstValue.clear(); pLstValuePosX.clear(); pLstValuePosY.clear(); pLstValuePosZ.clear(); - contourextractdata->GetValuesInsideCrown( &pLstValue, + _contourextractdata->GetValuesInsideCrown( &pLstValue, &pLstValuePosX, &pLstValuePosY, &pLstValuePosZ); @@ -1532,7 +2708,8 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil temp = temp + kernelManager->intToString(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()); @@ -1541,7 +2718,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(); @@ -1554,47 +2734,64 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil } // for z interfMainPanel::getInstance()->setStringInfoPanel(_T("")); //_staticTextInformation->SetLabel( _T("") ); - delete contourextractdata; + } -void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, int typeContourGroup) -{ +void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value,int typeContourGroup, int selection, int minZ, int maxZ){ wxBusyCursor wait; - ContourExtractData *contourextractdata = new ContourExtractData( true ); +//EED01Juillet2009 GenerateContourExtractData(); + //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection(); if (typeContourGroup==3) { typeContourGroup=1; } - contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); + _contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); - std::vector lstManConMod; - std::vector lstManConModTmp; - std::vector lstManConModExp; + std::vector lstManConMod; + std::vector lstManConModTmp; + std::vector lstManConModExp; std::vector tempVector; _instantPanel->getInstant( tempVector ); - vtkImageData *imagedata = _theViewPanel->getImageData(); - int sizeZ = _theViewPanel->GetImageDataSizeZ(); + vtkImageData *imagedata = _theViewPanel->getImageData(); + int ext[6]; + imagedata->GetExtent(ext); + int sizeZimage = ext[5]-ext[4]+1; int z; int ii,sizeLstContourThings; - int minZ,maxZ; double totalZ; double porcent; wxString tmpString; + + + if (selection==0 ) // actual slice + { + int actualSlice = tempVector[1]; + minZ = actualSlice; + maxZ = actualSlice; + } + + totalZ = maxZ-minZ; - minZ = 0;// _mbarrange->GetStart(); - maxZ = sizeZ;//_mbarrange->GetEnd(); - totalZ = maxZ-minZ+1; - - contourextractdata->SetImage( imagedata); +//EED01Juillet2009 _contourextractdata->SetImage( imagedata); + // cleanning image before range + for (z=0; zResetImageResult(z); + } + // cleanning image after range + for (z=maxZ+1; zResetImageResult(z); + } + + // For each slice.. - for ( z=0 ; zsetStringInfoPanel(tmpString); //Extraction data from contours of each slice - contourextractdata->SetZtoBeAnalys( z); + _contourextractdata->SetZtoBeAnalys( z); tempVector[1]=z; Instant instant(&tempVector); @@ -1636,25 +2833,25 @@ void wxContourMainFrame::SaveImageResult(std::string directory,std::string namef lstManConModTmp = lstManConModExp; } - contourextractdata->SetLstManualContourModel( lstManConModTmp ); - - -// for (ii=0 ; iigetModel() ); -// } -// contourextractdata->SetLstManualContourModel( lstManConMod ); - - contourextractdata->CalculateImageResult(); // with actual Z + _contourextractdata->SetLstManualContourModel( lstManConModTmp ); + _contourextractdata->CalculateImageResult(); // with actual Z } // for iContourGroup } // for z + (*value) = _contourextractdata->GetVtkImageValueResult(); + (*mask) = _contourextractdata->GetVtkImageMaskResult(); + +} + +void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value) +{ + 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("\\")); @@ -1663,7 +2860,7 @@ void wxContourMainFrame::SaveImageResult(std::string directory,std::string namef // Image Value vtkMetaImageWriter *writerValueImage = vtkMetaImageWriter::New( ); - writerValueImage->SetInput( contourextractdata->GetVtkImageValueResult() ); + writerValueImage->SetInput( value ); writerValueImage->SetFileName( (const char *)filename.mb_str() ); writerValueImage->SetFileDimensionality( 3 ); writerValueImage->Write( ); @@ -1672,7 +2869,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("\\")); @@ -1680,15 +2879,17 @@ void wxContourMainFrame::SaveImageResult(std::string directory,std::string namef filename.append(_T("-Mask.mhd"));*/ vtkMetaImageWriter *writerMaskImage = vtkMetaImageWriter::New( ); - writerMaskImage->SetInput( contourextractdata->GetVtkImageMaskResult() ); + writerMaskImage->SetInput( mask ); writerMaskImage->SetFileName( (const char *)filename.mb_str() ); writerMaskImage->SetFileDimensionality( 3 ); writerMaskImage->Write( ); interfMainPanel::getInstance()->setStringInfoPanel( _T("") ); - delete contourextractdata; + } + + void wxContourMainFrame::onChangeInstantInstantPanel(std::string name,int value, int minshow, int maxshow){ if( name.compare( _theViewPanel->getVerticalConceptName() ) == 0){ _theViewPanel->setActualVertical( value); @@ -1699,3 +2900,175 @@ void wxContourMainFrame::onChangeInstantInstantPanel(std::string name,int value, changeInstant(); } + +void wxContourMainFrame::onSnakePressed(){ + std::vector vecX; + std::vector vecY; + std::vector vecZ; + _theViewPanel->GetPointsOfActualContour( &vecX , &vecY , &vecZ ); + + if (vecX.size()!=0){ + std::vector tempVector; + _instantPanel->getInstant( tempVector ); + int i,size=vecZ.size(); + int actualSlice = tempVector[1]; + for ( i=0 ; iShowModal(); + } // if + +} + +void wxContourMainFrame::saveFileWithContoursAutomatique(){ + std::string filename = kernelManager->getCurrentFileName(); + if(filename.compare("")!=0){ + saveFileWithContours(filename); + }else{ + onSave(); + } +} +void wxContourMainFrame::ShowToolsPanel(bool show){ + _pannew->Show(show); +} + + + +void wxContourMainFrame::SetContourGroup(int contourGroup) +{ + _contourGroup = contourGroup; +} + + +wxPanel *wxContourMainFrame::getMaskImageViewPanel(wxWindow *parent) +{ + + if (_viewMaskImagePanel==NULL) + { + _contourextractdata = new ContourExtractData(true); + _contourextractdata->SetImage( _theViewPanel->getImageData() ); + +// double range[2]; +// _theViewPanel->getImageData()->GetScalarRange(range); + //int min = (int)floor (range[0]); + //int max = (int)ceil (range[1]); + int min = 254; + int max = 256; + + _viewMaskImagePanel = new ThresholdImageViewPanel( parent, -1, -1 , 0); + _viewMaskImage = new ThresholdImageView(); + _viewMaskImage->SetImage(_contourextractdata->GetVtkImageMaskResult() ); + _viewMaskImage->SetminMaxValue( min, max); + _viewMaskImage->SetBaseColor( 0,0,1 ); + _viewMaskImagePanel->SetThresholdImageView( _viewMaskImage ); + _viewMaskImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() ); + + } + return _viewMaskImagePanel; +} + +wxPanel *wxContourMainFrame::getThresholdImageViewPanel(wxWindow *parent) +{ + if (_viewThresholdImagePanel==NULL) + { + 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(); + _viewThresholdImage->SetImage( _theViewPanel->getImageData() ); + _viewThresholdImage->SetminMaxValue( min, max); + _viewThresholdImage->SetBaseColor( 1,0,0 ); + _viewThresholdImagePanel->SetThresholdImageView( _viewThresholdImage ); + _viewThresholdImage->SetwxVtkBaseView( _theViewPanel->getWxVtkBaseView() ); + } + return _viewThresholdImagePanel; +} + +//CMRU 17-08-09----------------------------------------------------------------------------------------------- +int wxContourMainFrame::getType () +{ + int tipo = 0; + std::vector currentSelection = _theViewPanel->getSelectedObjects(); + + if(!currentSelection.empty()) + { + std::string cloneName = currentSelection [0]; + manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName); + tipo = manualModel-> GetTypeModel(); + } + return tipo; +} + +double wxContourMainFrame::getContourSizeInPixels() +{ + double contourSize = 0; + + std::vector currentSelection = _theViewPanel->getSelectedObjects(); if(!currentSelection.empty()) + if(!currentSelection.empty()) + { + std::string cloneName = currentSelection [0]; + + manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel(); + contourSize = manualModel-> GetPathSize(); + } + return contourSize; +} +manualBaseModel * wxContourMainFrame::getContour () +{ + std::vector currentSelection = _theViewPanel->getSelectedObjects(); + + if(!currentSelection.empty()) + { + std::string cloneName = currentSelection [0]; + manualBaseModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel(); + return manualModel; + } + return NULL; +} +void wxContourMainFrame::onPrintLabel (wxString label, manualBaseModel* manualModel) +{ + std::string labelAscii(label.ToAscii()); + int pos = labelAscii.find(" "); + + int j; + + for (j=0 ; pos != string::npos;j++) + { + labelAscii.replace( pos, 1, "_" ); + pos= labelAscii.find(" "); + } + + manualModel -> SetLabel(labelAscii); +} +void wxContourMainFrame::onInsertCalculation(manualBaseModel* manualModel) +{ + double sizeInPixel = manualModel ->GetPathSize(); + double onePixelRealSize = interfMainPanel::getInstance()->GetPixelValue();; + double realContourSize = sizeInPixel*onePixelRealSize; + manualModel ->SetRealSize(realContourSize); +} + +double wxContourMainFrame::onePixelSize( double value) +{ + return _onePixelSize = value; +} + +std::string wxContourMainFrame::GetFileLocation() +{ + return _fileLocation; +} + +void wxContourMainFrame::SetFileLocation(std::string newFileLocation) +{ + _fileLocation = newFileLocation; + std::cout<<"GETFILELOCATION:"<<_fileLocation<