X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Mirror.cpp;h=9719dc8cd066175fdc641e7fa98217cfe5f865f7;hb=a5746a7f8fd8bcd555fb16f98e312c86ca1210da;hp=dca445bfdac2d94c64b359a0ee203cbef55dbf6b;hpb=79b1a844d2efcc1b4c7acf43c27c97aa3accd8da;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Mirror.cpp b/src/SketcherPrs/SketcherPrs_Mirror.cpp index dca445bfd..9719dc8cd 100644 --- a/src/SketcherPrs/SketcherPrs_Mirror.cpp +++ b/src/SketcherPrs/SketcherPrs_Mirror.cpp @@ -12,6 +12,7 @@ #include #include +#include @@ -29,20 +30,24 @@ SketcherPrs_Mirror::SketcherPrs_Mirror(ModelAPI_Feature* theConstraint, bool SketcherPrs_Mirror::updatePoints(double theStep) const { + // Get axis of mirror ObjectPtr aAxisObj = SketcherPrs_Tools::getResult(myConstraint, SketchPlugin_Constraint::ENTITY_A()); if (SketcherPrs_Tools::getShape(aAxisObj).get() == NULL) return false; std::shared_ptr aData = myConstraint->data(); + // Get source objects std::shared_ptr anAttrB = aData->reflist(SketchPlugin_Constraint::ENTITY_B()); if (anAttrB.get() == NULL) return false; + // Get mirrored objects std::shared_ptr anAttrC = aData->reflist(SketchPlugin_Constraint::ENTITY_C()); if (anAttrC.get() == NULL) return false; 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 false; @@ -50,25 +55,15 @@ bool SketcherPrs_Mirror::updatePoints(double theStep) const int i; ObjectPtr aObj; gp_Pnt aP1; + // get position for each source object for (i = 0; i < aNb; i++) { aObj = anAttrB->object(i); - if (!aObj.get()) // TODO:empty_result - // this check should be removed here after the result flush is corrected - // the problem is, that feature::execute() flushes redisplay by each result creation - // but it is possible(e.g. in the sketch circle, that there should be more than one result. - // Here, crash happens, because the second result is not created yet - 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 (!aObj.get()) // TODO:empty_result - // this check should be removed here after the result flush is corrected - // the problem is, that feature::execute() flushes redisplay by each result creation - // but it is possible(e.g. in the sketch circle, that there should be more than one result. - // Here, crash happens, because the second result is not created yet - continue; aP1 = aMgr->getPosition(aObj, this, theStep); myPntArray->SetVertice(aNb + i + 1, aP1); } @@ -92,8 +87,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());