From af10ac406443a2ed96f5cdce9424edb626d646e7 Mon Sep 17 00:00:00 2001 From: Eduardo DAVILA Date: Wed, 22 Dec 2021 14:01:05 +0100 Subject: [PATCH] #3476 Export Normal in PointPicker box --- bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx | 64 +++++++++++++------ bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.h | 4 +- 2 files changed, 49 insertions(+), 19 deletions(-) diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.cxx index 69c4c02..df5424a 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,38 +32,57 @@ 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 /* @@ -225,6 +248,11 @@ void PointPicker::bbUserSetDefaultValues() 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) diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.h b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.h index 7d3d853..d48c560 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.h +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkPointPicker.h @@ -57,6 +57,7 @@ class bbcreaVtk_EXPORT PointPicker BBTK_DECLARE_OUTPUT(Mesh,vtkProp3D*); BBTK_DECLARE_OUTPUT(PointId,longInt); BBTK_DECLARE_OUTPUT(CellId,longInt); + BBTK_DECLARE_OUTPUT(Normal,std::vector); BBTK_PROCESS(Process); void Process(); @@ -79,10 +80,11 @@ BBTK_BEGIN_DESCRIBE_BLACK_BOX(PointPicker,bbtk::AtomicBlackBox); BBTK_INPUT(PointPicker,Renderer,"vtk Renderer",vtkRenderer*,""); BBTK_INPUT(PointPicker,Prop3D,"vtkProp3D de reference. If this parameter is empty all actors in the render are used",vtkProp3D*,""); - BBTK_OUTPUT(PointPicker,Point,"Point (double)",std::vector,""); + BBTK_OUTPUT(PointPicker,Point,"Point [x,y,z])",std::vector,""); BBTK_OUTPUT(PointPicker,Mesh,"Mesh",vtkProp3D*,""); BBTK_OUTPUT(PointPicker,PointId,"Point Id in Mesh",longInt,""); BBTK_OUTPUT(PointPicker,CellId,"Cell Id in Mesh",longInt,""); + BBTK_OUTPUT(PointPicker,Normal,"Normal [nx,ny,nz]",std::vector,""); BBTK_END_DESCRIBE_BLACK_BOX(PointPicker); //===== -- 2.47.1