X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Mirror.cpp;h=30bbc6ec33ceba0d29740ace179e984cf1bf37bf;hb=c695a96b97d29fef995466f2ff5bbd4eb7f87364;hp=9719dc8cd066175fdc641e7fa98217cfe5f865f7;hpb=1b93f1881c5fec599aa79707f93c84dd9c287bc0;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Mirror.cpp b/src/SketcherPrs/SketcherPrs_Mirror.cpp index 9719dc8cd..30bbc6ec3 100644 --- a/src/SketcherPrs/SketcherPrs_Mirror.cpp +++ b/src/SketcherPrs/SketcherPrs_Mirror.cpp @@ -27,30 +27,53 @@ 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*/) { + bool aReadyToDisplay = false; + // Get axis of mirror - ObjectPtr aAxisObj = SketcherPrs_Tools::getResult(myConstraint, SketchPlugin_Constraint::ENTITY_A()); + 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; @@ -58,12 +81,16 @@ bool SketcherPrs_Mirror::updatePoints(double theStep) const // 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); }