Salome HOME
Meet the coding style (line length <= 100)
[modules/shaper.git] / src / SketcherPrs / SketcherPrs_SymbolPrs.cpp
index 8f77dbb156e7ad51857b9c0d50b4cff8f41fd846..2dfcc68f31301bfdc554c0ffa75ec82388715767 100644 (file)
@@ -53,7 +53,8 @@ public:
   SketcherPrs_SymbolArray(const OpenGl_GraphicDriver* theDriver,
     const Handle(SketcherPrs_SymbolPrs)& theObj, const Handle(AIS_InteractiveContext)& theCtx)
     :OpenGl_PrimitiveArray(theDriver, theObj->myPntArray->Type(), theObj->myPntArray->Indices(),
-    theObj->myPntArray->Attributes(), theObj->myPntArray->Bounds()), myObj(theObj), myContext(theCtx) {}
+    theObj->myPntArray->Attributes(), theObj->myPntArray->Bounds()), myObj(theObj),
+    myContext(theCtx) {}
 
   virtual void Render(const Handle(OpenGl_Workspace)& theWorkspace) const
   {
@@ -62,7 +63,7 @@ public:
       Handle(OpenGl_View) aView = theWorkspace->View();
       double aScale = aView->Camera()->Scale();
       // Update points coordinate taking the viewer scale into account
-      myObj->updateIfReadyToDisplay(MyDist * aScale);
+      myObj->updateIfReadyToDisplay(MyDist * aScale, myObj->myIsCustomColor);
       if (myIsVboInit) {
         if (myVboAttribs) {
           const Handle(OpenGl_Context)& aCtx = theWorkspace->GetGlContext();
@@ -102,11 +103,9 @@ std::map<const char*, Handle(Image_AlienPixMap)> SketcherPrs_SymbolPrs::myIconsM
 
 SketcherPrs_SymbolPrs::SketcherPrs_SymbolPrs(ModelAPI_Feature* theConstraint,
                                              const std::shared_ptr<GeomAPI_Ax3>& thePlane)
- : AIS_InteractiveObject(), myConstraint(theConstraint), myPlane(thePlane), myIsConflicting(false)
+ : AIS_InteractiveObject(), myConstraint(theConstraint), myPlane(thePlane), myIsCustomColor(false)
 {
   SetAutoHilight(Standard_False);
-  myPntArray = new Graphic3d_ArrayOfPoints(1);
-  myPntArray->AddVertex(0., 0., 0.);
 }
 
 //*********************************************************************************
@@ -164,6 +163,8 @@ void SketcherPrs_SymbolPrs::prepareAspect()
       myAspect = new Graphic3d_AspectMarker3d();
     else
       myAspect = new Graphic3d_AspectMarker3d(aIcon);
+
+    myAspect->SetColor(myCustomColor);
   }
 }
 
@@ -239,7 +240,7 @@ void SketcherPrs_SymbolPrs::Compute(
   // it updates array of points if the presentation is ready to display, or the array of points
   // contains the previous values
 
-  bool aReadyToDisplay = updateIfReadyToDisplay(20);
+  bool aReadyToDisplay = updateIfReadyToDisplay(20, myIsCustomColor);
 
   int aNbVertex = myPntArray->VertexNumber();
   if (myOwner.IsNull()) {
@@ -251,9 +252,12 @@ void SketcherPrs_SymbolPrs::Compute(
   for (int i = 1; i <= aNbVertex; i++) {
     Handle(SketcherPrs_SensitivePoint) aSP = new SketcherPrs_SensitivePoint(myOwner, i);
     mySPoints.Append(aSP);
+    if (myIsCustomColor)
+      myPntArray->SetVertexColor(i, myCustomColor);
   }
 
-  Handle(OpenGl_Group) aGroup = Handle(OpenGl_Group)::DownCast(thePresentation->NewGroup());
+  Handle(OpenGl_Group) aGroup =
+    Handle(OpenGl_Group)::DownCast(Prs3d_Root::CurrentGroup (thePresentation));
   aGroup->SetPrimitivesAspect(myAspect);
 
   // Recompute boundary box of the group
@@ -291,22 +295,17 @@ void SketcherPrs_SymbolPrs::ComputeSelection(const Handle(SelectMgr_Selection)&
 }
 
 //*********************************************************************************
-void SketcherPrs_SymbolPrs::SetConflictingConstraint(const bool& theConflicting,
-                                                     const std::vector<int>& theColor)
+void SketcherPrs_SymbolPrs::SetCustomColor(const std::vector<int>& theColor)
 {
-  if (theConflicting)
-  {
-    if (!myAspect.IsNull())
-      myAspect->SetColor (Quantity_Color (theColor[0] / 255., theColor[1] / 255.,
-                          theColor[2] / 255., Quantity_TOC_RGB));
-    myIsConflicting = true;
-  }
+  myIsCustomColor = !theColor.empty();
+  if (myIsCustomColor)
+    myCustomColor = Quantity_Color(theColor[0] / 255., theColor[1] / 255.,
+                                   theColor[2] / 255., Quantity_TOC_RGB);
   else
-  {
-    if (!myAspect.IsNull())
-      myAspect->SetColor (Quantity_Color (1.0, 1.0, 0.0, Quantity_TOC_RGB));
-    myIsConflicting = false;
-  }
+    myCustomColor = Quantity_Color (1.0, 1.0, 0.0, Quantity_TOC_RGB);
+
+  if (!myAspect.IsNull())
+    myAspect->SetColor (myCustomColor);
 }
 
 //*********************************************************************************