X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSketcherPrs%2FSketcherPrs_Coincident.cpp;h=26a5e682c9c4f200a339410ed107b9e9b1974bc8;hb=9968ec652480079d0ca91b2040f6327a164807cf;hp=5c011bf5c9bd3b1b9d20e3baf5015e9188198796;hpb=cd6bf982e7dc443e050e4d93b4954951daebcf15;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Coincident.cpp b/src/SketcherPrs/SketcherPrs_Coincident.cpp index 5c011bf5c..26a5e682c 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,8 +18,6 @@ #include #include -#include - #include #include @@ -34,23 +34,34 @@ 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), + myPoint(gp_Pnt(0.0, 0.0, 0.0)), myIsConflicting(false) { - -} +} bool SketcherPrs_Coincident::IsReadyToDisplay(ModelAPI_Feature* theConstraint, - const std::shared_ptr&/* thePlane*/) + const std::shared_ptr& thePlane) { - bool aReadyToDisplay = false; + 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) { + std::shared_ptr aPoint = thePlane->to3D(aPnt->x(), aPnt->y()); + thePoint = aPoint->impl(); + } return aReadyToDisplay; } @@ -59,40 +70,34 @@ void SketcherPrs_Coincident::Compute(const Handle(PrsMgr_PresentationManager3d)& const Handle(Prs3d_Presentation)& thePresentation, const Standard_Integer theMode) { - if (!IsReadyToDisplay(myConstraint, myPlane)) { - Events_Error::throwException("An empty AIS presentation: SketcherPrs_Coincident"); - return; - } + gp_Pnt aPoint; + bool aReadyToDisplay = readyToDisplay(myConstraint, mySketcherPlane, aPoint); + if (aReadyToDisplay) + myPoint = aPoint; // 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()); - std::shared_ptr aPoint = myPlane->to3D(aPnt->x(), aPnt->y()); - myPoint = aPoint->impl(); - static Handle(Graphic3d_AspectMarker3d) aPtA; if (aPtA.IsNull()) { aPtA = new Graphic3d_AspectMarker3d (); } // Create the presentation as a combination of standard point markers + bool aValid = !myIsConflicting; // The external yellow contour aPtA->SetType(Aspect_TOM_RING3); aPtA->SetScale(2.); - aPtA->SetColor(Quantity_NOC_YELLOW); + aPtA->SetColor(aValid ? Quantity_NOC_YELLOW : myConflictingColor); 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); + aPtA->SetColor(aValid ? Quantity_NOC_BLACK : myConflictingColor); aGroup->SetPrimitivesAspect(aPtA); aGroup->AddPrimitiveArray (aPntArray); @@ -101,6 +106,10 @@ void SketcherPrs_Coincident::Compute(const Handle(PrsMgr_PresentationManager3d)& aPtA->SetScale(5.); aGroup->SetPrimitivesAspect(aPtA); aGroup->AddPrimitiveArray (aPntArray); + + if (!aReadyToDisplay) + SketcherPrs_Tools::sendEmptyPresentationError(myConstraint, + "An empty AIS presentation: SketcherPrs_Coincident"); } @@ -120,3 +129,11 @@ void SketcherPrs_Coincident::SetColor(const Quantity_Color &aCol) hasOwnColor=Standard_True; myOwnColor=aCol; } + +void SketcherPrs_Coincident::SetConflictingConstraint(const bool& theConflicting, + const std::vector& theColor) +{ + myIsConflicting = theConflicting; + myConflictingColor = Quantity_Color(theColor[0] / 255., theColor[1] / 255., theColor[2] / 255., + Quantity_TOC_RGB); +}