X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Rigid.cpp;h=109d3a6871ebfed7df2f125f35850feaff856562;hb=2452f6e679a2c0a4f261dac25e4b6592f0a540c1;hp=73963b7fed11d3dce7c4356effe22da7981756d3;hpb=97c6d9faa9466aadd9c3c43489d5f68c888a7be2;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Rigid.cpp b/src/SketcherPrs/SketcherPrs_Rigid.cpp index 73963b7fe..109d3a687 100644 --- a/src/SketcherPrs/SketcherPrs_Rigid.cpp +++ b/src/SketcherPrs/SketcherPrs_Rigid.cpp @@ -13,6 +13,8 @@ #include #include +#include + #include #include @@ -47,13 +49,24 @@ SketcherPrs_Rigid::SketcherPrs_Rigid(ModelAPI_Feature* theConstraint, bool SketcherPrs_Rigid::updatePoints(double theStep) const { - ObjectPtr aObj = SketcherPrs_Tools::getResult(myConstraint, SketchPlugin_Constraint::ENTITY_A()); - if (SketcherPrs_Tools::getShape(aObj).get() == NULL) - return false; - - SketcherPrs_PositionMgr* aMgr = SketcherPrs_PositionMgr::get(); - gp_Pnt aP1 = aMgr->getPosition(aObj, this, theStep); - myPntArray->SetVertice(1, aP1); + std::shared_ptr aData = myConstraint->data(); + std::shared_ptr anAttr = aData->refattr(SketchPlugin_Constraint::ENTITY_A()); + AttributePtr aRefAttr = anAttr->attr(); + if (anAttr->isObject()) { + ObjectPtr aObj = anAttr->object(); + if (SketcherPrs_Tools::getShape(aObj).get() == NULL) + return false; + + SketcherPrs_PositionMgr* aMgr = SketcherPrs_PositionMgr::get(); + gp_Pnt aP1 = aMgr->getPosition(aObj, this, theStep); + myPntArray->SetVertice(1, aP1); + } else { + std::shared_ptr aPnt = SketcherPrs_Tools::getPoint(myConstraint, SketchPlugin_Constraint::ENTITY_A()); + if (aPnt.get() == NULL) + return false; + std::shared_ptr aPoint = myPlane->to3D(aPnt->x(), aPnt->y() + theStep); + myPntArray->SetVertice(1, aPoint->impl()); + } return true; } @@ -61,7 +74,19 @@ bool SketcherPrs_Rigid::updatePoints(double theStep) const void SketcherPrs_Rigid::drawLines(const Handle(Prs3d_Presentation)& thePrs, Quantity_Color theColor) const { ObjectPtr aObj = SketcherPrs_Tools::getResult(myConstraint, SketchPlugin_Constraint::ENTITY_A()); - std::shared_ptr aShape = SketcherPrs_Tools::getShape(aObj); + FeaturePtr aFeature = std::dynamic_pointer_cast(aObj); + std::shared_ptr aShape; + if (aFeature.get()) { + const std::list& aResults = aFeature->results(); + std::list::const_iterator aIt; + for (aIt = aResults.cbegin(); aIt != aResults.cend(); aIt++) { + aShape = (*aIt)->shape(); + if (aShape->isEdge()) + break; + } + } else { + aShape = SketcherPrs_Tools::getShape(aObj); + } if (aShape.get() == NULL) return;