-// 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
return RectanglePtr(new SketchAPI_Rectangle(aFeature, theStartPoint, theEndPoint));
}
+static std::shared_ptr<GeomAPI_Pnt2d> pointCoordinates(
+ const std::pair<std::shared_ptr<GeomAPI_Pnt2d>, 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<GeomDataAPI_Point2D> aPntAttr =
+ std::dynamic_pointer_cast<GeomDataAPI_Point2D>(anAttr);
+ if (aPntAttr)
+ return aPntAttr->pnt();
+ return std::shared_ptr<GeomAPI_Pnt2d>();
+}
+
+std::shared_ptr<SketchAPI_Rectangle> SketchAPI_Sketch::addRectangleCentered(
+ const std::pair<std::shared_ptr<GeomAPI_Pnt2d>, ModelHighAPI_RefAttr> & theCenter,
+ const std::pair<std::shared_ptr<GeomAPI_Pnt2d>, ModelHighAPI_RefAttr> & theCorner)
+{
+ std::shared_ptr<ModelAPI_Feature> 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_Circle> SketchAPI_Sketch::addCircle(double theCenterX,
double theCenterY,
//--------------------------------------------------------------------------------------
std::shared_ptr<SketchAPI_Projection> SketchAPI_Sketch::addProjection(
const ModelHighAPI_Selection & theExternalFeature,
- bool theKeepResult)
-{
- std::shared_ptr<ModelAPI_Feature> aFeature =
- compositeFeature()->addFeature(SketchPlugin_Projection::ID());
- ProjectionPtr aProjection(new SketchAPI_Projection(aFeature, theExternalFeature));
- aProjection->setIncludeToResult(theKeepResult);
- return aProjection;
-}
-
-std::shared_ptr<SketchAPI_Projection> SketchAPI_Sketch::addProjection(
- const std::wstring & theExternalName,
- bool theKeepResult)
+ bool keepResult,
+ bool keepRefToOriginal)
{
std::shared_ptr<ModelAPI_Feature> 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;
}
std::shared_ptr<SketchAPI_Offset> SketchAPI_Sketch::addOffset(
const std::list<std::shared_ptr<ModelAPI_Object> > & theObjects,
const ModelHighAPI_Double & theValue,
- const bool theReversed)
+ const bool theReversed,
+ const std::string & theJointType)
{
std::shared_ptr<ModelAPI_Feature> 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));
}
//--------------------------------------------------------------------------------------
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<char>(::tolower(c)); });
if (aTypeLC == "supplementary")
aType = (int)SketcherPrs_Tools::ANGLE_COMPLEMENTARY;
else if (aTypeLC == "backward")