]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
bvh multi-threading (quick patch) BR_1461D
authorisn <isn@opencascade.com>
Fri, 1 Dec 2017 18:33:50 +0000 (21:33 +0300)
committerisn <isn@opencascade.com>
Fri, 1 Dec 2017 18:33:50 +0000 (21:33 +0300)
src/HYDROGUI/HYDROGUI_ShapeBathymetry.cxx

index acdac05bf2e92ebef5ef34315f926e1b8d94817f..a647763c0666739308df12281e3cc216078a9e92 100644 (file)
@@ -93,7 +93,19 @@ QList<Handle(AIS_InteractiveObject)> HYDROGUI_ShapeBathymetry::createShape() con
 
   return shapes;
 }
+#include <SelectMgr_Selection.hxx>
+#include <SelectMgr_ViewerSelector.hxx>
+#include <SelectMgr_SensitiveEntitySet.hxx>
+#include <BVH_PrimitiveSet.hxx>
+#include <BVH_QueueBuilder.hxx>
 
+class BVHB_dummy: public BVH_QueueBuilder<double,3>
+{
+  BVHB_dummy();
+  ~BVHB_dummy();
+public:
+  int* getNbThreads() {return &this->myNumOfThreads;}
+};
 void HYDROGUI_ShapeBathymetry::UpdateWithColorScale( const Handle(AIS_ColorScale)& theColorScale )
 {
   if (!myCoords || getAISObjects().isEmpty())
@@ -111,8 +123,33 @@ void HYDROGUI_ShapeBathymetry::UpdateWithColorScale( const Handle(AIS_ColorScale
     myColors->SetValue( i, aColor );
   }
   Handle(HYDROGUI_BathymetryPrs) aPntCloud = Handle(HYDROGUI_BathymetryPrs)::DownCast( getAISObjects()[0] );
+  //const Handle(SelectMgr_Selection)& sel0 =  aPntCloud->Selection(0);
+  //const Handle(SelectMgr_SensitiveEntity)& sens = sel0->Sensitive();
   aPntCloud->SetPoints( myCoords, myColors );
   getContext()->RecomputePrsOnly( aPntCloud, Standard_True );
+  Handle(StdSelect_ViewerSelector3d) VS = getContext()->MainSelector();
+  Handle(SelectMgr_ViewerSelector) VSD = Handle(SelectMgr_ViewerSelector)::DownCast(VS);
+  //size_t VSDsize = sizeof(VSD);
+  size_t VSDsize1 = sizeof(SelectMgr_ViewerSelector);
+  size_t mapSensSize = sizeof(SelectMgr_MapOfObjectSensitives);
+  SelectMgr_MapOfObjectSensitives* mapS = (SelectMgr_MapOfObjectSensitives*)((char*)VSD.get() + (VSDsize1 - mapSensSize));
+  try 
+  {
+    mapS->Size();
+    NCollection_Handle<SelectMgr_SensitiveEntitySet>& anEntitySet = mapS->ChangeFind (aPntCloud);
+    NCollection_Handle<BVH_Builder<double,3>> BVH_Builder = anEntitySet->Builder();
+    BVH_QueueBuilder<double,3>* BVH_QB = dynamic_cast<BVH_QueueBuilder<double,3>*>(BVH_Builder.get());
+    int* nbt = static_cast<BVHB_dummy*>(BVH_QB)->getNbThreads();
+    if (*nbt == 1)
+      *nbt = 4;
+  }
+  catch (...)
+  {
+
+  }
+
+  //getContext()->LocalSelector();
+  //aPntCloud->ComputeSelection(sel0, 0);
   getContext()->RecomputeSelectionOnly( aPntCloud );
 }