X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchAPI%2FSketchAPI_Constraint.cpp;h=b1fefb5e25c945e95743b65687b36b8237be8834;hb=5afcc18216ad228eafcaf632c5008d1aebd3122e;hp=82b5dfab474f323c0f1634ec230e4b25c5f98cfa;hpb=ed0f9183c30d963482df80a8f550ef132e430982;p=modules%2Fshaper.git diff --git a/src/SketchAPI/SketchAPI_Constraint.cpp b/src/SketchAPI/SketchAPI_Constraint.cpp index 82b5dfab4..b1fefb5e2 100644 --- a/src/SketchAPI/SketchAPI_Constraint.cpp +++ b/src/SketchAPI/SketchAPI_Constraint.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// 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 @@ -12,10 +12,9 @@ // // 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 +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "SketchAPI_Constraint.h" @@ -24,7 +23,6 @@ #include #include -#include #include #include #include @@ -66,16 +64,37 @@ bool SketchAPI_Constraint::initialize() return true; } +void SketchAPI_Constraint::setEntityA(const ModelHighAPI_RefAttr& theEntity) +{ + fillAttribute(theEntity, feature()->refattr(SketchPlugin_Constraint::ENTITY_A())); +} + +void SketchAPI_Constraint::setEntityB(const ModelHighAPI_RefAttr& theEntity) +{ + fillAttribute(theEntity, feature()->refattr(SketchPlugin_Constraint::ENTITY_B())); +} + +void SketchAPI_Constraint::setEntityC(const ModelHighAPI_RefAttr& theEntity) +{ + fillAttribute(theEntity, feature()->refattr(SketchPlugin_Constraint::ENTITY_C())); +} + +void SketchAPI_Constraint::setEntityD(const ModelHighAPI_RefAttr& theEntity) +{ + fillAttribute(theEntity, feature()->refattr(SketchPlugin_Constraint::ENTITY_D())); +} + +void SketchAPI_Constraint::setValue(const ModelHighAPI_Double& theValue) +{ + fillAttribute(theValue, feature()->real(SketchPlugin_Constraint::VALUE())); +} + static const std::string& constraintTypeToSetter(const std::string& theType) { if (theType == SketchPlugin_ConstraintCoincidence::ID()) { static const std::string COINCIDENCE_SETTER("setCoincident"); return COINCIDENCE_SETTER; } - if (theType == SketchPlugin_ConstraintAngle::ID()) { - static const std::string ANGLE_SETTER("setAngle"); - return ANGLE_SETTER; - } if (theType == SketchPlugin_ConstraintCollinear::ID()) { static const std::string COLLINEAR_SETTER("setCollinear"); return COLLINEAR_SETTER; @@ -150,6 +169,20 @@ static std::string angleTypeToString(int theAngleType) return std::string(); } +bool SketchAPI_Constraint::areAllAttributesDumped(ModelHighAPI_Dumper& theDumper) const +{ + bool areAttributesDumped = true; + FeaturePtr aBase = feature(); + for (int i = 0; i < CONSTRAINT_ATTR_SIZE && areAttributesDumped; ++i) { + AttributeRefAttrPtr aRefAttr = aBase->refattr(SketchPlugin_Constraint::ATTRIBUTE(i)); + if (aRefAttr && aRefAttr->isInitialized()) + areAttributesDumped = theDumper.isDumped(aRefAttr); + } + if (!areAttributesDumped) + theDumper.postpone(aBase); + return areAttributesDumped; +} + void SketchAPI_Constraint::dump(ModelHighAPI_Dumper& theDumper) const { FeaturePtr aBase = feature(); @@ -169,26 +202,12 @@ void SketchAPI_Constraint::dump(ModelHighAPI_Dumper& theDumper) const return; } - // Check all attributes are already dumped. If not, store the constraint as postponed. - bool areAttributesDumped = true; - for (int i = 0; i < CONSTRAINT_ATTR_SIZE && areAttributesDumped; ++i) { - AttributeRefAttrPtr aRefAttr = aBase->refattr(SketchPlugin_Constraint::ATTRIBUTE(i)); - if (aRefAttr && aRefAttr->isInitialized()) - areAttributesDumped = theDumper.isDumped(aRefAttr); - } - if (!areAttributesDumped) { - theDumper.postpone(aBase); + // postpone constraint until all its attributes be dumped + if (!areAllAttributesDumped(theDumper)) return; - } - - bool isAngle = aBase->getKind() == SketchPlugin_ConstraintAngle::ID(); - std::string aSetterSuffix; - if (isAngle) - aSetterSuffix = angleTypeToString(aBase->integer( - SketchPlugin_ConstraintAngle::TYPE_ID())->value()); const std::string& aSketchName = theDumper.parentName(aBase); - theDumper << aBase << " = " << aSketchName << "." << aSetter << aSetterSuffix << "("; + theDumper << aBase << " = " << aSketchName << "." << aSetter << "("; bool isFirstAttr = true; for (int i = 0; i < CONSTRAINT_ATTR_SIZE; ++i) { @@ -200,10 +219,8 @@ void SketchAPI_Constraint::dump(ModelHighAPI_Dumper& theDumper) const } AttributeDoublePtr aValueAttr; - if (isAngle) - aValueAttr = aBase->real(SketchPlugin_ConstraintAngle::ANGLE_VALUE_ID()); - else if (aBase->getKind() == SketchPlugin_ConstraintDistanceHorizontal::ID() || - aBase->getKind() == SketchPlugin_ConstraintDistanceVertical::ID()) + if (aBase->getKind() == SketchPlugin_ConstraintDistanceHorizontal::ID() || + aBase->getKind() == SketchPlugin_ConstraintDistanceVertical::ID()) aValueAttr = aBase->real(SketchPlugin_ConstraintDistanceAlongDir::DISTANCE_VALUE_ID()); else aValueAttr = aBase->real(SketchPlugin_Constraint::VALUE());