]> Creatis software - creaVtk.git/blobdiff - bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx
#3459 Feuture box PointPicker
[creaVtk.git] / bbtk_creaVtk_PKG / src / bbcreaVtkPointPicker.cxx
index 6bc8262cfb999ec40760ca1e5eaa474597f4fa30..5bb82f5d54abba853cef4936adf50b61e39905dc 100644 (file)
@@ -7,31 +7,53 @@
 #include <vtkPropPicker.h>
 #include <vtkCellPicker.h>
 #include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
 #include <vtkRendererCollection.h>
 
 namespace bbcreaVtk
 {
 
+creaVtkCallbackPointPicker::creaVtkCallbackPointPicker(void)
+{
+       boxPointPicker=NULL;
+}
 
+void creaVtkCallbackPointPicker::setBox(PointPicker *box)
+{
+       boxPointPicker=box;
+}
 
 void creaVtkCallbackPointPicker::Execute(vtkObject *caller, unsigned long, void*)
 {
-               printf("creaVtkCallbackPointPicker EED Picker\n");
-               vtkRenderWindowInteractor *iren = static_cast<vtkRenderWindowInteractor*>(caller);
-
-               int* pos = iren->GetEventPosition();
-        vtkCellPicker *picker = vtkCellPicker::New();
-        picker->SetTolerance(0.0005);
-        picker->Pick(pos[0], pos[1], 0, iren->GetRenderWindow()->GetRenderers()->GetFirstRenderer() );
-
-               if(picker->GetCellId() != -1)
-        {
-                       printf("creaVtkCallbackPointPicker EED picker OK\n");
-               } else {
-                       printf("creaVtkCallbackPointPicker EED picker --\n");
-               } // if
-
+       if (boxPointPicker!=NULL)
+       {
+               if (boxPointPicker->bbGetInputActive()==true)
+               {
+                       printf("creaVtkCallbackPointPicker EED Picker\n");
+                       vtkRenderWindowInteractor *iren = static_cast<vtkRenderWindowInteractor*>(caller);
+                       int* pos = iren->GetEventPosition();
+                   vtkCellPicker *picker = vtkCellPicker::New();
+                   picker->SetTolerance(0.0005);
+                   picker->Pick(pos[0], pos[1], 0, iren->GetRenderWindow()->GetRenderers()->GetFirstRenderer() );
+                       double point[3];
+
+                       if(picker->GetCellId() != -1)
+                   {
+                               printf("creaVtkCallbackPointPicker EED picker OK\n");
+                               picker->GetPickPosition(point);
+                               std::vector<double> vecPoint;
+                               vecPoint.push_back( point[0] );
+                               vecPoint.push_back( point[1] );
+                               vecPoint.push_back( point[2] );
+                                       boxPointPicker->bbSetOutputPoint( vecPoint );
+                                       boxPointPicker->bbSetOutputMesh( picker->GetProp3D() );
+                                       boxPointPicker->bbSetOutputPointId( picker->GetPointId() );
+                                       boxPointPicker->bbSetOutputCellId( picker->GetCellId() );
+                                       boxPointPicker->bbSignalOutputModification();
+                       } else {
+                               printf("creaVtkCallbackPointPicker EED picker --\n");
+                       } // if
+               }
+       } // if boxPoiintPicker
 
 /*
 {
@@ -40,7 +62,7 @@ void creaVtkCallbackPointPicker::Execute(vtkObject *caller, unsigned long, void*
                   << " " << worldPosition[2] << endl;
  
         vtkSmartPointer<vtkIdTypeArray> ids =
-          vtkSmartPointer<vtkIdTypeArray>::New();
+          vtkSmartPointer<vtkIdTypeArray>::New()creaVtkCallbackPointPicker *callPicker;
         ids->SetNumberOfComponents(1);
         ids->InsertNextValue(picker->GetCellId());
  
@@ -128,8 +150,6 @@ void PointPicker::Process()
   
        if (firsttime==true)
        {
-
-printf("EED PointPicker::Process Firsttime \n");
                firsttime = false;
 //             vtkCellPicker *picker = vtkCellPicker::New();
 //             vtkPropPicker *picker = vtkCellPicker::New();
@@ -147,26 +167,56 @@ printf("EED PointPicker::Process Firsttime \n");
                bbGetInputRenderer()->GetRenderWindow()->GetInteractor()->SetPicker(picker);
 */
 
-               creaVtkCallbackPointPicker *callPicker = creaVtkCallbackPointPicker::New();
-               vtkRenderWindowInteractor *vrwi = bbGetInputRenderer()->GetRenderWindow()->GetInteractor();
-               vrwi->AddObserver( vtkCommand::EndPickEvent , callPicker );
-               vrwi->AddObserver( vtkCommand::StartPickEvent , callPicker );
-               vrwi->AddObserver( vtkCommand::MouseMoveEvent , callPicker );
+               callPicker = creaVtkCallbackPointPicker::New();
+               callPicker->setBox( this );
 
        } // if firsttime
 
+
+       if (bbGetInputRenderer()!=NULL)
+       {
+               vtkRenderWindowInteractor *vrwi = bbGetInputRenderer()->GetRenderWindow()->GetInteractor();
+               vrwi->RemoveObserver( callPicker );
+
+               if (bbGetInputTypeEvent()==0)
+               {
+                       // Nothing
+               } else if (bbGetInputTypeEvent()==1)
+               {
+                       vrwi->AddObserver( vtkCommand::MouseMoveEvent , callPicker );
+               } else if (bbGetInputTypeEvent()==2)
+               {
+                       vrwi->AddObserver( vtkCommand::LeftButtonPressEvent , callPicker );
+               } else if (bbGetInputTypeEvent()==3)
+               {
+#if VTK_MAJOR_VERSION >= 9
+               vrwi->AddObserver( vtkCommand::LeftButtonDoubleClickEvent , callPicker );
+#else
+               printf("EED Warnning!  PointPicker LeftButtonPressEvent since vtk 9 \n");
+#endif
+               } // if TypeEvent       
+               // ....See vtkCommand EventIds
+       } // if bbGetInputRenderer()
+
+               
+
+
 }
 //===== 
 // 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 PointPicker::bbUserSetDefaultValues()
 {
-
 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
 //    Here we initialize the input 'In' to 0
 //   bbSetInputIn(0);
-  
-       firsttime=true;
+       bbSetInputActive(true);
+       bbSetInputTypeEvent(0);
+       bbSetOutputMesh(NULL);
+       bbSetOutputPointId(-1);
+       bbSetOutputCellId(-1);
+       firsttime=true;
+       callPicker=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)