Salome HOME
Issue #604 Creation of an unexpected line in the Sketcher
[modules/shaper.git] / src / SketcherPrs / SketcherPrs_SymbolPrs.cpp
index 224a4b1dc36bbfac20152273288ea4042be96ce0..77b40fc8be0a23bfca4239792257ebb17ee31c2d 100644 (file)
@@ -18,7 +18,6 @@
 #include <Graphic3d_BndBox4f.hxx>
 
 #include <SelectMgr_Selection.hxx>
-#include <SelectMgr_SelectionManager.hxx>
 #include <Select3D_SensitivePoint.hxx>
 #include <TopLoc_Location.hxx>
 #include <AIS_InteractiveContext.hxx>
@@ -37,8 +36,6 @@
 #include <OpenGl_PointSprite.hxx>
 #include <OpenGl_VertexBuffer.hxx>
 #include <OpenGl_ShaderManager.hxx>
-#include <OpenGl_VertexBufferCompat.hxx>
-#include <OpenGl_GraphicDriver.hxx>
 
 #ifdef WIN32
 # define FSEP "\\"
@@ -319,7 +316,8 @@ void SketcherPrs_SymbolPrs::HilightSelected(const Handle(PrsMgr_PresentationMana
 }
 
 void SketcherPrs_SymbolPrs::HilightOwnerWithColor(const Handle(PrsMgr_PresentationManager3d)& thePM, 
-                                                 const Quantity_NameOfColor theColor, const Handle(SelectMgr_EntityOwner)& theOwner)
+                                                 const Quantity_NameOfColor theColor, 
+                                                 const Handle(SelectMgr_EntityOwner)& theOwner)
 {
   thePM->Color(this, theColor);
 
@@ -354,7 +352,7 @@ void SketcherPrs_SymbolPrs::Compute(const Handle(PrsMgr_PresentationManager3d)&
 
   mySPoints.Clear();
   for (int i = 1; i <= aNbVertex; i++) {
-    Handle(SketcherPrs_SensitivePoint) aSP = new SketcherPrs_SensitivePoint(myOwner, myPntArray, i);
+    Handle(SketcherPrs_SensitivePoint) aSP = new SketcherPrs_SensitivePoint(myOwner, i);
     mySPoints.Append(aSP);
   }
 
@@ -370,6 +368,9 @@ void SketcherPrs_SymbolPrs::Compute(const Handle(PrsMgr_PresentationManager3d)&
   }
 
   aGroup->UserDraw(this, true);
+
+  // Disable frustum culling for this object by marking it as mutable
+  aGroup->Structure()->SetMutable(true);
   //aGroup->AddPrimitiveArray(myPntArray);
 }
 
@@ -423,6 +424,11 @@ void SketcherPrs_SymbolPrs::Render(const Handle(OpenGl_Workspace)& theWorkspace)
     if (theWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT)
       aLineColor = theWorkspace->HighlightColor;
 
+    if (toHilight)
+      aCtx->core11fwd->glDisable (GL_LIGHTING);
+    else
+      aCtx->core11fwd->glEnable (GL_LIGHTING);
+
     aCtx->SetColor4fv(*(const OpenGl_Vec4* )(aLineColor->rgb));
 
 
@@ -447,7 +453,10 @@ void SketcherPrs_SymbolPrs::Render(const Handle(OpenGl_Workspace)& theWorkspace)
   // Update selection position only if there is no selected object
   // because it can corrupt selection of other objects
   if ((GetContext()->NbCurrents() == 0) && (GetContext()->NbSelected() == 0))
-    GetContext()->RecomputeSelectionOnly(this);
+  {
+    GetContext()->MainSelector()->RebuildSensitivesTree (this);
+    GetContext()->MainSelector()->RebuildObjectsTree (false);
+  }
 }
 
 
@@ -499,3 +508,16 @@ void SketcherPrs_SymbolPrs::drawListOfShapes(const std::shared_ptr<ModelAPI_Attr
   }
 }
 
+void SketcherPrs_SymbolPrs::BoundingBox (Bnd_Box& theBndBox)
+{
+  Select3D_BndBox3d aTmpBox;
+  for (Select3D_EntitySequenceIter aPntIter (mySPoints); aPntIter.More(); aPntIter.Next())
+  {
+    const Handle(Select3D_SensitiveEntity)& anEnt = aPntIter.Value();
+    aTmpBox.Combine (anEnt->BoundingBox());
+  }
+
+  theBndBox.Update (aTmpBox.CornerMin().x(), aTmpBox.CornerMin().y(), aTmpBox.CornerMin().z(),
+                    aTmpBox.CornerMax().x(), aTmpBox.CornerMax().y(), aTmpBox.CornerMax().z());
+}
+