]> Creatis software - creaMaracasVisu.git/commitdiff
Volume rendering ready
authorJuan Prieto <Juan.Prieto@creatis.insa-lyon.fr>
Tue, 23 Jun 2009 15:58:06 +0000 (15:58 +0000)
committerJuan Prieto <Juan.Prieto@creatis.insa-lyon.fr>
Tue, 23 Jun 2009 15:58:06 +0000 (15:58 +0000)
bbtk/src/bbcreaMaracasVisuVolumeRendering.cxx [new file with mode: 0644]
bbtk/src/bbcreaMaracasVisuVolumeRendering.h [new file with mode: 0644]
bbtk/src/bbmaracasvisuShowNPoints.cxx

diff --git a/bbtk/src/bbcreaMaracasVisuVolumeRendering.cxx b/bbtk/src/bbcreaMaracasVisuVolumeRendering.cxx
new file mode 100644 (file)
index 0000000..5cfc7e9
--- /dev/null
@@ -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 (file)
index 0000000..0d1d5b4
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef __bbcreaMaracasVisuVolumeRendering_h_INCLUDED__
+#define __bbcreaMaracasVisuVolumeRendering_h_INCLUDED__
+#include "bbcreaMaracasVisu_EXPORT.h"
+#include "bbtkAtomicBlackBox.h"
+#include "iostream"
+
+#include <vtkVolumeRayCastCompositeFunction.h>
+#include <vtkPlanes.h>
+#include <vtkVolumeRayCastMapper.h>
+#include <vtkVolumeProperty.h>
+#include <vtkVolume.h>
+#include <vtkPiecewiseFunction.h>
+#include <vtkColorTransferFunction.h>
+#include <vtkImageData.h>
+#include <vtkProp3D.h>
+
+
+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__
+
index 83d7fe2a6c03597899453dfa2c0edf9104549248..1a1b2c64f776142b75ab6c11c224dd53befe6c08 100644 (file)
@@ -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  ; i<size; i++ )
-               {
-                       double rx =  spc[0]*(mpoint[0] - lstPointsX [i]);
-                       double ry =  spc[1]*(mpoint[1] - lstPointsY [i]);
-                       double rz =  spc[2]*(mpoint[2] - lstPointsZ [i]);
-                       if ( rx*rx + ry*ry + rz*rz <= mradio*mradio)
+               if(mimage ==NULL){                      
+                       wxMessageDialog* diag = new wxMessageDialog(this, _T("Image not set"), _T("Image Not Set"), wxICON_ERROR);
+                       diag->ShowModal();
+                       return -1;
+               }else{
+
+                       mimage->GetSpacing(spc);
+
+                       for ( i=0  ; i<size; i++ )
                        {
-                               id=i;
-                       }       // if
-               } // for
+                               double rx =  spc[0]*(mpoint[0] - lstPointsX [i]);
+                               double ry =  spc[1]*(mpoint[1] - lstPointsY [i]);
+                               double rz =  spc[2]*(mpoint[2] - lstPointsZ [i]);
+                               if ( rx*rx + ry*ry + rz*rz <= mradio*mradio)
+                               {
+                                       id=i;
+                               }       // if
+                       } // for
 
-               return id;
+                       return id;
+               }
        }
 
        //------------------------------------------------------------------------