]> Creatis software - creaMaracasVisu.git/blobdiff - lib/Kernel/VTKObjects/SurfaceRenderer/wxMaracasSurfaceRenderingManagerDataMhd.cxx
addition of image stencil to surface rendering
[creaMaracasVisu.git] / lib / Kernel / VTKObjects / SurfaceRenderer / wxMaracasSurfaceRenderingManagerDataMhd.cxx
index 3deb86ef088541c86dd48093bcd77fbbdacbe309..0ba06f641df984c3adb5a07aefc1fb6bdb53bf11 100644 (file)
@@ -14,14 +14,27 @@ wxMaracasSurfaceRenderingManagerDataMhd::wxMaracasSurfaceRenderingManagerDataMhd
        _maxgreylevel = getMaxLevel(imagedata);
        _prop3D=NULL;                   
 
+        _tresholdFilter = vtkImageThreshold::New();
+        _tresholdFilter->SetInput(this->_imagedata);
+        _tresholdFilter->SetInValue(255);        
+        _tresholdFilter->SetOutValue(0);
+
+
        _cubesFilter = vtkMarchingCubes::New(); 
-       _cubesFilter->SetInput(this->_imagedata);               
-       _cubesFilter->ComputeGradientsOn ();
-       _cubesFilter->ComputeScalarsOn ();
-       _cubesFilter->SetNumberOfContours( 1 );
+        _cubesFilter->SetInput(_tresholdFilter->GetOutput());
+        //_cubesFilter->ComputeGradientsOn();
+        _cubesFilter->ComputeScalarsOn();
+        _cubesFilter->ComputeNormalsOn();
+        _cubesFilter->SetNumberOfContours( 1 );
        _cleanFilter = vtkCleanPolyData::New();         
        _cleanFilter->SetInput ( _cubesFilter->GetOutput() );
 
+        _smooth = vtkSmoothPolyDataFilter::New();
+        _smooth->SetInput(_cleanFilter->GetOutput());
+        _smooth->SetNumberOfIterations(6);
+        _smooth->SetRelaxationFactor(0.3);
+        //_smooth->FeatureEdgeSmoothingOff();
+
        _dataMapper = vtkPolyDataMapper::New( );
        _dataMapper->ScalarVisibilityOff( );
        _dataMapper->ImmediateModeRenderingOn();
@@ -38,8 +51,8 @@ wxMaracasSurfaceRenderingManagerDataMhd::wxMaracasSurfaceRenderingManagerDataMhd
             boxSurfaceObserver* observer = boxSurfaceObserver::New();
 
             vtkStripper* striper = vtkStripper::New();
-            striper->SetInput( _cleanFilter->GetOutput() );
-            //striper->SetInput( _cubesFilter->GetOutput() );
+            striper->SetInput( _smooth->GetOutput() );
+            //striper->SetInput( _cleanFilter->GetOutput() );
 
             striper->Update();
             _boxWidgetS1->SetInput(striper->GetOutput());
@@ -69,13 +82,17 @@ wxMaracasSurfaceRenderingManagerDataMhd::wxMaracasSurfaceRenderingManagerDataMhd
             _boxWidgetS1->HandlesOn ();
             _boxWidgetS1->EnabledOff();
        }else{          
-               _dataMapper->SetInput(_cleanFilter->GetOutput());                               
+                //_dataMapper->SetInput(_cleanFilter->GetOutput());
+            _dataMapper->SetInput(_smooth->GetOutput());
        }
        
        dataActor->SetMapper(_dataMapper);      
-       this->_prop3D = dataActor;
+        float cr=1,cg=0.5,cb=0.5;
+        dataActor->GetProperty()->SetDiffuseColor(1,0.5,0.5   );
+        dataActor->GetProperty()->SetSpecular(.3);
+        dataActor->GetProperty()->SetSpecularPower(20);
 
-       
+        this->_prop3D = dataActor;
        
 
        this->changeIsoValue(this->_maxgreylevel);      
@@ -116,7 +133,10 @@ void wxMaracasSurfaceRenderingManagerDataMhd::UpdateSurface()
 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double value){    
                
    
-    _cubesFilter->SetValue(0,value);           
+    _tresholdFilter->ThresholdByLower(value);
+    _tresholdFilter->Update();
+
+    _cubesFilter->SetValue(0,255);
        _cubesFilter->Update();    
        _cleanFilter->Update();
        _dataMapper->Update();  
@@ -129,8 +149,9 @@ void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double value){
 **/
 void wxMaracasSurfaceRenderingManagerDataMhd::changeIsoValue(double min, double max){
 
-
-    _cubesFilter->SetValue(min,max);
+    _tresholdFilter->ThresholdBetween(min, max);
+    _tresholdFilter->Update();
+    _cubesFilter->SetValue(0,255);
         _cubesFilter->Update();
         _cleanFilter->Update();
         _dataMapper->Update();