From a93a916a8916678ab608de3ce449797adba6d7f1 Mon Sep 17 00:00:00 2001 From: gzy Date: Thu, 20 Sep 2018 14:57:50 +0300 Subject: [PATCH] part, PythonAddons, Connector plugins added --- src/ConnectorPlugin/doc/ConnectorPlugin.rst | 17 ++ .../doc/images/geom_export.png | Bin 0 -> 948 bytes src/PartSetPlugin/doc/PartSetPlugin.rst | 68 +++++- src/PartSetPlugin/doc/TUI_new_partFeature.rst | 11 + src/PartSetPlugin/doc/examples/new_part.py | 10 + src/PartSetPlugin/doc/images/duplicate.png | Bin 0 -> 590 bytes src/PartSetPlugin/doc/images/new_part.png | Bin 0 -> 1117 bytes src/PartSetPlugin/doc/images/remove.png | Bin 0 -> 656 bytes src/PrimitivesPlugin/doc/boxFeature.rst | 2 +- src/PythonAddons/doc/addons_Features.rst | 13 ++ src/PythonAddons/doc/boxFeature.rst | 59 +++++ src/PythonAddons/doc/examples/box/feature.py | 147 +++++++++++++ src/PythonAddons/doc/examples/box/widget.xml | 41 ++++ .../doc/examples/rectangle/feature.py | 207 ++++++++++++++++++ .../doc/examples/rectangle/widget.xml | 43 ++++ src/PythonAddons/doc/images/box_ico.png | Bin 0 -> 405 bytes src/PythonAddons/doc/images/rectangle.png | Bin 0 -> 304 bytes 17 files changed, 615 insertions(+), 3 deletions(-) create mode 100644 src/ConnectorPlugin/doc/images/geom_export.png create mode 100644 src/PartSetPlugin/doc/TUI_new_partFeature.rst create mode 100644 src/PartSetPlugin/doc/examples/new_part.py create mode 100644 src/PartSetPlugin/doc/images/duplicate.png create mode 100644 src/PartSetPlugin/doc/images/new_part.png create mode 100644 src/PartSetPlugin/doc/images/remove.png create mode 100644 src/PythonAddons/doc/examples/box/feature.py create mode 100644 src/PythonAddons/doc/examples/box/widget.xml create mode 100644 src/PythonAddons/doc/examples/rectangle/feature.py create mode 100644 src/PythonAddons/doc/examples/rectangle/widget.xml create mode 100644 src/PythonAddons/doc/images/box_ico.png create mode 100644 src/PythonAddons/doc/images/rectangle.png diff --git a/src/ConnectorPlugin/doc/ConnectorPlugin.rst b/src/ConnectorPlugin/doc/ConnectorPlugin.rst index 7554e8397..f79646f72 100644 --- a/src/ConnectorPlugin/doc/ConnectorPlugin.rst +++ b/src/ConnectorPlugin/doc/ConnectorPlugin.rst @@ -1,3 +1,20 @@ Connector plug-in ================= + +To export Results, Groups, Fields created in active part into GEOM module: + +#. select in the Main Menu *Feature - > Export to GEOM* item or +#. click **Export to GEOM** button in Shaper toolbar: + +.. image:: images/geom_export.png + :align: center + +.. centered:: + Export to GEOM button + +**TUI Command**: *model.exportGEOM(part)* + +**Arguments**: 1 part + +Result can be checked in GEOM module. \ No newline at end of file diff --git a/src/ConnectorPlugin/doc/images/geom_export.png b/src/ConnectorPlugin/doc/images/geom_export.png new file mode 100644 index 0000000000000000000000000000000000000000..cb8bc6bd9f823ae6ef4c559434e6c1194635af9d GIT binary patch literal 948 zcmV;l155mgP)f&2OxScmU;0JL>< zZgY6*_Lk`?YG{$>W5I#PPs9D+1pR*`SpX;(D*a8L`Bqszti}JZx@y;KFq$hn=ChgE z#+EHR^o9@Q#i8n`cE*PS4FIex01!$H5AXa1W2Fl`FMv{t@zHpxR$tLBn5|4Q9^yq= zfgs5!77OrSy9i2)3IMPGFu#!R8cRfeI(7IvS+%>VafM}i<=Qqylr&|FuJLdnmlz5N z@$dl2Out;*j(xIfuV($%e?y?Z4_|d21SBa5x1OUulucRnyGs{bc$!KU$DFnP$ zGq$*_umy)ucKZ>w0*E@ity)f_Yv(0FoE{$edn9~!oB)6+{;(G>tY+-jXi&4Z9w&Bh zhu`DCp?8UiO~vIuPa;Pnpl5!;jMIXycP+o=48XKZ2hY$jrs64ZU1!i2OXA!2J@5v> WUpya@*;|eP0000 New part* item or +#. click **New part** button in Shaper toolbar: + +.. image:: images/new_part.png + :align: center + +.. centered:: + New part button + +**TUI Command**: *model.addPart(partSet)* + +**Arguments**: 1 partset + +Result +"""""" + +Created empty part is activated and appears in the object browser. + +**See Also** a sample TUI Script of a :ref:`tui_create_part` operation. + +Duplicate Part +-------------- + +To duplicate active Part: + +#. select in the Main Menu *Part - > Duplicate part* item or +#. click **Duplicate part** button in Shaper toolbar: + +.. image:: images/duplicate.png + :align: center + +.. centered:: + Duplicate part button + +Result +"""""" + +Created copied part is activated and appears in the object browser. + +Copied part contains all objects existing in the source part. + +Remove Part +----------- + +To remove active Part: + +#. select in the Main Menu *Part - > Remove part* item or +#. click **Remove part** button in Shaper toolbar: + +.. image:: images/remove.png + :align: center + +.. centered:: + Remove part button + +Result +"""""" + +Selected part is removed together with all its objects. -New Part can be created using *Part* - *New part* main menu item or- diff --git a/src/PartSetPlugin/doc/TUI_new_partFeature.rst b/src/PartSetPlugin/doc/TUI_new_partFeature.rst new file mode 100644 index 000000000..b3c198aae --- /dev/null +++ b/src/PartSetPlugin/doc/TUI_new_partFeature.rst @@ -0,0 +1,11 @@ + + .. _tui_create_part: + +Create Part +=========== + +.. literalinclude:: examples/new_part.py + :linenos: + :language: python + +:download:`Download this script ` diff --git a/src/PartSetPlugin/doc/examples/new_part.py b/src/PartSetPlugin/doc/examples/new_part.py new file mode 100644 index 000000000..296a13707 --- /dev/null +++ b/src/PartSetPlugin/doc/examples/new_part.py @@ -0,0 +1,10 @@ +# -*- coding: utf-8 -*- + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +model.do() +model.end() diff --git a/src/PartSetPlugin/doc/images/duplicate.png b/src/PartSetPlugin/doc/images/duplicate.png new file mode 100644 index 0000000000000000000000000000000000000000..228db95bc2f131c9075ce8bca9cb4f87ecfafd76 GIT binary patch literal 590 zcmV-U0Ytw9rriDgOP!Pp`K}1AB5HTXf zh$$*~2zbyIN)Nes7la%v1cV+$vYm%i6K4Fg8JYI1NC((O}|MfxdYE zpd#zKJX&x}3|{9rgN_5lY{NB^qW_A8i!5BQA zIh9N%Ph>Oa-zERGbV40W5i-@i064Yj$@hIwvP{;%)B&2FztB1clh9; zwrSz@D?WYsEFct1ce$Crj%k`4J94z`DKC9gO{clL>ka@`R#(tE(9;j@%eB!fT)miU z=ZdANR=u&>iUbTK5)7tNVarlp`q1GKr9=m!A_2LPEV+>^0M+FhQ`7f40e?=_YXkrh zK?gyHu0(;-YD<7fT_I>KTkAmU2pzOm{|6vKXE}%{kRW=A8$$uU?@?KOEF&!%#07I$N&t4-4e5=eoJP?&OMAX;C_iy_a-@S>1XpPvm cz0i&S8{*%ZwJT6AbpQYW07*qoM6N<$f)?iiMF0Q* literal 0 HcmV?d00001 diff --git a/src/PartSetPlugin/doc/images/new_part.png b/src/PartSetPlugin/doc/images/new_part.png new file mode 100644 index 0000000000000000000000000000000000000000..6733266831f21ebc0aa6a76c79755738cae3c4e9 GIT binary patch literal 1117 zcmV-j1fu(iP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn z4jTXf055b!Sad{Xb7OL8aCB*JZU9$lZe(wFAVX|nb8|W%Q$b8mO+{Z*Wpi_BZ*E^x zWpZ|9a;Y3L1^@s69dt!lbW~|{Y-IpbK}=6gMIbmXH7+n9Eg)M{baiBTF? z1Aa+FK~zXfwUmEM)MXsUU*GQmcPhsb2I|6om@Lt9bE`DT!7OIFFw(YuS#y?IiHpo1 zW22B&+QeG1HGk#Q&vO+OT4?c4_lHIn>CU7t2YsfXn4Ciu_ju$aQJhQ5)<*>>LJZx$D;rD=Cy#|EdEV{ zi?T1A3=Iu3eQGAxZg%n6whHz;t2p!HS<+Keuv)EL_jHmwXBIm*7m;AG7^}^gUfa;p z#=Co+Jh^BIki`2PGQ4%MAf@zF44-hA;_ ziYxcCwX_^f(~MCFg+e4GBp6S_96aL0)qDom?h4Xxa~Pv$^hhMa-|eC7EPTEmJe^(@ z{O#%$D);Qs5|~Gtrvu-ATMWu_|?c+y^$?@538|QqT(yId`$Mt*}S!8t$O~> z)rc;v*|BaFsmaMKd~h};FF!;5sS_%`__2JJ7Zef^bH1!Osm5ZFds5qz4$Ew0){@^l zIuM)V%5}Gj%XatV4BQ@%irZ{9=07}-REGmymZLFeWYa|_B;eJ;C)goukR>Ns{CGZL z5h&m1(Mgjo7C7d;gHV!sqYj(KVac_TKy0 zlkFV%>JTnb+w#&33=VSV9hnrrzE;J`KKg(gH#_*Hdbg>vMq;WjdBwvbU0oYKij~i= z;Mv0EwEo;i*0g)cxIJBsOLXJnG>bx*_dvG#AB(9JYnsk6F>Ru-BTVgyi5#^L2aUWDEQS?wpe95=?JZ00000NkvXXu0mjfF_H`E literal 0 HcmV?d00001 diff --git a/src/PartSetPlugin/doc/images/remove.png b/src/PartSetPlugin/doc/images/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..f5359d7bc670b429d4c21be9cac34084b9ee880e GIT binary patch literal 656 zcmV;B0&o3^P)2oNCc7ofVzZkl4 zcKOY$^V=I3Gb%l6uiE_);P_tQoECu^z?xe*Cyosdo13xO`cG(2bsJ%^Pz{2#QZOIx z2T%=ybgLQ|Gx`TFTKjW(ta29K|B>)XT$atmE+%N!c-7>fglJ1OtVN|PcN?P z5JyS1Gx>HAMPbcx>fxo)3+Ac8698PldaX0X#Q04BUc8)({UG?Z3m`PL{Px3pK7RhR qncqE(BZEwJt~N@Of)HwDyZ;55`sP8UtBM~00000` + +.. literalinclude:: examples/box/widget.xml + :linenos: + :language: html + +:download:`Download this script ` + +The feature Box creates a box solid by extrusion of rectangle. + +Result in Shaper module is described below. + +To create a Box in the active part: + +#. select in the Main Menu *Macros - > Box* item or +#. click **Box** button in the Macros toolbar: + +.. image:: images/box.png + :align: center + +.. centered:: + **Box** button + +The following property panel appears. + +.. image:: images/box_property_panel.png + :align: center + +.. centered:: + Create a box + +Input fields: + +- **DX**, **DY**, **DZ** sizes of the box along corresponded coordinate axes. The box will be created starting from the origin. + +Result +"""""" + +The Result of operation will be a SOLID. The edges of the box will be parallel to the coordinate axes. + +Name is assigned automatically: + +* **Box_1**, **Box_2**, ... to Feature; +* **Box_1_1**, **Box_2_1**, ... to Result. + +Example is shown below. + +.. image:: images/Boxes.png + :align: center + +.. centered:: + Box created diff --git a/src/PythonAddons/doc/examples/box/feature.py b/src/PythonAddons/doc/examples/box/feature.py new file mode 100644 index 000000000..72fc83d53 --- /dev/null +++ b/src/PythonAddons/doc/examples/box/feature.py @@ -0,0 +1,147 @@ +## 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 +## + +"""Box macro-feature +Authors: Renaud Nedelec - Daniel Brunier-Coulin +Copyright (C) 2014-20xx CEA/DEN, EDF R&D +""" + +from salome.shaper import model +from salome.shaper import geom + + +class BoxFeature(model.Feature): + """An example of Box feature implementation. + + BoxFeature() -> Box + """ + +# Initializations + + def __init__(self): + """x.__init__(...) initializes x; see x.__class__.__doc__ for signature""" + model.Feature.__init__(self) + + @staticmethod + def ID(): + """Return Id of the feature.""" + return "Box_script" + + @staticmethod + def WIDTH_ID(): + """Returns ID of Width parameter.""" + return "width" + + @staticmethod + def LENGTH_ID(): + """Returns ID of Length parameter.""" + return "length" + + @staticmethod + def HEIGHT_ID(): + """Returns ID of Height parameter.""" + return "height" + + def getKind(self): + """Override Feature.getKind()""" + return BoxFeature.ID() + + +# Creation of the box at default size + + def initAttributes(self): + """Override Feature.initAttributes()""" + # Creating the input arguments of the feature + self.addRealInput(self.WIDTH_ID()) + self.addRealInput(self.LENGTH_ID()) + self.addRealInput(self.HEIGHT_ID()) + + # Creating the base of the box with unit values + mypart = model.activeDocument() + xoy = model.defaultPlane("XOY") + + # A base of the geometry + self.base = model.addSketch(mypart, xoy) + + p1 = geom.Pnt2d(0, 0) + p2 = geom.Pnt2d(0, 1) + p3 = geom.Pnt2d(1, 1) + p4 = geom.Pnt2d(1, 0) + + line = model.addPolygon(self.base, p1, p2, p3, p4) + + self.base.setFixed(line[0].startPoint()) + self.base.setVertical(line[0]) + + # Setting the size of the base with default values + # Width + self.width = self.base.setLength(line[3], 50) # Keeps the constraint for edition + # Length + self.length = self.base.setLength(line[0], 50) # Keeps the constraint for edition + + # Keeping the rectangle + self.base.setParallel(line[0], line[2]) + self.base.setParallel(line[1], line[3]) + self.base.setPerpendicular(line[0], line[3]) + + # execute sketch + mypart.setCurrentFeature(self.base.feature(), False) + model.updateFeatures() + + # Creating the extrusion (the box) at default size + # A box result + self.box = model.addExtrusion(mypart, self.base.selectFace(), 50) + +# Edition of the box at user size + + def execute(self): + """F.execute() -- execute the feature""" + # Retrieving the user inputs + width = self.real(self.WIDTH_ID()) + length = self.real(self.LENGTH_ID()) + height = self.real(self.HEIGHT_ID()) + + # Editing the box + if width.text() == "": + self.base.setValue(self.width, width.value()) + else: + self.base.setValue(self.width, width.text()) + + if length.text() == "": + self.base.setValue(self.length, length.value()) + else: + self.base.setValue(self.length, length.text()) + + if (height.text() == ""): + self.box.setSize(height.value()) + else: + self.box.setSize(height.text()) + + # Publishing the result: not needed for Macro feature + # self.addResult( self.box.result() ) + + def isMacro(self): + """Override Feature.initAttributes(). + F.isMacro() -> True + + Box feature is macro: removes itself on the creation transaction + finish. + """ + return True diff --git a/src/PythonAddons/doc/examples/box/widget.xml b/src/PythonAddons/doc/examples/box/widget.xml new file mode 100644 index 000000000..f45e45410 --- /dev/null +++ b/src/PythonAddons/doc/examples/box/widget.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/PythonAddons/doc/examples/rectangle/feature.py b/src/PythonAddons/doc/examples/rectangle/feature.py new file mode 100644 index 000000000..2407a4d11 --- /dev/null +++ b/src/PythonAddons/doc/examples/rectangle/feature.py @@ -0,0 +1,207 @@ +## 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 +## + +""" +Macro-feature to produce rectangle in the sketcher +Author: Artem ZHIDKOV +Copyright (C) 2016-20xx CEA/DEN, EDF R&D +""" + +from salome.shaper import model +import ModelAPI +import GeomDataAPI + +class SketchPlugin_Rectangle(model.Feature): + """ + Implementation of rectangle creation. + + It produced 2 horizontal lines and 2 vertical lines connected by coincidence constraints + """ + +# Initializations + + def __init__(self): + """x.__init__(...) initializes x; see x.__class__.__doc__ for signature""" + model.Feature.__init__(self) + + @staticmethod + def ID(): + """Rectangle feature kind.""" + return "SketchRectangle" + + @staticmethod + def START_ID(): + """Returns ID of first corner.""" + return "RectStartPoint" + + @staticmethod + def END_ID(): + """Returns ID of second corner.""" + return "RectEndPoint" + + @staticmethod + def AUXILIARY_ID(): + """Returns whether the rectangle is accessory.""" + return "Auxiliary" + + @staticmethod + def LINES_LIST_ID(): + """Returns ID of list containing lines created.""" + return "RectangleList" + + def getKind(self): + """Override Feature.getKind()""" + return SketchPlugin_Rectangle.ID() + + +# Initialization of the rectangle + + def initAttributes(self): + """Override Feature.initAttributes()""" + # Flag whether the rectangle is accessory + self.data().addAttribute(self.AUXILIARY_ID(), ModelAPI.ModelAPI_AttributeBoolean_typeId()) + # Creating corners of the rectangle + self.data().addAttribute(self.START_ID(), GeomDataAPI.GeomDataAPI_Point2D_typeId()) + self.data().addAttribute(self.END_ID(), GeomDataAPI.GeomDataAPI_Point2D_typeId()) + # Creating list to store lines + self.data().addAttribute(self.LINES_LIST_ID(), ModelAPI.ModelAPI_AttributeRefList_typeId()) + ModelAPI.ModelAPI_Session.get().validators().registerNotObligatory(self.getKind(), self.LINES_LIST_ID()) + + def isMacro(self): + """ + Override Feature.isMacro(). + Rectangle feature is macro: removes itself on the creation transaction finish. + """ + return True + +# Edition of the rectangle + + def execute(self): + # Retrieving list of already created lines + aLinesList = self.reflist(self.LINES_LIST_ID()) + aNbLines = aLinesList.size() + if aNbLines == 1: + # Create 1-4 lines to compose the rectangle + for i in range (0, 3): + aLine = self.__sketch.addFeature("SketchLine") + aLinesList.append(aLine) + self.updateLines() + aNbLines = aLinesList.size() + # Create constraints to keep the rectangle + for i in range (0, aNbLines): + aLine = ModelAPI.objectToFeature(aLinesList.object(i)) + # connect neighbor lines by coincidence + iPrev = i - 1 + if iPrev < 0: + iPrev = aNbLines - 1 + aPrevLine = ModelAPI.objectToFeature(aLinesList.object(iPrev)) + aCoincidence = self.__sketch.addFeature("SketchConstraintCoincidence") + aRefAttrA = aCoincidence.refattr("ConstraintEntityA") + aRefAttrB = aCoincidence.refattr("ConstraintEntityB") + aRefAttrA.setAttr(aPrevLine.attribute("EndPoint")) + aRefAttrB.setAttr(aLine.attribute("StartPoint")) + # Flags which show horizontal or vertical constraint is build for correponding line + self.__isHV = [False, False, False, False] + # Update coordinates of created lines + self.updateLines() + # Add horizontal and vertical constraint for the lines which already have result + for i in range (0, aNbLines): + if self.__isHV[i]: + continue + aLine = ModelAPI.objectToFeature(aLinesList.object(i)) + aLineResult = aLine.lastResult() + if aLineResult is None: + continue + aHVName = "SketchConstraintHorizontal" + if i % 2 == 1: + aHVName = "SketchConstraintVertical" + aHVConstraint = self.__sketch.addFeature(aHVName) + aRefAttrA = aHVConstraint.refattr("ConstraintEntityA") + aRefAttrA.setObject(aLine.lastResult()) + self.__isHV[i] = True + + def attributeChanged(self, theID): + if theID == self.START_ID() or theID == self.END_ID(): + # Search the sketch containing this rectangle + self.__sketch = None + aRefs = self.data().refsToMe(); + for iter in aRefs: + aFeature = ModelAPI.objectToFeature(iter.owner()) + if aFeature.getKind() == "Sketch": + self.__sketch = ModelAPI.featureToCompositeFeature(aFeature) + break + + aLinesList = self.reflist(self.LINES_LIST_ID()) + aNbLines = aLinesList.size() + if aNbLines == 0: + # Create first line to be able to create a coincidence with selected point/feature + for i in range (0, 1): + aLine = self.__sketch.addFeature("SketchLine") + aLinesList.append(aLine) + + aStartPoint = GeomDataAPI.geomDataAPI_Point2D(self.attribute(self.START_ID())) + aEndPoint = GeomDataAPI.geomDataAPI_Point2D(self.attribute(self.END_ID())) + if aStartPoint.isInitialized() and aEndPoint.isInitialized(): + self.updateLines() + else: + self.updateStartPoint() + if theID == self.AUXILIARY_ID(): + anAuxiliary = self.data().boolean(self.AUXILIARY_ID()).value() + aLinesList = self.reflist(self.LINES_LIST_ID()) + aNbLines = aLinesList.size() + # Update coordinates of rectangle lines + for i in range (0, aNbLines): + aLine = ModelAPI.objectToFeature(aLinesList.object(i)) + aLine.data().boolean("Auxiliary").setValue(anAuxiliary) + + + def updateLines(self): + # Retrieving list of already created lines + aLinesList = self.reflist(self.LINES_LIST_ID()) + aNbLines = aLinesList.size() + aStartPoint = GeomDataAPI.geomDataAPI_Point2D(self.attribute(self.START_ID())) + aEndPoint = GeomDataAPI.geomDataAPI_Point2D(self.attribute(self.END_ID())) + aX = [aStartPoint.x(), aStartPoint.x(), aEndPoint.x(), aEndPoint.x()] + aY = [aStartPoint.y(), aEndPoint.y(), aEndPoint.y(), aStartPoint.y()] + anAuxiliary = self.data().boolean(self.AUXILIARY_ID()).value() + + # Update coordinates of rectangle lines + for i in range (0, aNbLines): + aLine = ModelAPI.objectToFeature(aLinesList.object(i)) + aLineStart = GeomDataAPI.geomDataAPI_Point2D(aLine.attribute("StartPoint")) + aLineEnd = GeomDataAPI.geomDataAPI_Point2D(aLine.attribute("EndPoint")) + aLineStart.setValue(aX[i-1], aY[i-1]) + aLineEnd.setValue(aX[i], aY[i]) + aLine.data().boolean("Auxiliary").setValue(anAuxiliary) + + def updateStartPoint(self): + # Retrieving list of already created lines + aLinesList = self.reflist(self.LINES_LIST_ID()) + aNbLines = aLinesList.size() + + aStartPoint = GeomDataAPI.geomDataAPI_Point2D(self.attribute(self.START_ID())) + aX = aStartPoint.x() + aY = aStartPoint.y() + + # Update coordinates of rectangle lines + for i in range (0, aNbLines): + aLine = ModelAPI.objectToFeature(aLinesList.object(i)) + aLineStart = GeomDataAPI.geomDataAPI_Point2D(aLine.attribute("EndPoint")) + aLineStart.setValue(aX, aY) diff --git a/src/PythonAddons/doc/examples/rectangle/widget.xml b/src/PythonAddons/doc/examples/rectangle/widget.xml new file mode 100644 index 000000000..45d5ef793 --- /dev/null +++ b/src/PythonAddons/doc/examples/rectangle/widget.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + diff --git a/src/PythonAddons/doc/images/box_ico.png b/src/PythonAddons/doc/images/box_ico.png new file mode 100644 index 0000000000000000000000000000000000000000..104a1edde755dae03a8348b40b4667b0e70d860c GIT binary patch literal 405 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4kh`q^SLUNVrt6;T)nD-m^ zgx#~wmA}0-iBrvlZ+0>_!?oD=JHuAKnG4I#Lt<9A;joy~jYU0bN z6tK-c@ZFsDSF^2|A~iUDR-b)#rsw*C-!oS`xcpLmA?AB6cgy!myT?zvXKqgTBR*rX zyD|sEYyHEW*LGBW5cXcVJf8cJ%CV<=*Z)53c%l1HF?YkqZ~?)XJ9l3lJpN&sc~BpwM1V7sn8b(?=(t