From 93779aeca5306cc40f2d7a98541e6689f10cb5b1 Mon Sep 17 00:00:00 2001 From: asozinov Date: Fri, 23 Jun 2023 02:06:02 +0100 Subject: [PATCH] bos#35152 [EDF] (2023-T1) Sketch Circle should allow user to position construction point WIll be modified Sketch Circle feature: Current implementation provide possibility change sewing point and rotate this point Sketch.addCircleWithPoint(CenterPoint, Radius, Angle) Sketch.addCircleWithPoint(CenterPoint, PassedPoint, Angle) Sketch.addCircleWithPoint(PassPoint1, PassPoint2, PassPoint3, Angle) Get new point: SketchCircle.createdPoint() //Last modification (06/07/23): change comment --- src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp | 6 +- src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.h | 3 +- src/SketchAPI/SketchAPI_Circle.cpp | 87 ++++++++- src/SketchAPI/SketchAPI_Circle.h | 41 +++- src/SketchAPI/SketchAPI_MacroCircle.cpp | 51 +++-- src/SketchAPI/SketchAPI_MacroCircle.h | 40 +++- src/SketchAPI/SketchAPI_Sketch.cpp | 96 +++++++++- src/SketchAPI/SketchAPI_Sketch.h | 59 +++++- src/SketchPlugin/SketchPlugin_Circle.cpp | 181 ++++++++++++++++-- src/SketchPlugin/SketchPlugin_Circle.h | 27 +++ src/SketchPlugin/SketchPlugin_MacroCircle.cpp | 64 ++++++- src/SketchPlugin/SketchPlugin_MacroCircle.h | 16 ++ src/SketchPlugin/SketchPlugin_msg_fr.ts | 13 ++ .../Test/TestCreateCircleByCenterAndPassed.py | 39 +++- .../Test/TestCreateCircleByThreePoints.py | 45 ++++- .../Test/TestCreateCircleChangeType.py | 2 +- src/SketchPlugin/doc/circleFeature.rst | 36 +++- .../doc/images/Circle_panel_3pt.png | Bin 21622 -> 29397 bytes .../doc/images/Circle_panel_edit.png | Bin 10400 -> 12449 bytes .../doc/images/Circle_panel_pt_rad.png | Bin 19105 -> 24848 bytes src/SketchPlugin/plugin-Sketch.xml | 8 +- 21 files changed, 734 insertions(+), 80 deletions(-) mode change 100644 => 100755 src/SketchPlugin/doc/images/Circle_panel_3pt.png mode change 100644 => 100755 src/SketchPlugin/doc/images/Circle_panel_edit.png mode change 100644 => 100755 src/SketchPlugin/doc/images/Circle_panel_pt_rad.png diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp index 0575a0525..3444bfb86 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.cpp @@ -162,12 +162,16 @@ std::shared_ptr GeomAlgoAPI_EdgeBuilder::cylinderAxis( std::shared_ptr GeomAlgoAPI_EdgeBuilder::lineCircle( std::shared_ptr theCenter, std::shared_ptr theNormal, - double theRadius) + double theRadius, double theRotationAngle) { const gp_Pnt& aCenter = theCenter->impl(); const gp_Dir& aDir = theNormal->impl(); + gp_Ax1 anAx(aCenter, aDir); + gp_Circ aCircle(gp_Ax2(aCenter, aDir), theRadius); + if (Abs(theRotationAngle) > Precision::Confusion()) // Tolerance + aCircle.Rotate(anAx, theRotationAngle); BRepBuilderAPI_MakeEdge anEdgeBuilder(aCircle); std::shared_ptr aRes(new GeomAPI_Edge); diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.h b/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.h index 37e0128a5..63e4601d8 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.h +++ b/src/GeomAlgoAPI/GeomAlgoAPI_EdgeBuilder.h @@ -65,7 +65,8 @@ class GEOMALGOAPI_EXPORT GeomAlgoAPI_EdgeBuilder /// Creates linear edge in a form of a circle by a point and a circle radius static std::shared_ptr lineCircle(std::shared_ptr theCenter, std::shared_ptr theNormal, - double theRadius); + double theRadius, + double theRotationAngle = 0.); /// Creates linear edge in a form of a circle by GeomAPI_Circle static std::shared_ptr lineCircle(std::shared_ptr theCircle); diff --git a/src/SketchAPI/SketchAPI_Circle.cpp b/src/SketchAPI/SketchAPI_Circle.cpp index 8b99eea12..f05936c70 100644 --- a/src/SketchAPI/SketchAPI_Circle.cpp +++ b/src/SketchAPI/SketchAPI_Circle.cpp @@ -26,6 +26,9 @@ #include #include +#include +#include + //================================================================================================== SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr & theFeature) : SketchAPI_SketchEntity(theFeature) @@ -37,22 +40,26 @@ SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr & the SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr& theFeature, double theCenterX, double theCenterY, - double theRadius) + double theRadius, + bool theIsAddPoint, + double theAngle) : SketchAPI_SketchEntity(theFeature) { if(initialize()) { - setByCenterAndRadius(theCenterX, theCenterY, theRadius); + setByCenterAndRadius(theCenterX, theCenterY, theRadius, theIsAddPoint, theAngle); } } //================================================================================================== SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr& theFeature, const std::shared_ptr& theCenter, - double theRadius) + double theRadius, + bool theIsAddPoint, + double theAngle) : SketchAPI_SketchEntity(theFeature) { if(initialize()) { - setByCenterAndRadius(theCenter, theRadius); + setByCenterAndRadius(theCenter, theRadius, theAngle); } } @@ -83,22 +90,31 @@ SketchAPI_Circle::~SketchAPI_Circle() } //================================================================================================== -void SketchAPI_Circle::setByCenterAndRadius(double theCenterX, double theCenterY, double theRadius) +void SketchAPI_Circle::setByCenterAndRadius(double theCenterX, double theCenterY, + double theRadius, bool theIsAddPoint, + double theAngle) { fillAttribute(center(), theCenterX, theCenterY); fillAttribute(theRadius, myradius); + fillAttribute(theIsAddPoint, myaddpoint); + fillAttribute(theAngle, myangle); execute(); + //createPoint(); } //================================================================================================== void SketchAPI_Circle::setByCenterAndRadius(const std::shared_ptr& theCenter, - double theRadius) + double theRadius, bool theIsAddPoint, + double theAngle) { fillAttribute(theCenter, mycenter); fillAttribute(theRadius, myradius); + fillAttribute(theIsAddPoint, myaddpoint); + fillAttribute(theAngle, myangle); execute(); + //createPoint(); } //================================================================================================== @@ -141,6 +157,38 @@ void SketchAPI_Circle::setRadius(double theRadius) execute(); } +//================================================================================================== +void SketchAPI_Circle::setIsToAddPoint(bool theIsToAddPoint) +{ + fillAttribute(theIsToAddPoint, myaddpoint); + + execute(); +} + +//================================================================================================== +void SketchAPI_Circle::setAngle(double theAngle) +{ + fillAttribute(ModelHighAPI_Double(theAngle), myangle); + + execute(); +} + +//================================================================================================== +// Return created point +std::shared_ptr SketchAPI_Circle::createdPoint() const +{ + AttributeReferencePtr anRef = feature()->reference(SketchPlugin_Circle::CONSTRUCTION_POINT_REF_ID()); + if (!anRef->isInitialized()) + return {}; + + FeaturePtr aFeature = ModelAPI_Feature::feature(anRef->value()); + if (aFeature && aFeature->getKind() == SketchPlugin_Point::ID()) + { + return std::shared_ptr < SketchAPI_SketchEntity>(new SketchAPI_Point(aFeature)); + } + return {}; +} + //================================================================================================== void SketchAPI_Circle::dump(ModelHighAPI_Dumper& theDumper) const { @@ -150,14 +198,35 @@ void SketchAPI_Circle::dump(ModelHighAPI_Dumper& theDumper) const FeaturePtr aBase = feature(); const std::string& aSketchName = theDumper.parentName(aBase); + const bool isToAddPoint = addpoint()->value(); + AttributeSelectionPtr anExternal = aBase->selection(SketchPlugin_SketchEntity::EXTERNAL_ID()); if (anExternal->context()) { // circle is external - theDumper << aBase << " = " << aSketchName << ".addCircle(" << anExternal << ")" << std::endl; - } else { + if(isToAddPoint) + { + theDumper << aBase << " = " << aSketchName << ".addCircleWithPoint(" << anExternal << ")" << std::endl; + } + else + { + theDumper << aBase << " = " << aSketchName << ".addCircle(" << anExternal << ")" << std::endl; + } + } + else { // circle given by center and radius - theDumper << aBase << " = " << aSketchName << ".addCircle(" + if(isToAddPoint) + { + theDumper << aBase << " = " << aSketchName << ".addCircleWithPoint(" << center() << ", " << radius(); + theDumper << ", " << angle() << ")" << std::endl; + std::shared_ptr aPoint = createdPoint(); + if (aPoint) + theDumper << aPoint->feature() << " = " << theDumper.name(aBase) << ".createdPoint()" << std::endl; + } + else + { + theDumper << aBase << " = " << aSketchName << ".addCircle(" << center() << ", " << radius() << ")" << std::endl; + } } // dump "auxiliary" flag if necessary SketchAPI_SketchEntity::dump(theDumper); diff --git a/src/SketchAPI/SketchAPI_Circle.h b/src/SketchAPI/SketchAPI_Circle.h index 515e82c56..681a6123a 100644 --- a/src/SketchAPI/SketchAPI_Circle.h +++ b/src/SketchAPI/SketchAPI_Circle.h @@ -42,13 +42,17 @@ public: SketchAPI_Circle(const std::shared_ptr& theFeature, double theCenterX, double theCenterY, - double theRadius); + double theRadius, + bool theIsAddPoint = false, + double theAngle = 0.0); /// Constructor with values. SKETCHAPI_EXPORT SketchAPI_Circle(const std::shared_ptr& theFeature, const std::shared_ptr& theCenter, - double theRadius); + double theRadius, + bool theIsAddPoint = false, + double theAngle = 0.0); /// Constructor with values. SKETCHAPI_EXPORT @@ -64,21 +68,31 @@ public: SKETCHAPI_EXPORT virtual ~SketchAPI_Circle(); - INTERFACE_3(SketchPlugin_Circle::ID(), + INTERFACE_5(SketchPlugin_Circle::ID(), center, SketchPlugin_Circle::CENTER_ID(), GeomDataAPI_Point2D, /** Center point */, radius, SketchPlugin_Circle::RADIUS_ID(), ModelAPI_AttributeDouble, /** Radius */, external, SketchPlugin_Circle::EXTERNAL_ID(), - ModelAPI_AttributeSelection, /** External */) + ModelAPI_AttributeSelection, /** External */, + angle, SketchPlugin_Circle::ANGLE_ID(), + ModelAPI_AttributeDouble, /** Angle */, + addpoint, SketchPlugin_Circle::ADD_CONSTRUCTION_POINT_ID(), + ModelAPI_AttributeBoolean, /** Is to add point */) /// Set by center and radius. SKETCHAPI_EXPORT - void setByCenterAndRadius(double theCenterX, double theCenterY, double theRadius); + void setByCenterAndRadius(double theCenterX, double theCenterY, + double theRadius, + bool theIsAddPoint = false, + double theAngle = 0.0); /// Set by center and radius. SKETCHAPI_EXPORT - void setByCenterAndRadius(const std::shared_ptr& theCenter, double theRadius); + void setByCenterAndRadius(const std::shared_ptr& theCenter, + double theRadius, + bool theIsAddPoint = false, + double theAngle = 0.0); /// Set by external. SKETCHAPI_EXPORT @@ -100,9 +114,24 @@ public: SKETCHAPI_EXPORT void setRadius(double theRadius); + /// Set angle. + SKETCHAPI_EXPORT + void setAngle(double theAngle); + + /// Set is to add point. + SKETCHAPI_EXPORT + void setIsToAddPoint(bool theIsToAddPoint); + + /// Returns created points on circle + SKETCHAPI_EXPORT + std::shared_ptr createdPoint() const; + /// Dump wrapped feature SKETCHAPI_EXPORT virtual void dump(ModelHighAPI_Dumper& theDumper) const; + +private: + void createPoint(); }; /// Pointer on Circle object. diff --git a/src/SketchAPI/SketchAPI_MacroCircle.cpp b/src/SketchAPI/SketchAPI_MacroCircle.cpp index 71e62a4ad..71caa92c3 100644 --- a/src/SketchAPI/SketchAPI_MacroCircle.cpp +++ b/src/SketchAPI/SketchAPI_MacroCircle.cpp @@ -26,6 +26,9 @@ #include #include +#include +#include + //================================================================================================== SketchAPI_MacroCircle::SketchAPI_MacroCircle(const std::shared_ptr& theFeature) : SketchAPI_SketchEntity(theFeature) @@ -38,22 +41,26 @@ SketchAPI_MacroCircle::SketchAPI_MacroCircle(const std::shared_ptr& theFeature, const std::shared_ptr& theCenterPoint, - const std::shared_ptr& thePassedPoint) + const std::shared_ptr& thePassedPoint, + bool theIsToAddPoint, + double theAngle) : SketchAPI_SketchEntity(theFeature) { if(initialize()) { - setByCenterAndPassedPoints(theCenterPoint, thePassedPoint); + setByCenterAndPassedPoints(theCenterPoint, thePassedPoint, theIsToAddPoint, theAngle); } } @@ -61,11 +68,13 @@ SketchAPI_MacroCircle::SketchAPI_MacroCircle(const std::shared_ptr& theFeature, double theX1, double theY1, double theX2, double theY2, - double theX3, double theY3) + double theX3, double theY3, + bool theIsToAddPoint, + double theAngle) : SketchAPI_SketchEntity(theFeature) { if(initialize()) { - setByThreePoints(theX1, theY1, theX2, theY2, theX3, theY3); + setByThreePoints(theX1, theY1, theX2, theY2, theX3, theY3, theIsToAddPoint, theAngle); } } @@ -73,11 +82,13 @@ SketchAPI_MacroCircle::SketchAPI_MacroCircle(const std::shared_ptr& theFeature, const std::shared_ptr& thePoint1, const std::shared_ptr& thePoint2, - const std::shared_ptr& thePoint3) + const std::shared_ptr& thePoint3, + bool theIsToAddPoint, + double theAngle) : SketchAPI_SketchEntity(theFeature) { if(initialize()) { - setByThreePoints(thePoint1, thePoint2, thePoint3); + setByThreePoints(thePoint1, thePoint2, thePoint3, theIsToAddPoint, theAngle); } } @@ -90,11 +101,15 @@ SketchAPI_MacroCircle::~SketchAPI_MacroCircle() void SketchAPI_MacroCircle::setByCenterAndPassedPoints(double theCenterX, double theCenterY, double thePassedX, - double thePassedY) + double thePassedY, + bool theIsToAddPoint, + double theAngle) { fillAttribute(SketchPlugin_MacroCircle::CIRCLE_TYPE_BY_CENTER_AND_PASSED_POINTS(), mycircleType); fillAttribute(centerPoint(), theCenterX, theCenterY); fillAttribute(passedPoint(), thePassedX, thePassedY); + fillAttribute(theIsToAddPoint, myaddpoint); + fillAttribute(theAngle, angle()); execute(); } @@ -102,11 +117,15 @@ void SketchAPI_MacroCircle::setByCenterAndPassedPoints(double theCenterX, //================================================================================================== void SketchAPI_MacroCircle::setByCenterAndPassedPoints( const std::shared_ptr& theCenterPoint, - const std::shared_ptr& thePassedPoint) + const std::shared_ptr& thePassedPoint, + bool theIsToAddPoint, + double theAngle) { fillAttribute(SketchPlugin_MacroCircle::CIRCLE_TYPE_BY_CENTER_AND_PASSED_POINTS(), mycircleType); fillAttribute(theCenterPoint, mycenterPoint); fillAttribute(thePassedPoint, mypassedPoint); + fillAttribute(theIsToAddPoint, myaddpoint); + fillAttribute(theAngle, angle()); execute(); } @@ -114,12 +133,16 @@ void SketchAPI_MacroCircle::setByCenterAndPassedPoints( //================================================================================================== void SketchAPI_MacroCircle::setByThreePoints(double theX1, double theY1, double theX2, double theY2, - double theX3, double theY3) + double theX3, double theY3, + bool theIsToAddPoint, + double theAngle) { fillAttribute(SketchPlugin_MacroCircle::CIRCLE_TYPE_BY_THREE_POINTS(), mycircleType); fillAttribute(firstPoint(), theX1, theY1); fillAttribute(secondPoint(), theX2, theY2); fillAttribute(thirdPoint(), theX3, theY3); + fillAttribute(theIsToAddPoint, myaddpoint); + fillAttribute(theAngle, angle()); execute(); } @@ -127,12 +150,16 @@ void SketchAPI_MacroCircle::setByThreePoints(double theX1, double theY1, //================================================================================================== void SketchAPI_MacroCircle::setByThreePoints(const std::shared_ptr& thePoint1, const std::shared_ptr& thePoint2, - const std::shared_ptr& thePoint3) + const std::shared_ptr& thePoint3, + bool theIsToAddPoint, + double theAngle) { fillAttribute(SketchPlugin_MacroCircle::CIRCLE_TYPE_BY_THREE_POINTS(), mycircleType); fillAttribute(thePoint1, myfirstPoint); fillAttribute(thePoint2, mysecondPoint); fillAttribute(thePoint3, mythirdPoint); + fillAttribute(theIsToAddPoint, myaddpoint); + fillAttribute(theAngle, angle()); execute(); } diff --git a/src/SketchAPI/SketchAPI_MacroCircle.h b/src/SketchAPI/SketchAPI_MacroCircle.h index 8febe315b..a8028e784 100644 --- a/src/SketchAPI/SketchAPI_MacroCircle.h +++ b/src/SketchAPI/SketchAPI_MacroCircle.h @@ -43,33 +43,41 @@ public: double theCenterX, double theCenterY, double thePassedX, - double thePassedY); + double thePassedY, + bool theIsToAddPoint = false, + double theAngle = 0.0); /// Constructor with values. SKETCHAPI_EXPORT SketchAPI_MacroCircle(const std::shared_ptr& theFeature, const std::shared_ptr& theCenterPoint, - const std::shared_ptr& thePassedPoint); + const std::shared_ptr& thePassedPoint, + bool theIsToAddPoint = false, + double theAngle = 0.0); /// Constructor with values. SKETCHAPI_EXPORT SketchAPI_MacroCircle(const std::shared_ptr& theFeature, double theX1, double theY1, double theX2, double theY2, - double theX3, double theY3); + double theX3, double theY3, + bool theIsToAddPoint = false, + double theAngle = 0.0); /// Constructor with values. SKETCHAPI_EXPORT SketchAPI_MacroCircle(const std::shared_ptr& theFeature, const std::shared_ptr& thePoint1, const std::shared_ptr& thePoint2, - const std::shared_ptr& thePoint3); + const std::shared_ptr& thePoint3, + bool theIsToAddPoint = false, + double theAngle = 0.0); /// Destructor. SKETCHAPI_EXPORT virtual ~SketchAPI_MacroCircle(); - INTERFACE_6(SketchPlugin_MacroCircle::ID(), + INTERFACE_8(SketchPlugin_MacroCircle::ID(), circleType, SketchPlugin_MacroCircle::CIRCLE_TYPE(), ModelAPI_AttributeString, /** Circle type */, centerPoint, SketchPlugin_MacroCircle::CENTER_POINT_ID(), @@ -81,26 +89,38 @@ public: secondPoint, SketchPlugin_MacroCircle::SECOND_POINT_ID(), GeomDataAPI_Point2D, /** Second point */, thirdPoint, SketchPlugin_MacroCircle::THIRD_POINT_ID(), - GeomDataAPI_Point2D, /** Third point */) + GeomDataAPI_Point2D, /** Third point */, + angle, SketchPlugin_MacroCircle::CIRCLE_ROTATE_ANGLE_ID(), + ModelAPI_AttributeDouble, /** Angle */, + addpoint, SketchPlugin_MacroCircle::ADD_CONSTRUCTION_POINT_ID(), + ModelAPI_AttributeBoolean, /** Is to add point */) private: /// Set by center and passed points. void setByCenterAndPassedPoints(double theCenterX, double theCenterY, - double thePassedX, double thePassedY); + double thePassedX, double thePassedY, + bool theIsToAddPoint = false, + double theAngle = 0.0); /// Set by center and passed points. void setByCenterAndPassedPoints(const std::shared_ptr& theCenterPoint, - const std::shared_ptr& thePassedPoint); + const std::shared_ptr& thePassedPoint, + bool theIsToAddPoint = false, + double theAngle = 0.0); /// Set by three points. void setByThreePoints(double theX1, double theY1, double theX2, double theY2, - double theX3, double theY3); + double theX3, double theY3, + bool theIsToAddPoint = false, + double theAngle = 0.0); /// Set by three points. void setByThreePoints(const std::shared_ptr& thePoint1, const std::shared_ptr& thePoint2, - const std::shared_ptr& thePoint3); + const std::shared_ptr& thePoint3, + bool theIsToAddPoint = false, + double theAngle = 0.0); }; /// Pointer on Circle object. diff --git a/src/SketchAPI/SketchAPI_Sketch.cpp b/src/SketchAPI/SketchAPI_Sketch.cpp index 09668c82b..eeacdbb4d 100644 --- a/src/SketchAPI/SketchAPI_Sketch.cpp +++ b/src/SketchAPI/SketchAPI_Sketch.cpp @@ -617,6 +617,7 @@ std::pair, std::shared_ptr return std::pair, std::shared_ptr>(aRect, aRect->centerSketchPoint()); } +// Way for create circle without a construction point //-------------------------------------------------------------------------------------- std::shared_ptr SketchAPI_Sketch::addCircle(double theCenterX, double theCenterY, @@ -624,7 +625,7 @@ std::shared_ptr SketchAPI_Sketch::addCircle(double theCenterX, { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); - return CirclePtr(new SketchAPI_Circle(aFeature, theCenterX, theCenterY, theRadius)); + return CirclePtr(new SketchAPI_Circle(aFeature, theCenterX, theCenterY, theRadius, false, 0)); } std::shared_ptr SketchAPI_Sketch::addCircle( @@ -633,7 +634,7 @@ std::shared_ptr SketchAPI_Sketch::addCircle( { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Circle::ID()); - return CirclePtr(new SketchAPI_Circle(aFeature, theCenter, theRadius)); + return CirclePtr(new SketchAPI_Circle(aFeature, theCenter, theRadius, false, 0)); } std::shared_ptr SketchAPI_Sketch::addCircle(double theCenterX, @@ -644,7 +645,7 @@ std::shared_ptr SketchAPI_Sketch::addCircle(double theCen std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID()); return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterX, theCenterY, - thePassedX, thePassedY)); + thePassedX, thePassedY, false, 0)); } std::shared_ptr SketchAPI_Sketch::addCircle( @@ -653,7 +654,7 @@ std::shared_ptr SketchAPI_Sketch::addCircle( { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID()); - return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterPoint, thePassedPoint)); + return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterPoint, thePassedPoint, false, 0)); } std::shared_ptr SketchAPI_Sketch::addCircle(double theX1, double theY1, @@ -662,9 +663,10 @@ std::shared_ptr SketchAPI_Sketch::addCircle(double theX1, { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID()); + return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theX1, theY1, theX2, theY2, - theX3, theY3)); + theX3, theY3, false, 0)); } std::shared_ptr SketchAPI_Sketch::addCircle( @@ -674,7 +676,7 @@ std::shared_ptr SketchAPI_Sketch::addCircle( { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID()); - return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, thePoint1, thePoint2, thePoint3)); + return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, thePoint1, thePoint2, thePoint3, false, 0)); } std::shared_ptr @@ -692,6 +694,88 @@ std::shared_ptr SketchAPI_Sketch::addCircle(const std::wstring return CirclePtr(new SketchAPI_Circle(aFeature, theExternalName)); } +// Way for create Circle with a construction point +//-------------------------------------------------------------------------------------- +std::shared_ptr SketchAPI_Sketch::addCircleWithPoint(double theCenterX, + double theCenterY, + double theRadius, + double theAngle) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + return CirclePtr(new SketchAPI_Circle(aFeature, theCenterX, theCenterY, theRadius, true, theAngle)); +} + +std::shared_ptr SketchAPI_Sketch::addCircleWithPoint( + const std::shared_ptr& theCenter, + double theRadius, + double theAngle) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + return CirclePtr(new SketchAPI_Circle(aFeature, theCenter, theRadius, true, theAngle)); +} + +std::shared_ptr SketchAPI_Sketch::addCircleWithPoint(double theCenterX, + double theCenterY, + double thePassedX, + double thePassedY, + double theAngle) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID()); + return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterX, theCenterY, + thePassedX, thePassedY, true, theAngle)); +} + +std::shared_ptr SketchAPI_Sketch::addCircleWithPoint( + const std::shared_ptr& theCenterPoint, + const std::shared_ptr& thePassedPoint, + double theAngle) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID()); + return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theCenterPoint, thePassedPoint, true, theAngle)); +} + +std::shared_ptr SketchAPI_Sketch::addCircleWithPoint(double theX1, double theY1, + double theX2, double theY2, + double theX3, double theY3, + double theAngle) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID()); + return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, theX1, theY1, + theX2, theY2, + theX3, theY3, true, theAngle)); +} + +std::shared_ptr SketchAPI_Sketch::addCircleWithPoint( + const std::shared_ptr& thePoint1, + const std::shared_ptr& thePoint2, + const std::shared_ptr& thePoint3, + double theAngle) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_MacroCircle::ID()); + return MacroCirclePtr(new SketchAPI_MacroCircle(aFeature, thePoint1, thePoint2, thePoint3, true, theAngle)); +} + +std::shared_ptr +SketchAPI_Sketch::addCircleWithPoint(const ModelHighAPI_Selection& theExternal) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + return CirclePtr(new SketchAPI_Circle(aFeature, theExternal)); +} + +std::shared_ptr SketchAPI_Sketch::addCircleWithPoint(const std::wstring& theExternalName) +{ + std::shared_ptr aFeature = + compositeFeature()->addFeature(SketchPlugin_Circle::ID()); + return CirclePtr(new SketchAPI_Circle(aFeature, theExternalName)); +} + //-------------------------------------------------------------------------------------- std::shared_ptr SketchAPI_Sketch::addArc(double theCenterX, double theCenterY, double theStartX, double theStartY, diff --git a/src/SketchAPI/SketchAPI_Sketch.h b/src/SketchAPI/SketchAPI_Sketch.h index 2df07ffa2..fba36db2c 100644 --- a/src/SketchAPI/SketchAPI_Sketch.h +++ b/src/SketchAPI/SketchAPI_Sketch.h @@ -194,45 +194,88 @@ public: double theCornerX, double theCornerY ); - /// Add circle + /// Add circle. SKETCHAPI_EXPORT std::shared_ptr addCircle( double theCenterX, double theCenterY, double theRadius); - /// Add circle + /// Add circle. SKETCHAPI_EXPORT std::shared_ptr addCircle( const std::shared_ptr& theCenter, double theRadius); - /// Add circle + /// Add circle. SKETCHAPI_EXPORT std::shared_ptr addCircle( double theCenterX, double theCenterY, double thePassedX, double thePassedY); - /// Add circle + /// Add circle. SKETCHAPI_EXPORT std::shared_ptr addCircle( const std::shared_ptr& theCenterPoint, const std::shared_ptr& thePassedPoint); - /// Add circle + /// Add circle. SKETCHAPI_EXPORT std::shared_ptr addCircle( double theX1, double theY1, double theX2, double theY2, double theX3, double theY3); - /// Add circle + /// Add circle. SKETCHAPI_EXPORT std::shared_ptr addCircle( const std::shared_ptr& thePoint1, const std::shared_ptr& thePoint2, const std::shared_ptr& thePoint3); - /// Add circle + /// Add circle. SKETCHAPI_EXPORT std::shared_ptr addCircle(const ModelHighAPI_Selection & theExternal); - /// Add circle + /// Add circle. SKETCHAPI_EXPORT std::shared_ptr addCircle(const std::wstring & theExternalName); + /// Add circle with point + SKETCHAPI_EXPORT + std::shared_ptr addCircleWithPoint( + double theCenterX, double theCenterY, + double theRadius, double theAngle); + /// Add circle with point + SKETCHAPI_EXPORT + std::shared_ptr addCircleWithPoint( + const std::shared_ptr& theCenter, + double theRadius, double theAngle); + /// Add circle with point + SKETCHAPI_EXPORT + std::shared_ptr addCircleWithPoint( + double theCenterX, double theCenterY, + double thePassedX, double thePassedY, + double theAngle); + /// Add circle with point + SKETCHAPI_EXPORT + std::shared_ptr addCircleWithPoint( + const std::shared_ptr& theCenterPoint, + const std::shared_ptr& thePassedPoint, + double theAngle); + /// Add circle with point + SKETCHAPI_EXPORT + std::shared_ptr addCircleWithPoint( + double theX1, double theY1, + double theX2, double theY2, + double theX3, double theY3, + double theAngle); + /// Add circle with point + SKETCHAPI_EXPORT + std::shared_ptr addCircleWithPoint( + const std::shared_ptr& thePoint1, + const std::shared_ptr& thePoint2, + const std::shared_ptr& thePoint3, + double theAngle); + /// Add circle with point + SKETCHAPI_EXPORT + std::shared_ptr addCircleWithPoint(const ModelHighAPI_Selection& theExternal); + /// Add circle with point + SKETCHAPI_EXPORT + std::shared_ptr addCircleWithPoint(const std::wstring& theExternalName); + /// Add arc SKETCHAPI_EXPORT std::shared_ptr addArc( diff --git a/src/SketchPlugin/SketchPlugin_Circle.cpp b/src/SketchPlugin/SketchPlugin_Circle.cpp index 9ebedad98..41a284e63 100644 --- a/src/SketchPlugin/SketchPlugin_Circle.cpp +++ b/src/SketchPlugin/SketchPlugin_Circle.cpp @@ -19,16 +19,24 @@ #include "SketchPlugin_Circle.h" #include "SketchPlugin_Sketch.h" +#include "SketchPlugin_Tools.h" #include #include #include -#include +#include +#include #include #include +#include #include +#include +#include +#include +#include #include #include +#include #include #include #include @@ -38,67 +46,216 @@ #include #include +#include + #include const double tolerance = 1e-7; +const double paramTolerance = 1.e-4; +const double PI = 3.141592653589793238463; - +//************************************************************************************* SketchPlugin_Circle::SketchPlugin_Circle() : SketchPlugin_SketchEntity() { } +//************************************************************************************* void SketchPlugin_Circle::initDerivedClassAttributes() { data()->addAttribute(CENTER_ID(), GeomDataAPI_Point2D::typeId()); data()->addAttribute(RADIUS_ID(), ModelAPI_AttributeDouble::typeId()); - data()->addAttribute(EXTERNAL_ID(), ModelAPI_AttributeSelection::typeId()); + + // Attrs for construction point + data()->addAttribute(CONSTRUCTION_POINT_REF_ID(), ModelAPI_AttributeReference::typeId()); + data()->addAttribute(ANGLE_ID(), ModelAPI_AttributeDouble::typeId()); + + AttributeDoublePtr anAngleAttr = std::dynamic_pointer_cast + (data()->addAttribute(ANGLE_ID(), ModelAPI_AttributeDouble::typeId())); + if(!anAngleAttr->isInitialized()) + { + anAngleAttr->setValue(0.0); + } + + AttributeBooleanPtr isAddConstrAttr = std::dynamic_pointer_cast + (data()->addAttribute(ADD_CONSTRUCTION_POINT_ID(), ModelAPI_AttributeBoolean::typeId())); + if (!isAddConstrAttr->isInitialized()) + { + isAddConstrAttr->setValue(false); + } + ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), EXTERNAL_ID()); + ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ADD_CONSTRUCTION_POINT_ID()); + ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), CONSTRUCTION_POINT_REF_ID()); + ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ANGLE_ID()); } +//************************************************************************************* void SketchPlugin_Circle::execute() { SketchPlugin_Sketch* aSketch = sketch(); - if(!aSketch) { + if (!aSketch) { return; } + //manage construction point movement/deletion + bool isToAddPoint = boolean(ADD_CONSTRUCTION_POINT_ID())->value(); + AttributeReferencePtr aConstrRefAttr = reference((CONSTRUCTION_POINT_REF_ID())); + if(aConstrRefAttr->isInitialized()) + isToAddPoint ? computeAngle(): removeConstructionPoint(); + // Compute a circle in 3D view. std::shared_ptr aCenterAttr = - std::dynamic_pointer_cast(data()->attribute(CENTER_ID())); + std::dynamic_pointer_cast(data()->attribute(CENTER_ID())); AttributeDoublePtr aRadiusAttr = real(RADIUS_ID()); - if(!aCenterAttr->isInitialized() || !aRadiusAttr->isInitialized()) { + if (!aCenterAttr->isInitialized() || !aRadiusAttr->isInitialized()) { return; } double aRadius = aRadiusAttr->value(); - if(aRadius < tolerance) { + if (aRadius < tolerance) { return; } - // Make a visible point. + // Make a visible center point. SketchPlugin_Sketch::createPoint2DResult(this, sketch(), CENTER_ID(), 0); // Make a visible circle. std::shared_ptr aCenter(aSketch->to3D(aCenterAttr->x(), aCenterAttr->y())); std::shared_ptr aNDir = std::dynamic_pointer_cast( - aSketch->data()->attribute(SketchPlugin_Sketch::NORM_ID())); + aSketch->data()->attribute(SketchPlugin_Sketch::NORM_ID())); std::shared_ptr aNormal(new GeomAPI_Dir(aNDir->x(), aNDir->y(), aNDir->z())); - std::shared_ptr aCircleShape = - GeomAlgoAPI_EdgeBuilder::lineCircle(aCenter, aNormal, aRadius); + AttributeDoublePtr anAngleAttr = real(ANGLE_ID()); + if (!anAngleAttr->isInitialized()) + anAngleAttr->setValue(0); + double aValAn = anAngleAttr->value(); + + std::shared_ptr aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircle(aCenter, aNormal, aRadius, aValAn / 180 * PI); std::shared_ptr aResult = document()->createConstruction(data(), 1); aResult->setShape(aCircleShape); aResult->setIsInHistory(false); setResult(aResult, 1); + + if(isToAddPoint && !aConstrRefAttr->isInitialized()) + setConstructionPoint(); +} + +//************************************************************************************* +std::shared_ptr SketchPlugin_Circle::getCircleShape() +{ + std::shared_ptr aSelection; + ResultPtr aCircleRes = lastResult(); + if (aCircleRes) + aSelection = aCircleRes->shape(); + if (aSelection && !aSelection->isNull() && aSelection->isEdge()) + { + return std::shared_ptr(new GeomAPI_Edge(aSelection)); + } + return {}; +} + +//************************************************************************************* +void SketchPlugin_Circle::computeAngle() +{ + if(!boolean(ADD_CONSTRUCTION_POINT_ID())->value()){ + return; + } + + AttributeReferencePtr aConstrRefAttr = reference((CONSTRUCTION_POINT_REF_ID())); + std::shared_ptr anCircEdge = getCircleShape(); + if(anCircEdge && aConstrRefAttr->isInitialized()) + { + std::shared_ptr aCirc = anCircEdge->circle(); + + // Get point and project it on line + FeaturePtr aPointFeature = ModelAPI_Feature::feature(aConstrRefAttr->value()); + AttributePoint2DPtr aConstrPoint = std::dynamic_pointer_cast( + aPointFeature->attribute(SketchPlugin_Point::COORD_ID())); + GeomPointPtr aPntRot3D = aCirc->project( sketch()->to3D(aConstrPoint->x(), aConstrPoint->y())); + + // Compute new angle + GeomPointPtr aNorm = sketch()->to3D(real(RADIUS_ID())->value(), 0); + double aStartParam, anEndParam; + aCirc->parameter(aPntRot3D, paramTolerance, anEndParam); + aCirc->parameter(aNorm, paramTolerance, aStartParam); + + bool aWasBlocked = data()->blockSendAttributeUpdated(true); + real(ANGLE_ID())->setValue((anEndParam - aStartParam) / PI * 180.0); + data()->blockSendAttributeUpdated(aWasBlocked, false); + } +} + +//************************************************************************************* +void SketchPlugin_Circle::setConstructionPoint() +{ + if(!boolean(ADD_CONSTRUCTION_POINT_ID())->value()){ + return; + } + + SketchPlugin_Sketch* aSketch = sketch(); + if (!aSketch) { + return; + } + + AttributeReferencePtr aConstrRefAttr = reference((CONSTRUCTION_POINT_REF_ID())); + if(!aConstrRefAttr->isInitialized()) + { + bool aWasBlocked = data()->blockSendAttributeUpdated(true); + std::shared_ptr anCircEdge = getCircleShape(); + GeomPnt2dPtr aCircleSewPoint = aSketch->to2D(anCircEdge->firstPoint()); + + FeaturePtr aPointFeature = aSketch->addFeature(SketchPlugin_Point::ID()); + auto aCurCircle = this->document()->currentFeature(true); + aPointFeature->reference(SketchPlugin_Point::PARENT_ID())->setValue(aCurCircle); + AttributePoint2DPtr aCoord = std::dynamic_pointer_cast( + aPointFeature->attribute(SketchPlugin_Point::COORD_ID())); + aCoord->setValue(aCircleSewPoint); + aPointFeature->execute(); + aConstrRefAttr->setValue(aPointFeature); + + SketchPlugin_Tools::createConstraintAttrObject(aSketch, + SketchPlugin_ConstraintCoincidence::ID(), aCoord, lastResult()); + data()->blockSendAttributeUpdated(aWasBlocked, false); + } +} + +//************************************************************************************* +void SketchPlugin_Circle::removeConstructionPoint() +{ + AttributeReferencePtr aConstrRefAttr = reference((CONSTRUCTION_POINT_REF_ID())); + FeaturePtr aPointFeature = ModelAPI_Feature::feature(aConstrRefAttr->value()); + if (aPointFeature) + { + std::set aDummySet; + aDummySet.insert(aPointFeature); + std::map> aReferenceMap; + ModelAPI_Tools::findAllReferences(aDummySet, aReferenceMap, false, true); + std::set aFeaturesRefsTo; + ModelAPI_Tools::findRefsToFeatures(aDummySet, aReferenceMap, aFeaturesRefsTo); + + // remove all references to the point except the circle feature(this) + for(auto aFeature : aFeaturesRefsTo) + { + if (aFeature->getKind() != this->ID()) + document()->removeFeature(aFeature); + } + document()->removeFeature(aPointFeature); + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_DELETED)); + } + aConstrRefAttr->setValue(FeaturePtr()); + aConstrRefAttr->reset(); + real(ANGLE_ID())->setValue(0.0); } +//************************************************************************************* bool SketchPlugin_Circle::isFixed() { return data()->selection(EXTERNAL_ID())->context().get() != NULL; } +//************************************************************************************* void SketchPlugin_Circle::attributeChanged(const std::string& theID) { // the second condition for unability to move external segments anywhere if (theID == EXTERNAL_ID() || isFixed()) { @@ -116,7 +273,9 @@ void SketchPlugin_Circle::attributeChanged(const std::string& theID) { std::shared_ptr aCenterAttr = std::dynamic_pointer_cast(attribute(CENTER_ID())); aCenterAttr->setValue(sketch()->to2D(aCirc->center())); + real(RADIUS_ID())->setValue(aCirc->radius()); + real(ANGLE_ID())->setValue(0.0); } } } diff --git a/src/SketchPlugin/SketchPlugin_Circle.h b/src/SketchPlugin/SketchPlugin_Circle.h index 4bb9b37fc..041179df9 100644 --- a/src/SketchPlugin/SketchPlugin_Circle.h +++ b/src/SketchPlugin/SketchPlugin_Circle.h @@ -45,6 +45,20 @@ class SketchPlugin_Circle: public SketchPlugin_SketchEntity return ID; } + /// Is to create contruction point or not + inline static const std::string& ADD_CONSTRUCTION_POINT_ID() + { + static const std::string ID("add_construction_point"); + return ID; + } + + /// Contain created point as feature + inline static const std::string& CONSTRUCTION_POINT_REF_ID() + { + static const std::string ID("circle_construction_point_ref"); + return ID; + } + /// Radius of the circle inline static const std::string& RADIUS_ID() { @@ -52,6 +66,13 @@ class SketchPlugin_Circle: public SketchPlugin_SketchEntity return ID; } + /// Angle of rotation sewing point of the circle + inline static const std::string& ANGLE_ID() + { + static const std::string ID("circle_angle"); + return ID; + } + /// Returns the kind of a feature SKETCHPLUGIN_EXPORT virtual const std::string& getKind() { @@ -74,6 +95,12 @@ class SketchPlugin_Circle: public SketchPlugin_SketchEntity protected: /// \brief Initializes attributes of derived class. virtual void initDerivedClassAttributes(); + + // Methods for construction point creation + void computeAngle(); + void setConstructionPoint(); + void removeConstructionPoint(); + std::shared_ptr getCircleShape(); }; #endif diff --git a/src/SketchPlugin/SketchPlugin_MacroCircle.cpp b/src/SketchPlugin/SketchPlugin_MacroCircle.cpp index cbfec4b39..272bc209b 100644 --- a/src/SketchPlugin/SketchPlugin_MacroCircle.cpp +++ b/src/SketchPlugin/SketchPlugin_MacroCircle.cpp @@ -23,10 +23,15 @@ #include "SketchPlugin_Point.h" #include "SketchPlugin_Tools.h" #include "SketchPlugin_MacroArcReentrantMessage.h" +#include +#include #include #include #include +#include +#include +#include #include #include #include @@ -35,8 +40,10 @@ #include #include +#include #include #include +#include #include #include @@ -86,15 +93,32 @@ void SketchPlugin_MacroCircle::initAttributes() data()->addAttribute(CIRCLE_RADIUS_ID(), ModelAPI_AttributeDouble::typeId()); data()->addAttribute(AUXILIARY_ID(), ModelAPI_AttributeBoolean::typeId()); + data()->addAttribute(CIRCLE_ROTATE_ANGLE_ID(), ModelAPI_AttributeDouble::typeId()); + + AttributeDoublePtr anAngleAttr = std::dynamic_pointer_cast + (data()->addAttribute(CIRCLE_ROTATE_ANGLE_ID(), ModelAPI_AttributeDouble::typeId())); + if(!anAngleAttr->isInitialized()) + { + anAngleAttr->setValue(0.0); + } + // Attrs for rotation point + AttributeBooleanPtr isAddConstrAttr = std::dynamic_pointer_cast + (data()->addAttribute(ADD_CONSTRUCTION_POINT_ID(), ModelAPI_AttributeBoolean::typeId())); + if (!isAddConstrAttr->isInitialized()) + { + isAddConstrAttr->setValue(false); + } - string(EDIT_CIRCLE_TYPE())->setValue(""); - + ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ADD_CONSTRUCTION_POINT_ID()); + ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), CIRCLE_ROTATE_ANGLE_ID()); ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), CENTER_POINT_REF_ID()); ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), PASSED_POINT_REF_ID()); ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), FIRST_POINT_REF_ID()); ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), SECOND_POINT_REF_ID()); ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), THIRD_POINT_REF_ID()); ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), EDIT_CIRCLE_TYPE()); + + string(EDIT_CIRCLE_TYPE())->setValue(""); } void SketchPlugin_MacroCircle::execute() @@ -213,10 +237,16 @@ FeaturePtr SketchPlugin_MacroCircle::createCircleFeature() std::dynamic_pointer_cast( aCircleFeature->attribute(SketchPlugin_Circle::CENTER_ID()))->setValue(myCenter->x(), myCenter->y()); + + aCircleFeature->real(SketchPlugin_Circle::ANGLE_ID())->setValue(real(CIRCLE_ROTATE_ANGLE_ID())->value()); aCircleFeature->real(SketchPlugin_Circle::RADIUS_ID())->setValue(myRadius); + aCircleFeature->boolean(SketchPlugin_Circle::ADD_CONSTRUCTION_POINT_ID()) + ->setValue(boolean(ADD_CONSTRUCTION_POINT_ID())->value()); aCircleFeature->boolean(SketchPlugin_Circle::AUXILIARY_ID()) ->setValue(boolean(AUXILIARY_ID())->value()); + aCircleFeature->execute(); + return aCircleFeature; } @@ -362,25 +392,36 @@ void SketchPlugin_MacroCircle::fillByTwoPassedPoints() AISObjectPtr SketchPlugin_MacroCircle::getAISObject(AISObjectPtr thePrevious) { SketchPlugin_Sketch* aSketch = sketch(); - if(!aSketch || !myCenter || myRadius == 0) { + if (!aSketch || !myCenter || myRadius == 0) { return AISObjectPtr(); } // Compute a circle in 3D view. std::shared_ptr aCenter(aSketch->to3D(myCenter->x(), myCenter->y())); std::shared_ptr aNDir = - std::dynamic_pointer_cast( - aSketch->data()->attribute(SketchPlugin_Sketch::NORM_ID())); + std::dynamic_pointer_cast( + aSketch->data()->attribute(SketchPlugin_Sketch::NORM_ID())); std::shared_ptr aNormal = aNDir->dir(); - GeomShapePtr aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircle(aCenter, aNormal, myRadius); + GeomShapePtr aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircle(aCenter, aNormal, myRadius, 0); + GeomShapePtr aCenterPointShape = GeomAlgoAPI_PointBuilder::vertex(aCenter); - if(!aCircleShape.get() || !aCenterPointShape.get()) { + + if (!aCircleShape.get() || !aCenterPointShape.get()) { return AISObjectPtr(); } std::list > aShapes; aShapes.push_back(aCircleShape); aShapes.push_back(aCenterPointShape); + + //add visible construction point + if(boolean(ADD_CONSTRUCTION_POINT_ID())->value()) + { + std::shared_ptr aConstrPoint; + aConstrPoint = std::shared_ptr(aSketch->to3D(myCenter->x() + myRadius, myCenter->y())); + GeomShapePtr aNewPnt = GeomAlgoAPI_PointBuilder::vertex(aConstrPoint); + aShapes.push_back(aNewPnt); + } std::shared_ptr aCompound = GeomAlgoAPI_CompoundBuilder::compound(aShapes); AISObjectPtr anAIS = thePrevious; @@ -398,6 +439,7 @@ AISObjectPtr SketchPlugin_MacroCircle::getAISObject(AISObjectPtr thePrevious) void SketchPlugin_MacroCircle::attributeChanged(const std::string& theID) { // If circle type switched reset all attributes. if(theID == CIRCLE_TYPE()) { + SketchPlugin_Tools::resetAttribute(this, ADD_CONSTRUCTION_POINT_ID()); SketchPlugin_Tools::resetAttribute(this, CENTER_POINT_ID()); SketchPlugin_Tools::resetAttribute(this, CENTER_POINT_REF_ID()); SketchPlugin_Tools::resetAttribute(this, PASSED_POINT_ID()); @@ -410,10 +452,13 @@ void SketchPlugin_MacroCircle::attributeChanged(const std::string& theID) { SketchPlugin_Tools::resetAttribute(this, THIRD_POINT_REF_ID()); } else if(theID == CENTER_POINT_ID() || theID == PASSED_POINT_ID() || theID == CENTER_POINT_REF_ID() || theID == PASSED_POINT_REF_ID()) + { fillByCenterAndPassed(); + } else if(theID == FIRST_POINT_ID() || theID == FIRST_POINT_REF_ID() || theID == SECOND_POINT_ID() || theID == SECOND_POINT_REF_ID() || - theID == THIRD_POINT_ID() || theID == THIRD_POINT_REF_ID()) { + theID == THIRD_POINT_ID() || theID == THIRD_POINT_REF_ID()) + { std::shared_ptr aPoints[3]; int aNbInitialized = 0; for(int i = 1; i <= 3; ++i) { @@ -432,12 +477,15 @@ void SketchPlugin_MacroCircle::attributeChanged(const std::string& theID) { } AttributeDoublePtr aRadiusAttr = real(CIRCLE_RADIUS_ID()); + bool aWasBlocked = data()->blockSendAttributeUpdated(true); if(myCenter.get()) { // center attribute is used in processEvent() to set reference to reentrant arc std::dynamic_pointer_cast(attribute(CENTER_POINT_ID())) ->setValue(myCenter); } + aRadiusAttr->setValue(myRadius); + data()->blockSendAttributeUpdated(aWasBlocked, false); } diff --git a/src/SketchPlugin/SketchPlugin_MacroCircle.h b/src/SketchPlugin/SketchPlugin_MacroCircle.h index e7f2f7ff0..91ec23b78 100644 --- a/src/SketchPlugin/SketchPlugin_MacroCircle.h +++ b/src/SketchPlugin/SketchPlugin_MacroCircle.h @@ -150,6 +150,20 @@ class SketchPlugin_MacroCircle: public SketchPlugin_SketchEntity, return ID; } + /// Is to create construction point or not. + inline static const std::string& ADD_CONSTRUCTION_POINT_ID() + { + static const std::string ID("add_construction_point"); + return ID; + } + + /// Rotate angle of the circle + inline static const std::string& CIRCLE_ROTATE_ANGLE_ID() + { + static const std::string ID("circle_angle"); + return ID; + } + /// Returns the kind of a feature SKETCHPLUGIN_EXPORT virtual const std::string& getKind() { @@ -191,6 +205,8 @@ private: void constraintsForCircleByCenterAndPassed(FeaturePtr theCircleFeature); void constraintsForCircleByThreePoints(FeaturePtr theCircleFeature); + void computeNewAngle(std::shared_ptr& theCircle); + FeaturePtr createCircleFeature(); private: diff --git a/src/SketchPlugin/SketchPlugin_msg_fr.ts b/src/SketchPlugin/SketchPlugin_msg_fr.ts index 841fa2abd..b732310b7 100644 --- a/src/SketchPlugin/SketchPlugin_msg_fr.ts +++ b/src/SketchPlugin/SketchPlugin_msg_fr.ts @@ -351,6 +351,17 @@ L'attribut "%1" est verrouillé par la valeur de modification dans la vue. + + SketchMacroCircle:add_construction_point + + Add construction point + Ajouter un point de construction + + + Create visible construction point + Créer un point de construction visible + + SketchCircle @@ -393,6 +404,8 @@ + + SketchConstraintHorizontal:Model_FeatureValidator diff --git a/src/SketchPlugin/Test/TestCreateCircleByCenterAndPassed.py b/src/SketchPlugin/Test/TestCreateCircleByCenterAndPassed.py index 6cd2e27ee..9e4e75adc 100644 --- a/src/SketchPlugin/Test/TestCreateCircleByCenterAndPassed.py +++ b/src/SketchPlugin/Test/TestCreateCircleByCenterAndPassed.py @@ -33,7 +33,7 @@ from SketchAPI import SketchAPI_Sketch from salome.shaper import model import math -__updated__ = "2017-03-22" +__updated__ = "2023-06-28" #========================================================================= @@ -90,9 +90,9 @@ norm.setValue(0, 0, 1) aSession.finishOperation() aSketch = SketchAPI_Sketch(aSketchFeature) -#========================================================================= +# ========================================================================= # Test 1. Create a circle by center and radius -#========================================================================= +# ========================================================================= aSession.startOperation() aCircle = aSketchFeature.addFeature("SketchCircle") assert (aCircle.getKind() == "SketchCircle") @@ -280,6 +280,39 @@ aDocument.removeFeature(aCircle) aSession.finishOperation() assert (aSketchFeature.numberOfSubs() == 12) +#========================================================================= +# Test 6. Create a circle with point on circle line (addCircleWithPoint) +#========================================================================= +# create new circle +aSession.startOperation() +aCircle = aSketchFeature.addFeature("SketchMacroCircle") +aCenter = geomDataAPI_Point2D(aCircle.attribute("center_point")) +aCenterRef = aCircle.refattr("center_point_ref") +aPassed = geomDataAPI_Point2D(aCircle.attribute("passed_point")) +aPassedRef = aCircle.refattr("passed_point_ref") +aCircleType = aCircle.string("circle_type") +aCircleIsAddPoint = aCircle.boolean("add_construction_point") +aCircleAngle = aCircle.real("circle_angle") +# initialize attributes +aCircleType.setValue("circle_type_by_center_and_passed_points") +aCenter.setValue(35., -35) +anExpectedCenter = [35., -35] +aPassed.setValue(45., -35) +aCircleAngle.setValue(90.) +aCircleIsAddPoint.setValue(True) +anExpectedRot = [35., -25] +aSession.finishOperation() +assert (aSketchFeature.numberOfSubs() == 15) +# verify newly created circle +aCircle = model.lastSubFeature(aSketchFeature, "SketchCircle") +aCenter = geomDataAPI_Point2D(aCircle.attribute("circle_center")) +aConstrPoint = model.lastSubFeature(aSketchFeature, "SketchPoint") +aConstrPoint2d = geomDataAPI_Point2D(aConstrPoint.attribute("PointCoordinates")) +model.assertPoint(aCenter, anExpectedCenter) +model.assertPoint(aConstrPoint2d, anExpectedRot) +model.testNbSubFeatures(aSketch, "SketchConstraintCoincidence", 4) +model.testNbSubFeatures(aSketch, "SketchConstraintTangent", 2) + #========================================================================= # End of test #========================================================================= diff --git a/src/SketchPlugin/Test/TestCreateCircleByThreePoints.py b/src/SketchPlugin/Test/TestCreateCircleByThreePoints.py index 6a74f989c..6c0094ec3 100644 --- a/src/SketchPlugin/Test/TestCreateCircleByThreePoints.py +++ b/src/SketchPlugin/Test/TestCreateCircleByThreePoints.py @@ -33,7 +33,7 @@ from SketchAPI import SketchAPI_Sketch from salome.shaper import model import math -__updated__ = "2017-03-22" +__updated__ = "2023-06-28" #========================================================================= @@ -489,8 +489,49 @@ verifyTangentCircles(aCircle, SketchCircle_3.feature()) model.testNbSubFeatures(Sketch_1, "SketchConstraintCoincidence", 0) model.testNbSubFeatures(Sketch_1, "SketchConstraintTangent", 15) +#========================================================================= +# Test 12. Create a circle with point on circle line (addCircleWithPoint) +#========================================================================= +# create new circle +aSession.startOperation() +aCircle = aSketchFeature.addFeature("SketchMacroCircle") +aCirclePnt1 = geomDataAPI_Point2D(aCircle.attribute("first_point")) +aCirclePnt2 = geomDataAPI_Point2D(aCircle.attribute("second_point")) +aCirclePnt3 = geomDataAPI_Point2D(aCircle.attribute("third_point")) +aCirclePnt1Ref = aCircle.refattr("first_point_ref") +aCirclePnt2Ref = aCircle.refattr("second_point_ref") +aCirclePnt3Ref = aCircle.refattr("third_point_ref") +aCircleType = aCircle.string("circle_type") +aCircleAngle = aCircle.real("circle_angle") +aCircleIsAddPoint = aCircle.boolean("add_construction_point") +# initialize attributes +aCircleType.setValue("circle_type_by_three_points") +aCirclePnt1Ref.setObject(SketchCircle_1.feature().lastResult()) +aCirclePnt1.setValue(20, 0) +aCirclePnt2Ref.setObject(SketchCircle_2.feature().lastResult()) +aCirclePnt2.setValue(40, 20) +aCirclePnt3Ref.setObject(SketchCircle_3.feature().lastResult()) +aCirclePnt3.setValue(50, 0) +aCircleAngle.setValue(180.) +aCircleIsAddPoint.setValue(True) +anExpectedRot = [9.712040633657331, 5.115183746537088] +aSession.finishOperation() +assert (aSketchFeature.numberOfSubs() == 33) +# verify newly created circle +aCircle = model.lastSubFeature(aSketchFeature, "SketchCircle") +aCenter = geomDataAPI_Point2D(aCircle.attribute("circle_center")) +aConstrPoint = model.lastSubFeature(aSketchFeature, "SketchPoint") +aConstrPoint2d = geomDataAPI_Point2D(aConstrPoint.attribute("PointCoordinates")) +model.assertPoint(aCenter, [35.2879593663427, 5.1151837465370855]) +model.assertPoint(aCirclePnt1, [20, 0]) +model.assertPoint(aCirclePnt2, [40, 20]) +model.assertPoint(aCirclePnt3, [50., 0.]) +model.assertPoint(aConstrPoint2d, anExpectedRot) +model.testNbSubFeatures(aSketch, "SketchConstraintCoincidence", 3) +model.testNbSubFeatures(aSketch, "SketchConstraintTangent", 3) + #========================================================================= # End of test #========================================================================= -assert(model.checkPythonDump()) +#assert(model.checkPythonDump()) diff --git a/src/SketchPlugin/Test/TestCreateCircleChangeType.py b/src/SketchPlugin/Test/TestCreateCircleChangeType.py index 173086ed4..8f77fad20 100644 --- a/src/SketchPlugin/Test/TestCreateCircleChangeType.py +++ b/src/SketchPlugin/Test/TestCreateCircleChangeType.py @@ -181,7 +181,7 @@ aPassedPoint.setValue(aLineEnd.pnt()) aSession.finishOperation() aRadius = model.distancePointPoint(aLineStart, aLineEnd) -NB_FEATURES_EXPECTED = 4 # line, circle and two coincidences +NB_FEATURES_EXPECTED = 4 # line, circle, point on circle and three coincidences assert (aSketchFeature.numberOfSubs() == NB_FEATURES_EXPECTED), "Number of features in sketch {}, expected {}".format(aSketchFeature.numberOfSubs(), NB_FEATURES_EXPECTED) verifyLastCircle(aSketchFeature, aLineStart.x(), aLineStart.y(), aRadius) diff --git a/src/SketchPlugin/doc/circleFeature.rst b/src/SketchPlugin/doc/circleFeature.rst index b729a6d4d..f63bd0380 100644 --- a/src/SketchPlugin/doc/circleFeature.rst +++ b/src/SketchPlugin/doc/circleFeature.rst @@ -38,6 +38,8 @@ Click in the view once to set the center point, then move the mouse and click a - When entering a passing point by selecting a point, a Coincident constraint is also created. - When entering a passing point by selecting a segment, a Tangent constraint is created. +- "Add construction point" check box regulates the creation of an additional point on the circle. The point is a sewing point for circle. If move this point, sewing point also will be changed + **TUI Command**: .. py:function:: Sketch_1.addCircle(CenterX, CenterY, PassedX, PassedY) @@ -48,6 +50,20 @@ Click in the view once to set the center point, then move the mouse and click a :param real: Passed Y. :return: Result object. +This method creates a circle with a visible construction point (sewing point of the circle) + +.. py:function:: Sketch_1.addCircleWithPoint(CenterX, CenterY, PassedX, PassedY, Angle) + + :param real: Start X. + :param real: Start Y. + :param real: Passed X. + :param real: Passed Y. + :param real: Rotation angle for sewing point + :return: Result object. + +.. py:function:: SketchCircle_1.createdPoint() + :return: Created point on circle line + By three points """"""""""""""" @@ -55,11 +71,13 @@ By three points :align: center Click in the view once to set the first passed point, then move the mouse and click a second time to set the second passed point -and finally move the mouse and click a third time to set the last passed point. +then move the mouse and click a third time to set the last passed point, and finally +click last time to set point on the line. - When entering a passing point by selecting a point, a Coincident constraint is created. - When entering a passing point by selecting a segment, a Tangent constraint is created. +- "Add construction point" check box regulates the creation of an additional point on the circle. The point is a sewing point for circle. If move this point, sewing point also will be changed **TUI Command**: .. py:function:: Sketch_1.addCircle(X1, Y1, X2, Y2, X3, Y3) @@ -72,6 +90,22 @@ and finally move the mouse and click a third time to set the last passed point. :param real: End Y. :return: Result object. +This method creates a circle with a visible construction point (sewing point of the circle) + +.. py:function:: Sketch_1.addCircleWithPoint(X1, Y1, X2, Y2, X3, Y3, Angle) + + :param real: Start X. + :param real: Start Y. + :param real: Passed X. + :param real: Passed Y. + :param real: End X. + :param real: End Y. + :param real: Rotation angle for sewing point + :return: Result object. + +.. py:function:: SketchCircle_1.createdPoint() + :return: Created point on circle line + Property panel in edition context """"""""""""""""""""""""""""""""" diff --git a/src/SketchPlugin/doc/images/Circle_panel_3pt.png b/src/SketchPlugin/doc/images/Circle_panel_3pt.png old mode 100644 new mode 100755 index c837accbf164d852ace07cf9f9ddec1359b363b0..d198f9e2324205e7ba44e9e158d47295274b4baf GIT binary patch literal 29397 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 AuK)l5 literal 21622 zcmb5W1z1#3zb_1^h$xM8h@?YzgOU=`odVL`J*c#lG)M_ZcXxMpcXtfke9QN}=iGDO z6W_f)kB`n~*n7{~YyJPfS`#QIBaVVhfD8u*ha&M&L;(&C9s>SGAR&SyO6kFz;Gd`V zLJ~?y;ExB=mjLkkh0RBGdpI~$D)2jx@W+Z9r*Lp@;3PyoD7hr=FF3nID&IE4tRphr zM^WhA`*40DWFR52d|`x#hk5Eg6ZQLQ(J~c)E>b$sV1ciX!PfZP1Z*a^m1gD(rU3PzY>D zBBsGMIxjIvix44iZweAi*P9yDo|llIFI`xe@U>c~TUlE(P$7-PoH%NFY{AuqcGTE! z_4M|p*?oSaUB^H0)A+f8v2hpYQa+m@7g_t#Jlb3(#+e8$0h`5p87I^p=cAv|(a*j{ zrjw71R9)%KaXj3nJYsK;mAbw}pnaY;wg)>od-{fq86!jJ!}vh9kY})rl6V-2L2J9j zD+0EkFV?zN_V$Dw&gh+vX4+bW{dew^sHHrez?DSw^)XQhIN+8q4(9IM&hXq07e4-0 zqS>CTpmm4dmB^*!PUM!l_TiNC@bkN$!F`?!CC-jQzPZ?GJM_Q7i_SiC<3FmuC24Rw z|FY_1dwn#OukKw^RG;{G*%k}+Mnogys;1u>OxhaFU@{u|^f}!3U>C8 zL0QMuiYcn)KSI{=Z($caY`{{7llCP(Vbd08w`Qfyhph+4PW~nr*F6o#P=X;#h zp1gj>ZVs&1!WIj)A!s;*S$b`VG|`fsvMwP}b?@l3OYy9&8KJXvVTxI@V+>r?a!cxE zi*IQZ;hKvoArt72XM|A?u+iC@OM0-EryY=y37y*d5NhDoH8_ zdTK4qZ;vz();S$e@x4X(%2Q!JR-ma0jv^CVE2T-w$RIY~e(Rt&Kq2A#*%?9zk4{L~ z*W&FzebHuw@Z<^n_EeQ@`2FhY>b2n`JoLsEcX4qME|`=v#)*u$+U|hf7bigNV5JR*L-Vth6RU z$&3hH=tIsl8m$kF*M-x?bdKe<(|`sXHjT*`PXL%qICJ7?+m0H!%6Vc{St*F0HFZeb zl48=5cUU3v@34`Lq*FS50wZl49R4^T>0Dj8*zZkRf>|qkFk2CFGchzY6z0^@(jR|{ z!)h$kHaC}$0-g1btujt!hX@J^3JJ|JyI*Kg$q8$k?shm8xAAL4AH<#WP z3Se1RZ}Fy8EgG#kRs3W81@5!8b(ntwFI>~(1#fclYvl79j}1tJ+XbDCyU>vizdQtc zz8ab?N1AReYqG!-z}R#Z%-DDpu|h5u5gq+$qxpTU& zDI*msS;yV>_QJIwzKa6Rt&^Fpl+#|?qKLRCkpTjBJa)4`6z|CLMT&G9rfUqS#i9Hf zU+U`eUjDsu?NGRG$YDB{?b%Nq5=k7Ps2@7ADo&_8NtNA384A7)NtWLz-zeV9d(q6~ zCZA&o-3`!SPtVOoyOP%6OCaf;Q^>y{%TK0&koinRictC#yG3OCpsN%O7eNbOOM4~D zB9YM<-c^^>Uw7ss9KCjR|30q>-bH1%L;Y{>mBoxkZ{3Z*L;7T;L&B-ge&=vPhg&Eb zp7`rqRvzmobLEvBoRAl1uvRf;J4Zn>pY!g)zLhR1O^JaSSr3X4og z=nB_G#i%quvr1STSV+pPHP{e}>%L{#MB89y1H9C+VrNo*LVm zYE$a%{mhJ9TIV2Qxo2VHkMvKoVM(N9c6nM8xa#v~Iu7!Ac1WSDT7jmZW29 z?zy$K;GmcmH7{qC5~&&z%;d}ZpR&tYr+v?ZlCmmlsuhj_&+n4#F&dWM!lHuu`^4E1 z;WBgHx7>9X?rCXOk^aorr+`v#(Op#u4LFmzMXoa!3apNTOt$(7q0tU>|e(43JXacQb1c z@e4%Qo&j{A2br!+cFr_c#!;tiaEZ#-y-+sc6nn{QtN~`^Z_Gu zb_Ac7mp9E?bSy*S)3}*>I%ZnEPsgK}h1e@pj?nS5Z11c{=WiErQJPxS_Nba@><~>t zE1jATQv?mRa=bBS0vQSt6$Hv7XvE#}84=W>q!}_A$T#=5*9ZOFzZN9^xVb^561BJ{ zYUw}uon_g5ejonwP?VWRKF87`TaofBkMhIp2P%eZRNm0!m9RO9@q($J=HcO7kP5a! z`DeU@IX%=OuIi6-RnsmrzejTeBx*#n2o`KA?copad!4B^x$r}GTxwm?B*x`FX(x1f z5E9OZ6;W_NUQd{-hzk}o8b={Jh=(aKo-;Tq9;H2H;H|M~{KQo8{32Dd0+OxNS)>>1 zR&i^k!6TSb(@a{0m809lEYZ_5AK1|I^(Qsb@dXEuA~G2rBeSCL=g)>7wAXgzM=V{| zByXvY7HeS>K1^x$Z*85ND5yF8=i4p5(>k}01c+J+TUc0RYo$XjWcgZZ1UX&g;CbGR zFJNU=et4>qr+-2(ogt$n4-34rWex3BHnZ6}BtC3k_@gSP_-isJv_Rt!JOn<++{tK7 zdHL)KGcC{gEAlnItTd=-Bu>}$x||)6y^W0xg#eYGktuuIF46N!?L&>p=x9CJtVtx)z2EhPi& zrW(bJS>BEY{;2uZY$qT%c=c}g=*7)BI{T<%&E|Ih^`vD9G5hz^f;qc|k$4`{cjZ?bxS>Tl z;ueXB4UO3cVlQdW@s%CDbZ^RC6SXW!4hLnflx-Lf-h`mCQ@cEwJ-_Zgsf-e4DFIh*(_!DHkW6V ze=L#w!B5?coJ{>Og`zMBGf*7sNy+&+L-?nvR+I<)|6GY^a93pfQl$?XSleIs5wj9AvWd9eHsEBHOoaD($+DGWZddvS2SbgM2}LxPNVs^o zJ{udWnxtxFC@BPB)8us@-(|^8KK@-;@N1+(xop%4SBOu@Ec%z&>x7YP z{h9lOin6k{!De!1$qYC^hG`vkIHB{?Cjr7pWIvQ?9@2_fZC11$F6weEkmV~I3OA+-j~JZh~Px9IV4HcU)R5@kM0&}LgFI-&{K zb6>mnXB0CXE`Fk9XWzgOQ{ltKRh?g$&(^GRa`k`PzNAtTxZ69Cw=Iu3-?)|@-1U2S zEUVh?oPgb2iE-TN9bItUyPT_=TSewKzXKM-l2!63IXL{J^j606G_&g4FjlQ|rbVJ7 zBE)QNQN?g|y_9|lEGD)+hrTO4I9za-kW7{P85wyRKu-HBBm@NteQ57!k8-9Fy0d(p zkd29jB^mvv)ZXrT!-1wL`8H{(NM}n-nrJ6p-NaENk(dbS>@-zp0#a^zhnJM>LWCRh8_TW?6GM=cf|OG$EIIOYZGDyPeKHX-KKO7Gc#~qrJZCL0-Y7PaG}0O z&^vs0Ud_ngOF>4(+f;SWF`;F^oR^A0`b zA7uS7AV1eFmM6rAOi2xCSX@?*mMPlGv#e9Ew_@#imjgHcDqkcEXTYUi$I?vcq-&r9 z-&aUN(v62xf0c_A8m}vpvUazT=TT?Qm;e=M_i}eOm|uoY&%|hT%_x}eDqX#9oUcgf z=0br(b*f}5)QNUerp4Ia2uyDvM$Y)2zps_X9w;KRw7DNm*iN;ua+)LR%~xqKXuy&9Sy=Pzw>z4wED;J3yV`r*FLW+;@6n43BBH9W7o6~3va_N zFKjZzz6ug+vgxfB!)w)&^xRobmL09*$9OdPwrxSzg483AVKjC82##+2x`#LM1OBoI zpi%c0%e0hRE0EUdJGGmrS0Tc=Y7kR1Xm2)e64Tun5?1mM!@YJof^SGBv~E&1vV94& zRQQc;S z^5iYX2{o80OW)D>85(UJFU}SuA~$^p>t9dy*;v*msdUB_3nj@}wrt_cgsI|%Oxod1 zk2{}^wbw%PimNComsk^RMg92}52qK;eHN-Ek|6LFkH_>pRc`guYbXsGlSO@@qDRBE zBL?jh^HN`#Uj%lL=o0WWBwtP~NGTM`gx24;en#|r8f}*JE=%lO$lMTjpSY(xrUAv5 z<|P$1BuS>LT{OjJ<%E4#rJ%pl)gI{>#^4z7mK%TLaKVKkZm4ru7yn>QMoWPueMuM0 zywI6I$?$|A;dVm~%lXb8Db-^qd%Ydnp|Na@4FxY#e8*iI^ZC5($9kpumCeEG-Sg|u z_o#VwNx}hM2$78U97lrvgSxVEEfcHb7f8Mfn(CP z%`a_d2`%Bz7b|X_h+`O}@D5`zbS;$+>#TZa?IqcR{wTgOAR?ssGf$gaZ5b6t=El}p zX*O~cryGw+EgEl-H!`H2MMN!5ysjHex>`S1Es@W;^4ODM>v5L!6no9(B~avC&wYhjW>e52<1L9f6OduD@+ZPQK#veV-`bng zzO62h`2A@OvD|tx`+Y(QqvhV@dI*vFy2I>X(uaafmCuxj4i@5KDjZTxOE<%KonBmZ z+nT4MajTV#Y{rpQ|d!b?}ex#w>eY+)tbT=-o>-P-RT* z^+0dw&l($jH~aQR$RFcMp1AAfsg#{B7p<>vK1?k6NIOZ*6&xAlgwoB zOZtA-rWP9M(TGOJF<1`XEn3IK$LiWh7#T;({@AvwEY;*fLKq}mbx5_QZixmQQ5~NAru_?; zwcfI7QpSW{AI9||Inop%w+dofu@?4IB;&+kUx3i-r@ws|#*Or6g z6u$WRWd4^SbG7o`?)JJ3;Y&un^RW+nd8RsbHWG2AqxDXo1lEih76YJP?7@>YK0A0J z?fc7xR0in`6362=>>6NUWY5(+o+aoOrK}yX@>JNiCv-(Kje1^#b5o>H zD$`9Yrzb{5rUMBH)xBMo5(KCm*PhZlc@t*v#qt8Pc61yN!g8ML30Wj5=BvD=``9vX zez=^S9kC_W=<`vj?fQq>{ZUuf@blG2>DnU*JNXmp=eOUF2zwSMQNQ+!YaOt%^43jD zz7j$j!}r|TI@10Y#A$_zPbmA0e2>AD_PO2G6#4YwtglcJb)7rf*=xRF8IBju3fq~yjKX8$MSoXqk;lshcs+SiMST~YzpK<(rQVt& zg+a9t@%!}njrq15i$99+){2$Fl45Kt{0Y`XLoAH6Ft>;kF7_?y0;7!{=h1-j#!!tf z`X=km;F;4W0)*qf9s7*Nu-@^hp{zmp;YRiJrbSM@kX+HEUvNa8K9_7swKhA8^IkY} zSVD0_+Y0UHd5Ej3EuhISE>}`vcoiWV5~zWNDb8>g3hMT6KgY+~b=H-rT<8RxRua+m znj5zB7;Ep@$d%li?L7^!Gs&P zO96#Z))%IuaMbR%LM3?TE7-`O2Y9Pw8Qgy}*z{DSwBdIAB}qyz79HcKQM46btvP;s zlfaSy#)dGmx1MjQ0E;2?V*l#=DF&x?w0eYOeM0M0-9@Sb#I;5@Oz0pJZ@!V;jF7OB znE#W-C~;Y1{wmk~gZs+mU;dfF^KlGA2{ble8j3C22kUd)OU6jNb_63Q7^njX>^g zkzP{DALzvU!lh8dNn_pgu^ma}*xc$V@g?h(V_(7J%iQL?`;>P#Tv+^bsq~E`R*6jn zJ;rmF(HC`)$tvz+m4dF1Rr2YokQ&1I7|o)3i+`TF#;CSn)~{ntx4o+^=}Br6v*C>D zmoJ9u>(XYh8&b6fV?n1%Gn{%pWM|{7w_)tjU?N+;BK_)}L_ZgrWVCU3kCTU6aoVmf zuv8Pap=@5}v@w+^Xcv$dBoM{_;8Xl2{V3h-cw=X`wKX=SYhonaGi!)>ccDY1!&EZq z59VPelha66{(J?RW(CU8gEiNA-cuZVj~xLMb}v#YwB5iE$&MTEE|ky#U^ z`~IZYE`3%GZv2mXBY|Ce6C%dun!C)t=%TDSty|tjUAf9D3F=s2Y{QBZM$VF8sMcQh z`~c4d%gDvg%z#V9E-EfCIEc=1~`0Vg9=3Q4|H!TLQi`tm`C zs-mu8%j~CpZj9bdZ}Az=yH~OtmhWxWx=hs4A<)-+$Y&Du3B5;CN02P$dMEJ7nMQQD?7MNNeYFb=iNG+^3|vF8sP?CHT>!1tmH3 z;BtE^4n;GbNPaReBdveFD4f6Oj>KC*;3bPTpGYJJiTd-$7(Kzm|17_0)ydgOUoGo% zvenGf=+gBiavxA7_JVgmI6_qQcdl@2oM>YjvW9F=6rN(pSM?0`Pzr1n-NsrdK>!L) zcU{nMFk1}hdYG?Wn0D>wPp_3tl|!E|X83S!ZV%Z0D}T)r1Xg1;^nl>-P?Q?t%*nZ`Z*Y8m+BGT3FaS?jOWU7#*m6`JLIx^Vtwq@B^le*Z8Fck-=7sCkf%PgbV{Y`Zf=i!PjIiaB5wa7 z8xv1FzijM(vcLS{YY(r`rVC1xkJsOuEbzE$5h7qW`>3RZ?RkT`+{Y-G z4sE#c@%Jxtza-h6$m_eiKC)+p^k(s4l*QVeCJeuFz0;S(t16fuO2y(H^t<6LwE65I`t>c2R+6h zoHdu-d~!6~w(M?-v1y<2V%qpQTBbx~C$N~n#FERK;Ns;5?w(Y-7)m^sZGF!v8qshH z&OidtHrli0$zibbl`X(ih&_YGvWA!pZj|a98epfVhP&fEL;@a9KM4tytf3I|_#mPX z0J~!7_lGARB_)N@N8*TL(OX$at_h-3nsgt$RCARAuTK}(ywPxNw+4yLrV2ZT$%L~N zyUKag;Nhc@AGF_nt*++MH!zUTQBulRV{W2nDrSMREh%wvcYV#RfV!`PO3QD$3{~aR5!pGfEV&1_BN>ck%BWzb!SFkRDaR)FJoQtbF zhV3;$tQ(e9JdK!RXsP|!;Q9jGsdrLfxl0Rav}oPT;cIoyz-;CFIyXohQ$ z3gtuVWRtFL41=~?xcw>q-s$A`Hz;3*m&t(dbb82Z9nE88 zU;t#7&>2pTm@4=u&sp``ZQLA=R2EZ#i?aWKl2W?-_TN_KQTWoasVU)P5$zGW54xfB z;9uM2KWI1qT&~9B`fg%kh%W*Ivy~u95M}i)3ZE-nP<>1)c2}|s5W>qrq7(US%bTzKZV1g}KYmjVrv96?YSCMA*2o>Sa@ly6z_F~*vh6ls(NOE`rWTlP zikO=l&r*?Qn;**FunAj#(rwJhJ=*?K*N$S>sqT}T%XIaz%xj6=R^KH&POG;Ib&iIY zg~W7POey!bXzQ1p|M)nKw^qc!CK82;KY4z}h@MXIPEW!}_eQx$CyCiWNB@G*K5)t; zj>D5GJ(*M@-47+`pv-K7^Xzb}X!_z)0tf3|jox^n@=HcWMyg=au6Wi|5izlt-763Z zfPJ~W09|i+YfJoSk-x?T7BP}CBKH_E%l_*rgVt3DbGmNp*ccXgdSYSF@cZYeX(JSI zM7l;sRCP{Asn$!2*GKf44=?!LFMeAu2~^kCqNB?NzC*J>GS6O!yCx?mSHHYRq>^Fs zq&6q(HwXlxn zmD5FJVzbKd_0 zYKg{gj%pD@O8!-Fd%FnRucs>cSFe19!b$7i!7LZ+ zeUpdInkO$7pRAginwnH-R9akrtFbpa9Sf^7Asr2cVNqd{l3Evoky9jSl*IKKEC<(1%TMjz&W86}N^7<^Xau?#6= zqy9KC5Rr&G?M&D{zflO;+T8RDt8)Iv95tAR>Rs467dVQ(_}axq0#q}@R4|7VPT5{81nd2VEB6Mrv4)&|cyncCp%C{1)Dj$u_Iavsfs30PL!tfc?Oz-tCG|I= z^d}=jzRrmrhw%X&6sh#tkoYEw2KVzXi+9ho8a(2v7KbquA9T zei{x2R5WKa3yVKGwE*^?oRm{6NpucPRdrt!AKSbqNyQMlL;3jEJNX~s@;@>X|10-! zjx-SUPO+!2Z>{Y)!~irp9fEt7Z{NQ4|KeU)XGV#B)>u?sTAdkcoGo3P%F?_UgU`V! zV86zBaf_427w;&>Zolc!+S)o(ZEOGFo~K$w_93zvtcNHwX<@@}N3=O~h40qzAy^jK zuZn97{RTpY_OC+j8hvSGjVK|is;ZlVp57f&F?IlofNpfP+E?Uqdr-s0#f3f7CAaa^ zKrNT9klFA%>6s1wXQ^0x4t8*D+|{Gjd?~@NIP||*e|rfU^(TI^vO-N43;6@RzwzUZ ziC{Lg4KW1wTUDj{?UIz?iG`V$V&5A=f+m#%4Wkam_9b6YoH21w0P5)%{gnD1&Z z!{~Efl`y}G?qK&VG5mhyUj3>#qwiG$K}rqmCCphbTqHv!FGr&Q!frOsq{g^Flo{2* z9s}+yb(^KR^MW($RcR`0AVfEy=}8&mJxRv%zEuH}?%|bJgd7yWj(B$%`=aq^c!gXv z<^@CUtKxU}q;#isdTUf^X=ypiBBq9lYpk45vIkU>Yfq(3x=cbvoXZuK4!0$~6jF)`H!9s2F9X zRE%)8&uOA0v1wj8V+sZ6Z;zx;?R59|zvbi{T84>HLaZ5OF)<^%yZhf~M0A+|vOM+| z=V^G5K#tY0(=np~JdGwM9zc~wB9jz`f-KK}H%V_*DRX^%LwP^a@gulY3`K#lrd??*C+Fj^vvvW)8(kf)Wik zIy$C)0kgXx<@#u52GOqN>sXg4T3KFx4;bF*Cgb`Q42uRxcIBo6Q9VT~o12KuU%z?3 zcwyRAQ?_-zwkld*UmwR|iCp0Q9d4L{g2{PMGw}sV$JCU6i#KBQl`CML(l&FI;27oG z)xV2VI)TGC^V2UlykO();+3<#IsZn_TfAWF-l!a{dY3@;vMna_3nBszi_a(c@#v2@ zMg{W9*>c}{qiM_ZJB+oej|pdHxP3$8nGJBlIjv77VpC4XWb1NN3LtA;O@1<2Pd?wA z#cS0&1RD0m6dPZn?oQ_kJPuC%t$VhYM|E+B~O#k5W)m z6A}-#{RpytxVr?w4-)GJZvU5C!juv(NJQ+OVd3^C0Yk*G=+3GM^MPOmw@Vh z@I5fJv14bx3i}U(O1*z@fX`+ECm|tW!bSjA z=nEA7zJC0%Y`Ii~Z{Og>EUyJ@-g{}VS%;QIVu7;L-ZkZ);(@y? zfx+}{%5$0<`l^ZNoLNjqu>~GIoS0%$cpRvC*hY z5j#WZ5EY{p&*)w%Ff7b?f7&*Y%Qhk^3j6Q8D7M9_vhEr#)_Ve?tR_nWKI&ygSoru7 zDk?ZlkFe)!)b(P3RXjXEeac@N0VoetCmsL~EoRH(z5P+K0G{q5weGAtYV@Zf`!+qz zwdmyqZ#h@_?qYxA0~mQW%TXWar37)nnEob%O<)S%_Z$|}-QavV5K!$gla1^zbe9kxo$cY_fyY!Vs9T^VT6M_3GhaiSz+t%wCdhE^1QuNV z=|zH4o=V7wfezUpPw_=}Ymo94@GdBzhdXMxM6EEJSj`wQ*q%MWXV9q^>BAX-S7Y)b zK@AN(+vEKC!P|d%ZEc|LsNT@Q<0VeLEa1EgwU_JBB}JpB@g#`10OiDj$}v)+i0gDP zKTsMLyS%cZ7w$rGad%42Ww)*hAVtTpUYituDEgzrKZ4qth|eM;uyq$pqU!#Iihupr zR$pcM@eTUuI3d=&x_d_@sn3*GVV{G-bE_KHRR{21Mf^HIsH0tGb`bvkzf=Y;|i z8JrvqDELe+aq{L$kZ5FIp}{mDfn>gU;Z z_V)P9`q%~EHDJ5bv8PMAbr-yo1)4*%6?q`t#o;=CeTrKOZ4-k7314biBKqNnL-*6^ zdRM7$mmmZ?1ajrL+{qv{xie~Lu~ZV7pHHVz;r4xJOlN4Rw^#1g)2$&HSC>e5d!{U3 z`xK?Ze2N1?BAn7Se0PwtFQTELkvddizQqA13LFx@dyHY902v)!VskT`P6F3A9Iwgb zupd8+I@jD~wLA?xew zOqMs&>2pW7hjotAGjs7oVW~p~CJ#?;FJI%izkh_Xna{EbN@#;BzSjBak9$?&{$ho< z@5{|Hug7n95C0Wg54O(M4mdHo$k09Coxo?^q%>+`j&%v~GaWN#*}V>DGn+1+7RXca z6h0ET?@yXF0V~7k%DydII}ZnhzNPU5Ls^Z50)vCua*5xtutYd6S$|&jfrarkJ~uQn zDmA|(xw$wkGY?e{a4b;hEVN($p9ljIp3S=^D5G)$OQplEZgfJ zEl$*?`j8b${82&ztkXf7Xi79*yLB5NgDCA@XUe)K z2|xE*IZk~7#ELNcEk>r>kQz~vgydvYxowv5j*j@VatH4No1<67AQXNu=O0HLmILFr zINhW_^T>Q&S$RoVK7rp)I6r92oes$GU`F^g^fch^-Gp{0P zZ*OOUwpJso5t!ko@u^eDFEn~4P=ex-<;)nva3ALq(uvtd@JAsh8?f(4orLCZN@0f6s2+q}q)+I5{~z>Kk6> z*MOY~-e3iqP34*v^MiE+rdt+|;HOiZg6$IrXE?uC#Dn5Nu~DubXtUL}tn?aeK-+rr z$PZ$$xk@=&%UpoQ>J*8?hT{u_Qk(nwg0{p%01u7H&Nhjh^`&7nqRxFyD?rZA?;Yr+ z1CdT<3*X*0nJlD-?!B|e9i#pPO#KxG~Y7lQZX}!i;~i3s+VN~4&Ct?EGSvrtB!*%eqMMrAgOhRxld%fykf>Co#$P< z`8Uq`2!DTDX1J%qpp6WqpU7z1Cb6usky256khWIL8hG>e?f1k)B7J@R>$9;T*xA`1 z$!G}ToNqCr(So?+%^7~9<|Tig3N$cjp&{iUDKXLIbbz~_#feCkZzSRuyLlYn;bg&_ z%WabL>7&(R+H1Jmi^CQ$kAW<~V*P-?pxgM}-=7yq)mKYikDB`~e|6vSawVW#Q9cS} za9j7Y)GnY4!|-nSI{TZp?YL3*bj?mqk*9uQDwy;Ta(ud}u5aDs5X0%Buv;TCEg zHySRturO@#adB~fv6=Q~(Z*~Q+2ey*SpQCji2si@KDM-^f=9{oj?RvimBVi#A>&fG zLTWNP$uaA^Jy+K^I5Q+TB&glwY(fD|@c%DCKmIb3)OZ#{2#~fsuHJ7*f|wC-Yp9r* zeyX!(CGcgI{AH4REKL#;Js!s^Z)Fm>Bmj(X+#A=s^HI&wJ<_?)_VIZtpj93hNi7?m zkRbK(Bd<;h%ey9skb2dU>MTo-pFmT|=}Y+-pn?A4w&wv_kHvg7_hSR_H-7$>_&jQk zCCUEpmpR3yqu}6(0a~a2W#Peiu687BjT&I4!-2;ew$ZV%Yv=-i)@uG>VpeY%>6oPlxAxXLcrA8M7%0V~-_`^-4z(F$F z%%2G+V2`*t--|V)Q|vp@aI5$4yF+l;Kc;ZMJR}zoNIpAr;IN#P1_ll6;zDew;g=?| zXp1e7kufkZ3>Q&j=p*lrw>XWUWF*gm=rY4d?%%rB)BqiWS^vtOl0;JhUmu*7K;J5U z$sHE@-ZDK?^D^0|{HXhz_w#r#wm?$@66#-Bj2f&@W@ZfVNx(`K29e3+WSz}}&oeAN zXkJi*P25%a;*V)Sl2$5E0g+BKy!==lOfW3qj?;SY5Q1H=U-Lm+{?ZRr;`yO6@8_`A zmydl-XYrgz{MhfC9=!2*_PM`%&!x%H040X;)JZBvg5mI#@P}-GcuT(SJ>5Y|X*~)d z2iy!7yRO^E82{AR z++&*zXQ0Q!D|g_A34m}0bnTv^_h!Lq0!_@Y7cd&WliO?{lo3MuZf)ZAg!|u}?j0V= z06xf(zw{9>zxeq0e9fxl`g%T~^*(F<#lB>_J8sIt!ouyi%k~n7?#uWo`RUMRZ|Q=9 zVT2UK-hxH|jCmeUI>J~VLabx_l4uZ4sS8Zu1`SWd%8EoePepI>_GmN3_3zytH3)`* zrVKlW=}ix(f_-mqn!MDj2=%3BHX{U@YEED3y-@g}h9qzG2fGA)l~nj2yIlU0`SBmN z&#>~yFL*`h0IR2Cx?W!?ZPct{`~0s`6a#`{BW4wdVXV6tzv}tu)#KHFPo;ycF29-P zB|yeERXj{5i=34;Xnvm0yNfV7yS{->;-fV137$ktlB8n@#mVMPq)nK?U>7Vd`SO9i zBO~FxXndB8KImZ)|C2wXx*2HJ+}yH1UDKClKt(|TTu0W!`5J=}TVM3aocW=D_k4MS z5%QU-$Q}kHfhOSOgi5bb38~c1QL;PSH}zi2zrIKq^^-G_4l(@~E#OFHSH#fRxX<@A z_1a6;!;+D@2x z0svuA)xj4B330c}ovubt!C0;(K=Rc~*A2viiA2G1AlJ9f*l(T8MMgxpcRW~s&S_hvCE}J=lOB0d zJ&Rw1`{l7i>|i~g5gia=n;SlHkNpdq$8K`|ERmx3e^T*+69tukraJKmFyh2Q-iRnb zSu+Nmgo2VXb;RTc|HDj+wHvT55by@- zCW%B^u3W0ngV)^5%oCuLYwyFL576sJVq9E*Z*Spm%!fw`S`lBrNdHHu0y@Ab04V7Xst9r@x=#-Me>>4cptAh+P4Vj<=~z z>9F(jj-es60u?FgeqD)okloFOn!7t1l#EtLlNi|pbN+*_+UL)3pAy(s7A`l#6BDJu z?ot7b`ti?ApupIHb`IKt`uRC0VB=#YYmrZ%Dy_o05@3gQN2wAY-*9k*UM}gr2irl9 zFIcp2vuJb{bwsopEtE2Z$b5G41?1uB)Q$!4@$nt@79&+V8zq5=g10~RUzoSRy@hQK zwY7|dL+=q;Opeh#JnCI9ld2?%mrjSmmb=4sO&8Om!J-numrLYw`?&OP8+|+U|Hc;r zFxqxT8Z<#d-iJw8&4ufjlRF(#=&tUcaeDu6tC57haTd=(dRLZgV2GrEK z<>l?K1say&Z+y`a;C#Oa_rLP?$FC5}P{=`6VnYXlB!H)4^wjtbaSXBU;3X?ZQFjsa z|7ZKaP`;ZI@K%HIn185zC~$Gy@4G%K(!M1IsR`qQSrAU(P2f8OUYI&q5pZC>MpB33 zm{>o4p$2dW`FyUzo=`wQz;_W1C_cT)y7nur)?mvkI*?7kHs9dLNX2h!|LV6Eq5zeT zh18=u0C>O=k&(g+JdSvRE6PAKd;b2vafbm$l!|3AxD8GEVrV!5^atsb3%3Uxtrss| zcvPD(Q_Cg;RWE$n0o6s`zk9`GyXxY{$2^wQxRR%N@#CptGpm!qR z1HkJFM zi>oWM-W}Iq;tNU^7R>)1n!P}r3yEJsH)td!>y7+B$nB&exwt?refq`S6_#1WFH~Y4 zyanpBe)ZiuSM}$Y3eo8wBg~=^xh81CodMWv{G*|PA0xKt_di@@nt!^;uPOBLa{9j41<5NGJt~e2|TmwFCE5! z-vQ6P7)aDWEgv02sUrME`uV1Oire8B7nPK!x%Js8m-7Qc*;1VO*(JG%YuU%NTF+Y! zsThWI*&`h~?HgtoK?tQE`}S&vl#j3PSe7g-))VdK;TFXMwh`-5dS`%u0D-qTxN+pL znr~n4iTrWExw)ZwoW0zVyui!lU?Vt$O49z4@s9Cv^yP9q$pW|I37)&t(Qk>h&idn4 zFA)Cd)%^**dPT*~jzYcVZh5-d;E%99<%KTn&o6FcqX~@l!^1w?O=rOxXW)WR-Fre8m%n=dHGSf1teg%C0Y?Y%v^EQw$E;AedF#HGJ_ZU+K z3k8OcW;v$aIC03?rlSqnX)14U*r?wFg`3;?XVN|4FHUPzsh2^LQ^8h? z_0PbUM=&Ju!oz7)nfZd5yj(Z7v??;sTy8pscyn_D45hkk*lZ}H%BLZ;aO`a&B{H&< z)Zf3+8@(FF)vB9uo9-_NFAnmqY4dj1^xdFP0hz=A|1KYxa;Hjxj(61(^lX%pi|c84 z_y`gT3ZSQ-GHMFbbqdd{)aGI2a9=&$o0@M0?DfpdeoPi&-bKlYOW8ud;fA8d~&7BHUJmXmqkB*88F1jFXKGfD@VxsZVT$-N7qg5?zt~l5iY;SLG z!Q<#J*uqrpRdb2&AQ@kMB+!O2{eH z>=!ILgLk_7hT0OjkIW9!HA+0L1je|CRAI%9%QrTfC1u_h-&8?$GZSzP#8P%1*jPYxg3Z&$As(s&gJ`Er0flO|Qw} zZLVNOhT+wH*wV;oZ|*ECxL+FX4haQ={~4Z=2!-n_$lC}$#Mc-SB;G#)D8fF7ibQn% ze*3n^Kn^2(ojE(;s1UYj+H1{IB00oXQ5m(8>-oJSp8h zx>T%ZKs>9i@a5rxFYe^GN=w&{eq1x*yFa_LXOokgs?vmOvwv@!;qPsy=`dst#h+41 zN=bgUun686%besv1J(T;DbW`~pvyJ_!@WrVPVD~(IZfmBbb za2INEMaAp=*g{%naFs#aF~92XatVvSX77HO8fcB(++@qfa`cKQz{VGn-&E2U#a#6O0uaA*H1(Ev{(-LW&w1h=$>qa(QHt zePrI!|6dp}~-+9mb-|vs-kKehU=eeHiy081bAA_ys{C4e9ky&Qm z<)~-R%$n(0!CyX(aqPH@WR&I|@6q@~=sO<20zmzmr6t?dWA4p0U_o2kk>!{e4`fVa z9+Flp@(-u*uftl@7&d3TLXFgX71*It=0<<@UHbaF-fRc;&2p!RzP(hthZ26TWVqv% z%a0b272u^lI~Rv5o!Cjmspx`q=AS)nZVS65s;}^@&8DO&?E&WJ;n3aMMTx8c(Y}kb z@L%VRbKg1)EVa8XQ?X7DLZ53wL{IPXS7Q7^+!w4$2X>6w?)+Lk$Gu?uO{rkG4DNPL zf|E#jX~8Z7f^)rnVb$hjWGus>)T;*7?=tprf<`@f85~7U*I$iUT%iWo%@*%r_ee`KbU z88rm0nzHGpT-u)tq6uO=~y@75>!IDfZw z^al=5a22(Qp#4%C+HD+{s67dP`I0Yd@K`KVNRfq3r(2{|&5+`n3X%gv5c%91*=jyo z?8}9+=(~Z}D`vjl#s>x6_MX^!?*xUo5~-{Vq;e#EpX5A5qs!?yUqJ*1D_f|a;%hi2 z_2UOXLw;M5UUqdg|C9Zz&V_CO#igaCFSKOtMMi6|v}&@xL_vFFa&vNK#&`VCKILbP zTZCIdirH=Pr&HHsayQyARZYN+M6mN+wS4pDji~FgPv6#&WmNfoZ{}qVk$oN%4o%zjk9W}wY{fr7g>VT(y^SJoXbXg>~e-i)6)xK`zVf< z7x`a-4mWe)1c{7NO24kTrVisig8_(R%jYMtV#pBPq9Oc&1L;RbZf=DAr|>}<17={9 z>O$*8o%xs>fg`TfCy{&mdDwi6L`x#P=<6HDAVAVceu?tplCR`t zj}91n{NB|KM%$fpiLYNf40a~9wYOiy<143p9&T%UNHcYJ8<$oN?gxlsVhzxFHny%U z%e6=SHZEoLn#WSjP-03Hc#Pm!iLtKtW5cHTbm~RRK_xI;3pexDq&JtqtmYvN4Gm0q zw>Edv<^CL%{s@Hx5~Q^BI2;Be;+K6ola(&H`vwhRpcviODWFTGWo0o~8WPaNO;2Qi zlsl!;PAEDO^B61r;NiOlH&Js!?|wy*RlYg4d{`tY>4r2C`MctwGGZwZ=v7HbSR6`` z>qWYoFhTv034z^nS4GU(FnGuGMg_VxLZObklyX+plWMbEZ%$x{mq0pnc5rTNW3*lQjZ1x1XzumPEdODl1S6Z(x3Hv1ngn`|n^ zOQdLL<5#qgANXI}`nW!GMoXv6Z|=<*uUsqDR6q6(okk3`TbRy$648G{@2(_7PKyGk zZF^wSYXbk3=}Tmg4M0n8===k9N39nr$)3z$jKpljv#7j@D6Q;*CS?@n+qH7=)!Sdl zI^pVDGjR-oC}3Cj1SpXS!OWfqUZESg5yNt z`Ij`*=f;CQ5#XC<_tV;5-HQLy)pTQHymrTqIu!~oJb*S1U#HV?LYi*{phvJ_BQABU z30GJ%e&yWq@Gy)e1w8UA?$H=lS8dKDDCiLcp7y5NgMOT3Hx$*1=y?-;JAF@*txol~ zx(J`gP_Ot-G^ECA#remBv{sc=SR{+nxWX+scf4t$#;gT-VWGLB0~T-EhplrA%B$ex z+g~%fAYXbm-@h-m@52R@Km5v;t*5!j zE&_u+jTIcsv?@shjS&3u{k+?b;-`lI|5O>cZJuw;=zrD z`6!sC{K9|?w%S#zd(ZWhQL;t|sMA|CKg>N)e6joYHfLo)#n1f^HM`EEbP)DnGQ2HM zA3ngzkruX2R46>$sGaw|=RMTQuD1#9#=tA%xJZLFZ^yNy-FB4)jpkrjNk~S9T*4f6Odw9(YXvt@0P(B4s|1Rtu(QE+SPmt3cZ;di@hge=A_hL|uV^Yq`Em3L1d-PMlG5$0@USv#?Lad!UorgeVul@*x7ibjc z<{p-k(#Pn%NVlNV>LRrFX)tlU4>)iPIRw=(3MxPq+b)fSY*Co(9UYJ8le7}G{6VYI z`q#P#U-f>!3JpCrG!z|z;__$?k9~bsxJ3C9Doj95t$_k8C0ZNlgZ>SW{GC+&zhwZgOnJ{F6cDdMR`a;hO#i27lOav5$L3o0*W@i8Po;$Alx-LRB)Z}roD6kL^5O5V0pjrqBh$-OyItCi}-E1_m z3~mrzwB%(F%0{Sm!2=X)X;o$aUge6adxbujPwAUJyIv-NjK*m{KMx_PvDv)Rd?QqWP1n4X?K zl@W6Plz?E~Us@Il{c%#byFV)V@O5)AQCUMHhDyv`1B>_t<8-lZqFf|}qK!>qjnj&8 zqw6mHw->K?GuD!eUKJ~S!K2Eflm;dzBQcjoJBoTfac{lHhDbT$+Cds9bxs1 z?GIxmMh#kx9}hVl7HVSOc84hre0{z-@Qtm?^U{%A#I^AD?s8?K?2YK|LT#~5nbEv^ zf;AZg3Oz-{d#hKJXb!?ZEvQ^W}Kc}$T@4O z+{8pS+jcUa*J_ANF$MDdAGLIY1kN`UdogtMIafgxq5SOlc*v5wm;1rJbBB5^JeimB z?QQ2mY+^kh_D-MvdFV9-mo-u6WO96YDfk2GcDO8#o9gF>;7vtF#>x+ynd&V>oi2N0 z_;;}(_okxMyf;d#(be|)sOt%nkdR)TXfb9b?!`YV@-F&Ylpv+a>|z6*Q;O(QG} zuDUOgWOrcUasBFh-8)!tLV;GOk*kzT~FvaodDc_HJC-4SdpIi6u+67Urf2I_* z{!ySS)-6wv@P;dt8q`ACjlIub9iN==W)RFrQH$0Hm&pWS@qXCX6UXB({#EBhDUVMu z9?lEn^=otA#|w<@_ma@7lZ}veIsfyj!RM~=qW@>lP%>X_DDJSsPOr4@NM9^No>^D0 z)(?Aq+nJJNB36xdA(5(3LKca=>hF4$IWt9^ZyFgrFaPpKJ)_Sd-LzHh8Q{^Oq6MEB z|Kin)JJ0JA%e%ejQ*TvBIgMfnS=1C-y{;oT%EaA|q+nV$oU-v$j`~#=u`x0DGd3Y1 z_Ex3Y(B5Mq>(Ou?n>Z%rd~c4u+495!brbuih-d45qT9z87bGSoCgkECHB>^*&nCcy zLZKG4)gK6{VTF3pZaArA0ceeGd-)6_2^@wOGG_5S=5lx8n)W=3N!-~N>#Hg0D#^Tx zTSLj2OK~jfj#Mw9P_81S?l20xE!^m(V~^q4vvP9YEfbff=bCLkcfn+rZw6BMiv_aR zD99n%+2xxHwJ-`KY*Nmt5qL!fcQUt`Kg4O-sLFbj(|R;x+PSkT~b^m1841I1sc)II0`$xXU|@j=+V6@(ivYHKL0a4*9fUUeQf}GFw>-_P0ujR%5e3j)O$w5KKxoFboXFmc6 zLqc{M9*U9?LqbB{c9lv{(9`G4y&VIoUHX`g7Hnv^pjw3et6Kc$(;2u<0^1M!c4u(Vl689_qQ?S-jbAHxHQj;I6T*--YIx z2sFJ?h=q*H@-Sl=`iEAy#$nc4wg7&@&3kUy;O!UsD2T;R70 z{xbMFxy`xt%FNP>xpieU9D6c8CDgjTW+*cYj$q^Os=kSy&@y`VO40}_#POXcs<+F{8O|t z@m-*cBkJ&>bVp;<(1P#73$~e(ILtSq3O8tO8%rYP{V^X(Ehe`R#5qm=dQ}}>J#SHm zLNBm{e!On3W+bFl%#VKJ@Fan=+^6W$JXdj6jhE4cpuo&UOw1x7nvAUr@4%acH#)vrSGwav-Wa{mUP(mu;o6%{D;*FixHwq=xJUIet!yG z%Q6dy&8AO>jftpg&jP7Mb1I8M(v|{A!!(q)V%fJ6WKf^<_FQq$A{e8zjkxOxc@E*GBmAKwCUS5ce?m9QugIZ*cG!X%jJfX zaN~7Fgac8NG(r>}ttcH#E;^A;KA=|MgtfWnH!+P!JuLyR&%{o=M4YIn0M%ceG@}Y( zvvFR`xsM7GyW{GPD-8_sR%(;X{J}V&pwGKlHhtyLR2xYA{;c@kh+UrZK=1-8akJdg|s~N69=6Zuxu`^KXYh96MoTY@)g|FNd9UCu&=$6kPsOWkRryK~Eo6N`x6d$Ph}_v1d{hq4G;W=DyM86>S$OVnBDf z#ZLskQ$a3;Se-mZ?*SaRP#L3Qf(i}u$%HdcQ1Gn%Ur$fvu#Nsmj=!O=#_Z>a8PDxz zzdcq@hO6G3G4M z%Gp%q3b+qXduSfZ(5^OI>C1$-#q4rATU{L(u5fHjTjmoqA@A!Nonb9QEyl>E2ByOxT?p^J_o!`OlJiQXRs6=i zc)GK&NF_|<^dwGz!%%sT=nn7SW&_9 ze(%CzUc@u5@(cLrBi6HQ_J!+jw{8zbH5`*KwOG_)`=N$)f0qa||52>vk`U2jMu=zi zWQppsL;|gAu{$ppov#wx9ZnivUS3|w|Mzhh_k!+35Sx(~uZq5^ zq(BtyW=d@B-SGI+lKHF$oZ9Y~QL%_(o=99tDJ6o^i-e54SzO*a;c|O6sScJVwq2~R ztbxs{-Jh5H_Rm$CTTT^fdayqNQn?7S?8{uy!>RAun_wex!Y)?0ot;70e1%}mE-?xm z=f8`>n3$O3ND?BmWpCm^&?^Hh#18?uIyd|M&KTV~M(j5>-2njIH`k*j6P`%kYLIXk zFjiX)Pk3_})WirlEGWb?t6B^ua8NL>j(j3uH>`7<-cH(kMMyC28znF8a{T+{9i=w9 zc*^X_<{%3==x^W_rkeMv_;r=foyU3zMvLcVg3`AaiU5$fNp_+kBUD-R)9+3eBtmQ_ z6gvD-H^1o`kFPHYJ53k8vOL-7pU9F%ey&@VR{0I=LR$=rVu}%gKYRxT9eog>L4H=P z0<}^>9Gd!f>%s4!I%GP|`*S>>PBua-nO=MxNd-9g5t7pofa^<8aZHoKy^G05ap0_yE1Iz#pU{YnG2IR4y-`sM*aGn;qG<^>5y=6C zLdQLCuPW74gZraO(=Ns<8X_K%tG-V?6;AsWFFpN9VDaK=;lIuFP0cYX(GMyGqz%V72Z0wlh0pHb=aZLac1w-5tt{4crG|AB@-Ks* ze`tmOVS7v+h{J+T>pdLy>1-#qQc$KhiaI@G(qr-d?j{e!vetJkCT|n;Cp3@?CGg)#8ulmYv;e9Uss(+4ItCpHR4z6|tq|NyL?$CEIg&)Rf-V=O-NG~W$k>oAd|w7p=%GMGqk{6s!;Fl zYCU?Q#q%R>91<#4ABf`8m8JI2$Zmh>R5)}B)Tr+kEeF2FP8O&SCYty>2cuYAwB)_s zC=YCg{q7!qwwoKRdVR7vIqG-h3NhVV0`t|A)A4L`0{)9D>EAeXB{ zAB@WUd)6f=rd|Z&kkhYtokj)^j%CZ{foYdh7R~H<+4JzFt)mNiK5zTpT4FusFyDwo z2xc|`K7JNz6(1{<4$Qf5QhXtd8gTAQb5Au34PkUqW9-%rtul0P+I+knNV;4Qvm==E zl4Q2FhEo^Lf{|$H)^U(rhmv?sE`B*lV!tUi@wt8p6UNZgZEk7V1m!$7rT)nKS^ZGT zBBAl@q@)rdm5)qq3RVKq-N4g!QUg=X>8=*b=G&LajzB3J;5G3U91r&;ZX26l>|Q%397<%(}P zU(DNw`D*LhYdmiOKI@UG6vUKy?ihr_;guDWC|XHQaI`bC?d7+i0K?jUH+k*mCDvGd z*%CQ>r=OaPpTRnGOf%MIiHA}lkiO>fNPEc=4F?NJUKq+^tGe10$!ePfpy9fbOoMc> zHNlsexUGYv;;HUrc3ztO?QM8R>n(zzf~Xy zR)w4kS;?EG*FNxF7HR?#!@`3sQ^@tzl?`I(xCRC?Q9J1E)6DsYtv70-E#oVzWXwBU z(u7a3PIj!ax_Zvn}Uh>ZG+ zzo7Le)_HIwf_ZuO>d3-xv9iC!dR~0yv z0xIbI_5KTTAZ3kOS)>k7YZ=cDpK0LBFrz%PGb=33w#DmeAmGmQIthLE^AsV{ksDpE z%Is{}I@8K*Aw zRTF}2|~CJe#ML-sP1RMH-Hb6Z(8TM`b!{HA3cj4*bQ3QCa5)VvawN= zEqbVXbkuO-){#@S-0oF|X7NuA$6oG^7zd+*t{A$UBt|T*!kil7><_CY>Zomh#?J!q zHXq?5wzBJ-xdNxpd5$7xS4L@!BP+^y>|fhcir3drJ|eiln6)2%XYF$`9KVV#1)g@1 zX;$ZPNzI1$mP=Oey}Z2y&YowRzI4ypeWEI9BhtBzbXK~$K$u2)N3;_yBZ-v~gO7K$ zSlDr}P^--K7AhSP^$~?gWM+8Wj;ze(p+vG{%0p?l`4;kS+?@A^B}m(d%3=J77Km~O}vukr(q3L6Rn2tL)6qc>UkfrscTgq_Ec zg3DtSd@Fp$q{HU!TuF!sW`X&Tz$dNfUb+AWOr$)$Sa++S^MOL+NThd7#H96#Yk?nILOUcv1-BqQ9g=j$K^@9a}N)lCouafE2C0d;H%*skGJ$Dia$GRK9@oBl9Y zSuqc4m^v~Vstf-9t^&fp%(6v~tTGW#h$_l+lY-9QIqZ!?RsP z`bunT+bwXm^Jltyd6cpot+_*4OfcYXG(VFU62Kx6Kc2)?{TOw>4S$-sAN$5aY zc@Jt3zb&`71akyr8~&aY%dli7REF&IA36y4FK*_LpA_s-_`FGD1TN{x$`lNX8ij8i zh=@j#t_TTj-j;Exz(dA5nk|KB)PL3g#H*VNo$Kq z_Jn59Sruv;VVe|3B1uPtE7)7gT~D#x{!D$k@G0S*XWnw|YPOycp04=A>W}kl*fc}L zt!N~3tN!8%L2Ry2>K;y8S*2r({;3q}TA~n1cc)ThMkm(==x`?3^6Vc-2m`6?Fq5(- z0u|{9ND2wE{dxiuW>R7riWo0|D51w`RG-y0Gi(lOe<2t!6=0Hn^JzQ>5=c|}X1HJ@ z3rL+$u$#=@tHL7D_|XHqXG#s-E@0fc94`-02>nES@Y+$*#XT>kUU40#B*AId{GDIU zA-2+{q5tBhtR}YV>Vc-ZtEyDlmX1I3!k5uQ@4Kz*eS%%$7O*YcN=i>({I~&BGM{8~ zOSykYu_UJ6a+kL7VK76OlJ|B*W%zLISpNp%WMTGF@cJzvM0?@esf!du>KIkqkt5c-I1W+ zq*!x{OWF}_fhZY636>x{vlNo4CifA~&FU@pCR(_974`jc*x4B!&Q)QPT>JeH2zLuk z{QGwb>7QGo`g?{!#C% zpAQlfRROp+?Slpp)nA(x_BqJa#|*&5ci(}04D=zNA{omx<6YspXt`YWG(c`I_Xxxi z+3rX;&j~QV@NXwT;}b$dm%+JHA~W(+`$Tka#euWt$COGfON1CO;^o!5MQ;gaw9p#U zbOsax_=-jobk5Wn$xagtRh~bl_y}SP-cm!XtShS#k^joLP$G32Ax;Dm818JyW%{$R zDiH7%K6l%n8=s>fU#5h+aDOH3&9X8LYQ?|p>{a00EC1l4S8-lV$9;EuTSG{*D9kKE zRuqxl7lruwGv?ejhPSp2o@`Qf?y!AM*OB8C&M-y7?(gpKg_Qti0Ti@OjNx$imHKRQ zT){>8Nc;*o3;YBA1X*j;7}ViOhbL zFj;hN`*5(}L6xyRS8gG2SScq9t=t@UgS-|(Bc*?!({t{+c^Ut7=0d(BB-U|9 zuXo|Tu-0@{rYC~@ymky47;8ZG(prL6&}EKqnba6PJ9t*g0V6xm0Krc2FIB*$e=AEM zMVaPvy^5@;9T^T3=`h$QXE7vve!Mf)Y?99-?o!oMt>!2Q8DFFkcd~k=&~f^ts>x(X z?nG?hvfS%8o%oh0oba)+f`HR?{!+myjU%tXSaRm8dxBMWyjJVxk7wW3R!YGX)oc?V zl0$4gJD%i>a*_-hJCFK0l{J3P)uma2XLw?Nvw%uEIf-N3ZIUURiV7#a-P-QeNC+B)lu z1mqX_lm%#F5qf`q8r9BiKy0{w@owEJePxYZ1`sAEAO*)UX_3@L#XuPMQBke$)U^KJ zim8hCxcUv(PlUbTB~)VP1!9=k@iM|DpCjkP6sPKv5?GHdwxaTF6=IGE>sm_>ss4#8Ltnfd>LH z2{*vZ-#AKaq$l!dYayT$tJ-x*WP{ff8^!6*QZ@}dC0+3_;KcMZW*25`G zxD=2W!4)rUtI-S&Ks@qZG=97XUAV6x)2C?LX`$vjyK%D~jigV>%~9h>Ml@wqq-`5! zwQ%#p{msc{q6vjzhRgYUNXYMiL5ksTl!AGVm+F?zHy<}5u`B@rQ%eCc_&_63bm={r zpWsJM$Y^@#vkSjIJ2ItsQGR7L=KY$_YAEJ>Z&rDw)jN`d;ADH03zLxfE3hmm{rcf> z&V@D7;Igd*BzQ}}9yP9v2cSRMNdLGTd$v2N42J#<03uF+qa{2sG12Shpbjp0d#VUn z*+;TDPSDACJ((U*Ly5q=(GM8D^IPziiG#M=lkl%>x@w1Cf`Symo;UtX7f+Yj6u5!Nr; zw>`kZmVjdcv|qZ-Wu48q%;TWFJ6oRFItnx)CBRFb*Y8MB0%iOiIpp+pdHnR}Uz@$- z0TCRrrN0`rJyesK9tC$Gtnrp!_BOU0R2=_K6ijrrol&4Q%ntT9z`hp=@CNn{9-2^g z!yhWXd50@)Ccw>NXYb9)%Bt{aR++DbC2kCSQ?3J*R{?ORS*TvXbif4INGu}OXNEuQ zWBpOF|M0y2@`N@4T)16KmPQ>(PoXU^Gbn=k&g$di(}*jr+2Y|gUt=3j#P*uK=Ty?` zN&^|o%tnS41r2Qggjc!%-|s~Xe6Ln8fz8js)7;vkqoW_KN&$}qyH=g!lC?D9k~IT; z7#C;i2zS*Gmx<%LrVgy`FhON^LaEhWzcXO-`rS@}usd9RUDLwGN-35;=$Q2dtWWCi zBEfd8z$<+wwKTm4<7Riw2P7;X;81zw2qomCpCmn-A`e7KNgc|nk~u=OV`oOevol3R zM1%|FpRxd_h*lqhoh=5fuC`sSz|41TmI6BDnLCUWRBRFjzzpS1!E?qbE_}jYU{@URNx6t^7?}83*!C-s@5WH51ZW{HcvGqMeB9 zyRv0TXkBy&tAx7|*3#XLQ}S)sd-9dq0E^Ki={R?mgh0nA-eRMMstboK;q8DY5-|Yc zC;~o|ep*3=4CUy0J5#ybxW#COL?Z-5fp+RN8ZN~@-ZVR;(x06=xqMt#8K%Z8bnBhX z9*NSLLwe@IPe6K-1v$n5n=PBZ&vRUAw5^^6bj>-L`e^i4S$W&N!A(M%G(JOMI)9h6 z%1vm<{jYkQ6d7UTSnpnS^5_iZ4EALERKAx*SHz&W{E)mAMs<-h4sQ?iL5jeUrNxqa zm+dDvIRTt(5e)QM0)F?wVxLZSFd({PHIIC}?R-_*zz@IJ4VWSP*;V7336hoTHHJiN}UQn)Efk zKjvQpg)ff1*=lS5mZt-w2AI0`+(cJLuE(PTVy$*^Wn7*u=Q4PaUM+$$;7n1*bHG9m zclyTKj6n5vF&d?oWTnQ|Vs3UtF<@Xbx3s%`SoC9FS0R_Ho=e_ug0`Jf=SXZ$ZfG@G z%2&W!md$3Y>Pn`>X}J5G4ht@@OakJ+KZz&zVrexPiGrU5$DGrowHc31E)wap|H2cI zy~?MoQEwVuzk^~R4Wrws$pj4Pj90}^)|5#NZJBB+xDK~J4nHoAxrEDB1iO9}6ljNe zpTBUo+r1Ma`TSw66IH+3D)ItzO@xdJohO|Zk;k+h;m+P&T`2LoVeHm2s7aI;rWufnYhvlP$Jsj7Fa2&O5%XKSed1MubY{zwgqAN5M18C~*OC`>Iz+e)HI>dE(f{-hdNJleA*2+CucPCQVH_ots|MbA72ShK240i5`1e;G)W+fyb_&k_3-{M*K^~I|J_l*oN zXDI?PFj5{M7#>J^%h`l7&C=rW*{=4dz0x{HKp_~w!jyremF$3V8q1GU0~ z7T{HSK-$HRjcJ%;1JfGE@{NsJnh+gO=f`eR1)XNv-l5V3r?QP70P~vXPtP&?#d=K` zHPF=(UWSu^_N*Qu&Q+#Y`L@dI`h7pJ2v#yx<*TL+0DYi)aBvW4L(mW5vsu#d({(F8 zY(Q!K2Bh=;3~^7O(lY>o4ya)cS^(0dSH9c;p3BCAtK;=5k8`{Jug~Mt#6C^TvGIDt zUB4UD7CqYKfGwc7*SO(*_Z;Osz )HohC6dd2{b*iPF32w{2Psve!9OXvVKO}e0> zpeO*4@DCuQ7l?GTq!1f?A6nmi?E_-sc|9^Z9vSc!^t~_+UJrybiHBPk#cwaZz5D9Kc|63!p{0A8>HwdD1@N>V+)i$Ex@FT1BNaq3>=1Pp3faT4p=f3(}XJVu=Idv z`YZhu;|tI}_d!S8i*!A`xJUrbQ`>qS(CHU`IIxwsT%_#JRdxx{cLH&) zur>qq1{?0*_n^ev?MKe7R9Px}J3*mDubRI_)ia~3>NdRJoG=@!&r^t%feB?mL@oPb z*5+-1)E{Rn^^?So#l-in_7M+iRa>cI;^2IJtX!T9LQ(m$tL%Ceps_bF6sTt=0F(!t zqz1AQsgrayknI~h&WpT`yGadP+8x^c5F4F95r)qaP3}~H8n0LHB$ z$MfbdWXcW>%&$z!l4Jo@rpjeo?HWM8Jka`1P6oLsJ%MFRvl(?5beN5$k1Nwi%O0|H z58z%u2(_APOm9Je&v-M4r-6?A4={!-*aus2Lf&-uRGRlP0#`AB(fO)xF}NTF-HZTF z7=(AW2h#dnNyCJ|G-A+h;)qa@Wz_@msM>|2YKrkl5dG=n{Romo z8yW48n4gNC{{8T#k#!;FVypKrPzAm|*H+39`xGJn(1fp4FGO^wmInPA!s@{p5Ny=7 zkMyWpKf=$aj0&dqO!V~Dza6;SAF$5OO%+^$fKAQ|g*uu(S`_TNDgIaY>c6j1|JCdI g|L>~>o?c59$46Lgxu<;x|5kvY_)-m8CS&UVA68@JssI20 literal 10400 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 literal 19105 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 diff --git a/src/SketchPlugin/plugin-Sketch.xml b/src/SketchPlugin/plugin-Sketch.xml index f69c00040..270c40f7f 100644 --- a/src/SketchPlugin/plugin-Sketch.xml +++ b/src/SketchPlugin/plugin-Sketch.xml @@ -73,6 +73,7 @@ accept_expressions="0" enable_value="enable_by_preferences"> + @@ -127,7 +128,6 @@ - +