X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FvtkClipping3DDataViewer.cxx;h=e5b8804e0550d26b847db84dc98c057a63ad86ec;hb=0cc1383dff9255c9929097bbe9f44a6f4f31c97a;hp=9eb6ba507ac463c59d0609a2bae61c06c317e69c;hpb=062ae799e283a7de038b13d78eaf7d8495086378;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkClipping3DDataViewer.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkClipping3DDataViewer.cxx index 9eb6ba5..e5b8804 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkClipping3DDataViewer.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/vtkClipping3DDataViewer.cxx @@ -11,6 +11,18 @@ vtkClipping3DDataViewer::vtkClipping3DDataViewer() _representationType[i] = true; } _visibleVolume=false; + _isRayCasting=true; + _isMIP=false; + _interpolation=false; + _shade=false; + + _volumerendererdata = VolumeRendererData::New(); + _volumeMapper = vtkVolumeRayCastMapper::New(); + _newvol = vtkVolume::New(); + _volumeProperty = vtkVolumeProperty::New(); + _compositeFunction = vtkVolumeRayCastCompositeFunction::New(); + _compositeFunctionMIP = vtkVolumeRayCastMIPFunction::New(); + } //------------------------------------------------------------------- vtkClipping3DDataViewer::~vtkClipping3DDataViewer() @@ -76,7 +88,7 @@ void vtkClipping3DDataViewer::Refresh() // _newvol->VisibilityOn(); - + // _volumeMapper = vtkVolumeRayCastMapper::New(); // _volumeMapper->SetInput( this->GetVtkMPRBaseData()->GetImageData() ); // _volumeMapper->SetVolumeRayCastFunction(_compositeFunction); @@ -154,6 +166,15 @@ void vtkClipping3DDataViewer::SetVisibleVolume(bool visiblevolume) _visibleVolume = visiblevolume; } +bool vtkClipping3DDataViewer::GetVisibleVolumeBox() +{ + return _visibleVolumeBox; +} +//------------------------------------------------------------------- +void vtkClipping3DDataViewer::SetVisibleVolumeBox(bool visibleBox) +{ + _visibleVolumeBox = visibleBox; +} //------------------------------------------------------------------- void vtkClipping3DDataViewer::Configure_Tissue() @@ -177,11 +198,11 @@ void vtkClipping3DDataViewer::Configure_Tissue() _tissuePlanes[i] = vtkPlanes::New(); - + int x1,x2,y1,y2,z1,z2; imagedata->GetExtent(x1,x2,y1,y2,z1,z2); _tissuePlanes[i]->SetBounds (x1,x2,y1,y2,z1,z2); - + _tissueClipper[i] = vtkClipPolyData::New(); _tissueClipper[i]->SetInput( _tissueStripper[i]->GetOutput() ); _tissueClipper[i]->SetClipFunction( _tissuePlanes[i] ); @@ -193,7 +214,7 @@ void vtkClipping3DDataViewer::Configure_Tissue() // _tissueMapper[i]->Update(); } - + // vtkActor tissue @@ -227,12 +248,25 @@ void vtkClipping3DDataViewer::Configure_Volume() { // Volume + + + /** if(_newvol != NULL) + { + _newvol->Delete(); + _volumeMapper->Delete(); + _volumeProperty->Delete(); + }*/ + + + _tfun = vtkPiecewiseFunction::New(); _ctfun = vtkColorTransferFunction::New(); double range[2]; this->_vtkmprbasedata->GetImageData()->GetScalarRange(range); double max = range[1]; + + printf("EED::vtkClipping3DDataViewer::Configure_Volume max=%f \n",max); /* adding the poinst of the transference function @@ -251,7 +285,7 @@ void vtkClipping3DDataViewer::Configure_Volume() _tfun->AddPoint(max * 2/2 , 1.0); /* - Adding the colors to the vectors + Adding the colors to the vectors */ //RED redColorsOfColorTransferenceFVector.push_back(0.0); @@ -266,14 +300,14 @@ void vtkClipping3DDataViewer::Configure_Volume() greenColorsOfColorTransferenceFVector.push_back(0.0); greenColorsOfColorTransferenceFVector.push_back(1.0); greenColorsOfColorTransferenceFVector.push_back(0.2); - + //BLUE blueColorsOfColorTransferenceFVector.push_back(0.0); blueColorsOfColorTransferenceFVector.push_back(0.0); blueColorsOfColorTransferenceFVector.push_back(1.0); blueColorsOfColorTransferenceFVector.push_back(0.0); blueColorsOfColorTransferenceFVector.push_back(0.0); - //GREY VALUE + //GREY VALUE greyValueColorsOfColorTransferenceFVector.push_back(max*0/4); greyValueColorsOfColorTransferenceFVector.push_back(max*1/4); greyValueColorsOfColorTransferenceFVector.push_back(max*2/4); @@ -292,22 +326,42 @@ void vtkClipping3DDataViewer::Configure_Volume() // imagedata->GetExtent(x1,x2,y1,y2,z1,z2); // _volumePlanes->SetBounds(x1,x2,y1,y2,z1,z2); - _compositeFunction = vtkVolumeRayCastCompositeFunction::New(); + // EED 13/03/2011 + - _volumeMapper = vtkVolumeRayCastMapper::New(); + + // _volumeMapper = vtkVolumeRayCastMapper::New(); _volumeMapper->SetInput( this->GetVtkMPRBaseData()->GetImageData() ); - _volumeMapper->SetVolumeRayCastFunction(_compositeFunction); + + + + _volumeMapper->SetVolumeRayCastFunction(_compositeFunction); + + + // _volumeMapper->SetVolumeRayCastFunction(_compositeFunctionMIP); + +// + _volumeMapper->SetClippingPlanes( _volumePlanes ); _volumeMapper->AutoAdjustSampleDistancesOn(); - _volumeProperty = vtkVolumeProperty::New(); + _volumeProperty->SetInterpolationTypeToNearest(); + //_volumeProperty = vtkVolumeProperty::New(); _volumeProperty->SetColor(_ctfun); _volumeProperty->SetScalarOpacity( _tfun ); + // EED 31/03/2008 - _volumeProperty->SetInterpolationTypeToLinear(); - _volumeProperty->ShadeOn(); + _volumeProperty->DisableGradientOpacityOn(); + + +// _ + + +// _ + + // _volumeProperty->SetInterpolationTypeToNearest(); // _volumeProperty->ShadeOff(); // _volumeProperty->SetAmbient(0.3); @@ -315,7 +369,7 @@ void vtkClipping3DDataViewer::Configure_Volume() // _volumeProperty->SetSpecular(0.8); // _volumeProperty->DisableGradientOpacityOn(); - _newvol = vtkVolume::New(); + // _newvol = vtkVolume::New(); _newvol->SetMapper(_volumeMapper ); _newvol->SetProperty(_volumeProperty ); @@ -326,12 +380,100 @@ void vtkClipping3DDataViewer::Configure_Volume() } +void vtkClipping3DDataViewer::Configure_VolumeBox() +{ + cout<<"EED::JPRG::vtkClipping3DDataViewer::Configure_VolumeBox() start"<SetImageData(_vtkmprbasedata->GetImageData()); + + + vector *gv = this->GetGreyValuesTransferenceFVector(); + vector *op = this->GetIntensityValuesTransferenceFVector(); + + printf("EED::vtkClipping3DDataViewer::Configure_VolumeBox _ctfun=%p \n",_ctfun); + + + _volumerendererdata->SetLookUpTable((vtkLookupTable*)(_ctfun)); + _volumerendererdata->OpacityChanged(*gv, *op); + + //_wxvtkclipping3Dview->VisibleVolumeActor( false ); + //_volumerendererdata->ShowVolume(event.IsChecked() ); + //_volumerendererdata->BoundingBoxChanged(event.IsChecked() ); + + cout<<"EED::JPRG::vtkClipping3DDataViewer::Configure_VolumeBox() end"<SetRenderer(renderer); + +} + +void vtkClipping3DDataViewer::SetInteractor(vtkRenderWindowInteractor* interactor) +{ + + _volumerendererdata->SetInteractor(interactor); +} + + +void vtkClipping3DDataViewer::BoxActorChanged(bool changed) +{ + vector *gv = this->GetGreyValuesTransferenceFVector(); + vector *op = this->GetIntensityValuesTransferenceFVector(); + + _volumerendererdata->ShowVolume(changed); + _volumerendererdata->OpacityChanged(*gv, *op); + _volumerendererdata->BoundingBoxChanged(changed); + +} + +void vtkClipping3DDataViewer::UpdateVolumeBox(vector gf, vector vf, vtkColorTransferFunction* ctfun) +{ + _volumerendererdata->SetLookUpTable((vtkLookupTable*)(ctfun)); + _volumerendererdata->OpacityChanged(gf, vf); +} + + +void vtkClipping3DDataViewer::updateVolume() +{ + + if(_isRayCasting) + { + _volumeMapper->SetVolumeRayCastFunction(_compositeFunction); + _volumerendererdata->changeCompositeMIPFunction(0); + } + else if(_isMIP) + { + _volumeMapper->SetVolumeRayCastFunction(_compositeFunctionMIP); + _volumerendererdata->changeCompositeMIPFunction(1); + } + + if(_interpolation) + { + _volumeProperty->SetInterpolationTypeToLinear(); + } + else + { + _volumeProperty->SetInterpolationTypeToNearest(); + } + + if(_shade) + { + _volumeProperty->ShadeOn(); + } + else + { + _volumeProperty->ShadeOff(); + } + +} + //------------------------------------------------------------------- void vtkClipping3DDataViewer::Configure() { Configure_Tissue(); Configure_Volume(); - + Configure_VolumeBox(); // An outline provides context around the data. // _outlineData = vtkOutlineFilter::New(); @@ -400,7 +542,7 @@ std::vector* vtkClipping3DDataViewer::GetGreenColorsOfColorTransferenceF } //-------------------------------------------------------------------- std::vector* vtkClipping3DDataViewer::GetBlueColorsOfColorTransferenceFVector() -{ +{ return &blueColorsOfColorTransferenceFVector; } //-------------------------------------------------------------------- @@ -430,9 +572,9 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions() /* int i=0,xi,yi,r,g,b,gValue; vtkImageData *imagedata = this->_vtkmprbasedata->GetImageData(); - + HistogramDialog* hDlg=new HistogramDialog(NULL,_T("Histogram Dialog"),imagedata); - // + // // put in a method // int tfSize=this->greyValuesTransferenceFVector.size(); @@ -447,7 +589,7 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions() hDlg->addPointToTransferenceFunction(g,in*100); i++; } - + } int ctfSize=this->redColorsOfColorTransferenceFVector.size(); @@ -469,17 +611,17 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions() //setting variables if the user wants to do refresh hDlg->setCTF(_ctfun); hDlg->setTF(_tfun); - + // // when the user had changed the transference Function // if(hDlg->ShowModal()== wxID_OK ) - { + { // -- vtkPiecewiseFunction -- this->_tfun->RemoveAllPoints(); greyValuesTransferenceFVector.clear(); intensityValuesTransferenceFVector.clear(); - + int nTFPoints=hDlg->getSizeTransferenceFunction(); i=0; while(i_ctfun->RemoveAllPoints (); //clean colors @@ -499,7 +641,7 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions() greyValueColorsOfColorTransferenceFVector.clear(); int nCTFpoints=hDlg->getSizeBarColor(); - i=0; + i=0; while(igetDataBarColorPoint(i,xi,r,g,b); @@ -510,14 +652,14 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions() greyValueColorsOfColorTransferenceFVector.push_back(xi); i++; } - + this->_volumeMapper->Update(); this->_newvol->Update(); } - + else { - + if(hDlg->getRefreshed()) { int i=0,size; @@ -531,12 +673,12 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions() double in2=intensityValuesTransferenceFVector[i]; this->_tfun->AddPoint( grey1 , in2 ); } - + // -- vtkColorTransferFunction -- _ctfun->RemoveAllPoints (); - + i=0; - size=greyValueColorsOfColorTransferenceFVector.size(); + size=greyValueColorsOfColorTransferenceFVector.size(); for(i=0;i_volumeMapper->Update(); this->_newvol->Update(); } - + } hDlg->Destroy(); */ @@ -578,29 +720,29 @@ void vtkClipping3DDataViewer::ReadVolumeFunctions(char *namefile) // -- vtkPiecewiseFunction -- this->_tfun->RemoveAllPoints(); - fscanf(ff,"%s",tmp); + fscanf(ff,"%s",tmp); while ( strcmp(tmp,"--")!=0 ) { x=atof(tmp); - fscanf(ff,"%s",tmp); + fscanf(ff,"%s",tmp); val=atof(tmp); this->_tfun->AddPoint( x*max , val ); - fscanf(ff,"%s",tmp); + fscanf(ff,"%s",tmp); } this->_ctfun->RemoveAllPoints (); // -- vtkColorTransferFunction -- while ( !feof(ff)) { - fscanf(ff,"%s",tmp); + fscanf(ff,"%s",tmp); x=atof(tmp); - fscanf(ff,"%s",tmp); + fscanf(ff,"%s",tmp); r=atof(tmp); - fscanf(ff,"%s",tmp); + fscanf(ff,"%s",tmp); g=atof(tmp); - fscanf(ff,"%s",tmp); + fscanf(ff,"%s",tmp); b=atof(tmp); - this->_ctfun->AddRGBPoint( x*max , r,g,b ); + this->_ctfun->AddRGBPoint( x*max , r,g,b ); } @@ -623,7 +765,30 @@ void vtkClipping3DDataViewer::ReadMeshVTK(char *namefile) } void vtkClipping3DDataViewer::setColorTransferFunction(vtkColorTransferFunction* colortable){ - + _volumeProperty->SetColor(colortable); - + +} + + +void vtkClipping3DDataViewer::SetRayCasting(bool active) +{ + _isRayCasting = active; + +} + +void vtkClipping3DDataViewer::SetMIPActive(bool active) +{ + _isMIP = active; } + +void vtkClipping3DDataViewer::SetInterpolation(bool active) +{ + _interpolation = active; +} + +void vtkClipping3DDataViewer::SetShade(bool active) +{ + _shade = active; +} +