X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FInterface_ManagerContour_NDimensions%2FwxContourMainFrame.cxx;h=e391f7c5c4bff9168b51e5f5b314d7ef77fa6c2a;hb=9955fb3731ee66893494ccc86f895ae18e62bb4c;hp=c126f7c3e2f21771a4445aacd571f4efdcd85f22;hpb=5940ba0f3739ac136ec5ffbdb1e24518915a4664;p=creaContours.git diff --git a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx index c126f7c..e391f7c 100644 --- a/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx +++ b/lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx @@ -58,6 +58,8 @@ char wxContourMainFrame::COPY = 'C'; _refLineControl = NULL; _refLineModel = NULL; _refLineView = NULL; + _thresholdActor = NULL; + _actorPresent = false; // set up default notebook style // m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER; @@ -77,6 +79,8 @@ char wxContourMainFrame::COPY = 'C'; _refLineControl = NULL; _refLineModel = NULL; _refLineView = NULL; + _thresholdActor = NULL; + _actorPresent = false; // set up default notebook style m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER; @@ -157,8 +161,7 @@ void wxContourMainFrame::setVectImages( std::vector images ){ void wxContourMainFrame :: resetInstance() { - delete instance; - instance = NULL; + instance->Destroy(); } wxContourMainFrame :: ~wxContourMainFrame() @@ -166,6 +169,8 @@ void wxContourMainFrame::setVectImages( std::vector images ){ _pannew->Close(); interfMainPanel::resetInstance(); + delete kernelManager; + instance = NULL; //_pannew->Destroy(); //delete _pannew; @@ -589,14 +594,15 @@ void wxContourMainFrame::changeInstant() kernelManager->setInstant(instantVect); //_modelManager->setInstant( _actualInstant ); + updateActor(); updateInstantOutlines(); updateInstantImageData(); updateInstantAxes(); - - } -void wxContourMainFrame :: updateInstantOutlines(){ - + + +void wxContourMainFrame :: updateInstantOutlines() +{ _theViewPanel->removeSceneContours(); _theViewPanel->addNameWrapperToScene(); @@ -613,7 +619,8 @@ std::string wxContourMainFrame::getNameWrapping(int i){ return kernelManager->getNameWrapping(i); } -void wxContourMainFrame::updateInstantImageData(){ +void wxContourMainFrame::updateInstantImageData() +{ std::vector inst; _instantPanel->getInstant(inst); @@ -627,7 +634,86 @@ void wxContourMainFrame::updateInstantImageData(){ } } -void wxContourMainFrame::updateInstantAxes(){ +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){ @@ -941,25 +1027,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; @@ -972,7 +1058,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; @@ -1025,23 +1111,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() ); @@ -1055,11 +1141,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 ); @@ -1073,7 +1159,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; @@ -1085,7 +1171,7 @@ const double propagationScaling = atof( prop ); seeds->Initialize(); seeds->InsertElement( 0, node ); - fastMarching->SetTrialPoints( seeds ); + fastMarching->SetTrialPoints( seeds ); fastMarching->SetSpeedConstant( 1.0 ); @@ -1188,7 +1274,7 @@ myfile.open ("C:/Creatis/example2.txt"); std::cout<<" x Anterior "<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(); + _refLineControl->SetModelView( _refLineModel , _refLineView ); + viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); + _refLineModel->SetCloseContour(false); + _refLineControl->CreateNewManualContour(); - double z = _refLineControl->GetZ(); -/* - _refLineControl->AddPoint(50,100,z); - _refLineControl->AddPoint(80,40,z); - _refLineControl->SetCompleteCreation(true); +//EED?? double z = _refLineControl->GetZ(); + /* + _refLineControl->AddPoint(50,100,z); + _refLineControl->AddPoint(80,40,z); + _refLineControl->SetCompleteCreation(true); - _refLineModel->AddPoint(50,100,z); - _refLineModel->AddPoint(80,40,z); - _refLineModel->UpdateSpline(); + _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->SetActive(true); - _refLineView->RefreshContour(); + _refLineControl->SetActive(true); + _refLineView->RefreshContour(); + } } //Hides the referenceLine @@ -1626,9 +1715,14 @@ void wxContourMainFrame::refLineHide() { if (_refLineControl!=NULL) { - _refLineView->RemoveCompleteContourActor(); - _refLineControl->SetEditable(false); - _refLineControl->SetActive(false); + if (_refLineControl->GetActive()) + { + _refLineView->RemoveCompleteContourActor(); + _refLineControl->SetEditable(false); + _refLineControl->SetActive(false); + + RefreshInterface(); + } } } @@ -1637,18 +1731,23 @@ 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); - _refLineView->RefreshContour(); + _refLineControl->SetModelView( _refLineModel , _refLineView ); + viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl ); + _refLineControl->CreateNewManualContour(); + _refLineControl->SetActive(true); + _refLineView->RefreshContour(); + + RefreshInterface(); + } } } @@ -1697,42 +1796,155 @@ void wxContourMainFrame::onMirror() void wxContourMainFrame::onThreshold(int minVal, int maxVal) { - - vtkImageData * img = _theViewPanel->getImageData(); - - double range[2]; - img->GetScalarRange(range); - - //vtkImageData * fakeImage = new vtkImageData(); + if (!_actorPresent) + { + int z = _theViewPanel->GetZ(); - //Lookup Table - vtkLookupTable *lookup = vtkLookupTable::New(); - lookup->SetNumberOfTableValues(range[1]+1); - lookup->SetTableRange(range); - lookup->SetAlphaRange(0, 1); - lookup->SetValueRange(0, 1); - lookup->SetSaturationRange(0, 0); - lookup->SetRampToLinear( ); + 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(); - //Assign a fake color for the upper image, and set the white as transparent - for(int i = range[0]; i < range[1]; i++) - { - if( i >= minVal && i <= maxVal ) - { - lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1); - } - else if( i >= range[0] && i < minVal ) + 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++) { - lookup->SetTableValue(i, 0.0, 0.0, 0.0, 0); //transparent + 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 + } } - else if( i > maxVal && i < range[1] ) + + lookup->Build( ); + + vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( ); + mapperImage->SetLookupTable( lookup ); + mapperImage->SetInput( img ); + //mapperImage->SetOutputFormatToRGBA( ); + + if (_thresholdActor==NULL) { - lookup->SetTableValue(i, 0.0, 0.0, 0.0, 0); //transparent + _thresholdActor = vtkImageActor::New( ); + _thresholdActor->SetOpacity( 0.6 ); + _thresholdActor->InterpolateOn( ); } +printf("EED wxContourMainFrame::onThreshold \n"); + _thresholdActor->SetPosition( 0,0, z+1 ); + _thresholdActor->SetInput( mapperImage->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) + { + 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; + 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( ); @@ -1740,20 +1952,54 @@ void wxContourMainFrame::onThreshold(int minVal, int maxVal) mapperImage->SetInput( img ); //mapperImage->SetOutputFormatToRGBA( ); - vtkImageActor * upperImageActor = vtkImageActor::New( ); - upperImageActor->SetInput( mapperImage->GetOutput() ); - upperImageActor->SetOpacity( 1 ); + _thresholdActor->SetInput( mapperImage->GetOutput() ); +printf("EED wxContourMainFrame::onThresholdChange \n"); + _thresholdActor->SetPosition( 0,0, z+1 ); + + } + + RefreshInterface(); +} + +void wxContourMainFrame::onThresholdInterpolation(bool interpolate) +{ + if (_thresholdActor!=NULL) + { + if (interpolate) + { + _thresholdActor->InterpolateOn( ); + } - 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(); + else + { + _thresholdActor->InterpolateOff( ); + } RefreshInterface(); + } } +void wxContourMainFrame::onThresholdChangeOpacity (int opacity) +{ + if (_actorPresent) + { + _thresholdActor->SetOpacity(opacity*0.1); + } + + RefreshInterface(); +} + +void wxContourMainFrame::onThresholdRemove() +{ + if (_actorPresent) + { + wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView(); + baseView->GetRenderer()->RemoveActor( _thresholdActor ); + _actorPresent = false; + } + + RefreshInterface(); +} void wxContourMainFrame::showAxis(bool show) { @@ -1802,7 +2048,6 @@ int wxContourMainFrame::getWindowLevel(){ void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){ _theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel); - RefreshInterface(); } @@ -2438,4 +2683,8 @@ void wxContourMainFrame::saveFileWithContoursAutomatique(){ }else{ onSave(); } -} \ No newline at end of file +} +void wxContourMainFrame::ShowToolsPanel(bool show){ + _pannew->Show(show); +} +