X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Mirror.cpp;h=30bbc6ec33ceba0d29740ace179e984cf1bf37bf;hb=c695a96b97d29fef995466f2ff5bbd4eb7f87364;hp=2c05d225f25b00bf593763291f38d9ab833a6f55;hpb=80d9dcc9384a77fb31ecf668598129083dca6675;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Mirror.cpp b/src/SketcherPrs/SketcherPrs_Mirror.cpp index 2c05d225f..30bbc6ec3 100644 --- a/src/SketcherPrs/SketcherPrs_Mirror.cpp +++ b/src/SketcherPrs/SketcherPrs_Mirror.cpp @@ -10,10 +10,9 @@ #include -#include - #include #include +#include @@ -28,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); } @@ -76,34 +108,23 @@ void SketcherPrs_Mirror::drawLines(const Handle(Prs3d_Presentation)& thePrs, Qua if (anAttrC.get() == NULL) return; - SketcherPrs_PositionMgr* aMgr = SketcherPrs_PositionMgr::get(); int aNb = anAttrB->size(); if (aNb != anAttrC->size()) return; 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()); // Draw source objects - int i; - ObjectPtr aObj; - for (i = 0; i < aNb; i++) { - aObj = anAttrB->object(i); - std::shared_ptr aShape = SketcherPrs_Tools::getShape(aObj); - if (aShape.get() != NULL) - drawShape(aShape, thePrs); - } + drawListOfShapes(anAttrB, thePrs); + // draw mirrored objects - for (i = 0; i < aNb; i++) { - aObj = anAttrC->object(i); - std::shared_ptr aShape = SketcherPrs_Tools::getShape(aObj); - if (aShape.get() != NULL) - drawShape(aShape, thePrs); - } + drawListOfShapes(anAttrC, thePrs); }