X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk_creaVtk_PKG%2Fsrc%2FbbcreaVtkPointPicker.cxx;h=0d75b953cdbb85b06199b70e5e6d4834c2d8e1d8;hb=e0a6a661908d6f302ae451204ddcd06eb9d1321c;hp=03181ce549a755723c5c5fe0dacbb91cfe21d42d;hpb=5825735f1ca8ae336df0c150654762a07b1356f2;p=creaVtk.git diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx index 03181ce..0d75b95 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx @@ -7,31 +7,53 @@ #include #include #include -#include #include 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(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(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 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 ids = - vtkSmartPointer::New(); + vtkSmartPointer::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,27 +167,56 @@ printf("EED PointPicker::Process Firsttime \n"); bbGetInputRenderer()->GetRenderWindow()->GetInteractor()->SetPicker(picker); */ - creaVtkCallbackPointPicker *callPicker = creaVtkCallbackPointPicker::New(); - callPicker->_renderer = bbGetInputRenderer(); - 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)