]> Creatis software - creaVtk.git/blobdiff - bbtk_creaVtk_PKG/src/bbcreaVtkBoxWidget.cxx
#3523 Add to BoxWidget box Transform option
[creaVtk.git] / bbtk_creaVtk_PKG / src / bbcreaVtkBoxWidget.cxx
index a973e3b59c3877b390528684f26a9480943f2bc3..304e39dff05988a1d8fe029bf302befd4767f3f2 100644 (file)
 
 #include "vtkRenderWindow.h"
 #include "vtkCommand.h"
-
+#include <vtkTransform.h>
 
 namespace bbcreaVtk
 {
 
 BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaVtk,BoxWidget)
 BBTK_BLACK_BOX_IMPLEMENTATION(BoxWidget,bbtk::AtomicBlackBox);
-//===== 
+//=====
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
-//===== 
+//=====
 
 class bbBoxWidgetCallback : public vtkCommand
-  {
-   public:
-        BoxWidget *_box;
-     static bbBoxWidgetCallback *New()
-     { 
-               return new bbBoxWidgetCallback; 
-       }
-       void SetBox( BoxWidget* box )
-       {
-               _box=box;
-       }
-
-       void Execute(vtkObject *caller, unsigned long, void*) override
-       {
-       vtkBoxWidget *vtkwidget = reinterpret_cast<vtkBoxWidget*>(caller);
-               vtkwidget->GetPlanes( _box->planes );
-               _box->bbSignalOutputModification(std::string("ImplicitFunction"));
-       }
- };
-
-
+{
+public:
+    BoxWidget *_box;
+    static bbBoxWidgetCallback *New()
+    {
+        return new bbBoxWidgetCallback;
+    }
+    void SetBox( BoxWidget* box )
+    {
+        _box=box;
+    }
+    
+    void Execute(vtkObject *caller, unsigned long, void*) override
+    {
+        vtkBoxWidget *vtkwidget = reinterpret_cast<vtkBoxWidget*>(caller);
+        vtkwidget->GetPlanes( _box->planes );
+        vtkwidget->GetTransform( _box->transformOut );
+//        _box->bbSignalOutputModification(std::string("ImplicitFunction"));
+        //        _box->bbSignalOutputModification(std::string("TransformOut"));
+        _box->bbSignalOutputModification();
+    }
+};
+
+//-----------------------------------------------------
+//-----------------------------------------------------
+//-----------------------------------------------------
+//-----------------------------------------------------
+
+
+
+void BoxWidget::SetTransform( vtkLinearTransform* transform )
+{
+    if ( bbGetInputImageInitSize()!=NULL)
+    {
+        int     ext[6];
+        double  spc[3];
+        bbGetInputImageInitSize()->GetExtent( ext );
+        bbGetInputImageInitSize()->GetSpacing( spc );
+        boxWidget->PlaceWidget( ext[0]*spc[0] , ext[1]*spc[0] , ext[2]*spc[1] , ext[3]*spc[1] , ext[4]*spc[2] , ext[5]*spc[2] );
+        if (transform!=NULL)
+        {
+            boxWidget->SetTransform( (vtkTransform*)transform );
+            boxWidget->Modified();
+            boxWidget->GetPlanes( planes );
+        } // if
+    } else {
+        boxWidget->PlaceWidget(0,500,0,500,0,500);
+    }// if   ImageInitSize
+}
 
 void BoxWidget::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')
