X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchAPI%2FSketchAPI_Sketch.cpp;h=823897f5a6e2213e98c2a0e07d3fa8fd79e7f0ec;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=a3efd9ef50d2eb0d584f7a7ca66446fb896a48cd;hpb=29726bcc1b3ff76fe8ce69be9db0191b59975e11;p=modules%2Fshaper.git diff --git a/src/SketchAPI/SketchAPI_Sketch.cpp b/src/SketchAPI/SketchAPI_Sketch.cpp index a3efd9ef5..823897f5a 100644 --- a/src/SketchAPI/SketchAPI_Sketch.cpp +++ b/src/SketchAPI/SketchAPI_Sketch.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -223,7 +223,7 @@ SketchPtr addSketch(const std::shared_ptr & thePart, } SketchPtr addSketch(const std::shared_ptr & thePart, - const std::string & theExternalName) + const std::wstring & theExternalName) { std::shared_ptr aFeature = thePart->addFeature(SketchAPI_Sketch::ID()); return SketchPtr( @@ -349,7 +349,7 @@ std::shared_ptr 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 SketchAPI_Sketch::addPoint(const std::wstring & theExternalName) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Point::ID()); @@ -368,7 +368,7 @@ std::shared_ptr SketchAPI_Sketch::addIntersectionPo return anIntersection; } std::shared_ptr SketchAPI_Sketch::addIntersectionPoint( - const std::string & theExternalName, + const std::wstring & theExternalName, bool theKeepResult) { std::shared_ptr aFeature = @@ -401,7 +401,7 @@ std::shared_ptr 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 SketchAPI_Sketch::addLine(const std::wstring & theExternalName) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Line::ID()); @@ -425,6 +425,49 @@ std::shared_ptr SketchAPI_Sketch::addRectangle( return RectanglePtr(new SketchAPI_Rectangle(aFeature, theStartPoint, theEndPoint)); } +static std::shared_ptr pointCoordinates( + const std::pair, ModelHighAPI_RefAttr> & thePoint) +{ + if (thePoint.first) + return thePoint.first; + + AttributePtr anAttr = thePoint.second.attr(); + if (thePoint.second.object()) { + FeaturePtr aFeature = ModelAPI_Feature::feature(thePoint.second.object()); + if (aFeature) + anAttr = aFeature->attribute(SketchPlugin_Point::COORD_ID()); + } + + std::shared_ptr aPntAttr = + std::dynamic_pointer_cast(anAttr); + if (aPntAttr) + return aPntAttr->pnt(); + return std::shared_ptr(); +} + +std::shared_ptr SketchAPI_Sketch::addRectangleCentered( + const std::pair, ModelHighAPI_RefAttr> & theCenter, + const std::pair, ModelHighAPI_RefAttr> & theCorner) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); + RectanglePtr aRect(new SketchAPI_Rectangle(aFeature)); + fillAttribute("RectangleTypeCentered", aRect->type()); + if (!theCenter.second.isEmpty()) + fillAttribute(theCenter.second, aRect->centerPointRef()); + fillAttribute(pointCoordinates(theCenter), aRect->centerPoint()); + fillAttribute(pointCoordinates(theCorner), aRect->cornerPoint()); + aRect->execute(); + + if (!theCorner.second.isEmpty() && aRect->linesList()->size() > 1) { + // get start point of the last line in rectangle and apply coindidence constraint + FeaturePtr aLine = ModelAPI_Feature::feature(aRect->linesList()->object(3)); + AttributePtr aEndPnt = aLine->attribute(SketchPlugin_Line::START_ID()); + setCoincident(ModelHighAPI_RefAttr(aEndPnt), theCorner.second); + } + return aRect; +} + //-------------------------------------------------------------------------------------- std::shared_ptr SketchAPI_Sketch::addCircle(double theCenterX, double theCenterY, @@ -493,7 +536,7 @@ std::shared_ptr return CirclePtr(new SketchAPI_Circle(aFeature, theExternal)); } -std::shared_ptr SketchAPI_Sketch::addCircle(const std::string & theExternalName) +std::shared_ptr SketchAPI_Sketch::addCircle(const std::wstring & theExternalName) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); @@ -587,7 +630,7 @@ std::shared_ptr SketchAPI_Sketch::addArc(const ModelHighAPI_Selec return ArcPtr(new SketchAPI_Arc(aFeature, theExternal)); } -std::shared_ptr SketchAPI_Sketch::addArc(const std::string & theExternalName) +std::shared_ptr SketchAPI_Sketch::addArc(const std::wstring & theExternalName) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Arc::ID()); @@ -662,7 +705,7 @@ std::shared_ptr SketchAPI_Sketch::addEllipse( } std::shared_ptr SketchAPI_Sketch::addEllipse( - const std::string & theExternalName) + const std::wstring & theExternalName) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Ellipse::ID()); @@ -713,7 +756,7 @@ std::shared_ptr SketchAPI_Sketch::addEllipticArc( } std::shared_ptr SketchAPI_Sketch::addEllipticArc( - const std::string & theExternalName) + const std::wstring & theExternalName) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_EllipticArc::ID()); @@ -861,23 +904,15 @@ std::shared_ptr SketchAPI_Sketch::addApproximation( //-------------------------------------------------------------------------------------- std::shared_ptr SketchAPI_Sketch::addProjection( const ModelHighAPI_Selection & theExternalFeature, - bool theKeepResult) -{ - std::shared_ptr aFeature = - compositeFeature()->addFeature(SketchPlugin_Projection::ID()); - ProjectionPtr aProjection(new SketchAPI_Projection(aFeature, theExternalFeature)); - aProjection->setIncludeToResult(theKeepResult); - return aProjection; -} - -std::shared_ptr SketchAPI_Sketch::addProjection( - const std::string & theExternalName, - bool theKeepResult) + bool keepResult, + bool keepRefToOriginal) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Projection::ID()); - ProjectionPtr aProjection(new SketchAPI_Projection(aFeature, theExternalName)); - aProjection->setIncludeToResult(theKeepResult); + ProjectionPtr aProjection(new SketchAPI_Projection(aFeature)); + aProjection->setIncludeToResult(keepResult); + aProjection->setKeepReferenceToOriginal(keepRefToOriginal); + aProjection->setExternalFeature(theExternalFeature); return aProjection; } @@ -895,11 +930,12 @@ std::shared_ptr SketchAPI_Sketch::addMirror( std::shared_ptr SketchAPI_Sketch::addOffset( const std::list > & theObjects, const ModelHighAPI_Double & theValue, - const bool theReversed) + const bool theReversed, + const std::string & theJointType) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Offset::ID()); - return OffsetPtr(new SketchAPI_Offset(aFeature, theObjects, theValue, theReversed)); + return OffsetPtr(new SketchAPI_Offset(aFeature, theObjects, theValue, theReversed, theJointType)); } //-------------------------------------------------------------------------------------- @@ -994,7 +1030,8 @@ std::shared_ptr SketchAPI_Sketch::setAngle( if (aVersion == SketchPlugin_ConstraintAngle::THE_VERSION_1) { std::string aTypeLC = theType; - std::transform(aTypeLC.begin(), aTypeLC.end(), aTypeLC.begin(), ::tolower); + std::transform(aTypeLC.begin(), aTypeLC.end(), aTypeLC.begin(), + [](char c) { return static_cast(::tolower(c)); }); if (aTypeLC == "supplementary") aType = (int)SketcherPrs_Tools::ANGLE_COMPLEMENTARY; else if (aTypeLC == "backward") @@ -1548,7 +1585,7 @@ void SketchAPI_Sketch::dump(ModelHighAPI_Dumper& theDumper) const aBase->attribute(SketchPlugin_Sketch::DIRX_ID()))->dir(); // Check the plane is coordinate plane - std::string aPlaneName = defaultPlane(anOrigin, aNormal, aDirX); + std::wstring aPlaneName = defaultPlane(anOrigin, aNormal, aDirX); if(anExternal->context()) { // checking for selected planes if (!aPlaneName.empty() && anExternal->context()->data()