X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk_creaVtk_PKG%2Fsrc%2FbbcreaVtkPointPicker.cxx;h=3d71c086809a59cfda0334da4ada5e4a2868acfa;hb=4dfb73fa777e2a3d0728e0987e7d7bea5817bbc1;hp=69c4c02eb71c54d4044dbec818573c41f26b4271;hpb=1520e4c5bfdd93b70d17c394b01ad8ebec87df68;p=creaVtk.git diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx index 69c4c02..3d71c08 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx @@ -8,6 +8,10 @@ #include #include #include +#include +#include +#include +#include namespace bbcreaVtk { @@ -28,40 +32,61 @@ void creaVtkCallbackPointPicker::Execute(vtkObject *caller, unsigned long, void* { if (boxPointPicker->bbGetInputActive()==true) { -// printf("creaVtkCallbackPointPicker EED Picker\n"); - vtkRenderWindowInteractor *iren = static_cast(caller); - int* pos = iren->GetEventPosition(); - vtkCellPicker *picker = vtkCellPicker::New(); + 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) { -// 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 - } + 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 + /* { @@ -122,8 +147,6 @@ void creaVtkCallbackPointPicker::Execute(vtkObject *caller, unsigned long, void* } */ - - } @@ -139,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 @@ -173,10 +195,8 @@ void PointPicker::Process() picker->AddObserver( vtkCommand::MouseMoveEvent , callPicker ); bbGetInputRenderer()->GetRenderWindow()->GetInteractor()->SetPicker(picker); */ - callPicker = creaVtkCallbackPointPicker::New(); callPicker->setBox( this ); - } // if firsttime @@ -206,9 +226,21 @@ void PointPicker::Process() } // 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) //===== @@ -219,39 +251,42 @@ void PointPicker::bbUserSetDefaultValues() // bbSetInputIn(0); 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