-//    bbSetOutputOut( bbGetInputIn() );
-//    std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
-  
-
-       if ( bbGetInputRenderer()!=NULL )
-       {
-               if (firsttime==true)
-               {       
-                       firsttime       = false;
-                       boxWidget       = vtkBoxWidget::New();
-                       planes          = vtkPlanes::New();
-                       boxWidget->SetInteractor(  bbGetInputRenderer()->GetRenderWindow()->GetInteractor() );
-                       boxWidget->SetPlaceFactor(1.25);
-                       if (bbGetInputImageInitSize()!=NULL)
-                       {
-                               int ext[6];
-                               bbGetInputImageInitSize()->GetExtent( ext );
-                               double spc[3];
-                               bbGetInputImageInitSize()->GetSpacing( spc );
-                               boxWidget->PlaceWidget( ext[0]*spc[0] , ext[1]*spc[0] , ext[2]*spc[1] , ext[3]*spc[1] , ext[4]*spc[2] , ext[5]*spc[2] );
-                       } else {
-                               boxWidget->PlaceWidget(0,500,0,500,0,500);
-                       }// if   ImageInitSize  
-                       boxWidget->GetPlanes( planes );
-               } // if firsttime
-        
-       //  boxWidget->SetProp3D(coneActor);
-               bbBoxWidgetCallback *callback = bbBoxWidgetCallback::New();
-               callback->SetBox( this );
-               boxWidget->AddObserver(vtkCommand::InteractionEvent, callback);
-
-               if (bbGetInputActive()==true)
-               {
-                       boxWidget->On();
-               }  else {
-                       boxWidget->Off();
-               } // if Active
-               bbSetOutputImplicitFunction( planes );
-       } else {
-               printf("EED Warnning! BoxWidget::Process vtkRenderer not set.\n");
-       }// vtkRenderer != NULL
-
+    
+    // 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')
+    //    bbSetOutputOut( bbGetInputIn() );
+    //    std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
+    if ( bbGetInputRenderer()!=NULL )
+    {
+        if (firsttime==true)
+        {
+            firsttime  = false;
+            boxWidget  = vtkBoxWidget::New();
+            planes             = vtkPlanes::New();
+            transformOut= vtkTransform::New();
+            boxWidget->SetInteractor(  bbGetInputRenderer()->GetRenderWindow()->GetInteractor() );
+            SetTransform( bbGetInputTransformIn() );
+        } // if firsttime
+
+        //  boxWidget->SetProp3D(coneActor);
+        bbBoxWidgetCallback *callback = bbBoxWidgetCallback::New();
+        callback->SetBox( this );
+        boxWidget->AddObserver(vtkCommand::InteractionEvent, callback);
+        
+        if (bbGetInputActive()==true)
+        {
+            boxWidget->On();
+        }  else {
+            boxWidget->Off();
+        } // if Active
+        bbSetOutputImplicitFunction( planes );
+        boxWidget->GetTransform(transformOut);
+        bbSetOutputTransformOut( transformOut );
+    } else {
+        printf("EED Warnning! BoxWidget::Process vtkRenderer not set.\n");
+    }// vtkRenderer != NULL
+    
+    bbSetOutputBox_BoxWidget( this );
+
+    printf("EED  BoxWidget::Process A\n");
+
+    
 }
-//===== 
+//=====
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
-//===== 
+//=====
 void BoxWidget::bbUserSetDefaultValues()
 {
-
-//  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
-//    Here we initialize the input 'In' to 0
-       firsttime=true;
+    //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
+    //    Here we initialize the input 'In' to 0
+    firsttime=true;
     bbSetInputRenderer(NULL);
+    bbSetInputTransformIn(NULL);
     bbSetInputActive( false );
+    bbSetInputInitBoxChangeImage( false );
     bbSetInputImageInitSize(NULL);
+    bbSetOutputTransformOut(NULL);
 }
-//===== 
+
+//=====
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
-//===== 
+//=====
 void BoxWidget::bbUserInitializeProcessing()
 {
-
-//  THE INITIALIZATION METHOD BODY :
-//    Here does nothing 
-//    but this is where you should allocate the internal/output pointers 
-//    if any 
-
-  
+    //  THE INITIALIZATION METHOD BODY :
+    //    Here does nothing
+    //    but this is where you should allocate the internal/output pointers
+    //    if any
 }
-//===== 
+
+//=====
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
-//===== 
+//=====
 void BoxWidget::bbUserFinalizeProcessing()
 {
-
-//  THE FINALIZATION METHOD BODY :
-//    Here does nothing 
-//    but this is where you should desallocate the internal/output pointers 
-//    if any
-  
-}
+    
+    //  THE FINALIZATION METHOD BODY :
+    //    Here does nothing
+    //    but this is where you should desallocate the internal/output pointers
+    //    if any
 }
-// EO namespace bbcreaVtk
+
+} // EO namespace bbcreaVtk