#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
/*
{
<< " " << worldPosition[2] << endl;
vtkSmartPointer<vtkIdTypeArray> ids =
- vtkSmartPointer<vtkIdTypeArray>::New();
+ vtkSmartPointer<vtkIdTypeArray>::New()creaVtkCallbackPointPicker *callPicker;
ids->SetNumberOfComponents(1);
ids->InsertNextValue(picker->GetCellId());
if (firsttime==true)
{
-
-printf("EED PointPicker::Process Firsttime \n");
firsttime = false;
// vtkCellPicker *picker = vtkCellPicker::New();
// vtkPropPicker *picker = vtkCellPicker::New();
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)