From: Juan Prieto Date: Tue, 23 Jun 2009 15:58:06 +0000 (+0000) Subject: Volume rendering ready X-Git-Tag: EED.02Oct2009~22 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=f6aa96e6973545c213cdecf2c44b9155743f11dc;p=creaMaracasVisu.git Volume rendering ready --- diff --git a/bbtk/src/bbcreaMaracasVisuVolumeRendering.cxx b/bbtk/src/bbcreaMaracasVisuVolumeRendering.cxx new file mode 100644 index 0000000..5cfc7e9 --- /dev/null +++ b/bbtk/src/bbcreaMaracasVisuVolumeRendering.cxx @@ -0,0 +1,93 @@ +#include "bbcreaMaracasVisuVolumeRendering.h" +#include "bbcreaMaracasVisuPackage.h" +namespace bbcreaMaracasVisu +{ + +BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,VolumeRendering) +BBTK_BLACK_BOX_IMPLEMENTATION(VolumeRendering,bbtk::AtomicBlackBox); +void VolumeRendering::Process() +{ + +// THE MAIN PROCESSING METHOD BODY +// Here we simply set the input 'In' value to the output 'Out' +// And print out the output value +// INPUT/OUTPUT ACCESSORS ARE OF THE FORM : +// void bbSet{Input|Output}NAME(const TYPE&) +// const TYPE& bbGet{Input|Output}NAME() const +// Where : +// * NAME is the name of the input/output +// (the one provided in the attribute 'name' of the tag 'input') +// * TYPE is the C++ type of the input/output +// (the one provided in the attribute 'type' of the tag 'input') + + + vtkImageData* _img = bbGetInputIn(); + + if(_img!=NULL){ + double range[2]; + _img->GetScalarRange(range); + double max = range[1]; + _tfun->AddPoint(max * 0/2 , 0.0); + _tfun->AddPoint(max * 1/2 , 1.0); + _tfun->AddPoint(max * 2/2 , 1.0); + _ctfun->AddRGBPoint( max*0/4 , 0.0, 0.0, 0.0); + _ctfun->AddRGBPoint( max*1/4 , 1.0, 0.0, 0.0); + _ctfun->AddRGBPoint( max*2/4 , 0.0, 0.0, 1.0); + _ctfun->AddRGBPoint( max*3/4 , 0.0, 1.0, 0.0); + _ctfun->AddRGBPoint( max*4/4 , 0.0, 0.2, 0.0); + + _volumeMapper->SetInput( _img ); + + _volumeMapper->Update(); + _newvol->Update(); + + bbSetOutputOut(_newvol); + } + + + +} +void VolumeRendering::bbUserSetDefaultValues() +{ + +// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX +// Here we initialize the input 'In' to 0 + bbSetInputIn(0); + bbSetOutputOut(0); + +} +void VolumeRendering::bbUserInitializeProcessing() +{ + _tfun = vtkPiecewiseFunction::New(); + _ctfun = vtkColorTransferFunction::New(); + + _volumePlanes = vtkPlanes::New(); + _compositeFunction = vtkVolumeRayCastCompositeFunction::New(); + _volumeMapper = vtkVolumeRayCastMapper::New(); + _volumeMapper->SetVolumeRayCastFunction(_compositeFunction); + _volumeMapper->SetClippingPlanes( _volumePlanes ); + _volumeMapper->AutoAdjustSampleDistancesOn(); + _volumeProperty = vtkVolumeProperty::New(); + _volumeProperty->SetInterpolationTypeToLinear(); + _volumeProperty->ShadeOn(); + _volumeProperty->DisableGradientOpacityOn(); + _volumeProperty->SetColor(_ctfun); + _volumeProperty->SetScalarOpacity( _tfun ); + _newvol = vtkVolume::New(); + _newvol->SetMapper(_volumeMapper ); + _newvol->SetProperty(_volumeProperty ); + +} +void VolumeRendering::bbUserFinalizeProcessing() +{ + +// THE FINALIZATION METHOD BODY : +// Here does nothing +// but this is where you should desallocate the internal/output pointers +// if any + +} +} +// EO namespace bbcreaMaracasVisu + + diff --git a/bbtk/src/bbcreaMaracasVisuVolumeRendering.h b/bbtk/src/bbcreaMaracasVisuVolumeRendering.h new file mode 100644 index 0000000..0d1d5b4 --- /dev/null +++ b/bbtk/src/bbcreaMaracasVisuVolumeRendering.h @@ -0,0 +1,53 @@ +#ifndef __bbcreaMaracasVisuVolumeRendering_h_INCLUDED__ +#define __bbcreaMaracasVisuVolumeRendering_h_INCLUDED__ +#include "bbcreaMaracasVisu_EXPORT.h" +#include "bbtkAtomicBlackBox.h" +#include "iostream" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace bbcreaMaracasVisu +{ + +class bbcreaMaracasVisu_EXPORT VolumeRendering + : + public bbtk::AtomicBlackBox +{ + BBTK_BLACK_BOX_INTERFACE(VolumeRendering,bbtk::AtomicBlackBox); + BBTK_DECLARE_INPUT(In,vtkImageData*); + BBTK_DECLARE_OUTPUT(Out,vtkProp3D*); + BBTK_PROCESS(Process); + void Process(); + +private: + vtkVolumeRayCastCompositeFunction *_compositeFunction; + vtkPlanes *_volumePlanes; + vtkVolumeRayCastMapper *_volumeMapper; + vtkVolumeProperty *_volumeProperty; + vtkVolume *_newvol; + vtkPiecewiseFunction* _tfun; + vtkColorTransferFunction* _ctfun; +}; + +BBTK_BEGIN_DESCRIBE_BLACK_BOX(VolumeRendering,bbtk::AtomicBlackBox); +BBTK_NAME("VolumeRendering"); +BBTK_AUTHOR("car-prie@uniandes.edu.co"); +BBTK_DESCRIPTION("Volume Rendering of a given image"); +BBTK_CATEGORY("__CATEGORY__"); +BBTK_INPUT(VolumeRendering,In,"Image to create the volume rendering",vtkImageData*,""); +BBTK_OUTPUT(VolumeRendering,Out,"Prop3D resulting from the volume rendering",vtkProp3D*,""); +BBTK_END_DESCRIBE_BLACK_BOX(VolumeRendering); +} +// EO namespace bbcreaMaracasVisu + +#endif // __bbcreaMaracasVisuVolumeRendering_h_INCLUDED__ + diff --git a/bbtk/src/bbmaracasvisuShowNPoints.cxx b/bbtk/src/bbmaracasvisuShowNPoints.cxx index 83d7fe2..1a1b2c6 100644 --- a/bbtk/src/bbmaracasvisuShowNPoints.cxx +++ b/bbtk/src/bbmaracasvisuShowNPoints.cxx @@ -308,20 +308,28 @@ void WidgetShowNPoints::OnAddPoint (wxCommandEvent& event) int id=-1; int i, size=(int)(lstActorsSphere.size()); double spc[3]; - mimage->GetSpacing(spc); - for ( i=0 ; iShowModal(); + return -1; + }else{ + + mimage->GetSpacing(spc); + + for ( i=0 ; i