]> Creatis software - creaMaracasVisu.git/blobdiff - lib/GUI/Base/VolumeRenderer/volumerendererdata.cxx
Bug #1373
[creaMaracasVisu.git] / lib / GUI / Base / VolumeRenderer / volumerendererdata.cxx
index 6adf475c4a96a5b73f447a1919ba5fdd6186373e..6361cad2af9c8a06eb6c7d61eeb0fecb1dd99866 100644 (file)
 #include "volumerendererdata.h"
+#include "vtkObjectFactory.h"
+
+vtkCxxRevisionMacro(VolumeRendererData, "$Revision: 1.10 $");
+vtkStandardNewMacro(VolumeRendererData);
 
 VolumeRendererData::VolumeRendererData()
 {
-    VolRendData = 0;
-    ImageData = 0;
-    Renderer = 0;
-    Interactor = 0;
+    VolRendManager     = NULL;
+    ImageData          = NULL;
+    Renderer           = NULL;
+    Interactor         = NULL;
+    LookUpTable                = NULL;
+    //ImageDataSeparateComponents = false;
 }
 
 
 void VolumeRendererData::ShowVolume(bool checked){
-    if(checked){
-            invariant();
-            VolRendData = new VolumeRendererManagerData(ImageData, true);
-            VolRendData->SetLookupTable(LookUpTable);
-            Renderer->AddActor(VolRendData->getProp3D());
-    }else{
-        Renderer->RemoveActor(VolRendData->getProp3D());
-        VolRendData->Delete();
-        VolRendData = 0;
+    try{
+        if(checked){
+                invariant();
+                if(!VolRendManager){
+                    VolRendManager = new VolumeRendererManager();
+                    VolRendManager->addVolume(ImageData, Interactor);
+                }
+                if(LookUpTable)
+                               {
+                    VolRendManager->SetLookupTable(LookUpTable);
+                               }
+                vector< vtkProp3D* > props = VolRendManager->getProps3D();
+                for(unsigned i = 0; i < props.size(); i++){
+                    Renderer->AddActor(props[i]);
+                }
+
+        }else{
+            vector< vtkProp3D* > props = VolRendManager->getProps3D();
+            for(unsigned i = 0; i < props.size(); i++){
+                Renderer->RemoveActor(props[i]);
+            }
+            delete VolRendManager;
+            VolRendManager = 0;
+        }
+    }catch(char* e){
+        cout<<"Exception in: "<<e<<endl;
+    }catch(exception e){
+        cout<<"Exception in: "<<e.what()<<endl;
     }
+
 }
 
-void VolumeRendererData::invariant(){
-    if(!ImageData){
+void VolumeRendererData::invariant()
+{
+    if(!ImageData)
+       {
         throw "Image data not set";
     }
-    if(!Renderer){
+    if(!Renderer)
+       {
         throw "renderer not initialized";
     }
 }
-void VolumeRendererData::OpacityChanged(vector<double> greyvalues, vector<double> values){
-    invariant();
-    if(VolRendData){
-        VolRendData->setVolumeOpacity(greyvalues,values);
-    }
+
+void VolumeRendererData::OpacityChanged(vector<double> greyvalues, vector<double> values)
+{
+    //invariant();
+    if(VolRendManager!=NULL)
+       {
+        ShowVolume(true);
+               VolRendManager->setVolumeOpacity(greyvalues,values);
+       }       
 }
+
+
 void  VolumeRendererData::BoundingBoxChanged(bool checked){
-    invariant();
-    if(VolRendData && Interactor){
+   // invariant();
+
+    if(VolRendManager==NULL)
+    {
+         ShowVolume(true);
+    }
+
+
+    if(VolRendManager && Interactor){
         if(checked){
-            VolRendData->EnableBoundingBox(Interactor);
+            VolRendManager->EnableBoundingBox(Interactor);
         }else{
-            VolRendData->DisableBoundingBox();
+            VolRendManager->DisableBoundingBox();
         }
     }
+       
+}
+
+
+void VolumeRendererData::changeCompositeMIPFunction(int function){
+    invariant();
+    if(VolRendManager)
+       {
+        VolRendManager->changeCompositeMIPFunction(0, function);
+       }
+}
+
+/**
+  changes the interoplation type of the volume
+  type = 0 linear
+  type = 1 nearest
+   */
+void VolumeRendererData::changeInterpolationType(int type){
+    invariant();
+    if(VolRendManager)
+       {
+        VolRendManager->changeInterpolationType(type);
+       }       
 }