1 // Copyright (C) 2014-2024 CEA, EDF
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "SketchAPI_Circle.h"
22 #include <GeomAPI_Pnt2d.h>
24 #include <ModelHighAPI_Double.h>
25 #include <ModelHighAPI_Dumper.h>
26 #include <ModelHighAPI_Selection.h>
27 #include <ModelHighAPI_Tools.h>
29 #include <SketchAPI_Point.h>
30 #include <SketchPlugin_ConstraintCoincidenceInternal.h>
32 //==================================================================================================
33 SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr<ModelAPI_Feature> & theFeature)
34 : SketchAPI_SketchEntity(theFeature)
39 //==================================================================================================
40 SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr<ModelAPI_Feature>& theFeature,
46 : SketchAPI_SketchEntity(theFeature)
49 setByCenterAndRadius(theCenterX, theCenterY, theRadius, theIsAddPoint, theAngle);
53 //==================================================================================================
54 SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr<ModelAPI_Feature>& theFeature,
55 const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
59 : SketchAPI_SketchEntity(theFeature)
62 setByCenterAndRadius(theCenter, theRadius, theAngle);
66 //==================================================================================================
67 SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr<ModelAPI_Feature>& theFeature,
68 const ModelHighAPI_Selection& theExternal)
69 : SketchAPI_SketchEntity(theFeature)
72 setByExternal(theExternal);
76 //==================================================================================================
77 SketchAPI_Circle::SketchAPI_Circle(const std::shared_ptr<ModelAPI_Feature>& theFeature,
78 const std::wstring& theExternalName)
79 : SketchAPI_SketchEntity(theFeature)
82 setByExternalName(theExternalName);
86 //==================================================================================================
87 SketchAPI_Circle::~SketchAPI_Circle()
92 //==================================================================================================
93 void SketchAPI_Circle::setByCenterAndRadius(double theCenterX, double theCenterY,
94 double theRadius, bool theIsAddPoint,
97 fillAttribute(center(), theCenterX, theCenterY);
98 fillAttribute(theRadius, myradius);
99 fillAttribute(theIsAddPoint, myaddpoint);
100 fillAttribute(theAngle, myangle);
106 //==================================================================================================
107 void SketchAPI_Circle::setByCenterAndRadius(const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
108 double theRadius, bool theIsAddPoint,
111 fillAttribute(theCenter, mycenter);
112 fillAttribute(theRadius, myradius);
113 fillAttribute(theIsAddPoint, myaddpoint);
114 fillAttribute(theAngle, myangle);
120 //==================================================================================================
121 void SketchAPI_Circle::setByExternal(const ModelHighAPI_Selection & theExternal)
123 fillAttribute(theExternal, external());
128 //==================================================================================================
129 void SketchAPI_Circle::setByExternalName(const std::wstring & theExternalName)
131 fillAttribute(ModelHighAPI_Selection("EDGE", theExternalName), external());
136 //==================================================================================================
137 void SketchAPI_Circle::setCenter(double theX, double theY)
139 fillAttribute(center(), theX, theY);
144 //==================================================================================================
145 void SketchAPI_Circle::setCenter(const std::shared_ptr<GeomAPI_Pnt2d> & theCenter)
147 fillAttribute(theCenter, mycenter);
152 //==================================================================================================
153 void SketchAPI_Circle::setRadius(double theRadius)
155 fillAttribute(ModelHighAPI_Double(theRadius), myradius);
160 //==================================================================================================
161 void SketchAPI_Circle::setIsToAddPoint(bool theIsToAddPoint)
163 fillAttribute(theIsToAddPoint, myaddpoint);
168 //==================================================================================================
169 void SketchAPI_Circle::setAngle(double theAngle)
171 fillAttribute(ModelHighAPI_Double(theAngle), myangle);
176 //==================================================================================================
177 // Return created point
178 std::shared_ptr<SketchAPI_SketchEntity> SketchAPI_Circle::createdPoint() const
180 AttributeReferencePtr anRef = feature()->reference(SketchPlugin_Circle::CONSTRUCTION_POINT_REF_ID());
181 if (!anRef->isInitialized())
184 FeaturePtr aFeature = ModelAPI_Feature::feature(anRef->value());
185 if (aFeature && aFeature->getKind() == SketchPlugin_Point::ID())
187 return std::shared_ptr < SketchAPI_SketchEntity>(new SketchAPI_Point(aFeature));
192 //==================================================================================================
193 void SketchAPI_Circle::dump(ModelHighAPI_Dumper& theDumper) const
196 return; // no need to dump copied feature
198 FeaturePtr aBase = feature();
199 const std::string& aSketchName = theDumper.parentName(aBase);
201 const bool isToAddPoint = addpoint()->value();
203 AttributeSelectionPtr anExternal = aBase->selection(SketchPlugin_SketchEntity::EXTERNAL_ID());
204 if (anExternal->context()) {
205 // circle is external
208 theDumper << aBase << " = " << aSketchName << ".addCircleWithPoint(" << anExternal << ")" << std::endl;
212 theDumper << aBase << " = " << aSketchName << ".addCircle(" << anExternal << ")" << std::endl;
216 // circle given by center and radius
219 theDumper << aBase << " = " << aSketchName << ".addCircleWithPoint(" << center() << ", " << radius();
220 theDumper << ", " << angle() << ")" << std::endl;
221 std::shared_ptr<SketchAPI_SketchEntity> aPoint = createdPoint();
223 theDumper << aPoint->feature() << " = " << theDumper.name(aBase) << ".createdPoint()" << std::endl;
227 theDumper << aBase << " = " << aSketchName << ".addCircle("
228 << center() << ", " << radius() << ")" << std::endl;
231 // dump "auxiliary" flag if necessary
232 SketchAPI_SketchEntity::dump(theDumper);