X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchAPI%2FSketchAPI_Constraint.cpp;h=b1fefb5e25c945e95743b65687b36b8237be8834;hb=5afcc18216ad228eafcaf632c5008d1aebd3122e;hp=d655ff2af0ca8c2a4837ebf5595d5d935521981f;hpb=a94fc319f2aa64b43c9a73b5ff7063923648faec;p=modules%2Fshaper.git diff --git a/src/SketchAPI/SketchAPI_Constraint.cpp b/src/SketchAPI/SketchAPI_Constraint.cpp index d655ff2af..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,14 +202,12 @@ void SketchAPI_Constraint::dump(ModelHighAPI_Dumper& theDumper) const return; } - bool isAngle = aBase->getKind() == SketchPlugin_ConstraintAngle::ID(); - std::string aSetterSuffix; - if (isAngle) - aSetterSuffix = angleTypeToString(aBase->integer( - SketchPlugin_ConstraintAngle::TYPE_ID())->value()); + // postpone constraint until all its attributes be dumped + if (!areAllAttributesDumped(theDumper)) + return; 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) { @@ -187,10 +218,19 @@ void SketchAPI_Constraint::dump(ModelHighAPI_Dumper& theDumper) const } } - AttributeDoublePtr aValueAttr = aBase->real( - isAngle ? SketchPlugin_ConstraintAngle::ANGLE_VALUE_ID() :SketchPlugin_Constraint::VALUE()); + AttributeDoublePtr aValueAttr; + 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()); if (aValueAttr && aValueAttr->isInitialized()) theDumper << ", " << aValueAttr; + if (aBase->getKind() == SketchPlugin_ConstraintDistance::ID()) { + AttributeBooleanPtr isSigned = aBase->boolean(SketchPlugin_ConstraintDistance::SIGNED()); + theDumper << ", " << isSigned->value(); + } + theDumper << ")" << std::endl; }