X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FInterface_ManagerContour_NDimensions%2FwxContourMainFrame.cxx;h=b6d2133f84b044328d314268bc7d81e88f567c84;hb=a6507d91019d9f428af751e5b0b3a7d19d6f0bf6;hp=e391f7c5c4bff9168b51e5f5b314d7ef77fa6c2a;hpb=9955fb3731ee66893494ccc86f895ae18e62bb4c;p=creaContours.git diff --git a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx index e391f7c..b6d2133 100644 --- a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx +++ b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx @@ -13,12 +13,6 @@ #include "NameWrapper.h" #include "wx/artprov.h" #include "ConceptDataWrap.h" - -#include -//#include "ImageSourceThing.h" -//#include "wxContour_ActionCommandsID.h" -//#include "OutlineModelBuilder.h" -//#include "wxContourEventHandler.h" #include //---------------------------------------------------------------------------------------------------------------- @@ -58,6 +52,9 @@ char wxContourMainFrame::COPY = 'C'; _refLineControl = NULL; _refLineModel = NULL; _refLineView = NULL; + _imageReslicer = NULL; + _thresholdTable = NULL; + _thresholdMapper = NULL; _thresholdActor = NULL; _actorPresent = false; @@ -65,7 +62,8 @@ char wxContourMainFrame::COPY = 'C'; // m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER; // m_notebook_theme = 0; //wxContour_ActionCommandsID a; - + + _contourextractdata = NULL; } wxContourMainFrame :: wxContourMainFrame(wxWindow* parent, wxWindowID id,const wxString& title,const wxPoint& pos,const wxSize& size,std::vector images, long style,std::string datadir) @@ -79,6 +77,9 @@ char wxContourMainFrame::COPY = 'C'; _refLineControl = NULL; _refLineModel = NULL; _refLineView = NULL; + _imageReslicer = NULL; + _thresholdTable = NULL; + _thresholdMapper = NULL; _thresholdActor = NULL; _actorPresent = false; @@ -101,10 +102,14 @@ char wxContourMainFrame::COPY = 'C'; { this->setVectImages(images); } - + + _contourextractdata = NULL; } -void wxContourMainFrame::setVectImages( std::vector images ){ +void wxContourMainFrame::setVectImages(std::vector imgs) +{ + + _images = imgs; #if defined(__GNUC__) std::string str_home(getenv("HOME")); @@ -119,7 +124,7 @@ void wxContourMainFrame::setVectImages( std::vector images ){ notebook = this->createNotebook(); - kernelManager = new KernelManagerContour( images , _datadir+"/data/" , strCreaContourDataTmp ); + kernelManager = new KernelManagerContour( imgs , _datadir+"/data/" , strCreaContourDataTmp ); _instantPanel = new wxInstantChooserPanel( notebook, "Instant Chooser", true, false, "c" ); @@ -166,7 +171,8 @@ void wxContourMainFrame::setVectImages( std::vector images ){ wxContourMainFrame :: ~wxContourMainFrame() { - + delete _contourextractdata; + deleteAllContours(); _pannew->Close(); interfMainPanel::resetInstance(); delete kernelManager; @@ -575,13 +581,50 @@ 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) +{ + vtkImageData * mask; + vtkImageData * value; + this->getMaskValue(&mask, &value, typeContourGroup); + + 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; @@ -594,13 +637,14 @@ void wxContourMainFrame::changeInstant() kernelManager->setInstant(instantVect); //_modelManager->setInstant( _actualInstant ); - updateActor(); + onThresholdChange(); updateInstantOutlines(); updateInstantImageData(); updateInstantAxes(); } + void wxContourMainFrame :: updateInstantOutlines() { _theViewPanel->removeSceneContours(); @@ -638,83 +682,6 @@ void wxContourMainFrame::updateInstantAxes() { } -void wxContourMainFrame :: updateActor() -{ - if (_actorPresent) - { - int minMax[2]; - _pannew->onThresholdInstantChange(minMax); - - int z = _theViewPanel->GetZ(); - - vtkImageData * img = getImageData(); - vtkImageReslice *imageReslice = vtkImageReslice::New(); - - imageReslice->SetInput( img ); - imageReslice->SetInformationInput(img); - imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1); - imageReslice->SetResliceAxesOrigin(0,0,z); - imageReslice->SetOutputDimensionality(2); - imageReslice->SetInterpolationModeToLinear(); - - img = imageReslice->GetOutput(); - img->Update(); - img->UpdateInformation(); - -//EED??? wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView(); - - double range[2]; - img->GetScalarRange(range); - - int min = floor (range[0]); - int max = ceil (range[1]); - - //Lookup Table - vtkLookupTable *lookup = vtkLookupTable::New(); - lookup->SetNumberOfTableValues(max+1); - lookup->SetTableRange(range); - lookup->SetAlphaRange(0, 1); - lookup->SetValueRange(0, 1); - lookup->SetSaturationRange(0, 0); - lookup->SetRampToLinear( ); - - //Assign a fake color for the upper image, and set the white as transparent - int i; - int minVal = minMax[0]; - int maxVal = minMax[1]; - - for(i = min; i <= max; i++) - { - if( i >= minVal && i <= maxVal ) - { - lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1); - } - else if( i >= min && i < minVal ) - { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent - } - else if( i > maxVal && i < max ) - { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent - } - else - { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent - } - } - - lookup->Build( ); - - vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( ); - mapperImage->SetLookupTable( lookup ); - mapperImage->SetInput( img ); - //mapperImage->SetOutputFormatToRGBA( ); - - _thresholdActor->SetInput( mapperImage->GetOutput() ); - printf("EED wxContourMainFrame::updateActor %d \n" , z); - _thresholdActor->SetPosition( 0,0, 900-1 ); - } -} void wxContourMainFrame::onChangeDeep(int val){ _instantPanel->setConceptValue( "Axe Depth", (int)val ); @@ -829,24 +796,94 @@ 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); +} + +void wxContourMainFrame ::loadContours( FILE *pFile, bool staticContour ) +{ + char tmp[255]; + + if (staticContour==false) + { + fscanf(pFile,"%s",tmp); // ImageDimensions + fscanf(pFile,"%s",tmp); // X + fscanf(pFile,"%s",tmp); // Y + fscanf(pFile,"%s",tmp); // Z + + fscanf(pFile,"%s",tmp); // ImageSpacing + fscanf(pFile,"%s",tmp); // X + fscanf(pFile,"%s",tmp); // Y + fscanf(pFile,"%s",tmp); // Z + } - //_theViewPanel->getSceneManager()->removeSceneContours(); - //changeInstant(); + 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;ifactoryManualContourModel(typeContourModel); + manModelContour->Open(pFile); + + fscanf(pFile,"%s",tmp); // TypeView + fscanf(pFile,"%s",tmp); // ## + typeView = atoi(tmp); + + std::string theName; + theName = kernelManager->createOutline( manModelContour, instantVector ); + bool addedModel = theName.compare("") != 0; + if( addedModel ) + { + double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default + _theViewPanel->getSpacing(spc); + //Adding the manualContourControler to interface objects structure + //Adding the manualViewContour to interface objects structure + //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active. + _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ; + } + + if (staticContour==true) + { + Instant instant(&instantVector); + kernelManager->changeContourOfManager( theName , &instant ); + } + }// for numberOfContours } -void wxContourMainFrame::onLoad(){ +void wxContourMainFrame::onLoad() +{ char tmp[255]; wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxOPEN ); if (dialog.ShowModal() == wxID_OK) @@ -857,20 +894,36 @@ void wxContourMainFrame::onLoad(){ fscanf(pFile,"%s",tmp); // --CreaContour-- fscanf(pFile,"%s",tmp); // Version - fscanf(pFile,"%s",tmp); // 1.0.1 + fscanf(pFile,"%s",tmp); // 1.0.2 || 1.0.1 || 1.0.0 std::string version(tmp); - - openContours(pFile,false); - if (version!="1.0.0"){ - openContours(pFile,true); + + //AD:02-06-09 + if (version=="1.0.2") + { + openContours(pFile,2,false); + openContours(pFile,2,true); //Load StaticContours + } + + //AD:02-06-09 + else if (version=="1.0.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,1,false); //Skips ImageDimensions and ImageSpacing } -// _theViewPanel->getSceneManager()->openFileWithContours(ff); fclose(pFile); } _theViewPanel->getSceneManager()->removeSceneContours(); changeInstant(); } + +//AD: 29-05-09 void wxContourMainFrame::onSave(){ wxFileDialog dialog(NULL, _T("Choose a file"), _T(""), _T(""), _T("*.roi"), wxSAVE ); if (dialog.ShowModal() == wxID_OK) @@ -880,26 +933,48 @@ void wxContourMainFrame::onSave(){ saveFileWithContours( fileNameContourROI ); } } -void wxContourMainFrame::saveFileWithContours( std::string filename ){ + +//AD: 29-05-09 +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" ); + fprintf(pFile,"Version %s\n", "1.0.2" ); + + 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 ); + 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 ); @@ -911,8 +986,48 @@ void wxContourMainFrame::saveFileWithContours( std::string filename ){ fclose(pFile); } -void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){ +//AD:04-06-09 +void wxContourMainFrame::openContours( FILE *pFile, 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); @@ -922,64 +1037,159 @@ void wxContourMainFrame::openContours( FILE *pFile, bool staticContour ){ manualContourModel *manModelContour; int typeView; - int i; - for (i=0;ifactoryManualContourModel(typeContourModel); - manModelContour->Open(pFile); - - fscanf(pFile,"%s",tmp); // TypeView - fscanf(pFile,"%s",tmp); // ## - typeView = atoi(tmp); - - -// if (typeView==1) -// { -// } + int i; + for (i=0;ifactoryManualContourModel(typeContourModel); + manModelContour->Open(pFile); + + fscanf(pFile,"%s",tmp); // TypeView + fscanf(pFile,"%s",tmp); // ## + typeView = atoi(tmp); + + std::string theName; + theName = kernelManager->createOutline( manModelContour, instantVector ); + bool addedModel = theName.compare("") != 0; + if( addedModel ) + { + double spc[3];//Si no hay imagen pero hay contornos que spacing se pone por default + _theViewPanel->getSpacing(spc); + //Adding the manualContourControler to interface objects structure + //Adding the manualViewContour to interface objects structure + //_theViewPanel->getSceneManager()->setControlActiveStateOfALL( false );//This call is being done here because if the ROI is created underneath the previously created ROIS will still be active. + _theViewPanel->getSceneManager()->configureViewControlTo( theName, manModelContour,spc , typeView) ; + } + + if (staticContour) //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) ; - } + 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 (staticContour==true) + if (dial->GetReturnCode() == wxID_OK) { - Instant instant(&instantVector); - kernelManager->changeContourOfManager( theName , &instant ); + typeOfTransformation = radioOpts->GetSelection(); + transform = true; } + + int i; + for (i=0;ifactoryManualContourModel(typeContourModel); + manModelContour->Open(pFile); + + 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); + } + } - }// for numberOfContours + 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(){ @@ -1009,177 +1219,176 @@ void wxContourMainFrame::onSegmentationOneSliceITK(wxString distance, wxString s 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; + 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 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; + //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 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; + //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; + //Tercer tipo de conversiÛn + typedef itk::RescaleIntensityImageFilter< + InternalImageType, + OutputImageType > CastFilterType3; - //Cuarto tipo de conversiÛn - typedef itk::RescaleIntensityImageFilter< - OutputImageType, - OutputImageType > CastFilterType4; + //Cuarto tipo de conversiÛn + typedef itk::RescaleIntensityImageFilter< + OutputImageType, + OutputImageType > CastFilterType4; - ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New(); - - thresholder->SetLowerThreshold( 0.0 ); - thresholder->SetUpperThreshold( 128 ); + ThresholdingFilterType::Pointer thresholder = ThresholdingFilterType::New(); + + thresholder->SetLowerThreshold( 0.0 ); + thresholder->SetUpperThreshold( 128 ); - thresholder->SetOutsideValue( 255 ); - thresholder->SetInsideValue( 0 ); + 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; + //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(); - + ConnectorType::Pointer connector= ConnectorType::New(); + ConnectorType2::Pointer connector2= ConnectorType2::New(); + - CastFilterType::Pointer filter=CastFilterType::New(); - CastFilterType2::Pointer filter2=CastFilterType2::New(); + CastFilterType::Pointer filter=CastFilterType::New(); + CastFilterType2::Pointer filter2=CastFilterType2::New(); - connector->SetInput( imagedata ); - filter2->SetInput(connector->GetOutput()); + connector->SetInput( imagedata ); + filter2->SetInput(connector->GetOutput()); - typedef itk::CurvatureAnisotropicDiffusionImageFilter< - InternalImageType, - InternalImageType > SmoothingFilterType; + typedef itk::CurvatureAnisotropicDiffusionImageFilter< + InternalImageType, + InternalImageType > SmoothingFilterType; - SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New(); + SmoothingFilterType::Pointer smoothing = SmoothingFilterType::New(); - typedef itk::GradientMagnitudeRecursiveGaussianImageFilter< - InternalImageType, - InternalImageType > GradientFilterType; + typedef itk::GradientMagnitudeRecursiveGaussianImageFilter< + InternalImageType, + InternalImageType > GradientFilterType; - typedef itk::SigmoidImageFilter< - InternalImageType, - InternalImageType > SigmoidFilterType; + typedef itk::SigmoidImageFilter< + InternalImageType, + InternalImageType > SigmoidFilterType; - GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New(); + GradientFilterType::Pointer gradientMagnitude = GradientFilterType::New(); - SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New(); + SigmoidFilterType::Pointer sigmoid = SigmoidFilterType::New(); - sigmoid->SetOutputMinimum( 0.0 ); - sigmoid->SetOutputMaximum( 255.0 ); + sigmoid->SetOutputMinimum( 0.0 ); + sigmoid->SetOutputMaximum( 255.0 ); - typedef itk::FastMarchingImageFilter< - InternalImageType, - InternalImageType > FastMarchingFilterType; + typedef itk::FastMarchingImageFilter< + InternalImageType, + InternalImageType > FastMarchingFilterType; - FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New(); + FastMarchingFilterType::Pointer fastMarching = FastMarchingFilterType::New(); - typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType, - InternalImageType > GeodesicActiveContourFilterType; - GeodesicActiveContourFilterType::Pointer geodesicActiveContour = - GeodesicActiveContourFilterType::New(); + typedef itk::GeodesicActiveContourLevelSetImageFilter< InternalImageType, + InternalImageType > GeodesicActiveContourFilterType; + GeodesicActiveContourFilterType::Pointer geodesicActiveContour = + GeodesicActiveContourFilterType::New(); - typedef itk::ZeroCrossingImageFilter< - InternalImageType, - InternalImageType > ZeroCrossingFilterType; -ZeroCrossingFilterType::Pointer zeroCrossing = - ZeroCrossingFilterType::New(); + typedef itk::ZeroCrossingImageFilter< + InternalImageType, + InternalImageType > ZeroCrossingFilterType; + ZeroCrossingFilterType::Pointer zeroCrossing = + ZeroCrossingFilterType::New(); -const double propagationScaling = atof( crea::wx2std(prop).c_str() ); + const double propagationScaling = atof( crea::wx2std(prop).c_str() ); - geodesicActiveContour->SetPropagationScaling( propagationScaling ); - geodesicActiveContour->SetCurvatureScaling( 1.0 ); - geodesicActiveContour->SetAdvectionScaling( 1.0 ); + 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 ); + 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->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 ); + 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 sigma = atof( crea::wx2std(sigm).c_str() ); + gradientMagnitude->SetSigma( sigma ); - const double alpha = atof( crea::wx2std(alf).c_str() ); - const double beta = atof( crea::wx2std(bet).c_str() ); + const double alpha = atof( crea::wx2std(alf).c_str() ); + const double beta = atof( crea::wx2std(bet).c_str() ); - sigmoid->SetAlpha( alpha ); - sigmoid->SetBeta( beta ); - - typedef FastMarchingFilterType::NodeContainer NodeContainer; - typedef FastMarchingFilterType::NodeType NodeType; + sigmoid->SetAlpha( alpha ); + sigmoid->SetBeta( beta ); + + typedef FastMarchingFilterType::NodeContainer NodeContainer; + typedef FastMarchingFilterType::NodeType NodeType; - NodeContainer::Pointer seeds = NodeContainer::New(); + NodeContainer::Pointer seeds = NodeContainer::New(); - InternalImageType::IndexType seedPosition; - seedPosition[0] = x; - seedPosition[1] = y; + InternalImageType::IndexType seedPosition; + seedPosition[0] = x; + seedPosition[1] = y; - const double initialDistance = atof( crea::wx2std(distanc).c_str() ); + const double initialDistance = atof( crea::wx2std(distanc).c_str() ); - NodeType node; + NodeType node; - const double seedValue = - initialDistance; + 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 + 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(); @@ -1212,26 +1421,26 @@ const double propagationScaling = atof( crea::wx2std(prop).c_str() ); vtkPolyData* polyDataResult = cntVTK->GetOutput(); - std::cout<<"Points "<GetNumberOfPoints()<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();*/ + //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 + //--Calculating control points std::vector vecX; std::vector vecY; @@ -1250,8 +1459,8 @@ myfile.close();*/ double xAct=0; double yAct=0; int ii,size=polyDataResult->GetNumberOfPoints(); -ofstream myfile; -myfile.open ("C:/Creatis/example2.txt"); + ofstream myfile; + myfile.open ("C:/Creatis/example2.txt"); size=polyDataResult->GetNumberOfPoints(); for (ii=0;iiSetContour( &vecX , &vecY , &vecZ ); -int method=2; + int method=2; if (method==0){ extractcontrolpoints2d->GetInitialControlPoints( &vecCtrlPointX , &vecCtrlPointY , &vecCtrlPointZ ); } @@ -1687,18 +1896,27 @@ void wxContourMainFrame::referenceLine() _refLineView->SetWidthLine(4); _refLineControl->SetModelView( _refLineModel , _refLineView ); - viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); + vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView(); + style->AddInteractorStyleMaracas( _refLineControl ); _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); @@ -1741,7 +1959,8 @@ void wxContourMainFrame::refLineShow() _refLineView->SetZ( 1200 ); _refLineControl->SetModelView( _refLineModel , _refLineView ); - viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); + vtkInteractorStyleBaseView* style = (vtkInteractorStyleBaseView*)viewer2D->GetInteractorStyleBaseView(); + style->AddInteractorStyleMaracas( _refLineControl ); _refLineControl->CreateNewManualContour(); _refLineControl->SetActive(true); _refLineView->RefreshContour(); @@ -1794,171 +2013,151 @@ void wxContourMainFrame::onMirror() //_refName = ""; } -void wxContourMainFrame::onThreshold(int minVal, int maxVal) +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) { - int z = _theViewPanel->GetZ(); - - vtkImageData * img = getImageData(); - vtkImageReslice *imageReslice = vtkImageReslice::New(); + 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(); + } - imageReslice->SetInput( img ); - imageReslice->SetInformationInput(img); - imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1); - imageReslice->SetResliceAxesOrigin(0,0,z); - imageReslice->SetOutputDimensionality(2); - imageReslice->SetInterpolationModeToLinear(); + _imageReslicer->SetResliceAxesOrigin(0,0,z); - img = imageReslice->GetOutput(); + img = _imageReslicer->GetOutput(); img->Update(); img->UpdateInformation(); wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView(); - - double range[2]; - img->GetScalarRange(range); - int min = floor (range[0]); - int max = ceil (range[1]); - - //Lookup Table - vtkLookupTable *lookup = vtkLookupTable::New(); - lookup->SetNumberOfTableValues(max+1); - lookup->SetTableRange(range); - lookup->SetAlphaRange(0, 1); - lookup->SetValueRange(0, 1); - lookup->SetSaturationRange(0, 0); - lookup->SetRampToLinear( ); + 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 = min; i <= max; i++) + for(i = minTot; i <= maxTot; i++) { if( i >= minVal && i <= maxVal ) { - lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1); + _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1); } - else if( i >= min && i < minVal ) + else if( i >= minTot && i < minVal ) { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent } - else if( i > maxVal && i < max ) + else if( i > maxVal && i < maxTot ) { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent } else { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent } } - - lookup->Build( ); - - vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( ); - mapperImage->SetLookupTable( lookup ); - mapperImage->SetInput( img ); - //mapperImage->SetOutputFormatToRGBA( ); + _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->InterpolateOn( ); + _thresholdActor->SetPosition( 0,0, 900-1 ); } -printf("EED wxContourMainFrame::onThreshold \n"); - _thresholdActor->SetPosition( 0,0, z+1 ); - _thresholdActor->SetInput( mapperImage->GetOutput() ); + + _thresholdActor->SetInput( _thresholdMapper->GetOutput() ); baseView->GetRenderer()->AddActor( _thresholdActor ); _actorPresent = true; } - RefreshInterface(); -/* - 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(); -*/ - -} - -void wxContourMainFrame::onThresholdChange(int minVal, int maxVal) -{ - if (_actorPresent) + else { - int z = _theViewPanel->GetZ(); - - vtkImageData * img = getImageData(); - vtkImageReslice *imageReslice = vtkImageReslice::New(); - - imageReslice->SetInput( img ); - imageReslice->SetInformationInput(img); - imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1); - imageReslice->SetResliceAxesOrigin(0,0,z); - imageReslice->SetOutputDimensionality(2); - imageReslice->SetInterpolationModeToLinear(); - - img = imageReslice->GetOutput(); + _imageReslicer->SetResliceAxesOrigin(0,0,z); + img = _imageReslicer->GetOutput(); img->Update(); img->UpdateInformation(); -//EED?? wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView(); - - double range[2]; - img->GetScalarRange(range); - - int min = floor (range[0]); - int max = ceil (range[1]); - - //Lookup Table - vtkLookupTable *lookup = vtkLookupTable::New(); - lookup->SetNumberOfTableValues(max+1); - lookup->SetTableRange(range); - lookup->SetAlphaRange(0, 1); - lookup->SetValueRange(0, 1); - lookup->SetSaturationRange(0, 0); - lookup->SetRampToLinear( ); - //Assign a fake color for the upper image, and set the white as transparent int i; - for(i = min; i <= max; i++) + for(i = minTot; i <= maxTot; i++) { if( i >= minVal && i <= maxVal ) { - lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1); + _thresholdTable->SetTableValue(i, 1.0, 0.0, 0.0, 1); } - else if( i >= min && i < minVal ) + else if( i >= minTot && i < minVal ) { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent } - else if( i > maxVal && i < max ) + else if( i > maxVal && i < maxTot ) { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent } else { - lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent + _thresholdTable->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent } } - - lookup->Build( ); - vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( ); - mapperImage->SetLookupTable( lookup ); - mapperImage->SetInput( img ); - //mapperImage->SetOutputFormatToRGBA( ); + _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(); +} - _thresholdActor->SetInput( mapperImage->GetOutput() ); -printf("EED wxContourMainFrame::onThresholdChange \n"); - _thresholdActor->SetPosition( 0,0, z+1 ); +void wxContourMainFrame::onThresholdChange() +{ + if (_actorPresent) + { + onThreshold(); } - - RefreshInterface(); } void wxContourMainFrame::onThresholdInterpolation(bool interpolate) @@ -1975,7 +2174,7 @@ void wxContourMainFrame::onThresholdInterpolation(bool interpolate) _thresholdActor->InterpolateOff( ); } - RefreshInterface(); + _theViewPanel->RefreshInterface(); } } @@ -1986,7 +2185,7 @@ void wxContourMainFrame::onThresholdChangeOpacity (int opacity) _thresholdActor->SetOpacity(opacity*0.1); } - RefreshInterface(); + _theViewPanel->RefreshInterface(); } void wxContourMainFrame::onThresholdRemove() @@ -1998,7 +2197,7 @@ void wxContourMainFrame::onThresholdRemove() _actorPresent = false; } - RefreshInterface(); + _theViewPanel->RefreshInterface(); } void wxContourMainFrame::showAxis(bool show) @@ -2038,10 +2237,32 @@ 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(); } @@ -2149,12 +2370,21 @@ std::vector wxContourMainFrame::getOutlinesName(int slide){ return kernelManager->getOutlinesNameAtInstant(tempVector); } -void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ){ + +void wxContourMainFrame::GenerateContourExtractData() +{ + if (_contourextractdata==NULL) { _contourextractdata = new ContourExtractData(true); } +} + + +void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int selection,int minimumZ,int maximumZ) +{ + GenerateContourExtractData(); + int maxContourGroup = 0; - ContourExtractData *contourextractdata = new ContourExtractData(); - contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); + _contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); std::vector lstManConMod; std::vector lstManConModTmp; @@ -2208,7 +2438,7 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel totalZ = maxZ-minZ+1; - contourextractdata->SetImage( imagedata); + _contourextractdata->SetImage( imagedata); // For each slice.. for ( z=minZ ; z<=maxZ ; z++ ) @@ -2221,7 +2451,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); @@ -2268,18 +2498,18 @@ 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, + _contourextractdata->Statistics( &pLstValue, minimumZ, maximumZ, &resultGrayRangeCount, @@ -2337,54 +2567,71 @@ void wxContourMainFrame::onInformationContourLabels(int typeContourGroup,int sel } interfMainPanel::getInstance()->setStringInfoPanel( _T("") ); - delete contourextractdata; } -void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, int typeContourGroup){ - SaveValuesXYZ( directory , namefile, typeContourGroup ); - - vtkImageData* mask, *value; - this->getMaskValue(mask, value, typeContourGroup); - this->SaveImageResult( directory , namefile, mask, value); +//AD: 29-05-09 +void wxContourMainFrame::onSaveResults(std::string directory,std::string namefile, std::string filename, + int typeContourGroup, bool XYZValues, bool contourImage, bool statistics) +{ + if (XYZValues) + { + SaveValuesXYZ( directory , namefile, typeContourGroup ); + } + if (contourImage) + { + vtkImageData * mask; + vtkImageData * value; + this->getMaskValue(&mask, &value, typeContourGroup); + this->SaveImageResult( directory , namefile, mask, value); + } - FILE *pFile=fopen(filename.c_str(),"w+"); + if (statistics) + { + std::ostringstream name; + name << filename << ".xls"; + - int sizeZ = _theViewPanel->GetImageDataSizeZ(); + FILE *pFile=fopen(name.str().c_str(),"w+"); - wxString tmpString; - int i,j,maxX,maxY=sizeZ; - maxX= interfMainPanel::getInstance()->getNumberColsInformationPanel();//this->_grid->GetNumberCols(); + int sizeZ = _theViewPanel->GetImageDataSizeZ(); - int iTitle,sizeTitle = (maxX / _numberOfVariablesStatistics); - for ( iTitle=0; iTitlegetNumberColsInformationPanel();//this->_grid->GetNumberCols(); + + 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 + for ( j=0; jgetCellValue(j, i);//_grid->GetCellValue( j , i ); + fprintf(pFile,"%s\t" , (const char *)(tmpString.mb_str()) ); + } // for i + fprintf(pFile,"\n" ); + } // for j - fclose(pFile); + fclose(pFile); + } } +//AD: 29-05-09 void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefile,int typeContourGroup) { wxBusyCursor wait; - ContourExtractData *contourextractdata = new ContourExtractData(); + GenerateContourExtractData(); + //int typeContourGroup = this->_radiolstboxContourGroup->GetSelection(); - contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); + _contourextractdata ->SetTypeOperation( typeContourGroup % 3 ); std::vector lstManConMod; std::vector lstManConModTmp; @@ -2411,7 +2658,7 @@ void wxContourMainFrame::SaveValuesXYZ(std::string directory,std::string namefil maxZ = sizeZ;//_mbarrange->GetEnd(); totalZ = maxZ-minZ+1; - contourextractdata->SetImage( imagedata); + _contourextractdata->SetImage( imagedata); // For each slice.. for ( z=0 ; zSetZtoBeAnalys( z); + _contourextractdata->SetZtoBeAnalys( z); tempVector[1]=z; Instant instant(&tempVector); @@ -2461,13 +2708,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); @@ -2502,18 +2749,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){ wxBusyCursor wait; - ContourExtractData *contourextractdata = new ContourExtractData( true ); + 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; @@ -2538,7 +2786,7 @@ void wxContourMainFrame::getMaskValue(vtkImageData* mask,vtkImageData* value,int maxZ = sizeZ;//_mbarrange->GetEnd(); totalZ = maxZ-minZ+1; - contourextractdata->SetImage( imagedata); + _contourextractdata->SetImage( imagedata); // 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); @@ -2583,15 +2831,15 @@ void wxContourMainFrame::getMaskValue(vtkImageData* mask,vtkImageData* value,int 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)