X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_Rigid.cpp;h=109d3a6871ebfed7df2f125f35850feaff856562;hb=2452f6e679a2c0a4f261dac25e4b6592f0a540c1;hp=84a36d3c017943d0afa10f58739fc211261ecc17;hpb=9bea53a5d0fc5c6aec52f4732ec45a9dcbe7354d;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_Rigid.cpp b/src/SketcherPrs/SketcherPrs_Rigid.cpp index 84a36d3c0..109d3a687 100644 --- a/src/SketcherPrs/SketcherPrs_Rigid.cpp +++ b/src/SketcherPrs/SketcherPrs_Rigid.cpp @@ -13,6 +13,8 @@ #include #include +#include + #include #include @@ -36,7 +38,7 @@ static Handle(Image_AlienPixMap) MyPixMap; -SketcherPrs_Rigid::SketcherPrs_Rigid(SketchPlugin_Constraint* theConstraint, +SketcherPrs_Rigid::SketcherPrs_Rigid(ModelAPI_Feature* theConstraint, const std::shared_ptr& thePlane) : SketcherPrs_SymbolPrs(theConstraint, thePlane) { @@ -47,13 +49,24 @@ SketcherPrs_Rigid::SketcherPrs_Rigid(SketchPlugin_Constraint* 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,30 +74,28 @@ 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; Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup(thePrs); - if (aShape->isEdge()) { - Handle(Graphic3d_AspectLine3d) aLineAspect = new Graphic3d_AspectLine3d(theColor, Aspect_TOL_SOLID, 2); - aGroup->SetPrimitivesAspect(aLineAspect); - std::shared_ptr aCurve = std::shared_ptr(new GeomAPI_Curve(aShape)); - if (aCurve->isLine()) { - addLine(aGroup, SketchPlugin_Constraint::ENTITY_A()); - } else { - GeomAdaptor_Curve aAdaptor(aCurve->impl(), aCurve->startParam(), aCurve->endParam()); - StdPrs_DeflectionCurve::Add(thePrs,aAdaptor,myDrawer); - } - } else { - // This is a point - Handle(Prs3d_PointAspect) aPntAspect = new Prs3d_PointAspect(Aspect_TOM_PLUS, theColor, 1); - myDrawer->SetPointAspect(aPntAspect); - - std::shared_ptr aVertex = std::shared_ptr(new GeomAPI_Vertex(aShape)); - std::shared_ptr aPnt = aVertex->point(); - Handle(Geom_CartesianPoint) aPoint = new Geom_CartesianPoint(aPnt->impl()); - StdPrs_Point::Add(thePrs, aPoint, myDrawer); - } + Handle(Graphic3d_AspectLine3d) aLineAspect = new Graphic3d_AspectLine3d(theColor, Aspect_TOL_SOLID, 2); + aGroup->SetPrimitivesAspect(aLineAspect); + + Handle(Prs3d_PointAspect) aPntAspect = new Prs3d_PointAspect(Aspect_TOM_PLUS, theColor, 1); + myDrawer->SetPointAspect(aPntAspect); + drawShape(aShape, thePrs); }