X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FInterface_ManagerContour_NDimensions%2FwxContourMainFrame.cxx;h=30cafdf91220e9193cbf66038d781874208c3a4a;hb=022ea4ddf8cd8a991cc9060f3c13e51af6bc226e;hp=e202f987e1758ae98719cbe999e9e45da2f43199;hpb=bd4e97f732f7c8154aafbf1bf419c6115e9560c7;p=creaContours.git diff --git a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx index e202f98..30cafdf 100644 --- a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx +++ b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx @@ -58,6 +58,11 @@ char wxContourMainFrame::COPY = 'C'; _refLineControl = NULL; _refLineModel = NULL; _refLineView = NULL; + _imageReslicer = NULL; + _thresholdTable = NULL; + _thresholdMapper = NULL; + _thresholdActor = NULL; + _actorPresent = false; // set up default notebook style // m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER; @@ -72,78 +77,62 @@ char wxContourMainFrame::COPY = 'C'; m_mgr.SetManagedWindow(this); _creatingContoursActive = false; _theViewPanel = NULL; -// _modelManager = NULL; - _instantPanel = NULL; -// _buttonsBar = NULL; -// _gridPanel = NULL; -// _drawToolsPanel = NULL; -// _operationsToolsPanel = NULL; -// _autoFormsPanel = NULL; -// _standardToolsPanel = NULL; -// _editionToolsPanel = NULL; -// _listViewPanel = NULL; -// _sceneManager = NULL; -// _actualInstant = NULL; + _instantPanel = NULL; _refLineControl = NULL; _refLineModel = NULL; _refLineView = NULL; + _imageReslicer = NULL; + _thresholdTable = NULL; + _thresholdMapper = NULL; + _thresholdActor = 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; //wxContour_ActionCommandsID a; - _numberOfVariablesStatistics = 6+1; - - - _performingOperation = new PerformingOperation(); -//JCP 17 - 10 - 2008 + _numberOfVariablesStatistics = 7; - inredo = 0; - inundo = 0; + _datadir = datadir; -#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/"; -// std::string command("mkdir "+strCreaContourDataTmp); -// system( command.c_str() ); - - kernelManager = new KernelManagerContour( images , datadir+"/data/" , strCreaContourDataTmp ); - //kernelManager->setVectImages(images); - //kernelManager->initializeEnvironment(); - - //vtkImageData* selectedimage = kernelManager->getVectImages()[0]; -//------------------------------------------------------------- + inredo = 0; + inundo = 0; - /*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);*/ + _pannew = interfMainPanel::getInstance(this,datadir+"/data/Icons");//, eventHandler); + _performingOperation = new PerformingOperation(); - //Creating the evtHandler of the panels - //wxContourEventHandler * eventHandler = new wxContourEventHandler(); + if(images.size() > 0) + { + this->setVectImages(images); + } - //Creating the window that will show the panels +} - //Getting the parent for the panels ( using aui ) - wxAuiNotebook * notebook = this->createNotebook(); +void wxContourMainFrame::setVectImages( std::vector images ){ + + #if defined(__GNUC__) + std::string str_home(getenv("HOME")); + #elif defined(_WIN32) + std::string str_home(getenv("USERPROFILE")); + #endif + std::string strCreaContourDataTmp = str_home + "/.creaContourDataTemp/"; - //JCP 17 - 11 - 08 - //wxInstantChooserPanel * instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true); - //JCP 17 - 11 - 08 std::vector conceptNameVect; std::vector conceptSizeVect; - + notebook = this->createNotebook(); - _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" ); - _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook ); + kernelManager = new KernelManagerContour( images , _datadir+"/data/" , strCreaContourDataTmp ); - kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect); + _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" ); + _theViewPanel = new wxContourViewPanel( kernelManager->getSourceImage(), notebook ); + +//------------------------------------------------------------- + kernelManager->getConceptsInformation(conceptNameVect, conceptSizeVect); _instantPanel->addConcepts(conceptNameVect, conceptSizeVect); @@ -154,22 +143,9 @@ char wxContourMainFrame::COPY = 'C'; //*******************changeInstant(); _theViewPanel->setVerticalConcept( "Axe Depth", data->getMinValue(), data->getMaxValue(), data->getMinShowedValue(), data->getMaxShowedValue(), data->getActualValue() ); - //eventHandler->setModelManager( kernelManager->getOutlineModelManager() ); - //eventHandler->setViewPanel( _theViewPanel ); - //_theViewPanel->initializeScenceManager(); - //eventHandler->setInstantChooserPanel( _instantPanel ); - - //bool successConfiuration = eventHandler->configureEventsHandling(); - - //successConfiuration &= this->configurePanels( notebook ); - this->configurePanels( notebook ); - - interfMainPanel* pannew = interfMainPanel::getInstance(parent,datadir+"/data/Icons");//, eventHandler); + this->configurePanels( ); -//JCP 17 -10 - 2008 - - - } +} wxContourMainFrame* wxContourMainFrame :: getInstance(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector images, long style,std::string datadir ){ @@ -179,25 +155,42 @@ char wxContourMainFrame::COPY = 'C'; 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; + + _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; } @@ -217,45 +210,44 @@ char wxContourMainFrame::COPY = 'C'; //------------------------------------------------------------------------------------------------------------ // 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; } //------------------------------------------------------------------------------------------------------------ @@ -596,7 +588,8 @@ bool wxContourMainFrame::getIfConceptCheckedAt( std::string name, int pos ){ return _instantPanel->getIfConceptCheckedAt( name, pos ); } -void wxContourMainFrame::changeInstant(){ +void wxContourMainFrame::changeInstant() +{ std::vector instantVect; _instantPanel->getInstant( instantVect ); // Instant * theInstant = new Instant ( &instantVect ); @@ -607,14 +600,15 @@ void wxContourMainFrame::changeInstant(){ kernelManager->setInstant(instantVect); //_modelManager->setInstant( _actualInstant ); + onThresholdChange(); updateInstantOutlines(); updateInstantImageData(); updateInstantAxes(); - - } -void wxContourMainFrame :: updateInstantOutlines(){ - + + +void wxContourMainFrame :: updateInstantOutlines() +{ _theViewPanel->removeSceneContours(); _theViewPanel->addNameWrapperToScene(); @@ -631,7 +625,8 @@ std::string wxContourMainFrame::getNameWrapping(int i){ return kernelManager->getNameWrapping(i); } -void wxContourMainFrame::updateInstantImageData(){ +void wxContourMainFrame::updateInstantImageData() +{ std::vector inst; _instantPanel->getInstant(inst); @@ -644,9 +639,12 @@ void wxContourMainFrame::updateInstantImageData(){ _theViewPanel->setImageSlice(z); } } -void wxContourMainFrame::updateInstantAxes(){ + +void wxContourMainFrame::updateInstantAxes() +{ } + void wxContourMainFrame::onChangeDeep(int val){ _instantPanel->setConceptValue( "Axe Depth", (int)val ); changeInstant(); @@ -811,7 +809,8 @@ void wxContourMainFrame::onSave(){ saveFileWithContours( fileNameContourROI ); } } -void wxContourMainFrame::saveFileWithContours( std::string filename ){ +void wxContourMainFrame::saveFileWithContours( std::string filename ) +{ FILE *pFile=fopen(filename.c_str(),"w+"); std::vector< std::string > lstNameThings; @@ -958,25 +957,25 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d typedef unsigned short OutputPixelType2; typedef itk::Image< OutputPixelType2, Dimension > OutputImageType2; - //Definición del thresholder + //DefiniciÛn del thresholder typedef itk::BinaryThresholdImageFilter< InternalImageType, OutputImageType > ThresholdingFilterType; - //Definición del primer filtro de conversión de pixeles + //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 + //DefiniciÛn del segundo tipo de conversiÛn de pixeles typedef itk::CastImageFilter< OutputImageType2, InternalImageType > CastFilterType2; - //Tercer tipo de conversión + //Tercer tipo de conversiÛn typedef itk::RescaleIntensityImageFilter< InternalImageType, OutputImageType > CastFilterType3; - //Cuarto tipo de conversión + //Cuarto tipo de conversiÛn typedef itk::RescaleIntensityImageFilter< OutputImageType, OutputImageType > CastFilterType4; @@ -989,7 +988,7 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d thresholder->SetOutsideValue( 255 ); thresholder->SetInsideValue( 0 ); - //Definción de conexiónes entre VTK e ITK y el writer + //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; @@ -1042,23 +1041,23 @@ void wxContourMainFrame::SegmentationOneSliceITK(int x, int y, int z, wxString d InternalImageType, InternalImageType > ZeroCrossingFilterType; ZeroCrossingFilterType::Pointer zeroCrossing = - ZeroCrossingFilterType::New(); + ZeroCrossingFilterType::New(); -const double propagationScaling = atof( prop ); +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( iter ); + 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->SetInput( fastMarching->GetOutput() ); geodesicActiveContour->SetFeatureImage( sigmoid->GetOutput() ); zeroCrossing->SetInput( geodesicActiveContour->GetOutput() ); @@ -1072,11 +1071,11 @@ const double propagationScaling = atof( prop ); smoothing->SetConductanceParameter( 9.0 ); - const double sigma = atof( sigm ); + const double sigma = atof( crea::wx2std(sigm).c_str() ); gradientMagnitude->SetSigma( sigma ); - const double alpha = atof( alf ); - const double beta = atof( bet ); + const double alpha = atof( crea::wx2std(alf).c_str() ); + const double beta = atof( crea::wx2std(bet).c_str() ); sigmoid->SetAlpha( alpha ); sigmoid->SetBeta( beta ); @@ -1090,7 +1089,7 @@ const double propagationScaling = atof( prop ); seedPosition[0] = x; seedPosition[1] = y; - const double initialDistance = atof( distanc ); + const double initialDistance = atof( crea::wx2std(distanc).c_str() ); NodeType node; @@ -1102,7 +1101,7 @@ const double propagationScaling = atof( prop ); seeds->Initialize(); seeds->InsertElement( 0, node ); - fastMarching->SetTrialPoints( seeds ); + fastMarching->SetTrialPoints( seeds ); fastMarching->SetSpeedConstant( 1.0 ); @@ -1143,7 +1142,7 @@ const double propagationScaling = atof( prop ); vtkPolyData* polyDataResult = cntVTK->GetOutput(); - std::cout<<"Points "<GetNumberOfPoints()<GetNumberOfPoints()<Update( ); polyDataResult->UpdateInformation(); @@ -1205,7 +1204,7 @@ myfile.open ("C:/Creatis/example2.txt"); std::cout<<" x Anterior "<GetImageDataSizeZ(); } @@ -1594,49 +1592,52 @@ void wxContourMainFrame::onSegmentationAllSlice(int minZ,int maxZ,int isovalue,i //Creates a reference line to be used as the axis of the mirroring void wxContourMainFrame::referenceLine() { - wxBusyCursor wait; - double spc[3]; + if (_refLineControl==NULL) + { + wxBusyCursor wait; + double spc[3]; - vtkImageData *vtkimagedata = _theViewPanel->getImageData(); - vtkimagedata->GetSpacing(spc); + vtkImageData *vtkimagedata = _theViewPanel->getImageData(); + vtkimagedata->GetSpacing(spc); - wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView(); + 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 ); + _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->SetSpacing(spc); - _refLineView->SetColorNormalContour(0, 0, 1); - _refLineView->SetColorEditContour(0, 0.5, 0.5); - _refLineView->SetWidthLine(4); + _refLineView->SetColorNormalContour(0, 0, 1); + _refLineView->SetColorEditContour(0, 0.5, 0.5); + _refLineView->SetWidthLine(4); - _refLineControl->SetModelView( _refLineModel , _refLineView ); - viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); - _refLineModel->SetCloseContour(false); - _refLineControl->CreateNewManualContour(); -/* - double z = _refLineControl->GetZ(); + _refLineControl->SetModelView( _refLineModel , _refLineView ); + viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); + _refLineModel->SetCloseContour(false); + _refLineControl->CreateNewManualContour(); - _refLineModel->AddPoint(50,100,z); - _refLineModel->AddPoint(80,40,z); +//EED?? double z = _refLineControl->GetZ(); + /* + _refLineControl->AddPoint(50,100,z); + _refLineControl->AddPoint(80,40,z); + _refLineControl->SetCompleteCreation(true); - _refLineControl->AddPoint(50,100,z); - _refLineControl->AddPoint(80,40,z); + _refLineModel->AddPoint(50,100,z); + _refLineModel->AddPoint(80,40,z); + _refLineModel->UpdateSpline(); - _refLineView->UpdateViewPoint(0); - _refLineView->UpdateViewPoint(1); + _refLineView->UpdateViewPoint(0); + _refLineView->UpdateViewPoint(1); + */ - _refLineControl->SetCompleteCreation(true); - _refLineControl->SetEditable(true); -*/ - _refLineControl->SetActive(true); - _refLineView->RefreshContour(); + _refLineControl->SetActive(true); + _refLineView->RefreshContour(); + } } //Hides the referenceLine @@ -1644,7 +1645,14 @@ void wxContourMainFrame::refLineHide() { if (_refLineControl!=NULL) { - _refLineView->RemoveCompleteContourActor(); + if (_refLineControl->GetActive()) + { + _refLineView->RemoveCompleteContourActor(); + _refLineControl->SetEditable(false); + _refLineControl->SetActive(false); + + RefreshInterface(); + } } } @@ -1653,22 +1661,35 @@ void wxContourMainFrame::refLineShow() { if (_refLineControl!=NULL) { - wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView(); + if (_refLineControl->GetActive()==false) + { + wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView(); - _refLineView->SetModel( _refLineModel ); - _refLineView->SetWxVtkBaseView( viewer2D ); - _refLineView->SetRange( 2 ); - _refLineView->SetZ( 1200 ); + _refLineView->SetModel( _refLineModel ); + _refLineView->SetWxVtkBaseView( viewer2D ); + _refLineView->SetRange( 2 ); + _refLineView->SetZ( 1200 ); - _refLineControl->SetModelView( _refLineModel , _refLineView ); - viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); - _refLineControl->CreateNewManualContour(); - //_refLineControl->SetActive(true); - //_refLineControl->SetEditable(true); - _refLineView->RefreshContour(); + _refLineControl->SetModelView( _refLineModel , _refLineView ); + viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); + _refLineControl->CreateNewManualContour(); + _refLineControl->SetActive(true); + _refLineView->RefreshContour(); + + RefreshInterface(); + } } } +void wxContourMainFrame::refLineChangeWidth(int width) +{ + _refLineView->SetWidthLine(width); + _refLineView->RefreshContour(); + + RefreshInterface(); +} + + void wxContourMainFrame::onMirror() { //AD:02-09 @@ -1703,7 +1724,195 @@ void wxContourMainFrame::onMirror() //_refName = ""; } -void wxContourMainFrame::showAxis(bool show){ +void wxContourMainFrame::onThreshold() +{ + int z = _theViewPanel->GetZ(); + double range[2]; + + vtkImageData * img = getImageData(); + img->GetScalarRange(range); + + int minTot = floor (range[0]); + int maxTot = ceil (range[1]); + + double minMax[2]; + _pannew->onThresholdInstantChange(minMax); + int minVal = floor (minMax[0]); + int maxVal = floor (minMax[1]); + + if (!_actorPresent) + { + if (_imageReslicer==NULL) + { + _imageReslicer = vtkImageReslice::New(); + _imageReslicer->SetInput( img ); + _imageReslicer->SetInformationInput(img); + _imageReslicer->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1); + _imageReslicer->SetOutputDimensionality(2); + _imageReslicer->SetInterpolationModeToLinear(); + } + + _imageReslicer->SetResliceAxesOrigin(0,0,z); + + img = _imageReslicer->GetOutput(); + img->Update(); + img->UpdateInformation(); + + wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView(); + + if (_thresholdTable==NULL) + { + //Lookup Table + _thresholdTable = vtkLookupTable::New(); + _thresholdTable->SetNumberOfTableValues(maxTot+1); + _thresholdTable->SetTableRange(range); + _thresholdTable->SetAlphaRange(0, 1); + _thresholdTable->SetValueRange(0, 1); + _thresholdTable->SetSaturationRange(0, 0); + _thresholdTable->SetRampToLinear( ); + } + + //Assign a fake color for the upper image, and set the white as transparent + int i; + for(i = minTot; i <= maxTot; i++) + { + if( i >= minVal && i <= maxVal ) + { + _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1); + } + else if( i >= minTot && i < minVal ) + { + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + } + else if( i > maxVal && i < maxTot ) + { + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + } + else + { + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + } + } + _thresholdTable->Build( ); + + if (_thresholdMapper==NULL) + { + _thresholdMapper = vtkImageMapToColors::New( ); + } + + _thresholdMapper->SetLookupTable( _thresholdTable ); + _thresholdMapper->SetInput( img ); + + if (_thresholdActor==NULL) + { + _thresholdActor = vtkImageActor::New( ); + _thresholdActor->SetOpacity( 0.6 ); + _thresholdActor->InterpolateOn( ); + _thresholdActor->SetPosition( 0,0, 900-1 ); + } + + _thresholdActor->SetInput( _thresholdMapper->GetOutput() ); + + baseView->GetRenderer()->AddActor( _thresholdActor ); + _actorPresent = true; + } + + else + { + _imageReslicer->SetResliceAxesOrigin(0,0,z); + img = _imageReslicer->GetOutput(); + img->Update(); + img->UpdateInformation(); + + //Assign a fake color for the upper image, and set the white as transparent + int i; + for(i = minTot; i <= maxTot; i++) + { + if( i >= minVal && i <= maxVal ) + { + _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1); + } + else if( i >= minTot && i < minVal ) + { + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + } + else if( i > maxVal && i < maxTot ) + { + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + } + else + { + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + } + } + + _thresholdTable->Build( ); + _thresholdMapper->SetLookupTable( _thresholdTable ); + _thresholdMapper->SetInput( img ); + _thresholdActor->SetInput( _thresholdMapper->GetOutput() ); + } + /* + vtkImageViewer2* viewer = vtkImageViewer2::New(); + viewer->SetInput( upperImageActor->GetInput() ); + viewer->SetColorLevel((range[1]-range[0])/2); + viewer->SetColorWindow(range[1]); + viewer->GetRenderer()->AddActor( upperImageActor ); + viewer->Render(); + */ + _theViewPanel->RefreshInterface(); +} + + +void wxContourMainFrame::onThresholdChange() +{ + if (_actorPresent) + { + onThreshold(); + } +} + +void wxContourMainFrame::onThresholdInterpolation(bool interpolate) +{ + if (_thresholdActor!=NULL) + { + if (interpolate) + { + _thresholdActor->InterpolateOn( ); + } + + else + { + _thresholdActor->InterpolateOff( ); + } + + _theViewPanel->RefreshInterface(); + } +} + +void wxContourMainFrame::onThresholdChangeOpacity (int opacity) +{ + if (_actorPresent) + { + _thresholdActor->SetOpacity(opacity*0.1); + } + + _theViewPanel->RefreshInterface(); +} + +void wxContourMainFrame::onThresholdRemove() +{ + if (_actorPresent) + { + wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView(); + baseView->GetRenderer()->RemoveActor( _thresholdActor ); + _actorPresent = false; + } + + _theViewPanel->RefreshInterface(); +} + +void wxContourMainFrame::showAxis(bool show) +{ _theViewPanel->SetVisibleAxis(show); _theViewPanel->Refresh(); } @@ -1749,7 +1958,6 @@ int wxContourMainFrame::getWindowLevel(){ void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){ _theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel); - RefreshInterface(); } @@ -2044,7 +2252,10 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, int typeContourGroup){ SaveValuesXYZ( directory , namefile, typeContourGroup ); - SaveImageResult( directory , namefile, typeContourGroup); + + vtkImageData* mask, *value; + this->getMaskValue(mask, value, typeContourGroup); + this->SaveImageResult( directory , namefile, mask, value); FILE *pFile=fopen(filename.c_str(),"w+"); @@ -2204,8 +2415,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil delete contourextractdata; } -void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, int typeContourGroup) -{ +void wxContourMainFrame::getMaskValue(vtkImageData* mask,vtkImageData* value,int typeContourGroup){ wxBusyCursor wait; ContourExtractData *contourextractdata = new ContourExtractData( true ); //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection(); @@ -2284,20 +2494,19 @@ void wxContourMainFrame::SaveImageResult(std::string directory,std::string namef } contourextractdata->SetLstManualContourModel( lstManConModTmp ); - - -// for (ii=0 ; iigetModel() ); -// } -// contourextractdata->SetLstManualContourModel( lstManConMod ); - contourextractdata->CalculateImageResult(); // with actual Z } // for iContourGroup } // for z + value = contourextractdata->GetVtkImageValueResult(); + mask = contourextractdata->GetVtkImageMaskResult(); + delete contourextractdata; +} + +void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value) +{ + std::string temp = directory + "/" + namefile + "-Value.mhd"; wxString filename = crea::std2wx(temp); @@ -2311,7 +2520,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( ); @@ -2330,15 +2539,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); @@ -2382,4 +2593,8 @@ void wxContourMainFrame::saveFileWithContoursAutomatique(){ }else{ onSave(); } -} \ No newline at end of file +} +void wxContourMainFrame::ShowToolsPanel(bool show){ + _pannew->Show(show); +} +