X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Coincident.cpp;h=f9e2e2959123b8d00fd9ce62356ada24721d7892;hb=061a63480f6840b6d945f7744b3b972e2d4cb25d;hp=f98c29f7f3a083e7e2c8fece29ef786266e5377c;hpb=e9d4bd92e29ba18fc93a074b3bd3fd0972ec8992;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Coincident.cpp b/src/SketcherPrs/SketcherPrs_Coincident.cpp index f98c29f7f..f9e2e2959 100644 --- a/src/SketcherPrs/SketcherPrs_Coincident.cpp +++ b/src/SketcherPrs/SketcherPrs_Coincident.cpp @@ -18,11 +18,13 @@ #include -#include #include #include #include #include +#include +#include +#include IMPLEMENT_STANDARD_HANDLE(SketcherPrs_Coincident, AIS_InteractiveObject); @@ -32,6 +34,7 @@ SketcherPrs_Coincident::SketcherPrs_Coincident(ModelAPI_Feature* theConstraint, const std::shared_ptr& thePlane) : AIS_InteractiveObject(), myConstraint(theConstraint), myPlane(thePlane) { + } @@ -40,28 +43,53 @@ void SketcherPrs_Coincident::Compute(const Handle(PrsMgr_PresentationManager3d)& const Handle(Prs3d_Presentation)& thePresentation, const Standard_Integer theMode) { + // Get point of the presentation std::shared_ptr aPnt = SketcherPrs_Tools::getPoint(myConstraint, SketchPlugin_Constraint::ENTITY_A()); + if (aPnt.get() == NULL) + aPnt = SketcherPrs_Tools::getPoint(myConstraint, SketchPlugin_Constraint::ENTITY_B()); if (aPnt.get() == NULL) return; std::shared_ptr aPoint = myPlane->to3D(aPnt->x(), aPnt->y()); + myPoint = aPoint->impl(); - static Handle(Graphic3d_AspectMarker3d) aPtA = new Graphic3d_AspectMarker3d (); - aPtA->SetType(Aspect_TOM_RING1); + static Handle(Graphic3d_AspectMarker3d) aPtA; + if (aPtA.IsNull()) { + aPtA = new Graphic3d_AspectMarker3d (); + } + // Create the presentation as a combination of standard point markers + + // The external yellow contour + aPtA->SetType(Aspect_TOM_RING3); aPtA->SetScale(2.); - aPtA->SetColor(myOwnColor); + aPtA->SetColor(Quantity_NOC_YELLOW); + Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup(thePresentation); aGroup->SetPrimitivesAspect(aPtA); Handle(Graphic3d_ArrayOfPoints) aPntArray = new Graphic3d_ArrayOfPoints(1); aPntArray->AddVertex (aPoint->x(), aPoint->y(), aPoint->z()); aGroup->AddPrimitiveArray (aPntArray); + + // Make a black mid ring + aPtA->SetType(Aspect_TOM_RING1); + aPtA->SetScale(1.); + aPtA->SetColor(Quantity_NOC_BLACK); + aGroup->SetPrimitivesAspect(aPtA); + aGroup->AddPrimitiveArray (aPntArray); + + // Make an internal ring + aPtA->SetType(Aspect_TOM_POINT); + aPtA->SetScale(5.); + aGroup->SetPrimitivesAspect(aPtA); + aGroup->AddPrimitiveArray (aPntArray); } void SketcherPrs_Coincident::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) { + // There is no selection of coincident - a point is selected instead of coincidence } void SketcherPrs_Coincident::SetColor(const Quantity_NameOfColor aCol)