]> Creatis software - creaMaracasVisu.git/blobdiff - bbtk/src/bbcreaMaracasVisuSliceImage.cxx
2041 Feature box SliceImage of XY,YZ,XZ and FREE planes
[creaMaracasVisu.git] / bbtk / src / bbcreaMaracasVisuSliceImage.cxx
index d8a4b758cdf7ba8559b6ca8e603d0508a5380147..03cbf7295ae4d78e352b19927b4e2ac3ff3398dd 100644 (file)
@@ -34,7 +34,6 @@ BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,SliceImage)
 BBTK_BLACK_BOX_IMPLEMENTATION(SliceImage,bbtk::AtomicBlackBox);
 void SliceImage::Process()
 {
-       //printf("EED 0 SliceImage::Process \n");
        vtkImageData *imagedata=NULL;
 
        //std::cout<<"MSJ: test SliceImage::Process()"<<this<<std::endl;
@@ -43,24 +42,57 @@ void SliceImage::Process()
          imageReslice->SetInput( bbGetInputIn() );
          imageReslice->SetInformationInput(bbGetInputIn() );
 
-         if (bbGetInputTypeOrientation()==2)
+
+         if (bbGetInputTypeOrientation()==3)
+         {
+               // Orientation 3 = FREE
+               // v1 = [ v1x , v1y , v1z ]
+               // v2 = [ v2x , v2y , v2z ]
+               // v3 = [ v3x , v3y , v3z ]
+               // SetResliceAxesDirectionCosines(v1x,v2x,v3x,v1y,v2y,v3y,v1z,v2z,v3z);
+              imageReslice->SetResliceAxesDirectionCosines( bbGetInputResliceAxesDirectionCosines()[0],  // v1x
+                                                             bbGetInputResliceAxesDirectionCosines()[3],  // v2x
+                                                             bbGetInputResliceAxesDirectionCosines()[6],  // v3x
+                                                             bbGetInputResliceAxesDirectionCosines()[1],  // v1y
+                                                             bbGetInputResliceAxesDirectionCosines()[4],  // v2y
+                                                             bbGetInputResliceAxesDirectionCosines()[7],  // v3y
+                                                             bbGetInputResliceAxesDirectionCosines()[2],  // v1z
+                                                             bbGetInputResliceAxesDirectionCosines()[5],  // v2z
+                                                             bbGetInputResliceAxesDirectionCosines()[8]   // v3z
+                                                           );  
+              imageReslice->SetResliceAxesOrigin( bbGetInputSlice()*bbGetInputIn()->GetSpacing()[0] ,0 ,0);
+         } else if (bbGetInputTypeOrientation()==2)
          {
-              imageReslice->SetResliceAxesDirectionCosines(0,0,-1, 1,0,0 ,0,-1,0);  // 2=YZ
-              imageReslice->SetResliceAxesOrigin( bbGetInputZ()*bbGetInputIn()->GetSpacing()[0] ,0 ,0);
+               // Orientation 2 = YZ
+               // v1 = [ 0 , 0 ,-1 ]
+               // v2 = [ 1 , 0 , 0 ]
+               // v3 = [ 0 ,-1 , 0 ]
+               // SetResliceAxesDirectionCosines(v1x,v2x,v3x,v1y,v2y,v3y,v1z,v2z,v3z);
+              imageReslice->SetResliceAxesDirectionCosines(0,1,0, 0,0,-1 ,-1,0,0);  
+              imageReslice->SetResliceAxesOrigin( bbGetInputSlice()*bbGetInputIn()->GetSpacing()[0] ,0 ,0);
          } else if (bbGetInputTypeOrientation()==1) {     
-              imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,0,-1 ,0,1,0);  // 1=XZ
-              imageReslice->SetResliceAxesOrigin(0, bbGetInputZ()*bbGetInputIn()->GetSpacing()[1],0 );
+               // Orientation 1 = XZ
+               // v1 = [ 1 , 0 , 0 ]
+               // v2 = [ 0 , 0 , 1 ]
+               // v3 = [ 0 ,-1 , 0 ]
+               // SetResliceAxesDirectionCosines(v1x,v2x,v3x,v1y,v2y,v3y,v1z,v2z,v3z);
+              imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,0,-1 ,0,1,0); 
+              imageReslice->SetResliceAxesOrigin(0, bbGetInputSlice()*bbGetInputIn()->GetSpacing()[1],0 );
          } else    
          {
-              imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);   // 0=XY
-              imageReslice->SetResliceAxesOrigin(0,0, bbGetInputZ()*bbGetInputIn()->GetSpacing()[2] );
+               // Orientation 0 = XY
+               // v1 = [ 1 , 0 , 0 ]
+               // v2 = [ 0 , 1 , 0 ]
+               // v3 = [ 0 , 0 , 1 ]
+               // SetResliceAxesDirectionCosines(v1x,v2x,v3x,v1y,v2y,v3y,v1z,v2z,v3z);
+              imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);   
+              imageReslice->SetResliceAxesOrigin(0,0, bbGetInputSlice()*bbGetInputIn()->GetSpacing()[2] );
          } 
          imageReslice->SetOutputDimensionality(2);
          imageReslice->SetInterpolationModeToLinear();
          imagedata = imageReslice->GetOutput();
          imagedata->Update();
          imagedata->UpdateInformation();       
-         //printf("EED 1 SliceImage::Process %p\n", imagedata);
        }
   bbSetOutputOut( imagedata );
 }
@@ -71,8 +103,22 @@ void SliceImage::Process()
        {
                bbSetInputIn(NULL);
                bbSetInputZ(0);
+               bbSetInputSlice(0);
                bbSetInputTypeOrientation(0);
                imageReslice=NULL;
+               std::vector<double> lstCos;
+                lstCos.push_back(1); // v1x
+                lstCos.push_back(0); // v1y
+                lstCos.push_back(0); // v1z
+
+                lstCos.push_back(0); // v2x
+                lstCos.push_back(1); // v2y
+                lstCos.push_back(0); // v2z
+
+                lstCos.push_back(0); // v3x
+                lstCos.push_back(0); // v3y
+                lstCos.push_back(1); // v3z
+                bbSetInputResliceAxesDirectionCosines(lstCos);
        }
        
        //-----------------------------------------------------------------