From dc26a49174c150bb0fbb63a44ce562c17288d3ff Mon Sep 17 00:00:00 2001 From: dbv Date: Fri, 22 Jun 2018 15:56:17 +0300 Subject: [PATCH] 2.3.2 Point creation: on a line Implemented with toolbox widgets which should be later replaced by radio buttons. --- src/ConstructionAPI/ConstructionAPI_Point.cpp | 54 +++++++++----- src/ConstructionAPI/ConstructionAPI_Point.h | 69 ++++++++++-------- src/ConstructionPlugin/CMakeLists.txt | 1 + .../ConstructionPlugin_Point.cpp | 32 +++++--- .../ConstructionPlugin_Point.h | 40 ++++++++-- src/ConstructionPlugin/Test/TestPoint_Edge.py | 67 +++++++++++++++++ .../icons/point_by_distance_on_edge_24x24.png | Bin 0 -> 689 bytes .../icons/point_by_ratio_on_edge_24x24.png | Bin 0 -> 842 bytes src/ConstructionPlugin/point_widget.xml | 40 +++++++--- 9 files changed, 225 insertions(+), 78 deletions(-) create mode 100644 src/ConstructionPlugin/Test/TestPoint_Edge.py create mode 100644 src/ConstructionPlugin/icons/point_by_distance_on_edge_24x24.png create mode 100644 src/ConstructionPlugin/icons/point_by_ratio_on_edge_24x24.png diff --git a/src/ConstructionAPI/ConstructionAPI_Point.cpp b/src/ConstructionAPI/ConstructionAPI_Point.cpp index 48222cfc4..8d045791f 100644 --- a/src/ConstructionAPI/ConstructionAPI_Point.cpp +++ b/src/ConstructionAPI/ConstructionAPI_Point.cpp @@ -45,18 +45,18 @@ ConstructionAPI_Point::ConstructionAPI_Point(const std::shared_ptr& theFeature, const ModelHighAPI_Selection& theEdge, - const ModelHighAPI_Double& theDistanceValue, - const bool theDistancePercent, + const ModelHighAPI_Double& theOffset, + const bool theUseRatio, const bool theReverse) : ModelHighAPI_Interface(theFeature) { if(initialize()) { - setByDistanceOnEdge(theEdge, theDistanceValue, theDistancePercent, theReverse); + setByOffsetOnEdge(theEdge, theOffset, theUseRatio, theReverse); } -}*/ +} //================================================================================================== ConstructionAPI_Point::ConstructionAPI_Point(const std::shared_ptr& theFeature, @@ -101,21 +101,28 @@ void ConstructionAPI_Point::setByXYZ(const ModelHighAPI_Double& theX, execute(false); } -/*//================================================================================================== -void ConstructionAPI_Point::setByDistanceOnEdge(const ModelHighAPI_Selection& theEdge, - const ModelHighAPI_Double& theDistanceValue, - const bool theDistancePercent, - const bool theReverse) +//================================================================================================== +void ConstructionAPI_Point::setByOffsetOnEdge(const ModelHighAPI_Selection& theEdge, + const ModelHighAPI_Double& theOffset, + const bool theUseRatio, + const bool theReverse) { fillAttribute(ConstructionPlugin_Point::CREATION_METHOD_BY_DISTANCE_ON_EDGE(), mycreationMethod); fillAttribute(theEdge, myedge); - fillAttribute(theDistanceValue, mydistanceValue); - fillAttribute(theDistancePercent, mydistancePercent); + if (theUseRatio) { + fillAttribute(ConstructionPlugin_Point::OFFSET_TYPE_BY_RATIO(), myoffsetType); + fillAttribute(theOffset, myratio); + } + else { + fillAttribute(ConstructionPlugin_Point::OFFSET_TYPE_BY_DISTANCE(), myoffsetType); + fillAttribute(theOffset, mydistance); + } fillAttribute(theReverse, myreverse); execute(); } +/* //================================================================================================== void ConstructionAPI_Point::setByProjection(const ModelHighAPI_Selection& theVertex, const ModelHighAPI_Selection& theFace) @@ -136,7 +143,8 @@ void ConstructionAPI_Point::setByLinesIntersection(const ModelHighAPI_Selection& fillAttribute(theEdge2, mysecondLine); execute(); -}*/ +} +*/ //================================================================================================== void ConstructionAPI_Point::setByLineAndPlaneIntersection(const ModelHighAPI_Selection& theEdge, @@ -170,6 +178,16 @@ void ConstructionAPI_Point::dump(ModelHighAPI_Dumper& theDumper) const } theDumper << ")" << std::endl; } + else if (aMeth == ConstructionPlugin_Point::CREATION_METHOD_BY_DISTANCE_ON_EDGE()) { + theDumper << edge() << ", "; + if (offsetType()->value() == ConstructionPlugin_Point::OFFSET_TYPE_BY_DISTANCE()) { + theDumper << distance() << ", " << false; + } + else { + theDumper << ratio() << ", " << true; + } + theDumper << ", " << reverse()->value() << ")" << std::endl; + } } //================================================================================================== @@ -182,16 +200,16 @@ PointPtr addPoint(const std::shared_ptr& thePart, return PointPtr(new ConstructionAPI_Point(aFeature, theX, theY, theZ)); } -/*//================================================================================================== +//================================================================================================== PointPtr addPoint(const std::shared_ptr & thePart, const ModelHighAPI_Selection& theEdge, - const ModelHighAPI_Double& theDistanceValue, - const bool theDistancePercent, + const ModelHighAPI_Double& theOffset, + const bool theUseRatio, const bool theReverse) { std::shared_ptr aFeature = thePart->addFeature(ConstructionAPI_Point::ID()); - return PointPtr(new ConstructionAPI_Point(aFeature, theEdge, theDistanceValue, theDistancePercent, theReverse)); -}*/ + return PointPtr(new ConstructionAPI_Point(aFeature, theEdge, theOffset, theUseRatio, theReverse)); +} //================================================================================================== PointPtr addPoint(const std::shared_ptr & thePart, diff --git a/src/ConstructionAPI/ConstructionAPI_Point.h b/src/ConstructionAPI/ConstructionAPI_Point.h index 322176c4a..087ea95e8 100644 --- a/src/ConstructionAPI/ConstructionAPI_Point.h +++ b/src/ConstructionAPI/ConstructionAPI_Point.h @@ -49,14 +49,14 @@ public: const ModelHighAPI_Double& theY, const ModelHighAPI_Double& theZ); - /*/// Constructor with values. + /// Constructor with values. CONSTRUCTIONAPI_EXPORT ConstructionAPI_Point(const std::shared_ptr& theFeature, const ModelHighAPI_Selection& theEdge, - const ModelHighAPI_Double& theDistanceValue, - const bool theDistancePercent = false, + const ModelHighAPI_Double& theOffset, + const bool theUseRatio = false, const bool theReverse = false); - */ + /// Constructor with values: intersected objects. CONSTRUCTIONAPI_EXPORT ConstructionAPI_Point(const std::shared_ptr& theFeature, @@ -67,22 +67,32 @@ public: CONSTRUCTIONAPI_EXPORT virtual ~ConstructionAPI_Point(); - INTERFACE_9(ConstructionPlugin_Point::ID(), - x, ConstructionPlugin_Point::X(), ModelAPI_AttributeDouble, /** X attribute */, - y, ConstructionPlugin_Point::Y(), ModelAPI_AttributeDouble, /** Y attribute */, - z, ConstructionPlugin_Point::Z(), ModelAPI_AttributeDouble, /** Z attribute */, - creationMethod, ConstructionPlugin_Point::CREATION_METHOD(), - ModelAPI_AttributeString, /** Creation method */, - intersectionLine, ConstructionPlugin_Point::INTERSECTION_LINE(), - ModelAPI_AttributeSelection, /** Line for intersection */, - intersectionPlane, ConstructionPlugin_Point::INTERSECTION_PLANE(), - ModelAPI_AttributeSelection, /** Plane for intersection */, - useOffset, ConstructionPlugin_Point::USE_OFFSET(), - ModelAPI_AttributeString, /** Use offset */, - offset, ConstructionPlugin_Point::OFFSET(), - ModelAPI_AttributeDouble, /** Offset */, - reverseOffset, ConstructionPlugin_Point::REVERSE_OFFSET(), - ModelAPI_AttributeBoolean, /** Reverse offset */) + INTERFACE_14(ConstructionPlugin_Point::ID(), + x, ConstructionPlugin_Point::X(), ModelAPI_AttributeDouble, /** X attribute */, + y, ConstructionPlugin_Point::Y(), ModelAPI_AttributeDouble, /** Y attribute */, + z, ConstructionPlugin_Point::Z(), ModelAPI_AttributeDouble, /** Z attribute */, + creationMethod, ConstructionPlugin_Point::CREATION_METHOD(), + ModelAPI_AttributeString, /** Creation method */, + intersectionLine, ConstructionPlugin_Point::INTERSECTION_LINE(), + ModelAPI_AttributeSelection, /** Line for intersection */, + intersectionPlane, ConstructionPlugin_Point::INTERSECTION_PLANE(), + ModelAPI_AttributeSelection, /** Plane for intersection */, + useOffset, ConstructionPlugin_Point::USE_OFFSET(), + ModelAPI_AttributeString, /** Use offset */, + offset, ConstructionPlugin_Point::OFFSET(), + ModelAPI_AttributeDouble, /** Offset */, + reverseOffset, ConstructionPlugin_Point::REVERSE_OFFSET(), + ModelAPI_AttributeBoolean, /** Reverse offset */, + edge, ConstructionPlugin_Point::EDGE(), + ModelAPI_AttributeSelection, /** Edge */, + offsetType, ConstructionPlugin_Point::OFFSET_TYPE(), + ModelAPI_AttributeString, /** Type of the offset on edge */, + distance, ConstructionPlugin_Point::DISTANCE(), + ModelAPI_AttributeDouble, /** Distance */, + ratio, ConstructionPlugin_Point::RATIO(), + ModelAPI_AttributeDouble, /** Ratio */, + reverse, ConstructionPlugin_Point::REVERSE(), + ModelAPI_AttributeBoolean, /** Reverse */) /// Set point values. @@ -91,13 +101,14 @@ public: const ModelHighAPI_Double & theY, const ModelHighAPI_Double & theZ); - /*/// Set edge and distance on it for point. + /// Set edge and distance on it for point. CONSTRUCTIONAPI_EXPORT - void setByDistanceOnEdge(const ModelHighAPI_Selection& theEdge, - const ModelHighAPI_Double& theDistanceValue, - const bool theDistancePercent = false, - const bool theReverse = false); + void setByOffsetOnEdge(const ModelHighAPI_Selection& theEdge, + const ModelHighAPI_Double& theOffset, + const bool theUseRatio = false, + const bool theReverse = false); + /* /// Set point and plane for projection. CONSTRUCTIONAPI_EXPORT void setByProjection(const ModelHighAPI_Selection& theVertex, @@ -129,15 +140,15 @@ PointPtr addPoint(const std::shared_ptr & thePart, const ModelHighAPI_Double & theY, const ModelHighAPI_Double & theZ); -/*/// \ingroup CPPHighAPI +/// \ingroup CPPHighAPI /// \brief Create Point feature CONSTRUCTIONAPI_EXPORT PointPtr addPoint(const std::shared_ptr & thePart, const ModelHighAPI_Selection& theEdge, - const ModelHighAPI_Double& theDistanceValue, - const bool theDistancePercent = false, + const ModelHighAPI_Double& theOffset, + const bool theUseRatio = false, const bool theReverse = false); -*/ + /// \ingroup CPPHighAPI /// \brief Create Point feature as an intersection of selected plane (or planar face) and edge CONSTRUCTIONAPI_EXPORT diff --git a/src/ConstructionPlugin/CMakeLists.txt b/src/ConstructionPlugin/CMakeLists.txt index 0cbcec049..11cfdcedc 100644 --- a/src/ConstructionPlugin/CMakeLists.txt +++ b/src/ConstructionPlugin/CMakeLists.txt @@ -79,5 +79,6 @@ ADD_UNIT_TESTS(TestAxisCreation.py UnitTestAxis.py TestPoint_XYZ.py TestPoint_LineAndPlane.py + TestPoint_Edge.py TestPointName.py TestPlane.py) diff --git a/src/ConstructionPlugin/ConstructionPlugin_Point.cpp b/src/ConstructionPlugin/ConstructionPlugin_Point.cpp index 08ff70a3a..2081f4ed1 100644 --- a/src/ConstructionPlugin/ConstructionPlugin_Point.cpp +++ b/src/ConstructionPlugin/ConstructionPlugin_Point.cpp @@ -55,23 +55,26 @@ void ConstructionPlugin_Point::initAttributes() data()->addAttribute(CREATION_METHOD(), ModelAPI_AttributeString::typeId()); - /*data()->addAttribute(EDGE(), ModelAPI_AttributeSelection::typeId()); - data()->addAttribute(DISTANCE_VALUE(), ModelAPI_AttributeDouble::typeId()); - data()->addAttribute(DISTANCE_PERCENT(), ModelAPI_AttributeBoolean::typeId()); - data()->addAttribute(REVERSE(), ModelAPI_AttributeBoolean::typeId()); - +/* data()->addAttribute(POINT(), ModelAPI_AttributeSelection::typeId()); data()->addAttribute(PLANE(), ModelAPI_AttributeSelection::typeId()); data()->addAttribute(FIRST_LINE(), ModelAPI_AttributeSelection::typeId()); data()->addAttribute(SECOND_LINE(), ModelAPI_AttributeSelection::typeId()); */ + data()->addAttribute(INTERSECTION_LINE(), ModelAPI_AttributeSelection::typeId()); data()->addAttribute(INTERSECTION_PLANE(), ModelAPI_AttributeSelection::typeId()); data()->addAttribute(USE_OFFSET(), ModelAPI_AttributeString::typeId()); data()->addAttribute(OFFSET(), ModelAPI_AttributeDouble::typeId()); data()->addAttribute(REVERSE_OFFSET(), ModelAPI_AttributeBoolean::typeId()); + + data()->addAttribute(EDGE(), ModelAPI_AttributeSelection::typeId()); + data()->addAttribute(OFFSET_TYPE(), ModelAPI_AttributeString::typeId()); + data()->addAttribute(DISTANCE(), ModelAPI_AttributeDouble::typeId()); + data()->addAttribute(RATIO(), ModelAPI_AttributeDouble::typeId()); + data()->addAttribute(REVERSE(), ModelAPI_AttributeBoolean::typeId()); } //================================================================================================== @@ -85,9 +88,9 @@ void ConstructionPlugin_Point::execute() string(CREATION_METHOD())->value() : CREATION_METHOD_BY_XYZ(); if(aCreationMethod == CREATION_METHOD_BY_XYZ()) { aShape = createByXYZ(); - }/* else if(aCreationMethod == CREATION_METHOD_BY_DISTANCE_ON_EDGE()) { + } else if(aCreationMethod == CREATION_METHOD_BY_DISTANCE_ON_EDGE()) { aShape = createByDistanceOnEdge(); - } else if(aCreationMethod == CREATION_METHOD_BY_PROJECTION()) { + }/* else if(aCreationMethod == CREATION_METHOD_BY_PROJECTION()) { aShape = createByProjection(); } else if(aCreationMethod == CREATION_METHOD_BY_LINES_INTERSECTION()) { aShape = createByLinesIntersection(); @@ -138,7 +141,7 @@ std::shared_ptr ConstructionPlugin_Point::createByXYZ() real(Z())->value()); } -/*//================================================================================================== +//================================================================================================== std::shared_ptr ConstructionPlugin_Point::createByDistanceOnEdge() { // Get edge. @@ -150,15 +153,22 @@ std::shared_ptr ConstructionPlugin_Point::createByDistanceOnEdge std::shared_ptr anEdge(new GeomAPI_Edge(aShape)); // Get distance value and percent flag. - double aValue = real(DISTANCE_VALUE())->value(); - bool anIsPercent = boolean(DISTANCE_PERCENT())->value(); + double aValue; + bool anIsPercent = false; + if (string(OFFSET_TYPE())->value() == OFFSET_TYPE_BY_DISTANCE()) { + aValue = real(DISTANCE())->value(); + anIsPercent = false; + } else { + aValue = real(RATIO())->value() * 100.0; + anIsPercent = true; + } // Get reverse flag. bool anIsReverse = boolean(REVERSE())->value(); return GeomAlgoAPI_PointBuilder::vertexOnEdge(anEdge, aValue, anIsPercent, anIsReverse); } - +/* //================================================================================================== std::shared_ptr ConstructionPlugin_Point::createByProjection() { diff --git a/src/ConstructionPlugin/ConstructionPlugin_Point.h b/src/ConstructionPlugin/ConstructionPlugin_Point.h index f983ec327..7537970a8 100644 --- a/src/ConstructionPlugin/ConstructionPlugin_Point.h +++ b/src/ConstructionPlugin/ConstructionPlugin_Point.h @@ -60,7 +60,7 @@ public: static const std::string MY_CREATION_METHOD_ID("by_xyz"); return MY_CREATION_METHOD_ID; } - /* + /// Attribute name for creation method. inline static const std::string& CREATION_METHOD_BY_DISTANCE_ON_EDGE() { @@ -68,6 +68,7 @@ public: return MY_CREATION_METHOD_ID; } + /* /// Attribute name for creation method. inline static const std::string& CREATION_METHOD_BY_PROJECTION() { @@ -82,6 +83,7 @@ public: return MY_CREATION_METHOD_ID; } */ + /// Attribute name for creation method. inline static const std::string& CREATION_METHOD_BY_LINE_AND_PLANE_INTERSECTION() { @@ -110,24 +112,45 @@ public: return POINT_ATTR_Z; } - /*/// Attribute name for selected edge. + /// Attribute name for selected edge. inline static const std::string& EDGE() { static const std::string ATTR_ID("edge"); return ATTR_ID; } + /// Attribute name for offset type on selected edge. + inline static const std::string& OFFSET_TYPE() + { + static const std::string ATTR_ID("offset_type"); + return ATTR_ID; + } + + /// Attribute name for offset type by distance. + inline static const std::string& OFFSET_TYPE_BY_DISTANCE() + { + static const std::string ATTR_ID("offset_type_by_distance"); + return ATTR_ID; + } + + /// Attribute name for offset type by ratio. + inline static const std::string& OFFSET_TYPE_BY_RATIO() + { + static const std::string ATTR_ID("offset_type_by_ratio"); + return ATTR_ID; + } + /// Attribute name for distance. - inline static const std::string& DISTANCE_VALUE() + inline static const std::string& DISTANCE() { - static const std::string ATTR_ID("value"); + static const std::string ATTR_ID("distance"); return ATTR_ID; } /// Attribute name for percent flag. - inline static const std::string& DISTANCE_PERCENT() + inline static const std::string& RATIO() { - static const std::string ATTR_ID("percent"); + static const std::string ATTR_ID("ratio"); return ATTR_ID; } @@ -138,6 +161,7 @@ public: return ATTR_ID; } + /* /// Attribute name for point. inline static const std::string& POINT() { @@ -220,8 +244,8 @@ public: private: std::shared_ptr createByXYZ(); - /*std::shared_ptr createByDistanceOnEdge(); - std::shared_ptr createByProjection(); + std::shared_ptr createByDistanceOnEdge(); + /*std::shared_ptr createByProjection(); std::shared_ptr createByLinesIntersection();*/ std::list > createByLineAndPlaneIntersection(); diff --git a/src/ConstructionPlugin/Test/TestPoint_Edge.py b/src/ConstructionPlugin/Test/TestPoint_Edge.py new file mode 100644 index 000000000..4f6c5ef88 --- /dev/null +++ b/src/ConstructionPlugin/Test/TestPoint_Edge.py @@ -0,0 +1,67 @@ +## Copyright (C) 2014-2017 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 +## + +""" +Test case for Construction Point feature by coordinates. +""" + +from salome.shaper import model +from GeomAPI import * + +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(0, 0, 100, 100) +SketchProjection_1 = Sketch_1.addProjection(model.selection("VERTEX", "PartSet/Origin"), False) +SketchPoint_1 = SketchProjection_1.createdFeature() +SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchPoint_1.result()) +model.do() +Point_2 = model.addPoint(Part_1_doc, model.selection("EDGE", "Sketch_1/Edge-SketchLine_1"), 50, False, False) +Point_3 = model.addPoint(Part_1_doc, model.selection("EDGE", "Sketch_1/Edge-SketchLine_1"), 0.4, True, False) +Point_4 = model.addPoint(Part_1_doc, model.selection("EDGE", "Sketch_1/Edge-SketchLine_1"), 0.4, True, True) +Cylinder_1 = model.addCylinder(Part_1_doc, model.selection("VERTEX", "PartSet/Origin"), model.selection("EDGE", "PartSet/OZ"), 50, 10) +Point_5 = model.addPoint(Part_1_doc, model.selection("EDGE", "Cylinder_1_1/Face_1&Cylinder_1_1/Face_2"), 0.25, True, False) +Point_6 = model.addPoint(Part_1_doc, model.selection("EDGE", "Cylinder_1_1/Face_1&Cylinder_1_1/Face_2"), 0.25, True, True) +model.do() +model.end() + +assert (len(Point_2.results()) > 0) +rightPosition = GeomAPI_Vertex(35.3553390593, 35.3553390593, 0) +assert(rightPosition.isEqual(Point_2.results()[0].resultSubShapePair()[0].shape())) + +assert (len(Point_3.results()) > 0) +rightPosition = GeomAPI_Vertex(40, 40, 0) +assert(rightPosition.isEqual(Point_3.results()[0].resultSubShapePair()[0].shape())) + +assert (len(Point_4.results()) > 0) +rightPosition = GeomAPI_Vertex(60, 60, 0) +assert(rightPosition.isEqual(Point_4.results()[0].resultSubShapePair()[0].shape())) + +assert (len(Point_5.results()) > 0) +rightPosition = GeomAPI_Vertex(0, 50, 10) +assert(rightPosition.isEqual(Point_5.results()[0].resultSubShapePair()[0].shape())) + +assert (len(Point_6.results()) > 0) +rightPosition = GeomAPI_Vertex(0, -50, 10) +assert(rightPosition.isEqual(Point_6.results()[0].resultSubShapePair()[0].shape())) + +assert(model.checkPythonDump()) diff --git a/src/ConstructionPlugin/icons/point_by_distance_on_edge_24x24.png b/src/ConstructionPlugin/icons/point_by_distance_on_edge_24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..e00036b47eb23f89b7dee97f0a0ce38cfa213084 GIT binary patch literal 689 zcmV;i0#5yjP)N2bZe?^J zG%heMF*(%MvSa`N0xn5JK~zXf)s@R?6hRb*J7ZiVh?9w3RTBvbxNu=e777xG(o9t~ zPMDdls&N`k5Enu60vb%BI0_;zysU%>UY3dv;8x<+xNsp}Rz|Xkf+k=H5pRD@>IE`g z8$W2eIp^@#>Az1^2mc+EpB$k=KVm|i3Zkgfh5bQZ`mxB9LkM+jXR?x} zyF#fWD^8?-OQjh_)RQ;}g{cs!KEd}_l-EWOYEQhkT;7Y1HV1znLhJ$Ks>ZlJ3h^&i zyr)zjbfr5dAE_QD)kTclK_>JR6^X=Rw?d&eAil&(wINs99#ke*>_@cEgsb~BHqYSs zDv`+xyKt*03+Q%%#xyVh5`(;qWf5FFT5%NNyIn z9>=_2a&_&4E~kk!w;}c&3oPRe&f7Q<<}8a1Zxv+$g6GivPr~(6*fqmShBIzX6Oqi= zec;M=PXB153*z$_#ZB1q91}E$g|3p=TqCl6BJ)WJOE5ip9rt_1a)Y?A2XH`P+t0#| z4JP#+yUAQ8J0wc?K=^LU7O5W>WSVy=57^Ej4&T?{^>uIJ1C_}FEO`Ra6)f-r-CyW$ zG`d_mJ0z};L3|6A{KfUMuUhSPDL=G+7E-;j-P=v&!aix{?1|YIRm0%O^llgQL=gM~ XeUF>bvNitj00000NkvXXu0mjf3biiO literal 0 HcmV?d00001 diff --git a/src/ConstructionPlugin/icons/point_by_ratio_on_edge_24x24.png b/src/ConstructionPlugin/icons/point_by_ratio_on_edge_24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..ac0e749f47ec43c970758fc8ea2cc16119970a85 GIT binary patch literal 842 zcmV-Q1GW5#P)N2bZe?^J zG%heMF*(%MvSa`N0>?>2K~zXfy;aX^6G0T-Mm z?99f5s)z@b-n^()tHo3l$-&l>5JlUg;vXR1M6c?>gZSfQ#fvSp7A#Wn*EgF%1Y6B7 z{9xJH_g=pD-ZyV1)_(zUW!z?J+GcXxm@J!n$8D~Tn9r&~*}gdCYTV(n-%2Ew2SyN$ z5m#{}Ic*EoYbVt%_KSpOu~(AAQp)B#qM`~B!*9^C{9mx9gx zG!gPGbbmrwHV)I`QDNWv<%&jw_ zwIiI6?T(OVFmf9loD0f5fn--P4D%p=io*W6M}Gws-UYphdW|W&L0$hIH2*+^_fRJe zf*Jv;EmJpp2=ZL1jG$aVxS!p7AE=*mG3-9JL>%S|I+n?4wUBzHji9tl37`cqx`e5-Lc z4&vr^fqVgy{J`_LGm}|qT+Ko7XCdTsUA;b3#@tL4L;A+-Ok`|p$G{3>Y!WQ%Cu(NO Ulj}&MB>(^b07*qoM6N<$g5Sk@jQ{`u literal 0 HcmV?d00001 diff --git a/src/ConstructionPlugin/point_widget.xml b/src/ConstructionPlugin/point_widget.xml index 20f2f3cb9..47918c049 100644 --- a/src/ConstructionPlugin/point_widget.xml +++ b/src/ConstructionPlugin/point_widget.xml @@ -41,7 +41,6 @@ email : webmaster.salome@opencascade.com -