X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk_creaVtk_PKG%2Fsrc%2FbbcreaVtkPointPicker.cxx;h=3d71c086809a59cfda0334da4ada5e4a2868acfa;hb=464deff51f697881cd76b3cfb934859cd7c31df7;hp=6bc8262cfb999ec40760ca1e5eaa474597f4fa30;hpb=3582c0f9b8380fde739856aa6a188da3262cf03b;p=creaVtk.git diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx index 6bc8262..3d71c08 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx @@ -7,32 +7,86 @@ #include #include #include -#include #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) + { + vtkRenderWindowInteractor *iren = static_cast(caller); + int *pos = iren->GetEventPosition(); + vtkCellPicker *picker = vtkCellPicker::New(); + picker->SetTolerance(0.0005); + if (boxPointPicker->bbGetInputProp3D()!=NULL ) + { + picker->AddPickList( boxPointPicker->bbGetInputProp3D() ); + picker->PickFromListOn(); + } + picker->Pick(pos[0], pos[1], 0, iren->GetRenderWindow()->GetRenderers()->GetFirstRenderer() ); + double point[3]; + if(picker->GetCellId() != -1) + { + 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() ); + vtkDataSet *dataset = picker->GetDataSet(); + if (strcmp(dataset->GetClassName(),"vtkPolyData")==0) + { + vtkPolyData *polydata = (vtkPolyData*)dataset; + vtkPointData *pointdata = polydata->GetPointData(); + vtkDataArray *dataarray; + double *pValue; + /* + int i,size=pointdata->GetNumberOfArrays(); + for(i=0;iGetArray(i); + printf("EED creaVtkCallbackPointPicker::Execute dataarray=%s n=%ld p=%ld\n", dataarray->GetName(),dataarray->GetNumberOfValues() ,polydata->GetNumberOfPoints() ); + } // for i + */ + dataarray = pointdata->GetNormals(); + if (dataarray!=NULL) + { + pValue = dataarray->GetTuple3( picker->GetPointId() ); + std::vector lstNormal; + lstNormal.push_back(pValue[0]); + lstNormal.push_back(pValue[1]); + lstNormal.push_back(pValue[2]); + boxPointPicker->bbSetOutputNormal( lstNormal ); + } // if dataarray + } // if ClassName + boxPointPicker->bbSignalOutputModification(); + } // if + } // if Active + } // if boxPoiintPicker + /* { @@ -40,7 +94,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()); @@ -93,8 +147,6 @@ void creaVtkCallbackPointPicker::Execute(vtkObject *caller, unsigned long, void* } */ - - } @@ -110,7 +162,6 @@ BBTK_BLACK_BOX_IMPLEMENTATION(PointPicker,bbtk::AtomicBlackBox); //===== void PointPicker::Process() { - // THE MAIN PROCESSING METHOD BODY // Here we simply set the input 'In' value to the output 'Out' // And print out the output value @@ -128,8 +179,6 @@ void PointPicker::Process() if (firsttime==true) { - -printf("EED PointPicker::Process Firsttime \n"); firsttime = false; // vtkCellPicker *picker = vtkCellPicker::New(); // vtkPropPicker *picker = vtkCellPicker::New(); @@ -146,54 +195,98 @@ printf("EED PointPicker::Process Firsttime \n"); picker->AddObserver( vtkCommand::MouseMoveEvent , callPicker ); bbGetInputRenderer()->GetRenderWindow()->GetInteractor()->SetPicker(picker); */ + callPicker = creaVtkCallbackPointPicker::New(); + callPicker->setBox( this ); + } // if firsttime - creaVtkCallbackPointPicker *callPicker = creaVtkCallbackPointPicker::New(); + + if (bbGetInputRenderer()!=NULL) + { vtkRenderWindowInteractor *vrwi = bbGetInputRenderer()->GetRenderWindow()->GetInteractor(); - vrwi->AddObserver( vtkCommand::EndPickEvent , callPicker ); - vrwi->AddObserver( vtkCommand::StartPickEvent , callPicker ); - vrwi->AddObserver( vtkCommand::MouseMoveEvent , callPicker ); + vrwi->RemoveObserver( callPicker ); - } // if firsttime + 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() + +// std::vector lstPoint; +// lstPoint.push_back(0); +// lstPoint.push_back(0); +// lstPoint.push_back(1); +// bbSetOutputPoint( lstPoint ); + +// BORRAME bbSetOutputPoint( bbGetInputDefaultPoint() ); + +// bbSetOutputMesh( NULL ); +// Borrame bbSetOutputPointId( bbGetInputDefaultPointId() ); +// bbSetOutputCellId( -1 ); +// bbSetOutputNormal( lstPoint ); + } + //===== // 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); + bbSetInputDefaultPointId( -1 ); + bbSetOutputMesh(NULL); + bbSetOutputPointId(-1); + bbSetOutputCellId(-1); + firsttime=true; + callPicker=NULL; + bbSetInputProp3D(NULL); + std::vector lstNormal; + lstNormal.push_back(0); + lstNormal.push_back(0); + lstNormal.push_back(1); + bbSetOutputNormal( lstNormal ); } + //===== // 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::bbUserInitializeProcessing() { - // THE INITIALIZATION METHOD BODY : // Here does nothing // but this is where you should allocate the internal/output pointers -// if any - - +// 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 PointPicker::bbUserFinalizeProcessing() { - // 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