+ gp_Pnt aPoint;
+ bool aReadyToDisplay = readyToDisplay(myConstraint, mySketch->coordinatePlane(), aPoint);
+ if (aReadyToDisplay)
+ myPoint = aPoint;
+
+ bool aIsEdge = hasEdge(myConstraint);
+ if (!aIsEdge) {
+ std::shared_ptr<GeomAPI_Pnt2d> aPnt = getCoincidencePoint(myConstraint);
+ std::shared_ptr<GeomAPI_Pnt2d> aP;
+ FeaturePtr aSub;
+ int aNumberOfSubs = mySketch->numberOfSubs();
+ for (int i = 0; i < aNumberOfSubs; i++) {
+ aSub = mySketch->subFeature(i);
+ if (aSub->getKind() == SketchPlugin_ConstraintCoincidence::ID() &&
+ aSub.get() != myConstraint) {
+ aP = getCoincidencePoint(aSub.get());
+ if (aP && aP->isEqual(aPnt)) {
+ aIsEdge = hasEdge(aSub.get());
+ if (aIsEdge)
+ break;
+ }
+ }
+ }
+ }
+ Quantity_Color aMainColor;
+ Color(aMainColor);
+ Quantity_Color aExternalColor = aIsEdge ? aMainColor : Quantity_NOC_YELLOW;
+ Quantity_Color aInternalColor = aIsEdge ? Quantity_NOC_YELLOW : aMainColor;
+
+ int aRatio = SketcherPrs_Tools::pixelRatio();
+
+ // Create the presentation as a combination of standard point markers
+ // The external yellow contour
+ Handle(Graphic3d_AspectMarker3d) aPtA = new Graphic3d_AspectMarker3d();
+ aPtA->SetType(Aspect_TOM_RING3);
+ aPtA->SetScale(2. * aRatio);
+ aPtA->SetColor(aExternalColor);
+
+ Handle(Graphic3d_Group) aGroup = thePresentation->CurrentGroup();
+ aGroup->SetPrimitivesAspect(aPtA);
+ Handle(Graphic3d_ArrayOfPoints) aPntArray = new Graphic3d_ArrayOfPoints(1);
+ aPntArray->AddVertex (myPoint.X(), myPoint.Y(), myPoint.Z());
+ aGroup->AddPrimitiveArray (aPntArray);
+
+ // Make a black mid ring
+ aPtA = new Graphic3d_AspectMarker3d();
+ aPtA->SetType(aIsEdge ? Aspect_TOM_STAR : Aspect_TOM_RING1);
+ aPtA->SetScale(1. * aRatio);
+ aPtA->SetColor(aInternalColor);
+ aGroup->SetPrimitivesAspect(aPtA);
+ aGroup->AddPrimitiveArray (aPntArray);
+
+ // Make an internal ring
+ aPtA = new Graphic3d_AspectMarker3d();
+ aPtA->SetType(Aspect_TOM_POINT);
+ aPtA->SetScale(5. * aRatio);
+ aPtA->SetColor(aInternalColor);
+ aGroup->SetPrimitivesAspect(aPtA);
+ aGroup->AddPrimitiveArray (aPntArray);
+
+ if (!aReadyToDisplay)
+ SketcherPrs_Tools::sendEmptyPresentationError(myConstraint,
+ "An empty AIS presentation: SketcherPrs_Coincident");