X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchAPI%2FSketchAPI_Sketch.cpp;h=11c22f0ae8764b55ca27984a83c510e72e76e24d;hb=b707e7178424958f7dc1ed87a0aabd813f671d88;hp=ef4962054ad22dece73aa6d672fdd60b7cf2f862;hpb=086aa81da7d411db27b5f8a51ecba2dd0804b847;p=modules%2Fshaper.git diff --git a/src/SketchAPI/SketchAPI_Sketch.cpp b/src/SketchAPI/SketchAPI_Sketch.cpp index ef4962054..11c22f0ae 100644 --- a/src/SketchAPI/SketchAPI_Sketch.cpp +++ b/src/SketchAPI/SketchAPI_Sketch.cpp @@ -1,5 +1,6 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D // Name : SketchAPI_Sketch.cpp -// Purpose: +// Purpose: // // History: // 07/06/16 - Sergey POKHODENKO - Creation of the file @@ -13,7 +14,7 @@ #include #include #include -#include +#include #include #include #include @@ -22,12 +23,15 @@ #include #include #include +#include +#include #include #include #include //-------------------------------------------------------------------------------------- #include #include +#include #include #include #include @@ -72,6 +76,16 @@ SketchAPI_Sketch::SketchAPI_Sketch( } } +SketchAPI_Sketch::SketchAPI_Sketch( + const std::shared_ptr & theFeature, + std::shared_ptr thePlaneObject) +: ModelHighAPI_Interface(theFeature) +{ + if (initialize()) { + setExternal(thePlaneObject); + } +} + SketchAPI_Sketch::~SketchAPI_Sketch() { @@ -100,13 +114,19 @@ void SketchAPI_Sketch::setExternal(const ModelHighAPI_Selection & theExternal) execute(); } +void SketchAPI_Sketch::setExternal(std::shared_ptr thePlaneObject) +{ + ResultPtr aRes = std::dynamic_pointer_cast(thePlaneObject); + ModelHighAPI_Selection aSel(aRes); + setExternal(aSel); +} + //-------------------------------------------------------------------------------------- void SketchAPI_Sketch::setValue( - const std::shared_ptr & theConstraint, + const std::shared_ptr & theConstraint, const ModelHighAPI_Double & theValue) { - // TODO(spo): check somehow that the feature is a constraint or eliminate crash if the feature have no real attribute VALUE - fillAttribute(theValue, theConstraint->real(SketchPlugin_Constraint::VALUE())); + fillAttribute(theValue, theConstraint->feature()->real(SketchPlugin_Constraint::VALUE())); // theConstraint->execute(); } @@ -136,7 +156,6 @@ std::list SketchAPI_Sketch::selectFace() const SketchPtr addSketch(const std::shared_ptr & thePart, const std::shared_ptr & thePlane) { - // TODO(spo): check that thePart is not empty std::shared_ptr aFeature = thePart->addFeature(SketchAPI_Sketch::ID()); return SketchPtr(new SketchAPI_Sketch(aFeature, thePlane)); } @@ -144,7 +163,6 @@ SketchPtr addSketch(const std::shared_ptr & thePart, SketchPtr addSketch(const std::shared_ptr & thePart, const ModelHighAPI_Selection & theExternal) { - // TODO(spo): check that thePart is not empty std::shared_ptr aFeature = thePart->addFeature(SketchAPI_Sketch::ID()); return SketchPtr(new SketchAPI_Sketch(aFeature, theExternal)); } @@ -152,32 +170,45 @@ SketchPtr addSketch(const std::shared_ptr & thePart, SketchPtr addSketch(const std::shared_ptr & thePart, const std::string & theExternalName) { - // TODO(spo): check that thePart is not empty std::shared_ptr aFeature = thePart->addFeature(SketchAPI_Sketch::ID()); - return SketchPtr(new SketchAPI_Sketch(aFeature, ModelHighAPI_Selection("FACE", theExternalName))); + return SketchPtr( + new SketchAPI_Sketch(aFeature, ModelHighAPI_Selection("FACE", theExternalName))); } +SketchPtr addSketch(const std::shared_ptr & thePart, + std::shared_ptr thePlaneObject) +{ + std::shared_ptr aFeature = thePart->addFeature(SketchAPI_Sketch::ID()); + return SketchPtr(new SketchAPI_Sketch(aFeature, thePlaneObject)); +} + + //-------------------------------------------------------------------------------------- std::shared_ptr SketchAPI_Sketch::addPoint( double theX, double theY) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Point::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Point::ID()); return PointPtr(new SketchAPI_Point(aFeature, theX, theY)); } std::shared_ptr SketchAPI_Sketch::addPoint( const std::shared_ptr & thePoint) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Point::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Point::ID()); return PointPtr(new SketchAPI_Point(aFeature, thePoint)); } -std::shared_ptr SketchAPI_Sketch::addPoint(const ModelHighAPI_Selection & theExternal) +std::shared_ptr + SketchAPI_Sketch::addPoint(const ModelHighAPI_Selection & theExternal) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Point::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Point::ID()); return PointPtr(new SketchAPI_Point(aFeature, theExternal)); } std::shared_ptr SketchAPI_Sketch::addPoint(const std::string & theExternalName) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Point::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Point::ID()); return PointPtr(new SketchAPI_Point(aFeature, theExternalName)); } @@ -185,55 +216,62 @@ std::shared_ptr SketchAPI_Sketch::addPoint(const std::string & std::shared_ptr SketchAPI_Sketch::addIntersectionPoint( const ModelHighAPI_Selection & theExternal) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_IntersectionPoint::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_IntersectionPoint::ID()); return IntersectionPointPtr(new SketchAPI_IntersectionPoint(aFeature, theExternal)); } std::shared_ptr SketchAPI_Sketch::addIntersectionPoint( const std::string & theExternalName) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_IntersectionPoint::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_IntersectionPoint::ID()); return IntersectionPointPtr(new SketchAPI_IntersectionPoint(aFeature, theExternalName)); } //-------------------------------------------------------------------------------------- -std::shared_ptr SketchAPI_Sketch::addLine(double theX1, double theY1, double theX2, double theY2) +std::shared_ptr SketchAPI_Sketch::addLine(double theX1, double theY1, + double theX2, double theY2) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Line::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Line::ID()); return LinePtr(new SketchAPI_Line(aFeature, theX1, theY1, theX2, theY2)); } std::shared_ptr SketchAPI_Sketch::addLine( const std::shared_ptr & theStartPoint, const std::shared_ptr & theEndPoint) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Line::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Line::ID()); return LinePtr(new SketchAPI_Line(aFeature, theStartPoint, theEndPoint)); } -std::shared_ptr SketchAPI_Sketch::addLine(const ModelHighAPI_Selection & theExternal) +std::shared_ptr + SketchAPI_Sketch::addLine(const ModelHighAPI_Selection & theExternal) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Line::ID()); - LinePtr aLine(new SketchAPI_Line(aFeature, theExternal)); - setFixed(InterfacePtr(aLine)); - return aLine; + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Line::ID()); + return LinePtr(new SketchAPI_Line(aFeature, theExternal)); } std::shared_ptr SketchAPI_Sketch::addLine(const std::string & theExternalName) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Line::ID()); - LinePtr aLine(new SketchAPI_Line(aFeature, theExternalName)); - setFixed(InterfacePtr(aLine)); - return aLine; + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Line::ID()); + return LinePtr(new SketchAPI_Line(aFeature, theExternalName)); } //-------------------------------------------------------------------------------------- -std::shared_ptr SketchAPI_Sketch::addRectangle(double theX1, double theY1, double theX2, double theY2) +std::shared_ptr SketchAPI_Sketch::addRectangle(double theX1, double theY1, + double theX2, double theY2) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); return RectanglePtr(new SketchAPI_Rectangle(aFeature, theX1, theY1, theX2, theY2)); } std::shared_ptr SketchAPI_Sketch::addRectangle( const std::shared_ptr & theStartPoint, const std::shared_ptr & theEndPoint) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); return RectanglePtr(new SketchAPI_Rectangle(aFeature, theStartPoint, theEndPoint)); } @@ -242,14 +280,17 @@ std::shared_ptr SketchAPI_Sketch::addCircle(double theCenterX, double theCenterY, double theRadius) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); return CirclePtr(new SketchAPI_Circle(aFeature, theCenterX, theCenterY, theRadius)); } -std::shared_ptr SketchAPI_Sketch::addCircle(const std::shared_ptr& theCenter, - double theRadius) +std::shared_ptr SketchAPI_Sketch::addCircle( + const std::shared_ptr& theCenter, + double theRadius) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); return CirclePtr(new SketchAPI_Circle(aFeature, theCenter, theRadius)); } @@ -257,28 +298,34 @@ std::shared_ptr SketchAPI_Sketch::addCircle(double theX1, doub double theX2, double theY2, double theX3, double theY3) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); return CirclePtr(new SketchAPI_Circle(aFeature, theX1, theY1, theX2, theY2, theX3, theY3)); } -std::shared_ptr SketchAPI_Sketch::addCircle(const std::shared_ptr& thePoint1, - const std::shared_ptr& thePoint2, - const std::shared_ptr& thePoint3) +std::shared_ptr SketchAPI_Sketch::addCircle( + const std::shared_ptr& thePoint1, + const std::shared_ptr& thePoint2, + const std::shared_ptr& thePoint3) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); return CirclePtr(new SketchAPI_Circle(aFeature, thePoint1, thePoint2, thePoint3)); } -std::shared_ptr SketchAPI_Sketch::addCircle(const ModelHighAPI_Selection & theExternal) +std::shared_ptr + SketchAPI_Sketch::addCircle(const ModelHighAPI_Selection & theExternal) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); return CirclePtr(new SketchAPI_Circle(aFeature, theExternal)); } std::shared_ptr SketchAPI_Sketch::addCircle(const std::string & theExternalName) { // TODO(spo): Add constraint SketchConstraintRigid like in PythonAPI. Is it necessary? - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); return CirclePtr(new SketchAPI_Circle(aFeature, theExternalName)); } @@ -288,7 +335,8 @@ std::shared_ptr SketchAPI_Sketch::addArc(double theCenterX, doubl double theEndX, double theEndY, bool theInversed) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Arc::ID()); return ArcPtr(new SketchAPI_Arc(aFeature, theCenterX, theCenterY, theStartX, theStartY, @@ -296,12 +344,14 @@ std::shared_ptr SketchAPI_Sketch::addArc(double theCenterX, doubl theInversed)); } -std::shared_ptr SketchAPI_Sketch::addArc(const std::shared_ptr& theCenter, - const std::shared_ptr& theStart, - const std::shared_ptr& theEnd, - bool theInversed) +std::shared_ptr SketchAPI_Sketch::addArc( + const std::shared_ptr& theCenter, + const std::shared_ptr& theStart, + const std::shared_ptr& theEnd, + bool theInversed) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Arc::ID()); return ArcPtr(new SketchAPI_Arc(aFeature, theCenter, theStart, theEnd, theInversed)); } @@ -309,47 +359,56 @@ std::shared_ptr SketchAPI_Sketch::addArc(double theStartX, double double theEndX, double theEndY, double thePassedX, double thePassedY) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Arc::ID()); return ArcPtr(new SketchAPI_Arc(aFeature, theStartX, theStartY, theEndX, theEndY, thePassedX, thePassedY)); } -std::shared_ptr SketchAPI_Sketch::addArc(const std::shared_ptr& theStart, - const std::shared_ptr& theEnd, - const std::shared_ptr& thePassed) +std::shared_ptr SketchAPI_Sketch::addArc( + const std::shared_ptr& theStart, + const std::shared_ptr& theEnd, + const std::shared_ptr& thePassed) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Arc::ID()); return ArcPtr(new SketchAPI_Arc(aFeature, theStart, theEnd, thePassed)); } -std::shared_ptr SketchAPI_Sketch::addArc(const ModelHighAPI_RefAttr& theTangentPoint, - double theEndX, double theEndY, - bool theInversed) +std::shared_ptr SketchAPI_Sketch::addArc( + const ModelHighAPI_RefAttr& theTangentPoint, + double theEndX, double theEndY, + bool theInversed) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Arc::ID()); return ArcPtr(new SketchAPI_Arc(aFeature, theTangentPoint, theEndX, theEndY, theInversed)); } -std::shared_ptr SketchAPI_Sketch::addArc(const ModelHighAPI_RefAttr& theTangentPoint, - const std::shared_ptr& theEnd, - bool theInversed) +std::shared_ptr SketchAPI_Sketch::addArc( + const ModelHighAPI_RefAttr& theTangentPoint, + const std::shared_ptr& theEnd, + bool theInversed) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Arc::ID()); return ArcPtr(new SketchAPI_Arc(aFeature, theTangentPoint, theEnd, theInversed)); } std::shared_ptr SketchAPI_Sketch::addArc(const ModelHighAPI_Selection & theExternal) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Arc::ID()); return ArcPtr(new SketchAPI_Arc(aFeature, theExternal)); } std::shared_ptr SketchAPI_Sketch::addArc(const std::string & theExternalName) { // TODO(spo): Add constraint SketchConstraintRigid like in PythonAPI. Is it necessary? - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Arc::ID()); return ArcPtr(new SketchAPI_Arc(aFeature, theExternalName)); } @@ -357,14 +416,16 @@ std::shared_ptr SketchAPI_Sketch::addArc(const std::string & theE std::shared_ptr SketchAPI_Sketch::addProjection( const ModelHighAPI_Selection & theExternalFeature) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Projection::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Projection::ID()); return ProjectionPtr(new SketchAPI_Projection(aFeature, theExternalFeature)); } std::shared_ptr SketchAPI_Sketch::addProjection( const std::string & theExternalName) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Projection::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Projection::ID()); return ProjectionPtr(new SketchAPI_Projection(aFeature, theExternalName)); } @@ -373,7 +434,8 @@ std::shared_ptr SketchAPI_Sketch::addMirror( const ModelHighAPI_RefAttr & theMirrorLine, const std::list > & theObjects) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_ConstraintMirror::ID()); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_ConstraintMirror::ID()); return MirrorPtr(new SketchAPI_Mirror(aFeature, theMirrorLine, theObjects)); } @@ -385,8 +447,10 @@ std::shared_ptr SketchAPI_Sketch::addTranslation( const ModelHighAPI_Integer & theNumberOfObjects, bool theFullValue) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_MultiTranslation::ID()); - return TranslationPtr(new SketchAPI_Translation(aFeature, theObjects, thePoint1, thePoint2, theNumberOfObjects, theFullValue)); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_MultiTranslation::ID()); + return TranslationPtr(new SketchAPI_Translation(aFeature, theObjects, thePoint1, + thePoint2, theNumberOfObjects, theFullValue)); } //-------------------------------------------------------------------------------------- @@ -397,12 +461,48 @@ std::shared_ptr SketchAPI_Sketch::addRotation( const ModelHighAPI_Integer & theNumberOfObjects, bool theFullValue) { - std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_MultiRotation::ID()); - return RotationPtr(new SketchAPI_Rotation(aFeature, theObjects, theCenter, theAngle, theNumberOfObjects, theFullValue)); + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_MultiRotation::ID()); + return RotationPtr( + new SketchAPI_Rotation(aFeature, theObjects, theCenter, + theAngle, theNumberOfObjects, theFullValue)); +} + +//-------------------------------------------------------------------------------------- +std::shared_ptr SketchAPI_Sketch::addSplit( + const ModelHighAPI_Reference& theFeature, + const ModelHighAPI_RefAttr& thePoint1, + const ModelHighAPI_RefAttr& thePoint2) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_ConstraintSplit::ID()); + fillAttribute(theFeature, aFeature->reference(SketchPlugin_Constraint::VALUE())); + fillAttribute(thePoint1, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); + fillAttribute(thePoint2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); + //aFeature->execute(); + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); +} + +//-------------------------------------------------------------------------------------- +std::shared_ptr SketchAPI_Sketch::addTrim( + const ModelHighAPI_Reference& theFeature, + const std::shared_ptr& thePositionPoint) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Trim::ID()); + fillAttribute(theFeature, aFeature->reference(SketchPlugin_Trim::SELECTED_OBJECT())); + + AttributePtr anAttribute = aFeature->attribute(SketchPlugin_Trim::SELECTED_POINT()); + if (anAttribute->attributeType() == GeomDataAPI_Point2D::typeId()) { + AttributePoint2DPtr aPointAttr = std::dynamic_pointer_cast(anAttribute); + fillAttribute(thePositionPoint, aPointAttr); + } + + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } //-------------------------------------------------------------------------------------- -std::shared_ptr SketchAPI_Sketch::setAngle( +std::shared_ptr SketchAPI_Sketch::setAngle( const ModelHighAPI_RefAttr & theLine1, const ModelHighAPI_RefAttr & theLine2, const ModelHighAPI_Double & theValue) @@ -411,14 +511,15 @@ std::shared_ptr SketchAPI_Sketch::setAngle( compositeFeature()->addFeature(SketchPlugin_ConstraintAngle::ID()); fillAttribute(SketcherPrs_Tools::ANGLE_DIRECT, aFeature->integer(SketchPlugin_ConstraintAngle::TYPE_ID())); + // fill the value before llines to avoid calculation of angle value by the Angle feature + fillAttribute(theValue, aFeature->real(SketchPlugin_ConstraintAngle::ANGLE_VALUE_ID())); fillAttribute(theLine1, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theLine2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); - fillAttribute(theValue, aFeature->real(SketchPlugin_Constraint::VALUE())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setAngleComplementary( +std::shared_ptr SketchAPI_Sketch::setAngleComplementary( const ModelHighAPI_RefAttr & theLine1, const ModelHighAPI_RefAttr & theLine2, const ModelHighAPI_Double & theValue) @@ -432,10 +533,10 @@ std::shared_ptr SketchAPI_Sketch::setAngleComplementary( fillAttribute(theLine2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); // fillAttribute(theValue, aFeature->real(SketchPlugin_Constraint::VALUE())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setAngleBackward( +std::shared_ptr SketchAPI_Sketch::setAngleBackward( const ModelHighAPI_RefAttr & theLine1, const ModelHighAPI_RefAttr & theLine2, const ModelHighAPI_Double & theValue) @@ -449,10 +550,10 @@ std::shared_ptr SketchAPI_Sketch::setAngleBackward( fillAttribute(theLine2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); // fillAttribute(theValue, aFeature->real(SketchPlugin_Constraint::VALUE())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setCoincident( +std::shared_ptr SketchAPI_Sketch::setCoincident( const ModelHighAPI_RefAttr & thePoint1, const ModelHighAPI_RefAttr & thePoint2) { @@ -461,10 +562,10 @@ std::shared_ptr SketchAPI_Sketch::setCoincident( fillAttribute(thePoint1, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(thePoint2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setCollinear( +std::shared_ptr SketchAPI_Sketch::setCollinear( const ModelHighAPI_RefAttr & theLine1, const ModelHighAPI_RefAttr & theLine2) { @@ -473,10 +574,10 @@ std::shared_ptr SketchAPI_Sketch::setCollinear( fillAttribute(theLine1, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theLine2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setDistance( +std::shared_ptr SketchAPI_Sketch::setDistance( const ModelHighAPI_RefAttr & thePoint, const ModelHighAPI_RefAttr & thePointOrLine, const ModelHighAPI_Double & theValue) @@ -487,10 +588,10 @@ std::shared_ptr SketchAPI_Sketch::setDistance( fillAttribute(thePointOrLine, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); fillAttribute(theValue, aFeature->real(SketchPlugin_Constraint::VALUE())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setEqual( +std::shared_ptr SketchAPI_Sketch::setEqual( const ModelHighAPI_RefAttr & theObject1, const ModelHighAPI_RefAttr & theObject2) { @@ -499,42 +600,58 @@ std::shared_ptr SketchAPI_Sketch::setEqual( fillAttribute(theObject1, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theObject2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setFillet( - const std::list & thePoints, - const ModelHighAPI_Double & theRadius) +std::shared_ptr SketchAPI_Sketch::setFillet( + const ModelHighAPI_RefAttr & thePoint) { std::shared_ptr aFeature = - compositeFeature()->addFeature(SketchPlugin_ConstraintFillet::ID()); - fillAttribute(thePoints, aFeature->data()->refattrlist(SketchPlugin_Constraint::ENTITY_A())); - fillAttribute(theRadius, aFeature->real(SketchPlugin_Constraint::VALUE())); - aFeature->execute(); - return aFeature; + compositeFeature()->addFeature(SketchPlugin_Fillet::ID()); + fillAttribute(thePoint, aFeature->data()->refattr(SketchPlugin_Fillet::FILLET_POINT_ID())); + apply(); // finish operation to remove Fillet feature correcly + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); +} + +std::shared_ptr SketchAPI_Sketch::setFilletWithRadius( + const ModelHighAPI_RefAttr & thePoint, + const ModelHighAPI_Double & theRadius) +{ + CompositeFeaturePtr aSketch = compositeFeature(); + int aNbSubs = aSketch->numberOfSubs(); + + // create fillet + InterfacePtr aFilletFeature = setFillet(thePoint); + + // set radius for just created arc + FeaturePtr anArc = aSketch->subFeature(aNbSubs - 1); + if (anArc->getKind() == SketchPlugin_Arc::ID()) + setRadius(ModelHighAPI_RefAttr(ObjectPtr(anArc->lastResult())), ModelHighAPI_Double(theRadius)); + + return aFilletFeature; } -std::shared_ptr SketchAPI_Sketch::setFixed( +std::shared_ptr SketchAPI_Sketch::setFixed( const ModelHighAPI_RefAttr & theObject) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_ConstraintRigid::ID()); fillAttribute(theObject, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setHorizontal( +std::shared_ptr SketchAPI_Sketch::setHorizontal( const ModelHighAPI_RefAttr & theLine) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_ConstraintHorizontal::ID()); fillAttribute(theLine, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setLength( +std::shared_ptr SketchAPI_Sketch::setLength( const ModelHighAPI_RefAttr & theLine, const ModelHighAPI_Double & theValue) { @@ -543,10 +660,10 @@ std::shared_ptr SketchAPI_Sketch::setLength( fillAttribute(theLine, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theValue, aFeature->real(SketchPlugin_Constraint::VALUE())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setMiddlePoint( +std::shared_ptr SketchAPI_Sketch::setMiddlePoint( const ModelHighAPI_RefAttr & thePoint, const ModelHighAPI_RefAttr & theLine) { @@ -555,10 +672,10 @@ std::shared_ptr SketchAPI_Sketch::setMiddlePoint( fillAttribute(thePoint, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theLine, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setParallel( +std::shared_ptr SketchAPI_Sketch::setParallel( const ModelHighAPI_RefAttr & theLine1, const ModelHighAPI_RefAttr & theLine2) { @@ -567,10 +684,10 @@ std::shared_ptr SketchAPI_Sketch::setParallel( fillAttribute(theLine1, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theLine2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setPerpendicular( +std::shared_ptr SketchAPI_Sketch::setPerpendicular( const ModelHighAPI_RefAttr & theLine1, const ModelHighAPI_RefAttr & theLine2) { @@ -579,10 +696,10 @@ std::shared_ptr SketchAPI_Sketch::setPerpendicular( fillAttribute(theLine1, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theLine2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setRadius( +std::shared_ptr SketchAPI_Sketch::setRadius( const ModelHighAPI_RefAttr & theCircleOrArc, const ModelHighAPI_Double & theValue) { @@ -591,10 +708,10 @@ std::shared_ptr SketchAPI_Sketch::setRadius( fillAttribute(theCircleOrArc, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theValue, aFeature->real(SketchPlugin_Constraint::VALUE())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setTangent( +std::shared_ptr SketchAPI_Sketch::setTangent( const ModelHighAPI_RefAttr & theLine, const ModelHighAPI_RefAttr & theCircle) { @@ -603,17 +720,17 @@ std::shared_ptr SketchAPI_Sketch::setTangent( fillAttribute(theLine, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theCircle, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } -std::shared_ptr SketchAPI_Sketch::setVertical( +std::shared_ptr SketchAPI_Sketch::setVertical( const ModelHighAPI_RefAttr & theLine) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_ConstraintVertical::ID()); fillAttribute(theLine, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); aFeature->execute(); - return aFeature; + return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } //-------------------------------------------------------------------------------------- @@ -625,9 +742,8 @@ void SketchAPI_Sketch::dump(ModelHighAPI_Dumper& theDumper) const AttributeSelectionPtr anExternal = aBase->selection(SketchPlugin_SketchEntity::EXTERNAL_ID()); if (anExternal->value()) { - FeaturePtr aPlnFeature = ModelAPI_Feature::feature(anExternal->context()->data()->owner()); - const std::string& aPlaneName = theDumper.name(aPlnFeature); - theDumper << aBase << " = model.addSketch(" << aDocName << ", \"" << aPlaneName << "\")" << std::endl; + theDumper << aBase << " = model.addSketch(" << aDocName << + ", " << anExternal << ")" << std::endl; } else { // Sketch is base on a plane. std::shared_ptr anOrigin = std::dynamic_pointer_cast( @@ -639,24 +755,43 @@ void SketchAPI_Sketch::dump(ModelHighAPI_Dumper& theDumper) const // Check the plane is coordinate plane std::string aPlaneName = defaultPlane(anOrigin, aNormal, aDirX); - if (aPlaneName.empty()) { - // needs import additional module - theDumper.importModule("GeomAPI"); - // dump plane parameters - const std::string& aSketchName = theDumper.name(aBase); - std::string anOriginName = aSketchName + "_origin"; - std::string aNormalName = aSketchName + "_norm"; - std::string aDirXName = aSketchName + "_dirx"; - theDumper << anOriginName << " = " << anOrigin << std::endl - << aNormalName << " = " << aNormal << std::endl - << aDirXName << " = " << aDirX << std::endl; - // dump sketch based on arbitrary plane - theDumper << aBase << " = model.addSketch(" << aDocName << ", GeomAPI_Ax3(" - << anOriginName << ", " << aDirXName << ", " << aNormalName << "))" << std::endl; + if(anExternal->context()) { // checking for selected planes + if (!aPlaneName.empty() + && anExternal->context()->data() + && anExternal->context()->data()->name() == aPlaneName) { + // dump sketch based on coordinate plane + theDumper << aBase << " = model.addSketch(" << aDocName + << ", model.standardPlane(\"" << aPlaneName << "\"))" << std::endl; + } else { // some other plane + theDumper << aBase << " = model.addSketch(" << aDocName << + ", " << anExternal<< ")" << std::endl; + } } else { - // dump sketch based on coordinate plane - theDumper << aBase << " = model.addSketch(" << aDocName - << ", model.defaultPlane(\"" << aPlaneName << "\"))" << std::endl; + if (aPlaneName.empty()) { + // needs import additional module + theDumper.importModule("GeomAPI"); + // dump plane parameters + const std::string& aSketchName = theDumper.name(aBase); + std::string anOriginName = aSketchName + "_origin"; + std::string aNormalName = aSketchName + "_norm"; + std::string aDirXName = aSketchName + "_dirx"; + // use "\n" instead of std::endl to avoid automatic dumping sketch here + // and then dumplicate dumping it in the next line + theDumper << anOriginName << " = " << anOrigin << "\n" + << aNormalName << " = " << aNormal << "\n" + << aDirXName << " = " << aDirX << "\n"; + // dump sketch based on arbitrary plane + theDumper << aBase << " = model.addSketch(" << aDocName << ", GeomAPI_Ax3(" + << anOriginName << ", " << aDirXName << ", " << aNormalName << "))" << std::endl; + } else { + // dump sketch based on coordinate plane + theDumper << aBase << " = model.addSketch(" << aDocName + << ", model.defaultPlane(\"" << aPlaneName << "\"))" << std::endl; + } } } + + // dump sketch's subfeatures + CompositeFeaturePtr aCompFeat = std::dynamic_pointer_cast(aBase); + theDumper.processSubs(aCompFeat, true); }