X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchAPI%2FSketchAPI_Arc.cpp;h=4f973996c92b0e6732f0275a046e42f8abc84323;hb=6e421e939851e0de46554ae45a3ca0e1f67cd91d;hp=696bd9ab51571257375a0d9d4ef1ac1dbf47ec46;hpb=622e6d07002bdb703c2d7e51a8b65dfcd9fbd377;p=modules%2Fshaper.git diff --git a/src/SketchAPI/SketchAPI_Arc.cpp b/src/SketchAPI/SketchAPI_Arc.cpp index 696bd9ab5..4f973996c 100644 --- a/src/SketchAPI/SketchAPI_Arc.cpp +++ b/src/SketchAPI/SketchAPI_Arc.cpp @@ -1,8 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> - -// File: SketchAPI_Arc.cpp -// Created: 09 June 2016 -// Author: Dmitry Bobylev +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// 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" @@ -13,14 +26,20 @@ #include #include -//================================================================================================== +#include +#include + +/// Obtain constraints prepared by tangent arc +static std::list tangentArcConstraints(const FeaturePtr& theArc); + +//================================================================================================ SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr & theFeature) : SketchAPI_SketchEntity(theFeature) { initialize(); } -//================================================================================================== +//================================================================================================ SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& theFeature, double theCenterX, double theCenterY, double theStartX, double theStartY, @@ -29,11 +48,12 @@ SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& theFeature : 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& theFeature, const std::shared_ptr& theCenter, const std::shared_ptr& theStart, @@ -46,55 +66,7 @@ SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& theFeature } } -//================================================================================================== -SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& 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& theFeature, - const std::shared_ptr& theStart, - const std::shared_ptr& theEnd, - const std::shared_ptr& thePassed) -: SketchAPI_SketchEntity(theFeature) -{ - if (initialize()) { - setByStartEndPassed(theStart, theEnd, thePassed); - } -} - -//================================================================================================== -SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& 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& theFeature, - const ModelHighAPI_RefAttr& theTangentPoint, - const std::shared_ptr& theEnd, - bool theInversed) -: SketchAPI_SketchEntity(theFeature) -{ - if (initialize()) { - setByTangent(theTangentPoint, theEnd, theInversed); - } -} - -//================================================================================================== +//================================================================================================ SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& theFeature, const ModelHighAPI_Selection& theExternal) : SketchAPI_SketchEntity(theFeature) @@ -104,7 +76,7 @@ SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& theFeature } } -//================================================================================================== +//================================================================================================ SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& theFeature, const std::string& theExternalName) : SketchAPI_SketchEntity(theFeature) @@ -114,95 +86,41 @@ SketchAPI_Arc::SketchAPI_Arc(const std::shared_ptr& theFeature } } -//================================================================================================== +//================================================================================================ 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& theCenter, const std::shared_ptr& theStart, const std::shared_ptr& 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& theStart, - const std::shared_ptr& theEnd, - const std::shared_ptr& 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& 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()); @@ -210,7 +128,7 @@ void SketchAPI_Arc::setByExternal(const ModelHighAPI_Selection & theExternal) execute(); } -//================================================================================================== +//=============================================================================================== void SketchAPI_Arc::setByExternalName(const std::string & theExternalName) { fillAttribute(ModelHighAPI_Selection("EDGE", theExternalName), external()); @@ -218,48 +136,23 @@ void SketchAPI_Arc::setByExternalName(const std::string & theExternalName) 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);