X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FInterface_ManagerContour_NDimensions%2FwxContourMainFrame.cxx;h=5596ea4a2b6c5a9c4871ebac77672f5014fe4480;hb=11f6d82d938648eb1b5ee5321c8a0c797b20606e;hp=0d8806f236d70decdf44270abecf2ba6cce984ea;hpb=d9c32a7b27d8755c4859cc6558b88597035d9513;p=creaContours.git diff --git a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx index 0d8806f..5596ea4 100644 --- a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx +++ b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx @@ -15,6 +15,8 @@ #include "ConceptDataWrap.h" #include + + //---------------------------------------------------------------------------------------------------------------- // Class implementation //---------------------------------------------------------------------------------------------------------------- @@ -33,6 +35,7 @@ char wxContourMainFrame::COPY = 'C'; : wxPanel(parent, id, pos, size, style) { m_mgr.SetManagedWindow(this); + _contourGroup = 1; _creatingContoursActive = false; _theViewPanel = NULL; // _modelManager = NULL; @@ -52,16 +55,18 @@ char wxContourMainFrame::COPY = 'C'; _refLineControl = NULL; _refLineModel = NULL; _refLineView = NULL; - _imageReslicer = NULL; - _thresholdTable = NULL; - _thresholdMapper = NULL; - _thresholdActor = NULL; - _actorPresent = false; +// _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; + + _contourextractdata = NULL; + _viewMaskImage = NULL; + _viewMaskImagePanel = NULL; + _viewThresholdImage = NULL; + _viewThresholdImagePanel = NULL; } @@ -69,6 +74,7 @@ char wxContourMainFrame::COPY = 'C'; : wxPanel(parent, id, pos, size, style) { m_mgr.SetManagedWindow(this); + _contourGroup = 1; _creatingContoursActive = false; _theViewPanel = NULL; @@ -76,11 +82,11 @@ char wxContourMainFrame::COPY = 'C'; _refLineControl = NULL; _refLineModel = NULL; _refLineView = NULL; - _imageReslicer = NULL; - _thresholdTable = NULL; - _thresholdMapper = NULL; - _thresholdActor = NULL; - _actorPresent = false; +// _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; @@ -99,15 +105,17 @@ char wxContourMainFrame::COPY = 'C'; if(images.size() > 0) { - _images = images; this->setVectImages(images); } - + + _contourextractdata = NULL; } void wxContourMainFrame::setVectImages(std::vector imgs) { + _images = imgs; + #if defined(__GNUC__) std::string str_home(getenv("HOME")); #elif defined(_WIN32) @@ -168,6 +176,7 @@ void wxContourMainFrame::setVectImages(std::vector imgs) wxContourMainFrame :: ~wxContourMainFrame() { + delete _contourextractdata; deleteAllContours(); _pannew->Close(); interfMainPanel::resetInstance(); @@ -501,11 +510,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; @@ -577,32 +581,84 @@ 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::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 ); - - onThresholdChange(); + + // 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() { _theViewPanel->removeSceneContours(); @@ -755,43 +811,19 @@ void wxContourMainFrame ::loadState(std::string filename){ fscanf(pFile,"%s",tmp); // Version fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0 - std::string version(tmp); deleteAllContours(); - //AD:02-06-09 - if (version=="1.0.2") - { - loadContours(pFile); - } - - //AD:02-06-09 - else if (version=="1.0.1") - { - loadContours(pFile); - } - - //AD:02-06-09 - else if (version=="1.0.0") - { - loadContours(pFile); - } + loadContours(pFile, false); + loadContours(pFile, true); fclose(pFile); } -void wxContourMainFrame ::loadContours( FILE *pFile ) +void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour ) { char tmp[255]; - fscanf(pFile,"%s",tmp); // NumberOfContours - fscanf(pFile,"%s",tmp); // ## - int numberOfContours = atoi(tmp); - std::vector instantVector; - int typeContourModel; - manualContourModel *manModelContour; - int typeView; - fscanf(pFile,"%s",tmp); // ImageDimensions fscanf(pFile,"%s",tmp); // X fscanf(pFile,"%s",tmp); // Y @@ -801,6 +833,15 @@ void wxContourMainFrame ::loadContours( FILE *pFile ) 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; + int typeView; int i; for (i=0;igetSceneManager()->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 } @@ -864,19 +911,21 @@ void wxContourMainFrame::onLoad() //AD:02-06-09 if (version=="1.0.2") { - openContours(pFile,2); + openContours(pFile,2,false); + openContours(pFile,2,true); //Load StaticContours } //AD:02-06-09 else if (version=="1.0.1") { - openContours(pFile,1); + openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing + openContours(pFile,1,true); //Load StaticContours, skips ImageDimensions and ImageSpacing } //AD:02-06-09 else if (version=="1.0.0") { - openContours(pFile,0); + openContours(pFile,1,false); //Skips ImageDimensions and ImageSpacing } fclose(pFile); @@ -906,12 +955,7 @@ void wxContourMainFrame::saveFileWithContours( std::string filename ) fprintf(pFile,"--CreaContour--\n"); fprintf(pFile,"Version %s\n", "1.0.2" ); - - // Normal Contours - lstNameThings = kernelManager->GetLstNameThings(); - sizeLstNameThings = lstNameThings.size(); - fprintf(pFile,"NumberOfContours %d\n", sizeLstNameThings ); - + vtkImageData *image = _images[0]; int dimRange[3]; @@ -924,13 +968,24 @@ void wxContourMainFrame::saveFileWithContours( std::string filename ) 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 ); + for (i=0 ; iSaveThingName( pFile, lstNameThings[i] ); _theViewPanel->getSceneManager()->SaveThingName( pFile, lstNameThings[i] ); }// for i - //-- Contours Statics + //-- 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 ); @@ -943,18 +998,10 @@ void wxContourMainFrame::saveFileWithContours( std::string filename ) } //AD:04-06-09 -void wxContourMainFrame::openContours( FILE *pFile, int version ) +void wxContourMainFrame::openContours( FILE *pFile, int version, bool staticContour ) { char tmp[255]; - fscanf(pFile,"%s",tmp); // NumberOfContours - fscanf(pFile,"%s",tmp); // ## - int numberOfContours = atoi(tmp); - - std::vector instantVector; - int typeContourModel; - manualContourModel *manModelContour; - int typeView; - + vtkImageData *image = _images[0]; int imageDim[3]; double imageSpac[3]; @@ -985,12 +1032,21 @@ void wxContourMainFrame::openContours( FILE *pFile, int version ) fscanf(pFile,"%s",tmp); // Z tempSpac[2] = atof(tmp); - //Compare Spacing and Dims in X and Y (Necessary in Z?) - Just for Version 3 + //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; + manualContourModel *manModelContour; + int typeView; if (compatible==true) { @@ -1038,7 +1094,7 @@ void wxContourMainFrame::openContours( FILE *pFile, int version ) _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ; } - if (version==0) //StaticContours (will appear in all slices) + if (staticContour) //StaticContours (will appear in all slices) { Instant instant(&instantVector); kernelManager->changeContourOfManager( theName , &instant ); @@ -1049,7 +1105,7 @@ void wxContourMainFrame::openContours( FILE *pFile, int version ) else if (compatible==false) { - wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(250,160)); + wxDialog* dial = new wxDialog (this,-1,_T("Tools"),wxDefaultPosition, wxSize(260,160)); wxSizer* buttonsSizer = dial->CreateSeparatedButtonSizer(wxOK|wxCANCEL); wxBoxSizer *dialSizer = new wxBoxSizer(wxVERTICAL); @@ -1058,7 +1114,7 @@ void wxContourMainFrame::openContours( FILE *pFile, int version ) 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 actual image is not compatible with the ")) , 0, wxGROW ); + 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); @@ -1068,69 +1124,82 @@ void wxContourMainFrame::openContours( FILE *pFile, int version ) dial->Layout(); dial->ShowModal(); + int typeOfTransformation = -1; + bool transform = false; + if (dial->GetReturnCode() == wxID_OK) { - int typeOfTransformation = radioOpts->GetSelection(); - - int i; - for (i=0;iGetSelection(); + transform = true; + } + + int i; + for (i=0;ifactoryManualContourModel(typeContourModel); + manModelContour->Open(pFile); + + if (transform==true) { - instantVector.clear(); - fscanf(pFile,"%s",tmp); // Instant - - fscanf(pFile,"%s",tmp); // 1 - instantVector.push_back( atoi(tmp) ); - fscanf(pFile,"%s",tmp); // 2 - instantVector.push_back( atoi(tmp) ); - fscanf(pFile,"%s",tmp); // 3 - instantVector.push_back( atoi(tmp) ); - fscanf(pFile,"%s",tmp); // 4 - instantVector.push_back( atoi(tmp) ); - fscanf(pFile,"%s",tmp); // 5 - instantVector.push_back( atoi(tmp) ); - fscanf(pFile,"%s",tmp); // 6 - instantVector.push_back( atoi(tmp) ); - - - fscanf(pFile,"%s",tmp); // TypeContourModel - fscanf(pFile,"%s",tmp); // ## - typeContourModel = atoi(tmp); - - manModelContour = kernelManager->factoryManualContourModel(typeContourModel); - if (typeOfTransformation==0) { - manModelContour->OpenAndTransformDimension(pFile, imageDim, tempDim); + 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) { - manModelContour->OpenAndTransformSpacing(pFile, imageSpac, tempSpac); + 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); + 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 (version==0) //StaticContours (will appear in all slices) - { - Instant instant(&instantVector); - kernelManager->changeContourOfManager( theName , &instant ); - } - }// for numberOfContours - } + 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 } } @@ -1843,14 +1912,22 @@ void wxContourMainFrame::referenceLine() _refLineModel->SetCloseContour(false); _refLineControl->CreateNewManualContour(); -//EED?? double z = _refLineControl->GetZ(); +//AD: Inicializar el mirroring con una linea ya pintada /* - _refLineControl->AddPoint(50,100,z); - _refLineControl->AddPoint(80,40,z); + 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(50,100,z); - _refLineModel->AddPoint(80,40,z); + _refLineModel->AddPoint(x,y1,z); + _refLineModel->AddPoint(x,y2,z); _refLineModel->UpdateSpline(); _refLineView->UpdateViewPoint(0); @@ -1947,192 +2024,6 @@ void wxContourMainFrame::onMirror() //_refName = ""; } -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) { @@ -2304,13 +2195,16 @@ std::vector wxContourMainFrame::getOutlinesName(int slide){ return kernelManager->getOutlinesNameAtInstant(tempVector); } -void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ) + + +void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ,int grayRangeMin, int grayRangeMax) { +//EED01Juillet2009 GenerateContourExtractData(); + + wxString tempString; int maxContourGroup = 0; - - ContourExtractData *contourextractdata = new ContourExtractData(); - contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); + _contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); std::vector lstManConMod; std::vector lstManConModTmp; @@ -2330,8 +2224,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; @@ -2341,31 +2235,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++ ) { @@ -2377,7 +2263,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); @@ -2393,7 +2279,6 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel lstManConModExp = kernelManager->ExploseEachModel( lstManConMod ); - wxString tempString; tempString.Printf(_T("%d - %d"),z, sizeLstContourThings); interfMainPanel::getInstance()->setRowLabelInfoPanel(z, tempString); //_grid->SetRowLabelValue(z, tempString ); @@ -2424,20 +2309,20 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel 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); // Statistics of each slice. - contourextractdata->Statistics( &pLstValue, - minimumZ, - maximumZ, + _contourextractdata->Statistics( &pLstValue, + grayRangeMin, + grayRangeMax, &resultGrayRangeCount, &resultSize, &resultMin, @@ -2474,6 +2359,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; @@ -2490,15 +2414,13 @@ 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; } //AD: 29-05-09 void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, - int typeContourGroup, bool XYZValues, bool contourImage, bool statistics) + int typeContourGroup, int selection, int minZ, int maxZ, bool XYZValues, bool contourImage, bool statistics) { if (XYZValues) { @@ -2509,7 +2431,7 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil { vtkImageData * mask; vtkImageData * value; - this->getMaskValue(&mask, &value, typeContourGroup); + this->getMaskValue(&mask, &value, typeContourGroup,selection,minZ,maxZ); this->SaveImageResult( directory , namefile, mask, value); } @@ -2521,23 +2443,37 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil FILE *pFile=fopen(name.str().c_str(),"w+"); - int sizeZ = _theViewPanel->GetImageDataSizeZ(); wxString tmpString; - int i,j,maxX,maxY=sizeZ; + int i,j,maxX; + +// int sizeZ = _theViewPanel->GetImageDataSizeZ(); +// int maxY=sizeZ+2; + maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols(); + // -- Title -- int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics); for ( iTitle=0; iTitle 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(maxZ+2, i);//_grid->GetCellValue( maxZ+2 , i ); + fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) ); + } // for i + fprintf(pFile,"\n" ); + } + fclose(pFile); } } @@ -2555,9 +2503,10 @@ void wxContourMainFrame::onSaveResults(std::string directory,std::string namefil 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; @@ -2570,7 +2519,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; @@ -2584,7 +2533,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); @@ -2634,13 +2583,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); @@ -2675,18 +2624,19 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil } // for z interfMainPanel::getInstance()->setStringInfoPanel(_T("")); //_staticTextInformation->SetLabel( _T("") ); - delete contourextractdata; + } -void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value,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; @@ -2695,26 +2645,43 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value 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); @@ -2756,15 +2723,15 @@ void wxContourMainFrame::getMaskValue(vtkImageData ** mask,vtkImageData ** value lstManConModTmp = lstManConModExp; } - contourextractdata->SetLstManualContourModel( lstManConModTmp ); - contourextractdata->CalculateImageResult(); // with actual Z + _contourextractdata->SetLstManualContourModel( lstManConModTmp ); + _contourextractdata->CalculateImageResult(); // with actual Z } // for iContourGroup } // for z - (*value) = contourextractdata->GetVtkImageValueResult(); - (*mask) = contourextractdata->GetVtkImageMaskResult(); - delete contourextractdata; + (*value) = _contourextractdata->GetVtkImageValueResult(); + (*mask) = _contourextractdata->GetVtkImageMaskResult(); + } void wxContourMainFrame::SaveImageResult(std::string directory,std::string namefile, vtkImageData* mask,vtkImageData* value) @@ -2861,3 +2828,62 @@ 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; +} + + + + + +