-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
-
-// File: SketchAPI_Arc.cpp
-// Created: 09 June 2016
-// Author: Dmitry Bobylev
+// Copyright (C) 2014-2023 CEA, EDF
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
#include "SketchAPI_Arc.h"
#include <ModelHighAPI_Selection.h>
#include <ModelHighAPI_Tools.h>
-//==================================================================================================
+#include <SketchPlugin_ConstraintCoincidence.h>
+#include <SketchPlugin_ConstraintTangent.h>
+
+//================================================================================================
SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature> & theFeature)
: SketchAPI_SketchEntity(theFeature)
{
initialize();
}
-//==================================================================================================
+//================================================================================================
SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature>& theFeature,
double theCenterX, double theCenterY,
double theStartX, double theStartY,
: SketchAPI_SketchEntity(theFeature)
{
if(initialize()) {
- setByCenterStartEnd(theCenterX, theCenterY, theStartX, theStartY, theEndX, theEndY, theInversed);
+ setByCenterStartEnd(theCenterX, theCenterY, theStartX,
+ theStartY, theEndX, theEndY, theInversed);
}
}
-//==================================================================================================
+//================================================================================================
SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature>& theFeature,
const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
const std::shared_ptr<GeomAPI_Pnt2d>& theStart,
}
}
-//==================================================================================================
-SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature>& theFeature,
- double theStartX, double theStartY,
- double theEndX, double theEndY,
- double thePassedX, double thePassedY)
-: SketchAPI_SketchEntity(theFeature)
-{
- if (initialize()) {
- setByStartEndPassed(theStartX, theStartY, theEndX, theEndY, thePassedX, thePassedY);
- }
-}
-
-//==================================================================================================
-SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature>& theFeature,
- const std::shared_ptr<GeomAPI_Pnt2d>& theStart,
- const std::shared_ptr<GeomAPI_Pnt2d>& theEnd,
- const std::shared_ptr<GeomAPI_Pnt2d>& thePassed)
-: SketchAPI_SketchEntity(theFeature)
-{
- if (initialize()) {
- setByStartEndPassed(theStart, theEnd, thePassed);
- }
-}
-
-//==================================================================================================
-SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature>& theFeature,
- const ModelHighAPI_RefAttr& theTangentPoint,
- double theEndX, double theEndY,
- bool theInversed)
-: SketchAPI_SketchEntity(theFeature)
-{
- if (initialize()) {
- setByTangent(theTangentPoint, theEndX, theEndY, theInversed);
- }
-}
-
-//==================================================================================================
-SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature>& theFeature,
- const ModelHighAPI_RefAttr& theTangentPoint,
- const std::shared_ptr<GeomAPI_Pnt2d>& theEnd,
- bool theInversed)
-: SketchAPI_SketchEntity(theFeature)
-{
- if (initialize()) {
- setByTangent(theTangentPoint, theEnd, theInversed);
- }
-}
-
-//==================================================================================================
+//================================================================================================
SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature>& theFeature,
const ModelHighAPI_Selection& theExternal)
: SketchAPI_SketchEntity(theFeature)
}
}
-//==================================================================================================
+//================================================================================================
SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr<ModelAPI_Feature>& theFeature,
- const std::string& theExternalName)
+ const std::wstring& theExternalName)
: SketchAPI_SketchEntity(theFeature)
{
if (initialize()) {
}
}
-//==================================================================================================
+//================================================================================================
SketchAPI_Arc::~SketchAPI_Arc()
{
}
-//==================================================================================================
+//================================================================================================
void SketchAPI_Arc::setByCenterStartEnd(double theCenterX, double theCenterY,
double theStartX, double theStartY,
double theEndX, double theEndY,
bool theInversed)
{
- fillAttribute(SketchPlugin_Arc::ARC_TYPE_CENTER_START_END(), myarcType);
fillAttribute(center(), theCenterX, theCenterY);
fillAttribute(startPoint(), theStartX, theStartY);
fillAttribute(endPoint(), theEndX, theEndY);
- fillAttribute(theInversed, myinversed);
+ fillAttribute(theInversed, myreversed);
execute();
}
-//==================================================================================================
+//================================================================================================
void SketchAPI_Arc::setByCenterStartEnd(const std::shared_ptr<GeomAPI_Pnt2d>& theCenter,
const std::shared_ptr<GeomAPI_Pnt2d>& theStart,
const std::shared_ptr<GeomAPI_Pnt2d>& theEnd,
bool theInversed)
{
- fillAttribute(SketchPlugin_Arc::ARC_TYPE_CENTER_START_END(), myarcType);
fillAttribute(theCenter, mycenter);
fillAttribute(theStart, mystartPoint);
fillAttribute(theEnd, myendPoint);
- fillAttribute(theInversed, myinversed);
+ fillAttribute(theInversed, myreversed);
execute();
}
-//==================================================================================================
-void SketchAPI_Arc::setByStartEndPassed(double theStartX, double theStartY,
- double theEndX, double theEndY,
- double thePassedX, double thePassedY)
-{
- fillAttribute(SketchPlugin_Arc::ARC_TYPE_THREE_POINTS(), myarcType);
- fillAttribute(startPoint(), theStartX, theStartY);
- fillAttribute(endPoint(), theEndX, theEndY);
- fillAttribute(passedPoint(), thePassedX, thePassedY);
-
- execute();
-}
-
-//==================================================================================================
-void SketchAPI_Arc::setByStartEndPassed(const std::shared_ptr<GeomAPI_Pnt2d>& theStart,
- const std::shared_ptr<GeomAPI_Pnt2d>& theEnd,
- const std::shared_ptr<GeomAPI_Pnt2d>& thePassed)
-{
- fillAttribute(SketchPlugin_Arc::ARC_TYPE_THREE_POINTS(), myarcType);
- fillAttribute(theStart, mystartPoint);
- fillAttribute(theEnd, myendPoint);
- fillAttribute(thePassed, mypassedPoint);
-
- execute();
-}
-
-//==================================================================================================
-void SketchAPI_Arc::setByTangent(const ModelHighAPI_RefAttr& theTangentPoint,
- double theEndX, double theEndY,
- bool theInversed)
-{
- fillAttribute(SketchPlugin_Arc::ARC_TYPE_TANGENT(), myarcType);
- fillAttribute(theTangentPoint, mytangentPoint);
- fillAttribute(endPoint(), theEndX, theEndY);
- fillAttribute(theInversed, myinversed);
-
- execute();
-}
-
-//==================================================================================================
-void SketchAPI_Arc::setByTangent(const ModelHighAPI_RefAttr& theTangentPoint,
- const std::shared_ptr<GeomAPI_Pnt2d>& theEnd,
- bool theInversed)
-{
- fillAttribute(SketchPlugin_Arc::ARC_TYPE_TANGENT(), myarcType);
- fillAttribute(theTangentPoint, mytangentPoint);
- fillAttribute(theEnd, myendPoint);
- fillAttribute(theInversed, myinversed);
-
- execute();
-}
-
-//==================================================================================================
+//================================================================================================
void SketchAPI_Arc::setByExternal(const ModelHighAPI_Selection & theExternal)
{
fillAttribute(theExternal, external());
execute();
}
-//==================================================================================================
-void SketchAPI_Arc::setByExternalName(const std::string & theExternalName)
+//===============================================================================================
+void SketchAPI_Arc::setByExternalName(const std::wstring & theExternalName)
{
fillAttribute(ModelHighAPI_Selection("EDGE", theExternalName), external());
execute();
}
-//==================================================================================================
-void SketchAPI_Arc::setRadius(double theRadius)
-{
- fillAttribute(ModelHighAPI_Double(theRadius), myradius);
-
- execute();
-}
-
-//==================================================================================================
-void SketchAPI_Arc::setAngle(double theAngle)
-{
- fillAttribute(ModelHighAPI_Double(theAngle), myangle);
-
- execute();
-}
-
-//==================================================================================================
+//================================================================================================
void SketchAPI_Arc::dump(ModelHighAPI_Dumper& theDumper) const
{
+ if (isCopy())
+ return; // no need to dump copied feature
+
FeaturePtr aBase = feature();
const std::string& aSketchName = theDumper.parentName(aBase);
AttributeSelectionPtr anExternal = aBase->selection(SketchPlugin_SketchEntity::EXTERNAL_ID());
- if (anExternal->value()) {
+ if (anExternal->context()) {
// arc is external
theDumper << aBase << " = " << aSketchName << ".addArc(" << anExternal << ")" << std::endl;
} else {
- AttributeStringPtr aType = arcType();
- if (aType->value() == SketchPlugin_Arc::ARC_TYPE_CENTER_START_END()) {
- // arc given by center and start, end points
- theDumper << aBase << " = " << aSketchName << ".addArc(" << center() << ", "
- << startPoint() << ", " << endPoint() << ", " << inversed() << ")" << std::endl;
- } else if (aType->value() == SketchPlugin_Arc::ARC_TYPE_THREE_POINTS()) {
- // arc given by three points
- theDumper << aBase << " = " << aSketchName << ".addArc(" << startPoint() << ", "
- << endPoint() << ", " << passedPoint() << ")" << std::endl;
- } else {
- // tangent arc
- AttributeRefAttrPtr aTangentPoint = tangentPoint();
- theDumper << aBase << " = " << aSketchName << ".addArc("
- << aTangentPoint << ", " << endPoint() << ", " << inversed() << ")" << std::endl;
- }
+ // arc given by center and start, end points
+ theDumper << aBase << " = " << aSketchName << ".addArc(" << center() << ", "
+ << startPoint() << ", " << endPoint() << ", " << reversed() << ")" << std::endl;
}
// dump "auxiliary" flag if necessary
SketchAPI_SketchEntity::dump(theDumper);