From fb0d70c5528956f3ef59a5c3f999a3b40640edb8 Mon Sep 17 00:00:00 2001 From: azv Date: Wed, 11 Dec 2019 15:27:05 +0300 Subject: [PATCH] Task 5.1.3 Sketcher: angle dimension (issue #3061) Additional test cases for Angle constraint. --- src/SketchAPI/SketchAPI.i | 1 + src/SketchAPI/SketchAPI_ConstraintAngle.cpp | 21 +- src/SketchAPI/SketchAPI_Sketch.cpp | 36 ++- src/SketchAPI/SketchAPI_Sketch.h | 3 +- src/SketchPlugin/CMakeLists.txt | 4 + .../Test/TestConstraintAngle_v0_1.py | 19 ++ .../Test/TestConstraintAngle_v0_2.py | 19 ++ .../Test/TestConstraintAngle_v20191210_1.py | 261 +++++++++++++++++ .../Test/TestConstraintAngle_v20191210_2.py | 262 ++++++++++++++++++ test.hdfs/CMakeLists.txt | 86 +++--- test.hdfs/Test3061.hdf | Bin 0 -> 57225 bytes test.hdfs/Test3061.py | 28 ++ 12 files changed, 682 insertions(+), 58 deletions(-) create mode 100644 src/SketchPlugin/Test/TestConstraintAngle_v20191210_1.py create mode 100644 src/SketchPlugin/Test/TestConstraintAngle_v20191210_2.py create mode 100644 test.hdfs/Test3061.hdf create mode 100644 test.hdfs/Test3061.py diff --git a/src/SketchAPI/SketchAPI.i b/src/SketchAPI/SketchAPI.i index 08f87c104..07f596c21 100644 --- a/src/SketchAPI/SketchAPI.i +++ b/src/SketchAPI/SketchAPI.i @@ -47,6 +47,7 @@ // function with named parameters %feature("kwargs") SketchAPI_Ellipse::construction; %feature("kwargs") SketchAPI_EllipticArc::construction; +%feature("kwargs") SketchAPI_Sketch::setAngle; // shared pointers %shared_ptr(SketchAPI_Arc) diff --git a/src/SketchAPI/SketchAPI_ConstraintAngle.cpp b/src/SketchAPI/SketchAPI_ConstraintAngle.cpp index dbc0a3505..4f5eedf23 100644 --- a/src/SketchAPI/SketchAPI_ConstraintAngle.cpp +++ b/src/SketchAPI/SketchAPI_ConstraintAngle.cpp @@ -84,6 +84,10 @@ static void calculatePossibleValuesOfAngle(FeaturePtr theFeature, static std::string angleTypeToString(FeaturePtr theFeature) { static const double TOLERANCE = 1.e-7; + static const std::string THE_ANGLE_DIRECT("Direct"); + static const std::string THE_ANGLE_SUPPLEMENTARY("Supplementary"); + static const std::string THE_ANGLE_BACKWARD("Backward"); + double anAngleDirect, anAngleComplmentary, anAngleBackward; calculatePossibleValuesOfAngle(theFeature, anAngleDirect, anAngleComplmentary, anAngleBackward); @@ -100,18 +104,17 @@ static std::string angleTypeToString(FeaturePtr theFeature) // find the minimal difference std::string aType; if (isDirect && aDirectDiff < TOLERANCE) { - // Nothing to do. - // This case is empty and going the first to check the direct angle before the others. + aType = THE_ANGLE_DIRECT; } else if (isComplementary && aComplementaryDiff < TOLERANCE) - aType = "Complementary"; + aType = THE_ANGLE_SUPPLEMENTARY; else if (isBackward && aBackwardDiff < TOLERANCE) - aType = "Backward"; + aType = THE_ANGLE_BACKWARD; else { if (aComplementaryDiff < aDirectDiff && aComplementaryDiff < aBackwardDiff) - aType = "Complementary"; + aType = THE_ANGLE_SUPPLEMENTARY; else if (aBackwardDiff < aDirectDiff && aBackwardDiff < aComplementaryDiff) - aType = "Backward"; + aType = THE_ANGLE_BACKWARD; } return aType; } @@ -124,10 +127,9 @@ void SketchAPI_ConstraintAngle::dump(ModelHighAPI_Dumper& theDumper) const // calculate angle value as it was just applied to the attributes FeaturePtr aBase = feature(); - std::string aSetterSuffix = angleTypeToString(aBase); const std::string& aSketchName = theDumper.parentName(aBase); - theDumper << aBase << " = " << aSketchName << "." << "setAngle" << aSetterSuffix << "("; + theDumper << aBase << " = " << aSketchName << "." << "setAngle("; bool isFirstAttr = true; for (int i = 0; i < CONSTRAINT_ATTR_SIZE; ++i) { @@ -142,5 +144,6 @@ void SketchAPI_ConstraintAngle::dump(ModelHighAPI_Dumper& theDumper) const if (aValueAttr && aValueAttr->isInitialized()) theDumper << ", " << aValueAttr; - theDumper << ")" << std::endl; + std::string aType = angleTypeToString(aBase); + theDumper << ", type = \"" << aType << "\")" << std::endl; } diff --git a/src/SketchAPI/SketchAPI_Sketch.cpp b/src/SketchAPI/SketchAPI_Sketch.cpp index bb0bcac53..6b4548cc0 100644 --- a/src/SketchAPI/SketchAPI_Sketch.cpp +++ b/src/SketchAPI/SketchAPI_Sketch.cpp @@ -75,6 +75,8 @@ #include #include #include + +#include #include //-------------------------------------------------------------------------------------- SketchAPI_Sketch::SketchAPI_Sketch( @@ -798,18 +800,38 @@ std::shared_ptr SketchAPI_Sketch::addTrim( std::shared_ptr SketchAPI_Sketch::setAngle( const ModelHighAPI_RefAttr & theLine1, const ModelHighAPI_RefAttr & theLine2, - const ModelHighAPI_Double & theValue) + const ModelHighAPI_Double & theValue, + const std::string& theType) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_ConstraintAngle::ID()); - fillAttribute(SketchPlugin_ConstraintAngle::THE_VERSION_0, - aFeature->integer(SketchPlugin_ConstraintAngle::VERSION_ID())); - fillAttribute(SketcherPrs_Tools::ANGLE_DIRECT, - aFeature->integer(SketchPlugin_ConstraintAngle::TYPE_ID())); - // fill the value before lines to avoid calculation of angle value by the Angle feature - fillAttribute(theValue, aFeature->real(SketchPlugin_ConstraintAngle::ANGLE_VALUE_ID())); + + const int aVersion = theType.empty() ? SketchPlugin_ConstraintAngle::THE_VERSION_0 + : SketchPlugin_ConstraintAngle::THE_VERSION_1; + fillAttribute(aVersion, aFeature->integer(SketchPlugin_ConstraintAngle::VERSION_ID())); + + int aType = (int)SketcherPrs_Tools::ANGLE_DIRECT; + fillAttribute(aType, aFeature->integer(SketchPlugin_ConstraintAngle::PREV_TYPE_ID())); + fillAttribute(aType, aFeature->integer(SketchPlugin_ConstraintAngle::TYPE_ID())); + + if (aVersion == SketchPlugin_ConstraintAngle::THE_VERSION_0) + fillAttribute(theValue, aFeature->real(SketchPlugin_ConstraintAngle::ANGLE_VALUE_ID())); + fillAttribute(theLine1, aFeature->refattr(SketchPlugin_Constraint::ENTITY_A())); fillAttribute(theLine2, aFeature->refattr(SketchPlugin_Constraint::ENTITY_B())); + + if (aVersion == SketchPlugin_ConstraintAngle::THE_VERSION_1) { + std::string aTypeLC = theType; + std::transform(aTypeLC.begin(), aTypeLC.end(), aTypeLC.begin(), ::tolower); + if (aTypeLC == "supplementary") + aType = (int)SketcherPrs_Tools::ANGLE_COMPLEMENTARY; + else if (aTypeLC == "backward") + aType = (int)SketcherPrs_Tools::ANGLE_BACKWARD; + + fillAttribute(aType, aFeature->integer(SketchPlugin_ConstraintAngle::TYPE_ID())); + fillAttribute(theValue, aFeature->real(SketchPlugin_ConstraintAngle::ANGLE_VALUE_ID())); + } + aFeature->execute(); return InterfacePtr(new ModelHighAPI_Interface(aFeature)); } diff --git a/src/SketchAPI/SketchAPI_Sketch.h b/src/SketchAPI/SketchAPI_Sketch.h index a6ce99720..f1787c936 100644 --- a/src/SketchAPI/SketchAPI_Sketch.h +++ b/src/SketchAPI/SketchAPI_Sketch.h @@ -377,7 +377,8 @@ public: std::shared_ptr setAngle( const ModelHighAPI_RefAttr & theLine1, const ModelHighAPI_RefAttr & theLine2, - const ModelHighAPI_Double & theValue); + const ModelHighAPI_Double & theValue, + const std::string& type = std::string()); /// Set complementary angle SKETCHAPI_EXPORT diff --git a/src/SketchPlugin/CMakeLists.txt b/src/SketchPlugin/CMakeLists.txt index c660b7aeb..ca43e4d40 100644 --- a/src/SketchPlugin/CMakeLists.txt +++ b/src/SketchPlugin/CMakeLists.txt @@ -211,6 +211,10 @@ ADD_UNIT_TESTS( TestChangeSketchPlane3.py TestChangeSketchPlane4.py TestConstraintAngle.py + TestConstraintAngle_v0_1.py + TestConstraintAngle_v0_2.py + TestConstraintAngle_v20191210_1.py + TestConstraintAngle_v20191210_2.py TestConstraintAngleEllipse.py TestConstraintCoincidence.py TestConstraintCoincidenceEllipse.py diff --git a/src/SketchPlugin/Test/TestConstraintAngle_v0_1.py b/src/SketchPlugin/Test/TestConstraintAngle_v0_1.py index 3590d66a4..ff630924c 100644 --- a/src/SketchPlugin/Test/TestConstraintAngle_v0_1.py +++ b/src/SketchPlugin/Test/TestConstraintAngle_v0_1.py @@ -1,3 +1,22 @@ +# 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 +# + from salome.shaper import model model.begin() diff --git a/src/SketchPlugin/Test/TestConstraintAngle_v0_2.py b/src/SketchPlugin/Test/TestConstraintAngle_v0_2.py index 77dc918e2..5aeaf5f91 100644 --- a/src/SketchPlugin/Test/TestConstraintAngle_v0_2.py +++ b/src/SketchPlugin/Test/TestConstraintAngle_v0_2.py @@ -1,3 +1,22 @@ +# 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 +# + from salome.shaper import model model.begin() diff --git a/src/SketchPlugin/Test/TestConstraintAngle_v20191210_1.py b/src/SketchPlugin/Test/TestConstraintAngle_v20191210_1.py new file mode 100644 index 000000000..4ddb9183e --- /dev/null +++ b/src/SketchPlugin/Test/TestConstraintAngle_v20191210_1.py @@ -0,0 +1,261 @@ +# 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 +# + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOY")) +SketchLine_1 = Sketch_1.addLine(-17.48270627886662, -77.57247534383079, 0.4653113240225388, -68.74815303974528) +SketchLine_2 = Sketch_1.addLine(0.4653113240225388, -68.74815303974528, 8.542125432770632, -50.45156664083665) +SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint()) +SketchLine_3 = Sketch_1.addLine(8.542125432770632, -50.45156664083665, -8.178735979228234, 7.171456480488104) +SketchConstraintCoincidence_2 = Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint()) +SketchLine_4 = Sketch_1.addLine(-17.48270627886662, -77.57247534383079, -36.90385046950819, -72.79553507559329) +SketchConstraintCoincidence_3 = Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchLine_4.startPoint()) +SketchLine_5 = Sketch_1.addLine(-48.71075203912585, -56.65251567631857, -36.90385046950819, -72.79553507559329) +SketchConstraintCoincidence_4 = Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_5.endPoint()) +SketchLine_6 = Sketch_1.addLine(-48.71075203912585, -56.65251567631857, -47.37883052420096, -36.69691533260352) +SketchConstraintCoincidence_5 = Sketch_1.setCoincident(SketchLine_5.startPoint(), SketchLine_6.startPoint()) +SketchLine_7 = Sketch_1.addLine(-30.39232801419296, -18.99499937550162, -47.37883052420096, -36.69691533260352) +SketchConstraintCoincidence_6 = Sketch_1.setCoincident(SketchLine_6.endPoint(), SketchLine_7.endPoint()) +SketchConstraintAngle_1 = Sketch_1.setAngle(SketchLine_1.result(), SketchLine_2.result(), 140, type = "Direct") +SketchConstraintAngle_2 = Sketch_1.setAngle(SketchLine_3.result(), SketchLine_2.result(), 140, type = "Direct") +SketchConstraintAngle_3 = Sketch_1.setAngle(SketchLine_1.result(), SketchLine_4.result(), 140, type = "Direct") +SketchConstraintAngle_4 = Sketch_1.setAngle(SketchLine_6.result(), SketchLine_5.result(), 140, type = "Direct") +SketchConstraintAngle_5 = Sketch_1.setAngle(SketchLine_5.result(), SketchLine_4.result(), 140, type = "Direct") +SketchConstraintAngle_6 = Sketch_1.setAngle(SketchLine_6.result(), SketchLine_7.result(), 140, type = "Direct") +SketchConstraintLength_1 = Sketch_1.setLength(SketchLine_2.result(), 20) +SketchConstraintEqual_1 = Sketch_1.setEqual(SketchLine_2.result(), SketchLine_1.result()) +SketchConstraintEqual_2 = Sketch_1.setEqual(SketchLine_2.result(), SketchLine_4.result()) +SketchConstraintEqual_3 = Sketch_1.setEqual(SketchLine_2.result(), SketchLine_5.result()) +SketchConstraintEqual_4 = Sketch_1.setEqual(SketchLine_2.result(), SketchLine_6.result()) +SketchLine_8 = Sketch_1.addLine(14.775406531722, -47.38691166633646, -20.64529817713098, 1.042146531487715) +SketchPoint_1 = Sketch_1.addPoint(2.968504962104344, -31.24389226706174) +SketchConstraintCoincidence_7 = Sketch_1.setCoincident(SketchPoint_1.coordinates(), SketchLine_3.result()) +SketchConstraintCoincidence_8 = Sketch_1.setCoincident(SketchPoint_1.coordinates(), SketchLine_8.result()) +SketchConstraintDistance_1 = Sketch_1.setDistance(SketchLine_2.endPoint(), SketchPoint_1.coordinates(), 20, True) +SketchConstraintDistance_2 = Sketch_1.setDistance(SketchLine_8.startPoint(), SketchPoint_1.coordinates(), 20, True) +SketchConstraintDistance_3 = Sketch_1.setDistance(SketchPoint_1.coordinates(), SketchLine_3.endPoint(), 40, True) +SketchConstraintEqual_5 = Sketch_1.setEqual(SketchLine_3.result(), SketchLine_8.result()) +SketchLine_9 = Sketch_1.addLine(19.58460105006861, -42.37517030669127, -30.26368721382418, -8.981336187802668) +SketchConstraintCoincidence_9 = Sketch_1.setCoincident(SketchPoint_1.coordinates(), SketchLine_9.result()) +SketchConstraintEqual_6 = Sketch_1.setEqual(SketchLine_3.result(), SketchLine_9.result()) +SketchConstraintDistance_4 = Sketch_1.setDistance(SketchLine_9.startPoint(), SketchPoint_1.coordinates(), 20, True) +SketchConstraintAngle_7 = Sketch_1.setAngle(SketchLine_3.result(), SketchLine_8.result(), 20, type = "Direct") +SketchConstraintAngle_8 = Sketch_1.setAngle(SketchLine_9.result(), SketchLine_8.result(), 20, type = "Direct") +SketchLine_10 = Sketch_1.addLine(3.875430505227681, -29.75334619738324, -48.69363438803513, -0.8311502875301234) +SketchPoint_2 = Sketch_1.addPoint(-13.64759112585992, -20.1126142274322) +SketchConstraintCoincidence_10 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_10.result()) +SketchConstraintCoincidence_11 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_9.result()) +SketchConstraintDistance_5 = Sketch_1.setDistance(SketchPoint_2.coordinates(), SketchLine_10.startPoint(), 20, True) +SketchConstraintDistance_6 = Sketch_1.setDistance(SketchPoint_2.coordinates(), SketchLine_9.endPoint(), 20, True) +SketchConstraintEqual_7 = Sketch_1.setEqual(SketchLine_9.result(), SketchLine_10.result()) +SketchLine_11 = Sketch_1.addLine(0.001529676402264532, -26.13785899518266, -31.94417752476854, -12.03580011868412) +SketchConstraintCoincidence_12 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_11.result()) +SketchConstraintDistance_7 = Sketch_1.setDistance(SketchLine_11.endPoint(), SketchPoint_2.coordinates(), 20, True) +SketchConstraintAngle_9 = Sketch_1.setAngle(SketchLine_9.result(), SketchLine_10.result(), 175, type = "Direct") +SketchConstraintAngle_10 = Sketch_1.setAngle(SketchLine_11.result(), SketchLine_10.result(), 5, type = "Direct") +SketchLine_12 = Sketch_1.addLine(5.283311970593094, -26.56404104269606, -51.50939731876596, -7.20976059690448) +SketchConstraintCoincidence_13 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_12.result()) +SketchConstraintEqual_8 = Sketch_1.setEqual(SketchLine_9.result(), SketchLine_12.result()) +SketchConstraintDistance_8 = Sketch_1.setDistance(SketchPoint_2.coordinates(), SketchLine_12.startPoint(), 20, True) +SketchConstraintAngle_11 = Sketch_1.setAngle(SketchLine_12.result(), SketchLine_11.result(), 5, type = "Direct") +SketchLine_13 = Sketch_1.addLine(25.19469725542325, -29.66649476390714, -33.06873531650151, -15.33567395919474) +SketchConstraintCoincidence_14 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_13.result()) +SketchConstraintEqual_9 = Sketch_1.setEqual(SketchLine_12.result(), SketchLine_13.result()) +SketchConstraintDistance_9 = Sketch_1.setDistance(SketchLine_13.endPoint(), SketchPoint_2.coordinates(), 20, True) +SketchConstraintAngle_12 = Sketch_1.setAngle(SketchLine_12.result(), SketchLine_13.result(), 175, type = "Direct") +SketchLine_14 = Sketch_1.addLine(25.87956617560386, -26.24481087018098, -33.41116977659181, -17.04651590605781) +SketchConstraintCoincidence_15 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_14.result()) +SketchConstraintDistance_10 = Sketch_1.setDistance(SketchLine_14.endPoint(), SketchPoint_2.coordinates(), 20, True) +SketchConstraintAngle_13 = Sketch_1.setAngle(SketchLine_13.result(), SketchLine_14.result(), 5, type = "Direct") +SketchConstraintEqual_10 = Sketch_1.setEqual(SketchLine_13.result(), SketchLine_14.result()) +SketchLine_15 = Sketch_1.addLine(26.26360956157018, -22.77645725728195, -33.60319146957497, -18.78069271250733) +SketchConstraintCoincidence_16 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_15.result()) +SketchConstraintEqual_11 = Sketch_1.setEqual(SketchLine_14.result(), SketchLine_15.result()) +SketchConstraintDistance_11 = Sketch_1.setDistance(SketchLine_15.endPoint(), SketchPoint_2.coordinates(), 20, True) +SketchConstraintAngle_14 = Sketch_1.setAngle(SketchLine_15.result(), SketchLine_14.result(), 5, type = "Direct") +SketchConstraintCoincidence_17 = Sketch_1.setCoincident(SketchLine_7.startPoint(), SketchLine_15.result()) + +SketchLine_16 = Sketch_1.addLine(60.00388909712782, -76.09960829009104, 78.00643494689578, -67.38706888260469) +SketchLine_17 = Sketch_1.addLine(78.00643494689578, -67.38706888260469, 86.19687277706721, -49.141063069) +SketchConstraintCoincidence_18 = Sketch_1.setCoincident(SketchLine_16.endPoint(), SketchLine_17.startPoint()) +SketchLine_18 = Sketch_1.addLine(86.19687277706721, -49.141063069, 69.83467154684908, 8.584826884311665) +SketchConstraintCoincidence_19 = Sketch_1.setCoincident(SketchLine_17.endPoint(), SketchLine_18.startPoint()) +SketchLine_19 = Sketch_1.addLine(60.00388909712782, -76.09960829009104, 40.61282650688053, -71.20198727360641) +SketchConstraintCoincidence_20 = Sketch_1.setCoincident(SketchLine_16.startPoint(), SketchLine_19.startPoint()) +SketchLine_20 = Sketch_1.addLine(28.90654086978602, -54.98585713775849, 40.61282650688053, -71.20198727360641) +SketchConstraintCoincidence_21 = Sketch_1.setCoincident(SketchLine_19.endPoint(), SketchLine_20.endPoint()) +SketchLine_21 = Sketch_1.addLine(28.90654086978602, -54.98585713775849, 30.36253333631381, -35.03892539532215) +SketchConstraintCoincidence_22 = Sketch_1.setCoincident(SketchLine_20.startPoint(), SketchLine_21.startPoint()) +SketchLine_22 = Sketch_1.addLine(47.45878924889096, -17.44298467461911, 30.36253333631381, -35.03892539532215) +SketchConstraintCoincidence_23 = Sketch_1.setCoincident(SketchLine_21.endPoint(), SketchLine_22.endPoint()) +SketchConstraintAngle_15 = Sketch_1.setAngle(SketchLine_16.result(), SketchLine_17.result(), 40, type = "Supplementary") +SketchConstraintAngle_16 = Sketch_1.setAngle(SketchLine_18.result(), SketchLine_17.result(), 40, type = "Supplementary") +SketchConstraintAngle_17 = Sketch_1.setAngle(SketchLine_16.result(), SketchLine_19.result(), 40, type = "Supplementary") +SketchConstraintAngle_18 = Sketch_1.setAngle(SketchLine_21.result(), SketchLine_20.result(), 40, type = "Supplementary") +SketchConstraintAngle_19 = Sketch_1.setAngle(SketchLine_20.result(), SketchLine_19.result(), 40, type = "Supplementary") +SketchConstraintAngle_20 = Sketch_1.setAngle(SketchLine_21.result(), SketchLine_22.result(), 40, type = "Supplementary") +SketchConstraintLength_2 = Sketch_1.setLength(SketchLine_17.result(), 20) +SketchConstraintEqual_12 = Sketch_1.setEqual(SketchLine_17.result(), SketchLine_16.result()) +SketchConstraintEqual_13 = Sketch_1.setEqual(SketchLine_17.result(), SketchLine_19.result()) +SketchConstraintEqual_14 = Sketch_1.setEqual(SketchLine_17.result(), SketchLine_20.result()) +SketchConstraintEqual_15 = Sketch_1.setEqual(SketchLine_17.result(), SketchLine_21.result()) +SketchLine_23 = Sketch_1.addLine(92.44909133742235, -46.11522988707736, 57.3302344261388, 2.533160520466375) +SketchPoint_3 = Sketch_1.addPoint(80.74280570032784, -29.89909975122945) +SketchConstraintCoincidence_24 = Sketch_1.setCoincident(SketchPoint_3.coordinates(), SketchLine_18.result()) +SketchConstraintCoincidence_25 = Sketch_1.setCoincident(SketchPoint_3.coordinates(), SketchLine_23.result()) +SketchConstraintDistance_12 = Sketch_1.setDistance(SketchLine_17.endPoint(), SketchPoint_3.coordinates(), 20, True) +SketchConstraintDistance_13 = Sketch_1.setDistance(SketchLine_23.startPoint(), SketchPoint_3.coordinates(), 20, True) +SketchConstraintDistance_14 = Sketch_1.setDistance(SketchPoint_3.coordinates(), SketchLine_18.endPoint(), 40, True) +SketchConstraintEqual_16 = Sketch_1.setEqual(SketchLine_18.result(), SketchLine_23.result()) +SketchLine_24 = Sketch_1.addLine(97.289359083568, -41.13349208617944, 47.64969893384747, -7.430315081329468) +SketchConstraintCoincidence_26 = Sketch_1.setCoincident(SketchPoint_3.coordinates(), SketchLine_24.result()) +SketchConstraintEqual_17 = Sketch_1.setEqual(SketchLine_18.result(), SketchLine_24.result()) +SketchConstraintDistance_15 = Sketch_1.setDistance(SketchLine_24.startPoint(), SketchPoint_3.coordinates(), 20, True) +SketchConstraintAngle_21 = Sketch_1.setAngle(SketchLine_18.result(), SketchLine_23.result(), 160, type = "Supplementary") +SketchConstraintAngle_22 = Sketch_1.setAngle(SketchLine_24.result(), SketchLine_23.result(), 160, type = "Supplementary") +SketchLine_25 = Sketch_1.addLine(81.65898287743471, -28.41422234660911, 29.27079119639352, 0.8343224443798635) +SketchPoint_4 = Sketch_1.addPoint(64.19625231708766, -18.66470741627946) +SketchConstraintCoincidence_27 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_25.result()) +SketchConstraintCoincidence_28 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_24.result()) +SketchConstraintDistance_16 = Sketch_1.setDistance(SketchPoint_4.coordinates(), SketchLine_25.startPoint(), 20, True) +SketchConstraintDistance_17 = Sketch_1.setDistance(SketchPoint_4.coordinates(), SketchLine_24.endPoint(), 20, True) +SketchConstraintEqual_18 = Sketch_1.setEqual(SketchLine_24.result(), SketchLine_25.result()) +SketchLine_26 = Sketch_1.addLine(95.51651619313817, -32.72404055044315, 45.95024650348294, -10.47426958610802) +SketchConstraintCoincidence_29 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_26.result()) +SketchConstraintDistance_18 = Sketch_1.setDistance(SketchLine_26.endPoint(), SketchPoint_4.coordinates(), 20, True) +SketchConstraintAngle_23 = Sketch_1.setAngle(SketchLine_24.result(), SketchLine_25.result(), 5, type = "Supplementary") +SketchConstraintAngle_24 = Sketch_1.setAngle(SketchLine_26.result(), SketchLine_25.result(), 5, type = "Supplementary") +SketchLine_27 = Sketch_1.addLine(83.08667026246893, -25.23373396888348, 26.41541642632507, -5.526654311071399) +SketchConstraintCoincidence_30 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_27.result()) +SketchConstraintEqual_19 = Sketch_1.setEqual(SketchLine_24.result(), SketchLine_27.result()) +SketchConstraintDistance_19 = Sketch_1.setDistance(SketchPoint_4.coordinates(), SketchLine_27.startPoint(), 20, True) +SketchConstraintAngle_25 = Sketch_1.setAngle(SketchLine_27.result(), SketchLine_26.result(), 5, type = "Supplementary") +SketchLine_28 = Sketch_1.addLine(102.9783774975822, -28.45994944924871, 44.80518972684035, -13.76708639979482) +SketchConstraintCoincidence_31 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_28.result()) +SketchConstraintEqual_20 = Sketch_1.setEqual(SketchLine_27.result(), SketchLine_28.result()) +SketchConstraintDistance_20 = Sketch_1.setDistance(SketchLine_28.endPoint(), SketchPoint_4.coordinates(), 20, True) +SketchConstraintAngle_26 = Sketch_1.setAngle(SketchLine_27.result(), SketchLine_28.result(), 5, type = "Supplementary") +SketchLine_29 = Sketch_1.addLine(103.6845113974033, -25.04259067061018, 44.45212277692985, -15.47576578911409) +SketchConstraintCoincidence_32 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_29.result()) +SketchConstraintDistance_21 = Sketch_1.setDistance(SketchLine_29.endPoint(), SketchPoint_4.coordinates(), 20, True) +SketchConstraintAngle_27 = Sketch_1.setAngle(SketchLine_28.result(), SketchLine_29.result(), 175, type = "Supplementary") +SketchConstraintEqual_21 = Sketch_1.setEqual(SketchLine_28.result(), SketchLine_29.result()) +SketchLine_30 = Sketch_1.addLine(104.0901158019603, -21.57669234933498, 44.24932057465131, -17.20871494975169) +SketchConstraintCoincidence_33 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_30.result()) +SketchConstraintEqual_22 = Sketch_1.setEqual(SketchLine_29.result(), SketchLine_30.result()) +SketchConstraintDistance_22 = Sketch_1.setDistance(SketchLine_30.endPoint(), SketchPoint_4.coordinates(), 20, True) +SketchConstraintAngle_28 = Sketch_1.setAngle(SketchLine_30.result(), SketchLine_29.result(), 175, type = "Supplementary") +SketchConstraintCoincidence_34 = Sketch_1.setCoincident(SketchLine_22.startPoint(), SketchLine_30.result()) + +SketchLine_31 = Sketch_1.addLine(138.7804692087479, -78.2421341225341, 156.7284871354776, -69.4178124771163) +SketchLine_32 = Sketch_1.addLine(156.7284871354776, -69.4178124771163, 164.8053019156854, -51.12122637461573) +SketchConstraintCoincidence_35 = Sketch_1.setCoincident(SketchLine_31.endPoint(), SketchLine_32.startPoint()) +SketchLine_33 = Sketch_1.addLine(164.8053019156854, -51.12122637461573, 148.0844426183728, 6.501797360341752) +SketchConstraintCoincidence_36 = Sketch_1.setCoincident(SketchLine_32.endPoint(), SketchLine_33.startPoint()) +SketchLine_34 = Sketch_1.addLine(138.7804692087479, -78.2421341225341, 119.3593251934135, -73.46519314156717) +SketchConstraintCoincidence_37 = Sketch_1.setCoincident(SketchLine_31.startPoint(), SketchLine_34.startPoint()) +SketchLine_35 = Sketch_1.addLine(107.5524242162226, -57.32217330899532, 119.3593251934135, -73.46519314156717) +SketchConstraintCoincidence_38 = Sketch_1.setCoincident(SketchLine_34.endPoint(), SketchLine_35.endPoint()) +SketchLine_36 = Sketch_1.addLine(107.5524242162226, -57.32217330899532, 108.8843464634908, -37.36657301415998) +SketchConstraintCoincidence_39 = Sketch_1.setCoincident(SketchLine_35.startPoint(), SketchLine_36.startPoint()) +SketchLine_37 = Sketch_1.addLine(125.8708496231354, -19.66465768043951, 108.8843464634908, -37.36657301415998) +SketchConstraintCoincidence_40 = Sketch_1.setCoincident(SketchLine_36.endPoint(), SketchLine_37.endPoint()) +SketchConstraintAngle_29 = Sketch_1.setAngle(SketchLine_31.result(), SketchLine_32.result(), 220, type = "Backward") +SketchConstraintAngle_30 = Sketch_1.setAngle(SketchLine_33.result(), SketchLine_32.result(), 220, type = "Backward") +SketchConstraintAngle_31 = Sketch_1.setAngle(SketchLine_31.result(), SketchLine_34.result(), 220, type = "Backward") +SketchConstraintAngle_32 = Sketch_1.setAngle(SketchLine_36.result(), SketchLine_35.result(), 220, type = "Backward") +SketchConstraintAngle_33 = Sketch_1.setAngle(SketchLine_35.result(), SketchLine_34.result(), 220, type = "Backward") +SketchConstraintAngle_34 = Sketch_1.setAngle(SketchLine_36.result(), SketchLine_37.result(), 220, type = "Backward") +SketchConstraintLength_3 = Sketch_1.setLength(SketchLine_32.result(), 20) +SketchConstraintEqual_23 = Sketch_1.setEqual(SketchLine_32.result(), SketchLine_31.result()) +SketchConstraintEqual_24 = Sketch_1.setEqual(SketchLine_32.result(), SketchLine_34.result()) +SketchConstraintEqual_25 = Sketch_1.setEqual(SketchLine_32.result(), SketchLine_35.result()) +SketchConstraintEqual_26 = Sketch_1.setEqual(SketchLine_32.result(), SketchLine_36.result()) +SketchLine_38 = Sketch_1.addLine(171.0385831271055, -48.05657162886843, 135.6178801955327, 0.3724878688471688) +SketchPoint_5 = Sketch_1.addPoint(159.2316821499145, -31.91355179629657) +SketchConstraintCoincidence_41 = Sketch_1.setCoincident(SketchPoint_5.coordinates(), SketchLine_33.result()) +SketchConstraintCoincidence_42 = Sketch_1.setCoincident(SketchPoint_5.coordinates(), SketchLine_38.result()) +SketchConstraintDistance_23 = Sketch_1.setDistance(SketchLine_32.endPoint(), SketchPoint_5.coordinates(), 20, True) +SketchConstraintDistance_24 = Sketch_1.setDistance(SketchLine_38.startPoint(), SketchPoint_5.coordinates(), 20, True) +SketchConstraintDistance_25 = Sketch_1.setDistance(SketchPoint_5.coordinates(), SketchLine_33.endPoint(), 40, True) +SketchConstraintEqual_27 = Sketch_1.setEqual(SketchLine_33.result(), SketchLine_38.result()) +SketchLine_39 = Sketch_1.addLine(175.8477778293761, -43.04483044571408, 125.9994907909914, -9.650994497461493) +SketchConstraintCoincidence_43 = Sketch_1.setCoincident(SketchPoint_5.coordinates(), SketchLine_39.result()) +SketchConstraintEqual_28 = Sketch_1.setEqual(SketchLine_33.result(), SketchLine_39.result()) +SketchConstraintDistance_26 = Sketch_1.setDistance(SketchLine_39.startPoint(), SketchPoint_5.coordinates(), 20, True) +SketchConstraintAngle_35 = Sketch_1.setAngle(SketchLine_33.result(), SketchLine_38.result(), 340, type = "Backward") +SketchConstraintAngle_36 = Sketch_1.setAngle(SketchLine_39.result(), SketchLine_38.result(), 340, type = "Backward") +SketchLine_40 = Sketch_1.addLine(160.1386077477389, -30.42300575990098, 107.5695439158812, -1.500807920835093) +SketchPoint_6 = Sketch_1.addPoint(142.615586470453, -20.78227314687903) +SketchConstraintCoincidence_44 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_40.result()) +SketchConstraintCoincidence_45 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_39.result()) +SketchConstraintDistance_27 = Sketch_1.setDistance(SketchPoint_6.coordinates(), SketchLine_40.startPoint(), 20, True) +SketchConstraintDistance_28 = Sketch_1.setDistance(SketchPoint_6.coordinates(), SketchLine_39.endPoint(), 20, True) +SketchConstraintEqual_29 = Sketch_1.setEqual(SketchLine_39.result(), SketchLine_40.result()) +SketchLine_41 = Sketch_1.addLine(147.1612701207084, -22.78891223719074, 124.3190003679524, -12.70545836667124) +SketchConstraintCoincidence_46 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_41.result()) +SketchConstraintDistance_29 = Sketch_1.setDistance(SketchLine_41.endPoint(), SketchPoint_6.coordinates(), 20, True) +SketchConstraintAngle_37 = Sketch_1.setAngle(SketchLine_39.result(), SketchLine_40.result(), 185, type = "Backward") +SketchConstraintAngle_38 = Sketch_1.setAngle(SketchLine_41.result(), SketchLine_40.result(), 355, type = "Backward") +SketchLine_42 = Sketch_1.addLine(161.5464893301474, -27.23370065688114, 104.7537807510641, -7.879418126874779) +SketchConstraintCoincidence_47 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_42.result()) +SketchConstraintEqual_30 = Sketch_1.setEqual(SketchLine_39.result(), SketchLine_42.result()) +SketchConstraintDistance_30 = Sketch_1.setDistance(SketchPoint_6.coordinates(), SketchLine_42.startPoint(), 20, True) +SketchConstraintAngle_39 = Sketch_1.setAngle(SketchLine_42.result(), SketchLine_41.result(), 355, type = "Backward") +SketchLine_43 = Sketch_1.addLine(181.4578745011218, -30.33615510881286, 123.1944424551186, -16.0053321659121) +SketchConstraintCoincidence_48 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_43.result()) +SketchConstraintEqual_31 = Sketch_1.setEqual(SketchLine_42.result(), SketchLine_43.result()) +SketchConstraintDistance_31 = Sketch_1.setDistance(SketchLine_43.endPoint(), SketchPoint_6.coordinates(), 20, True) +SketchConstraintAngle_40 = Sketch_1.setAngle(SketchLine_42.result(), SketchLine_43.result(), 185, type = "Backward") +SketchLine_44 = Sketch_1.addLine(182.1427435468735, -26.91447124022047, 122.8520079322427, -17.71617410020831) +SketchConstraintCoincidence_49 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_44.result()) +SketchConstraintDistance_32 = Sketch_1.setDistance(SketchLine_44.endPoint(), SketchPoint_6.coordinates(), 20, True) +SketchConstraintAngle_41 = Sketch_1.setAngle(SketchLine_43.result(), SketchLine_44.result(), 355, type = "Backward") +SketchConstraintEqual_32 = Sketch_1.setEqual(SketchLine_43.result(), SketchLine_44.result()) +SketchLine_45 = Sketch_1.addLine(182.5267870601237, -23.44611764141531, 122.6599861756176, -19.45035089961089) +SketchConstraintCoincidence_50 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_45.result()) +SketchConstraintEqual_33 = Sketch_1.setEqual(SketchLine_44.result(), SketchLine_45.result()) +SketchConstraintDistance_33 = Sketch_1.setDistance(SketchLine_45.endPoint(), SketchPoint_6.coordinates(), 20, True) +SketchConstraintAngle_42 = Sketch_1.setAngle(SketchLine_45.result(), SketchLine_44.result(), 355, type = "Backward") +SketchConstraintCoincidence_51 = Sketch_1.setCoincident(SketchLine_37.startPoint(), SketchLine_45.result()) +model.do() +Extrusion_1_objects = [model.selection("FACE", "Sketch_1/Face-SketchLine_1r-SketchLine_2f-SketchLine_3f-SketchLine_9f-SketchLine_15f-SketchLine_7f-SketchLine_6r-SketchLine_5f-SketchLine_4r"), model.selection("FACE", "Sketch_1/Face-SketchLine_16f-SketchLine_17f-SketchLine_18f-SketchLine_24f-SketchLine_30f-SketchLine_22f-SketchLine_21r-SketchLine_20f-SketchLine_19r"), model.selection("FACE", "Sketch_1/Face-SketchLine_31f-SketchLine_32f-SketchLine_33f-SketchLine_39f-SketchLine_45f-SketchLine_37f-SketchLine_36r-SketchLine_35f-SketchLine_34r")] +Extrusion_1 = model.addExtrusion(Part_1_doc, Extrusion_1_objects, model.selection(), 10, 0) +model.do() + +model.end() + +from GeomAPI import * + +REF_VOLUME = 25018.7130187615 + +model.testNbResults(Extrusion_1, 3) +model.testNbSubResults(Extrusion_1, [0, 0, 0]) +model.testNbSubShapes(Extrusion_1, GeomAPI_Shape.SOLID, [1, 1, 1]) +model.testNbSubShapes(Extrusion_1, GeomAPI_Shape.FACE, [11, 11, 11]) +model.testNbSubShapes(Extrusion_1, GeomAPI_Shape.EDGE, [54, 54, 54]) +model.testNbSubShapes(Extrusion_1, GeomAPI_Shape.VERTEX, [108, 108, 108]) +model.testResultsVolumes(Extrusion_1, [REF_VOLUME, REF_VOLUME, REF_VOLUME]) + +assert(model.checkPythonDump()) diff --git a/src/SketchPlugin/Test/TestConstraintAngle_v20191210_2.py b/src/SketchPlugin/Test/TestConstraintAngle_v20191210_2.py new file mode 100644 index 000000000..5abdc9431 --- /dev/null +++ b/src/SketchPlugin/Test/TestConstraintAngle_v20191210_2.py @@ -0,0 +1,262 @@ +# 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 +# + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +model.addParameter(Part_1_doc, "Ang", "140") +model.addParameter(Part_1_doc, "dAng", "5") +Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOY")) +SketchLine_1 = Sketch_1.addLine(-17.48270627886662, -77.57247534383079, 0.4653113240225388, -68.74815303974528) +SketchLine_2 = Sketch_1.addLine(0.4653113240225388, -68.74815303974528, 8.542125432770632, -50.45156664083665) +SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint()) +SketchLine_3 = Sketch_1.addLine(8.542125432770632, -50.45156664083665, -8.178735979228234, 7.171456480488104) +SketchConstraintCoincidence_2 = Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint()) +SketchLine_4 = Sketch_1.addLine(-17.48270627886662, -77.57247534383079, -36.90385046950819, -72.79553507559329) +SketchConstraintCoincidence_3 = Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchLine_4.startPoint()) +SketchLine_5 = Sketch_1.addLine(-48.71075203912585, -56.65251567631857, -36.90385046950819, -72.79553507559329) +SketchConstraintCoincidence_4 = Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_5.endPoint()) +SketchLine_6 = Sketch_1.addLine(-48.71075203912585, -56.65251567631857, -47.37883052420096, -36.69691533260352) +SketchConstraintCoincidence_5 = Sketch_1.setCoincident(SketchLine_5.startPoint(), SketchLine_6.startPoint()) +SketchLine_7 = Sketch_1.addLine(-30.39232801419296, -18.99499937550162, -47.37883052420096, -36.69691533260352) +SketchConstraintCoincidence_6 = Sketch_1.setCoincident(SketchLine_6.endPoint(), SketchLine_7.endPoint()) +SketchConstraintAngle_1 = Sketch_1.setAngle(SketchLine_1.result(), SketchLine_2.result(), "Ang", type = "Direct") +SketchConstraintAngle_2 = Sketch_1.setAngle(SketchLine_3.result(), SketchLine_2.result(), "Ang", type = "Direct") +SketchConstraintAngle_3 = Sketch_1.setAngle(SketchLine_1.result(), SketchLine_4.result(), "Ang", type = "Direct") +SketchConstraintAngle_4 = Sketch_1.setAngle(SketchLine_6.result(), SketchLine_5.result(), "Ang", type = "Direct") +SketchConstraintAngle_5 = Sketch_1.setAngle(SketchLine_5.result(), SketchLine_4.result(), "Ang", type = "Direct") +SketchConstraintAngle_6 = Sketch_1.setAngle(SketchLine_6.result(), SketchLine_7.result(), "Ang", type = "Direct") +SketchConstraintLength_1 = Sketch_1.setLength(SketchLine_2.result(), 20) +SketchConstraintEqual_1 = Sketch_1.setEqual(SketchLine_2.result(), SketchLine_1.result()) +SketchConstraintEqual_2 = Sketch_1.setEqual(SketchLine_2.result(), SketchLine_4.result()) +SketchConstraintEqual_3 = Sketch_1.setEqual(SketchLine_2.result(), SketchLine_5.result()) +SketchConstraintEqual_4 = Sketch_1.setEqual(SketchLine_2.result(), SketchLine_6.result()) +SketchLine_8 = Sketch_1.addLine(14.775406531722, -47.38691166633646, -20.64529817713098, 1.042146531487715) +SketchPoint_1 = Sketch_1.addPoint(2.968504962104344, -31.24389226706174) +SketchConstraintCoincidence_7 = Sketch_1.setCoincident(SketchPoint_1.coordinates(), SketchLine_3.result()) +SketchConstraintCoincidence_8 = Sketch_1.setCoincident(SketchPoint_1.coordinates(), SketchLine_8.result()) +SketchConstraintDistance_1 = Sketch_1.setDistance(SketchLine_2.endPoint(), SketchPoint_1.coordinates(), 20, True) +SketchConstraintDistance_2 = Sketch_1.setDistance(SketchLine_8.startPoint(), SketchPoint_1.coordinates(), 20, True) +SketchConstraintDistance_3 = Sketch_1.setDistance(SketchPoint_1.coordinates(), SketchLine_3.endPoint(), 40, True) +SketchConstraintEqual_5 = Sketch_1.setEqual(SketchLine_3.result(), SketchLine_8.result()) +SketchLine_9 = Sketch_1.addLine(19.58460105006861, -42.37517030669127, -30.26368721382418, -8.981336187802668) +SketchConstraintCoincidence_9 = Sketch_1.setCoincident(SketchPoint_1.coordinates(), SketchLine_9.result()) +SketchConstraintEqual_6 = Sketch_1.setEqual(SketchLine_3.result(), SketchLine_9.result()) +SketchConstraintDistance_4 = Sketch_1.setDistance(SketchLine_9.startPoint(), SketchPoint_1.coordinates(), 20, True) +SketchConstraintAngle_7 = Sketch_1.setAngle(SketchLine_3.result(), SketchLine_8.result(), "(180-Ang)/2", type = "Direct") +SketchConstraintAngle_8 = Sketch_1.setAngle(SketchLine_9.result(), SketchLine_8.result(), "(180-Ang)/2", type = "Direct") +SketchLine_10 = Sketch_1.addLine(3.875430505227681, -29.75334619738324, -48.69363438803513, -0.8311502875301234) +SketchPoint_2 = Sketch_1.addPoint(-13.64759112585992, -20.1126142274322) +SketchConstraintCoincidence_10 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_10.result()) +SketchConstraintCoincidence_11 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_9.result()) +SketchConstraintDistance_5 = Sketch_1.setDistance(SketchPoint_2.coordinates(), SketchLine_10.startPoint(), 20, True) +SketchConstraintDistance_6 = Sketch_1.setDistance(SketchPoint_2.coordinates(), SketchLine_9.endPoint(), 20, True) +SketchConstraintEqual_7 = Sketch_1.setEqual(SketchLine_9.result(), SketchLine_10.result()) +SketchLine_11 = Sketch_1.addLine(0.001529676402264532, -26.13785899518266, -31.94417752476854, -12.03580011868412) +SketchConstraintCoincidence_12 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_11.result()) +SketchConstraintDistance_7 = Sketch_1.setDistance(SketchLine_11.endPoint(), SketchPoint_2.coordinates(), 20, True) +SketchConstraintAngle_9 = Sketch_1.setAngle(SketchLine_9.result(), SketchLine_10.result(), "180-dAng", type = "Direct") +SketchConstraintAngle_10 = Sketch_1.setAngle(SketchLine_11.result(), SketchLine_10.result(), "dAng", type = "Direct") +SketchLine_12 = Sketch_1.addLine(5.283311970593094, -26.56404104269606, -51.50939731876596, -7.20976059690448) +SketchConstraintCoincidence_13 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_12.result()) +SketchConstraintEqual_8 = Sketch_1.setEqual(SketchLine_9.result(), SketchLine_12.result()) +SketchConstraintDistance_8 = Sketch_1.setDistance(SketchPoint_2.coordinates(), SketchLine_12.startPoint(), 20, True) +SketchConstraintAngle_11 = Sketch_1.setAngle(SketchLine_12.result(), SketchLine_11.result(), "dAng", type = "Direct") +SketchLine_13 = Sketch_1.addLine(25.19469725542325, -29.66649476390714, -33.06873531650151, -15.33567395919474) +SketchConstraintCoincidence_14 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_13.result()) +SketchConstraintEqual_9 = Sketch_1.setEqual(SketchLine_12.result(), SketchLine_13.result()) +SketchConstraintDistance_9 = Sketch_1.setDistance(SketchLine_13.endPoint(), SketchPoint_2.coordinates(), 20, True) +SketchConstraintAngle_12 = Sketch_1.setAngle(SketchLine_12.result(), SketchLine_13.result(), "180-dAng", type = "Direct") +SketchLine_14 = Sketch_1.addLine(25.87956617560386, -26.24481087018098, -33.41116977659181, -17.04651590605781) +SketchConstraintCoincidence_15 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_14.result()) +SketchConstraintDistance_10 = Sketch_1.setDistance(SketchLine_14.endPoint(), SketchPoint_2.coordinates(), 20, True) +SketchConstraintAngle_13 = Sketch_1.setAngle(SketchLine_13.result(), SketchLine_14.result(), "dAng", type = "Direct") +SketchConstraintEqual_10 = Sketch_1.setEqual(SketchLine_13.result(), SketchLine_14.result()) +SketchLine_15 = Sketch_1.addLine(26.26360956157018, -22.77645725728195, -33.60319146957497, -18.78069271250733) +SketchConstraintCoincidence_16 = Sketch_1.setCoincident(SketchPoint_2.coordinates(), SketchLine_15.result()) +SketchConstraintEqual_11 = Sketch_1.setEqual(SketchLine_14.result(), SketchLine_15.result()) +SketchConstraintDistance_11 = Sketch_1.setDistance(SketchLine_15.endPoint(), SketchPoint_2.coordinates(), 20, True) +SketchConstraintAngle_14 = Sketch_1.setAngle(SketchLine_15.result(), SketchLine_14.result(), "dAng", type = "Direct") +SketchConstraintCoincidence_17 = Sketch_1.setCoincident(SketchLine_7.startPoint(), SketchLine_15.result()) +SketchLine_16 = Sketch_1.addLine(60.00388909712782, -76.09960829009104, 78.00643494689578, -67.38706888260469) +SketchLine_17 = Sketch_1.addLine(78.00643494689578, -67.38706888260469, 86.19687277706721, -49.141063069) +SketchConstraintCoincidence_18 = Sketch_1.setCoincident(SketchLine_16.endPoint(), SketchLine_17.startPoint()) +SketchLine_18 = Sketch_1.addLine(86.19687277706721, -49.141063069, 69.83467154684908, 8.584826884311665) +SketchConstraintCoincidence_19 = Sketch_1.setCoincident(SketchLine_17.endPoint(), SketchLine_18.startPoint()) +SketchLine_19 = Sketch_1.addLine(60.00388909712782, -76.09960829009104, 40.61282650688053, -71.20198727360641) +SketchConstraintCoincidence_20 = Sketch_1.setCoincident(SketchLine_16.startPoint(), SketchLine_19.startPoint()) +SketchLine_20 = Sketch_1.addLine(28.90654086978602, -54.98585713775849, 40.61282650688053, -71.20198727360641) +SketchConstraintCoincidence_21 = Sketch_1.setCoincident(SketchLine_19.endPoint(), SketchLine_20.endPoint()) +SketchLine_21 = Sketch_1.addLine(28.90654086978602, -54.98585713775849, 30.36253333631381, -35.03892539532215) +SketchConstraintCoincidence_22 = Sketch_1.setCoincident(SketchLine_20.startPoint(), SketchLine_21.startPoint()) +SketchLine_22 = Sketch_1.addLine(47.45878924889096, -17.44298467461911, 30.36253333631381, -35.03892539532215) +SketchConstraintCoincidence_23 = Sketch_1.setCoincident(SketchLine_21.endPoint(), SketchLine_22.endPoint()) +SketchConstraintAngle_15 = Sketch_1.setAngle(SketchLine_16.result(), SketchLine_17.result(), "180-Ang", type = "Supplementary") +SketchConstraintAngle_16 = Sketch_1.setAngle(SketchLine_18.result(), SketchLine_17.result(), "180-Ang", type = "Supplementary") +SketchConstraintAngle_17 = Sketch_1.setAngle(SketchLine_16.result(), SketchLine_19.result(), "180-Ang", type = "Supplementary") +SketchConstraintAngle_18 = Sketch_1.setAngle(SketchLine_21.result(), SketchLine_20.result(), "180-Ang", type = "Supplementary") +SketchConstraintAngle_19 = Sketch_1.setAngle(SketchLine_20.result(), SketchLine_19.result(), "180-Ang", type = "Supplementary") +SketchConstraintAngle_20 = Sketch_1.setAngle(SketchLine_21.result(), SketchLine_22.result(), "180-Ang", type = "Supplementary") +SketchConstraintLength_2 = Sketch_1.setLength(SketchLine_17.result(), 20) +SketchConstraintEqual_12 = Sketch_1.setEqual(SketchLine_17.result(), SketchLine_16.result()) +SketchConstraintEqual_13 = Sketch_1.setEqual(SketchLine_17.result(), SketchLine_19.result()) +SketchConstraintEqual_14 = Sketch_1.setEqual(SketchLine_17.result(), SketchLine_20.result()) +SketchConstraintEqual_15 = Sketch_1.setEqual(SketchLine_17.result(), SketchLine_21.result()) +SketchLine_23 = Sketch_1.addLine(92.44909133742235, -46.11522988707736, 57.3302344261388, 2.533160520466375) +SketchPoint_3 = Sketch_1.addPoint(80.74280570032784, -29.89909975122945) +SketchConstraintCoincidence_24 = Sketch_1.setCoincident(SketchPoint_3.coordinates(), SketchLine_18.result()) +SketchConstraintCoincidence_25 = Sketch_1.setCoincident(SketchPoint_3.coordinates(), SketchLine_23.result()) +SketchConstraintDistance_12 = Sketch_1.setDistance(SketchLine_17.endPoint(), SketchPoint_3.coordinates(), 20, True) +SketchConstraintDistance_13 = Sketch_1.setDistance(SketchLine_23.startPoint(), SketchPoint_3.coordinates(), 20, True) +SketchConstraintDistance_14 = Sketch_1.setDistance(SketchPoint_3.coordinates(), SketchLine_18.endPoint(), 40, True) +SketchConstraintEqual_16 = Sketch_1.setEqual(SketchLine_18.result(), SketchLine_23.result()) +SketchLine_24 = Sketch_1.addLine(97.289359083568, -41.13349208617944, 47.64969893384747, -7.430315081329468) +SketchConstraintCoincidence_26 = Sketch_1.setCoincident(SketchPoint_3.coordinates(), SketchLine_24.result()) +SketchConstraintEqual_17 = Sketch_1.setEqual(SketchLine_18.result(), SketchLine_24.result()) +SketchConstraintDistance_15 = Sketch_1.setDistance(SketchLine_24.startPoint(), SketchPoint_3.coordinates(), 20, True) +SketchConstraintAngle_21 = Sketch_1.setAngle(SketchLine_18.result(), SketchLine_23.result(), "90+Ang/2", type = "Supplementary") +SketchConstraintAngle_22 = Sketch_1.setAngle(SketchLine_24.result(), SketchLine_23.result(), "90+Ang/2", type = "Supplementary") +SketchLine_25 = Sketch_1.addLine(81.65898287743471, -28.41422234660911, 29.27079119639352, 0.8343224443798635) +SketchPoint_4 = Sketch_1.addPoint(64.19625231708766, -18.66470741627946) +SketchConstraintCoincidence_27 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_25.result()) +SketchConstraintCoincidence_28 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_24.result()) +SketchConstraintDistance_16 = Sketch_1.setDistance(SketchPoint_4.coordinates(), SketchLine_25.startPoint(), 20, True) +SketchConstraintDistance_17 = Sketch_1.setDistance(SketchPoint_4.coordinates(), SketchLine_24.endPoint(), 20, True) +SketchConstraintEqual_18 = Sketch_1.setEqual(SketchLine_24.result(), SketchLine_25.result()) +SketchLine_26 = Sketch_1.addLine(95.51651619313817, -32.72404055044315, 45.95024650348294, -10.47426958610802) +SketchConstraintCoincidence_29 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_26.result()) +SketchConstraintDistance_18 = Sketch_1.setDistance(SketchLine_26.endPoint(), SketchPoint_4.coordinates(), 20, True) +SketchConstraintAngle_23 = Sketch_1.setAngle(SketchLine_24.result(), SketchLine_25.result(), "dAng", type = "Supplementary") +SketchConstraintAngle_24 = Sketch_1.setAngle(SketchLine_26.result(), SketchLine_25.result(), "dAng", type = "Supplementary") +SketchLine_27 = Sketch_1.addLine(83.08667026246893, -25.23373396888348, 26.41541642632507, -5.526654311071399) +SketchConstraintCoincidence_30 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_27.result()) +SketchConstraintEqual_19 = Sketch_1.setEqual(SketchLine_24.result(), SketchLine_27.result()) +SketchConstraintDistance_19 = Sketch_1.setDistance(SketchPoint_4.coordinates(), SketchLine_27.startPoint(), 20, True) +SketchConstraintAngle_25 = Sketch_1.setAngle(SketchLine_27.result(), SketchLine_26.result(), "dAng", type = "Supplementary") +SketchLine_28 = Sketch_1.addLine(102.9783774975822, -28.45994944924871, 44.80518972684035, -13.76708639979482) +SketchConstraintCoincidence_31 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_28.result()) +SketchConstraintEqual_20 = Sketch_1.setEqual(SketchLine_27.result(), SketchLine_28.result()) +SketchConstraintDistance_20 = Sketch_1.setDistance(SketchLine_28.endPoint(), SketchPoint_4.coordinates(), 20, True) +SketchConstraintAngle_26 = Sketch_1.setAngle(SketchLine_27.result(), SketchLine_28.result(), "dAng", type = "Supplementary") +SketchLine_29 = Sketch_1.addLine(103.6845113974033, -25.04259067061018, 44.45212277692985, -15.47576578911409) +SketchConstraintCoincidence_32 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_29.result()) +SketchConstraintDistance_21 = Sketch_1.setDistance(SketchLine_29.endPoint(), SketchPoint_4.coordinates(), 20, True) +SketchConstraintAngle_27 = Sketch_1.setAngle(SketchLine_28.result(), SketchLine_29.result(), "180-dAng", type = "Supplementary") +SketchConstraintEqual_21 = Sketch_1.setEqual(SketchLine_28.result(), SketchLine_29.result()) +SketchLine_30 = Sketch_1.addLine(104.0901158019603, -21.57669234933498, 44.24932057465131, -17.20871494975169) +SketchConstraintCoincidence_33 = Sketch_1.setCoincident(SketchPoint_4.coordinates(), SketchLine_30.result()) +SketchConstraintEqual_22 = Sketch_1.setEqual(SketchLine_29.result(), SketchLine_30.result()) +SketchConstraintDistance_22 = Sketch_1.setDistance(SketchLine_30.endPoint(), SketchPoint_4.coordinates(), 20, True) +SketchConstraintAngle_28 = Sketch_1.setAngle(SketchLine_30.result(), SketchLine_29.result(), "180-dAng", type = "Supplementary") +SketchConstraintCoincidence_34 = Sketch_1.setCoincident(SketchLine_22.startPoint(), SketchLine_30.result()) + +SketchLine_31 = Sketch_1.addLine(138.7804692087479, -78.2421341225341, 156.7284871354776, -69.4178124771163) +SketchLine_32 = Sketch_1.addLine(156.7284871354776, -69.4178124771163, 164.8053019156854, -51.12122637461573) +SketchConstraintCoincidence_35 = Sketch_1.setCoincident(SketchLine_31.endPoint(), SketchLine_32.startPoint()) +SketchLine_33 = Sketch_1.addLine(164.8053019156854, -51.12122637461573, 148.0844426183728, 6.501797360341752) +SketchConstraintCoincidence_36 = Sketch_1.setCoincident(SketchLine_32.endPoint(), SketchLine_33.startPoint()) +SketchLine_34 = Sketch_1.addLine(138.7804692087479, -78.2421341225341, 119.3593251934135, -73.46519314156717) +SketchConstraintCoincidence_37 = Sketch_1.setCoincident(SketchLine_31.startPoint(), SketchLine_34.startPoint()) +SketchLine_35 = Sketch_1.addLine(107.5524242162226, -57.32217330899532, 119.3593251934135, -73.46519314156717) +SketchConstraintCoincidence_38 = Sketch_1.setCoincident(SketchLine_34.endPoint(), SketchLine_35.endPoint()) +SketchLine_36 = Sketch_1.addLine(107.5524242162226, -57.32217330899532, 108.8843464634908, -37.36657301415998) +SketchConstraintCoincidence_39 = Sketch_1.setCoincident(SketchLine_35.startPoint(), SketchLine_36.startPoint()) +SketchLine_37 = Sketch_1.addLine(125.8708496231354, -19.66465768043951, 108.8843464634908, -37.36657301415998) +SketchConstraintCoincidence_40 = Sketch_1.setCoincident(SketchLine_36.endPoint(), SketchLine_37.endPoint()) +SketchConstraintAngle_29 = Sketch_1.setAngle(SketchLine_31.result(), SketchLine_32.result(), "360-Ang", type = "Backward") +SketchConstraintAngle_30 = Sketch_1.setAngle(SketchLine_33.result(), SketchLine_32.result(), "360-Ang", type = "Backward") +SketchConstraintAngle_31 = Sketch_1.setAngle(SketchLine_31.result(), SketchLine_34.result(), "360-Ang", type = "Backward") +SketchConstraintAngle_32 = Sketch_1.setAngle(SketchLine_36.result(), SketchLine_35.result(), "360-Ang", type = "Backward") +SketchConstraintAngle_33 = Sketch_1.setAngle(SketchLine_35.result(), SketchLine_34.result(), "360-Ang", type = "Backward") +SketchConstraintAngle_34 = Sketch_1.setAngle(SketchLine_36.result(), SketchLine_37.result(), "360-Ang", type = "Backward") +SketchConstraintLength_3 = Sketch_1.setLength(SketchLine_32.result(), 20) +SketchConstraintEqual_23 = Sketch_1.setEqual(SketchLine_32.result(), SketchLine_31.result()) +SketchConstraintEqual_24 = Sketch_1.setEqual(SketchLine_32.result(), SketchLine_34.result()) +SketchConstraintEqual_25 = Sketch_1.setEqual(SketchLine_32.result(), SketchLine_35.result()) +SketchConstraintEqual_26 = Sketch_1.setEqual(SketchLine_32.result(), SketchLine_36.result()) +SketchLine_38 = Sketch_1.addLine(171.0385831271055, -48.05657162886843, 135.6178801955327, 0.3724878688471688) +SketchPoint_5 = Sketch_1.addPoint(159.2316821499145, -31.91355179629657) +SketchConstraintCoincidence_41 = Sketch_1.setCoincident(SketchPoint_5.coordinates(), SketchLine_33.result()) +SketchConstraintCoincidence_42 = Sketch_1.setCoincident(SketchPoint_5.coordinates(), SketchLine_38.result()) +SketchConstraintDistance_23 = Sketch_1.setDistance(SketchLine_32.endPoint(), SketchPoint_5.coordinates(), 20, True) +SketchConstraintDistance_24 = Sketch_1.setDistance(SketchLine_38.startPoint(), SketchPoint_5.coordinates(), 20, True) +SketchConstraintDistance_25 = Sketch_1.setDistance(SketchPoint_5.coordinates(), SketchLine_33.endPoint(), 40, True) +SketchConstraintEqual_27 = Sketch_1.setEqual(SketchLine_33.result(), SketchLine_38.result()) +SketchLine_39 = Sketch_1.addLine(175.8477778293761, -43.04483044571408, 125.9994907909914, -9.650994497461493) +SketchConstraintCoincidence_43 = Sketch_1.setCoincident(SketchPoint_5.coordinates(), SketchLine_39.result()) +SketchConstraintEqual_28 = Sketch_1.setEqual(SketchLine_33.result(), SketchLine_39.result()) +SketchConstraintDistance_26 = Sketch_1.setDistance(SketchLine_39.startPoint(), SketchPoint_5.coordinates(), 20, True) +SketchConstraintAngle_35 = Sketch_1.setAngle(SketchLine_33.result(), SketchLine_38.result(), "360-(180-Ang)/2", type = "Backward") +SketchConstraintAngle_36 = Sketch_1.setAngle(SketchLine_39.result(), SketchLine_38.result(), "360-(180-Ang)/2", type = "Backward") +SketchLine_40 = Sketch_1.addLine(160.1386077477389, -30.42300575990098, 107.5695439158812, -1.500807920835093) +SketchPoint_6 = Sketch_1.addPoint(142.615586470453, -20.78227314687903) +SketchConstraintCoincidence_44 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_40.result()) +SketchConstraintCoincidence_45 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_39.result()) +SketchConstraintDistance_27 = Sketch_1.setDistance(SketchPoint_6.coordinates(), SketchLine_40.startPoint(), 20, True) +SketchConstraintDistance_28 = Sketch_1.setDistance(SketchPoint_6.coordinates(), SketchLine_39.endPoint(), 20, True) +SketchConstraintEqual_29 = Sketch_1.setEqual(SketchLine_39.result(), SketchLine_40.result()) +SketchLine_41 = Sketch_1.addLine(147.1612701207084, -22.78891223719074, 124.3190003679524, -12.70545836667124) +SketchConstraintCoincidence_46 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_41.result()) +SketchConstraintDistance_29 = Sketch_1.setDistance(SketchLine_41.endPoint(), SketchPoint_6.coordinates(), 20, True) +SketchConstraintAngle_37 = Sketch_1.setAngle(SketchLine_39.result(), SketchLine_40.result(), "180+dAng", type = "Backward") +SketchConstraintAngle_38 = Sketch_1.setAngle(SketchLine_41.result(), SketchLine_40.result(), "360-dAng", type = "Backward") +SketchLine_42 = Sketch_1.addLine(161.5464893301474, -27.23370065688114, 104.7537807510641, -7.879418126874779) +SketchConstraintCoincidence_47 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_42.result()) +SketchConstraintEqual_30 = Sketch_1.setEqual(SketchLine_39.result(), SketchLine_42.result()) +SketchConstraintDistance_30 = Sketch_1.setDistance(SketchPoint_6.coordinates(), SketchLine_42.startPoint(), 20, True) +SketchConstraintAngle_39 = Sketch_1.setAngle(SketchLine_42.result(), SketchLine_41.result(), "360-dAng", type = "Backward") +SketchLine_43 = Sketch_1.addLine(181.4578745011218, -30.33615510881286, 123.1944424551186, -16.0053321659121) +SketchConstraintCoincidence_48 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_43.result()) +SketchConstraintEqual_31 = Sketch_1.setEqual(SketchLine_42.result(), SketchLine_43.result()) +SketchConstraintDistance_31 = Sketch_1.setDistance(SketchLine_43.endPoint(), SketchPoint_6.coordinates(), 20, True) +SketchConstraintAngle_40 = Sketch_1.setAngle(SketchLine_42.result(), SketchLine_43.result(), "180+dAng", type = "Backward") +SketchLine_44 = Sketch_1.addLine(182.1427435468735, -26.91447124022047, 122.8520079322427, -17.71617410020831) +SketchConstraintCoincidence_49 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_44.result()) +SketchConstraintDistance_32 = Sketch_1.setDistance(SketchLine_44.endPoint(), SketchPoint_6.coordinates(), 20, True) +SketchConstraintAngle_41 = Sketch_1.setAngle(SketchLine_43.result(), SketchLine_44.result(), "360-dAng", type = "Backward") +SketchConstraintEqual_32 = Sketch_1.setEqual(SketchLine_43.result(), SketchLine_44.result()) +SketchLine_45 = Sketch_1.addLine(182.5267870601237, -23.44611764141531, 122.6599861756176, -19.45035089961089) +SketchConstraintCoincidence_50 = Sketch_1.setCoincident(SketchPoint_6.coordinates(), SketchLine_45.result()) +SketchConstraintEqual_33 = Sketch_1.setEqual(SketchLine_44.result(), SketchLine_45.result()) +SketchConstraintDistance_33 = Sketch_1.setDistance(SketchLine_45.endPoint(), SketchPoint_6.coordinates(), 20, True) +SketchConstraintAngle_42 = Sketch_1.setAngle(SketchLine_45.result(), SketchLine_44.result(), "360-dAng", type = "Backward") +SketchConstraintCoincidence_51 = Sketch_1.setCoincident(SketchLine_37.startPoint(), SketchLine_45.result()) +model.do() +Extrusion_1_objects = [model.selection("FACE", "Sketch_1/Face-SketchLine_1r-SketchLine_2f-SketchLine_3f-SketchLine_9f-SketchLine_15f-SketchLine_7f-SketchLine_6r-SketchLine_5f-SketchLine_4r"), model.selection("FACE", "Sketch_1/Face-SketchLine_16f-SketchLine_17f-SketchLine_18f-SketchLine_24f-SketchLine_30f-SketchLine_22f-SketchLine_21r-SketchLine_20f-SketchLine_19r"), model.selection("FACE", "Sketch_1/Face-SketchLine_31f-SketchLine_32f-SketchLine_33f-SketchLine_39f-SketchLine_45f-SketchLine_37f-SketchLine_36r-SketchLine_35f-SketchLine_34r")] +Extrusion_1 = model.addExtrusion(Part_1_doc, Extrusion_1_objects, model.selection(), 10, 0) +model.do() + +model.end() + +from GeomAPI import * + +REF_VOLUME = 25018.7130187615 + +model.testNbResults(Extrusion_1, 3) +model.testNbSubResults(Extrusion_1, [0, 0, 0]) +model.testNbSubShapes(Extrusion_1, GeomAPI_Shape.SOLID, [1, 1, 1]) +model.testNbSubShapes(Extrusion_1, GeomAPI_Shape.FACE, [11, 11, 11]) +model.testNbSubShapes(Extrusion_1, GeomAPI_Shape.EDGE, [54, 54, 54]) +model.testNbSubShapes(Extrusion_1, GeomAPI_Shape.VERTEX, [108, 108, 108]) +model.testResultsVolumes(Extrusion_1, [REF_VOLUME, REF_VOLUME, REF_VOLUME]) + +assert(model.checkPythonDump()) diff --git a/test.hdfs/CMakeLists.txt b/test.hdfs/CMakeLists.txt index a8e5ca417..dd856efbc 100644 --- a/test.hdfs/CMakeLists.txt +++ b/test.hdfs/CMakeLists.txt @@ -21,51 +21,55 @@ ENABLE_TESTING() SET(RESTRICTED_ROOT_DIR $ENV{RESTRICTED_ROOT_DIR} CACHE PATH "Path to the restricted repository") +set(hdfFilesRestr "") if (EXISTS ${RESTRICTED_ROOT_DIR}) file(GLOB hdfFilesRestr "${RESTRICTED_ROOT_DIR}/SHAPER/test.hdfs/*.hdf") +endif() + +file(GLOB hdfFilesCur "${CMAKE_CURRENT_SOURCE_DIR}/*.hdf") +set(hdfFilesRestr ${hdfFilesCur} ${hdfFilesRestr}) - if (WIN32) # different separators and path to libraries variable name - SET(_JUSTPATH "${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_BIN};${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_SWIG};${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_PLUGIN_FILES};${SUIT_LIB_DIR};$ENV{PATH}") - STRING(REPLACE "\\" "/" _JUSTPATH "${_JUSTPATH}") - STRING(REPLACE ";" "\\;" _JUSTPATH "${_JUSTPATH}") - SET(_PYTHONPATH "${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_SWIG};${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_PLUGIN_FILES};${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_ADDONS};$ENV{PYTHONPATH}") - STRING(REPLACE "\\" "/" _PYTHONPATH "${_PYTHONPATH}") - STRING(REPLACE ";" "\\;" _PYTHONPATH "${_PYTHONPATH}") - else() - SET(_LD_LIBRARY_PATH "${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_BIN}:${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_SWIG}:${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_PLUGIN_FILES}:${SUIT_LIB_DIR}:$ENV{LD_LIBRARY_PATH}") - SET(_PYTHONPATH "${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_SWIG}:${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_PLUGIN_FILES}:${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_ADDONS}:$ENV{PYTHONPATH}") - endif() +if (WIN32) # different separators and path to libraries variable name + SET(_JUSTPATH "${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_BIN};${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_SWIG};${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_PLUGIN_FILES};${SUIT_LIB_DIR};$ENV{PATH}") + STRING(REPLACE "\\" "/" _JUSTPATH "${_JUSTPATH}") + STRING(REPLACE ";" "\\;" _JUSTPATH "${_JUSTPATH}") + SET(_PYTHONPATH "${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_SWIG};${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_PLUGIN_FILES};${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_ADDONS};$ENV{PYTHONPATH}") + STRING(REPLACE "\\" "/" _PYTHONPATH "${_PYTHONPATH}") + STRING(REPLACE ";" "\\;" _PYTHONPATH "${_PYTHONPATH}") +else() + SET(_LD_LIBRARY_PATH "${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_BIN}:${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_SWIG}:${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_PLUGIN_FILES}:${SUIT_LIB_DIR}:$ENV{LD_LIBRARY_PATH}") + SET(_PYTHONPATH "${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_SWIG}:${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_PLUGIN_FILES}:${CMAKE_INSTALL_PREFIX}/${SHAPER_INSTALL_ADDONS}:$ENV{PYTHONPATH}") +endif() - foreach(eachFilePath ${hdfFilesRestr}) - # Strip the ".hdf" suffix - GET_FILENAME_COMPONENT(aTestName ${eachFilePath} NAME_WE) - # Check corresponding ".py" file with reference data exists - IF(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${aTestName}.py") - MESSAGE(WARNING "File ${aTestName}.py containing reference data does not exist") - continue() - ENDIF() +foreach(eachFilePath ${hdfFilesRestr}) + # Strip the ".hdf" suffix + GET_FILENAME_COMPONENT(aTestName ${eachFilePath} NAME_WE) + # Check corresponding ".py" file with reference data exists + IF(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${aTestName}.py") + MESSAGE(WARNING "File ${aTestName}.py containing reference data does not exist") + continue() + ENDIF() - # Add "SubprojectName_" prefix - GET_FILENAME_COMPONENT(aSubprojectName ${CMAKE_CURRENT_SOURCE_DIR} NAME) - SET(aTestName "${aSubprojectName}_${aTestName}") + # Add "SubprojectName_" prefix + GET_FILENAME_COMPONENT(aSubprojectName ${CMAKE_CURRENT_SOURCE_DIR} NAME) + SET(aTestName "${aSubprojectName}_${aTestName}") - # Full path to the python test file being executed - SET(aTestFilePath "${eachFilePath}") - IF(EXISTS ${aTestFilePath}) - ADD_TEST(NAME ${aTestName} COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/test.py" "$ENV{KERNEL_ROOT_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" "${aTestFilePath}") - if (WIN32) # different path to libraries variable name - SET_TESTS_PROPERTIES(${aTestName} PROPERTIES ENVIRONMENT "PATH=${_JUSTPATH};PYTHONPATH=${_PYTHONPATH}" - LABELS "models_hdf") - else() - SET_TESTS_PROPERTIES(${aTestName} PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${_LD_LIBRARY_PATH};PYTHONPATH=${_PYTHONPATH}" - LABELS "models_hdf") - endif() - # Debug output... - # MESSAGE(STATUS "Test added: ${aTestName} file: ${aTestFilePath}") - ELSE(EXISTS ${aTestFilePath}) - MESSAGE(WARNING "Can not find the test file: ${aTestFilePath}") - ENDIF(EXISTS ${aTestFilePath}) - endforeach(eachFilePath ${ARGN}) + # Full path to the python test file being executed + SET(aTestFilePath "${eachFilePath}") + IF(EXISTS ${aTestFilePath}) + ADD_TEST(NAME ${aTestName} COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/test.py" "$ENV{KERNEL_ROOT_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" "${aTestFilePath}") + if (WIN32) # different path to libraries variable name + SET_TESTS_PROPERTIES(${aTestName} PROPERTIES ENVIRONMENT "PATH=${_JUSTPATH};PYTHONPATH=${_PYTHONPATH}" + LABELS "models_hdf") + else() + SET_TESTS_PROPERTIES(${aTestName} PROPERTIES ENVIRONMENT "LD_LIBRARY_PATH=${_LD_LIBRARY_PATH};PYTHONPATH=${_PYTHONPATH}" + LABELS "models_hdf") + endif() + # Debug output... + # MESSAGE(STATUS "Test added: ${aTestName} file: ${aTestFilePath}") + ELSE(EXISTS ${aTestFilePath}) + MESSAGE(WARNING "Can not find the test file: ${aTestFilePath}") + ENDIF(EXISTS ${aTestFilePath}) +endforeach(eachFilePath ${ARGN}) - ADD_CUSTOM_TARGET(run_hdf_tests COMMAND ${CMAKE_CTEST_COMMAND} -C "${CMAKE_BUILD_TYPE}" -L "models_hdf") -endif() +ADD_CUSTOM_TARGET(run_hdf_tests COMMAND ${CMAKE_CTEST_COMMAND} -C "${CMAKE_BUILD_TYPE}" -L "models_hdf") diff --git a/test.hdfs/Test3061.hdf b/test.hdfs/Test3061.hdf new file mode 100644 index 0000000000000000000000000000000000000000..d277aada8d8ece44b0756ff378a29d63eeb3382b GIT binary patch literal 57225 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 V+~R&G|9L$8Z}GUZ{P)1){{aHZYA^r* literal 0 HcmV?d00001 diff --git a/test.hdfs/Test3061.py b/test.hdfs/Test3061.py new file mode 100644 index 000000000..f4776630d --- /dev/null +++ b/test.hdfs/Test3061.py @@ -0,0 +1,28 @@ +# 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 +# + +if __name__ == "__main__": + aPartFeature = locals()["Part_1"] + model.testNbResults(aPartFeature, 1) + model.testNbSubResults(aPartFeature, [0]) + model.testNbSubShapes(aPartFeature, GeomAPI_Shape.SOLID, [3]) + model.testNbSubShapes(aPartFeature, GeomAPI_Shape.FACE, [33]) + model.testNbSubShapes(aPartFeature, GeomAPI_Shape.EDGE, [162]) + model.testNbSubShapes(aPartFeature, GeomAPI_Shape.VERTEX, [324]) + model.testResultsVolumes(aPartFeature, [75056.139056284388]) -- 2.39.2