From: vsv Date: Tue, 12 May 2015 14:50:19 +0000 (+0300) Subject: Make rigid constraint on vertexes of lines X-Git-Tag: V_1.2.0~158 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=d1d44e75f69e0ac81c5981e05218e90515c07c46;p=modules%2Fshaper.git Make rigid constraint on vertexes of lines --- 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;