X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Mirror.cpp;h=30bbc6ec33ceba0d29740ace179e984cf1bf37bf;hb=4a28151d74257f3a0d07af1b2270b76105e27e62;hp=2c680a64aaf7aae5a882f65c920772e048a3b382;hpb=303a8f8c0a451e65f1ad390f8b73d3408bf28425;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Mirror.cpp b/src/SketcherPrs/SketcherPrs_Mirror.cpp index 2c680a64a..30bbc6ec3 100644 --- a/src/SketcherPrs/SketcherPrs_Mirror.cpp +++ b/src/SketcherPrs/SketcherPrs_Mirror.cpp @@ -12,6 +12,7 @@ #include #include +#include @@ -26,37 +27,70 @@ SketcherPrs_Mirror::SketcherPrs_Mirror(ModelAPI_Feature* theConstraint, { } - -bool SketcherPrs_Mirror::updatePoints(double theStep) const +bool SketcherPrs_Mirror::IsReadyToDisplay(ModelAPI_Feature* theConstraint, + const std::shared_ptr&/* thePlane*/) { - ObjectPtr aAxisObj = SketcherPrs_Tools::getResult(myConstraint, SketchPlugin_Constraint::ENTITY_A()); + bool aReadyToDisplay = false; + + // Get axis of mirror + ObjectPtr aAxisObj = SketcherPrs_Tools::getResult(theConstraint, SketchPlugin_Constraint::ENTITY_A()); if (SketcherPrs_Tools::getShape(aAxisObj).get() == NULL) - return false; + return aReadyToDisplay; - std::shared_ptr aData = myConstraint->data(); + std::shared_ptr aData = theConstraint->data(); + // Get source objects std::shared_ptr anAttrB = aData->reflist(SketchPlugin_Constraint::ENTITY_B()); if (anAttrB.get() == NULL) - return false; + return aReadyToDisplay; + // Get mirrored objects std::shared_ptr anAttrC = aData->reflist(SketchPlugin_Constraint::ENTITY_C()); if (anAttrC.get() == NULL) - return false; + return aReadyToDisplay; SketcherPrs_PositionMgr* aMgr = SketcherPrs_PositionMgr::get(); int aNb = anAttrB->size(); + // If size of source objects and mirrored ones is not equal then the constraint is not computed if (aNb != anAttrC->size()) + return aReadyToDisplay; + + aReadyToDisplay = true; + return aReadyToDisplay; +} + +bool SketcherPrs_Mirror::updateIfReadyToDisplay(double theStep) const +{ + if (!IsReadyToDisplay(myConstraint, myPlane)) return false; + // Get axis of mirror + ObjectPtr aAxisObj = SketcherPrs_Tools::getResult(myConstraint, SketchPlugin_Constraint::ENTITY_A()); + + std::shared_ptr aData = myConstraint->data(); + // Get source objects + std::shared_ptr anAttrB = aData->reflist(SketchPlugin_Constraint::ENTITY_B()); + // Get mirrored objects + std::shared_ptr anAttrC = aData->reflist(SketchPlugin_Constraint::ENTITY_C()); + + SketcherPrs_PositionMgr* aMgr = SketcherPrs_PositionMgr::get(); + int aNb = anAttrB->size(); + myPntArray = new Graphic3d_ArrayOfPoints(2 * aNb); int i; ObjectPtr aObj; gp_Pnt aP1; + // get position for each source object for (i = 0; i < aNb; i++) { aObj = anAttrB->object(i); + if (SketcherPrs_Tools::getShape(aObj).get() == NULL) + continue; aP1 = aMgr->getPosition(aObj, this, theStep); myPntArray->SetVertice(i + 1, aP1); } + // Get position of each mirrored object for (i = 0; i < aNb; i++) { aObj = anAttrC->object(i); + if (SketcherPrs_Tools::getShape(aObj).get() == NULL) + continue; aP1 = aMgr->getPosition(aObj, this, theStep); myPntArray->SetVertice(aNb + i + 1, aP1); } @@ -80,8 +114,9 @@ void SketcherPrs_Mirror::drawLines(const Handle(Prs3d_Presentation)& thePrs, Qua Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup(thePrs); - Handle(Graphic3d_AspectLine3d) aLineAspect = new Graphic3d_AspectLine3d(theColor, Aspect_TOL_SOLID, 2); - aGroup->SetPrimitivesAspect(aLineAspect); + // drawListOfShapes uses myDrawer for attributes definition + Handle(Prs3d_LineAspect) aLnAspect = new Prs3d_LineAspect(theColor, Aspect_TOL_SOLID, 1); + myDrawer->SetLineAspect(aLnAspect); // Draw axis line addLine(aGroup, SketchPlugin_Constraint::ENTITY_A());