X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Coincident.cpp;h=d8cb88cb21b3d905873a5a68d87a12172459faf8;hb=935fe05ec267f2b38c82ab5fd12d89bcdd78c2a4;hp=7bd3d30ef4f347eeef10d7302de8dc3929fe1962;hpb=014d4b2f63b6f239da5259bc700e1dcbeb49897e;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Coincident.cpp b/src/SketcherPrs/SketcherPrs_Coincident.cpp index 7bd3d30ef..d8cb88cb2 100644 --- a/src/SketcherPrs/SketcherPrs_Coincident.cpp +++ b/src/SketcherPrs/SketcherPrs_Coincident.cpp @@ -8,6 +8,8 @@ #include "SketcherPrs_Tools.h" #include +#include + #include #include #include @@ -16,9 +18,10 @@ #include #include +#include + #include -#include #include #include #include @@ -33,31 +36,53 @@ IMPLEMENT_STANDARD_RTTIEXT(SketcherPrs_Coincident, AIS_InteractiveObject); SketcherPrs_Coincident::SketcherPrs_Coincident(ModelAPI_Feature* theConstraint, const std::shared_ptr& thePlane) - : AIS_InteractiveObject(), myConstraint(theConstraint), myPlane(thePlane) + : AIS_InteractiveObject(), myConstraint(theConstraint), mySketcherPlane(thePlane) { } +bool SketcherPrs_Coincident::IsReadyToDisplay(ModelAPI_Feature* theConstraint, + const std::shared_ptr& thePlane) +{ + gp_Pnt aPoint; + return readyToDisplay(theConstraint, thePlane, aPoint); +} + +bool SketcherPrs_Coincident::readyToDisplay(ModelAPI_Feature* theConstraint, + const std::shared_ptr& thePlane, + gp_Pnt& thePoint) +{ + bool aReadyToDisplay = false; + // Get point of the presentation + std::shared_ptr aPnt = SketcherPrs_Tools::getPoint(theConstraint, + SketchPlugin_Constraint::ENTITY_A()); + if (aPnt.get() == NULL) { + aPnt = SketcherPrs_Tools::getPoint(theConstraint, SketchPlugin_Constraint::ENTITY_B()); + aReadyToDisplay = aPnt.get() != NULL; + if (aReadyToDisplay) + thePoint = aPnt->impl(); + } + return aReadyToDisplay; +} void SketcherPrs_Coincident::Compute(const Handle(PrsMgr_PresentationManager3d)& thePresentationManager, const Handle(Prs3d_Presentation)& thePresentation, const Standard_Integer theMode) { - 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(); + gp_Pnt aPoint; + bool aReadyToDisplay = readyToDisplay(myConstraint, mySketcherPlane, aPoint); + if (aReadyToDisplay) + myPoint = aPoint; + // Get point of the presentation 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(Quantity_NOC_YELLOW); @@ -65,30 +90,32 @@ void SketcherPrs_Coincident::Compute(const Handle(PrsMgr_PresentationManager3d)& 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()); + aPntArray->AddVertex (myPoint.X(), myPoint.Y(), myPoint.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); + + if (!aReadyToDisplay) + SketcherPrs_Tools::sendEmptyPresentationError(myConstraint, + "An empty AIS presentation: SketcherPrs_Coincident"); } void SketcherPrs_Coincident::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) { -// if ((aMode == 0) || (aMode == SketcherPrs_Tools::Sel_Constraint)) { -// Handle(SelectMgr_EntityOwner) aOwn = new SelectMgr_EntityOwner(this, 10); -// Handle(Select3D_SensitivePoint) aSp = new Select3D_SensitivePoint(aOwn, myPoint); -// aSelection->Add(aSp); -// } + // There is no selection of coincident - a point is selected instead of coincidence } void SketcherPrs_Coincident::SetColor(const Quantity_NameOfColor aCol)