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
{
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();
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.);
}
//*********************************************************************************
myAspect = new Graphic3d_AspectMarker3d();
else
myAspect = new Graphic3d_AspectMarker3d(aIcon);
+
+ myAspect->SetColor(myCustomColor);
}
}
// 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()) {
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
}
//*********************************************************************************
-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);
}
//*********************************************************************************