From 19ef8d32495094e78d348a210622ea749597ad15 Mon Sep 17 00:00:00 2001 From: gzy Date: Fri, 21 Sep 2018 11:42:31 +0300 Subject: [PATCH] linear copy, angular copy, fillet, sub-shapes help --- src/BuildPlugin/doc/TUI_subshapeFeature.rst | 12 +++ src/BuildPlugin/doc/examples/subshapes.py | 29 ++++++ .../doc/images/feature_subshapes.png | Bin 0 -> 682 bytes src/BuildPlugin/doc/polylineFeature.rst | 4 +- src/BuildPlugin/doc/subShapesFeature.rst | 41 ++++++++- .../doc/TUI_angularcopyFeature.rst | 12 +++ .../doc/TUI_filletfixedFeature.rst | 12 +++ .../doc/TUI_filletvariableFeature.rst | 12 +++ .../doc/TUI_linearcopyFeature.rst | 11 +++ src/FeaturesPlugin/doc/angularCopyFeature.rst | 39 +++++++- .../doc/examples/angularcopy.py | 12 +++ src/FeaturesPlugin/doc/examples/fillet1.py | 12 +++ src/FeaturesPlugin/doc/examples/fillet2.py | 12 +++ src/FeaturesPlugin/doc/examples/linearcopy.py | 12 +++ src/FeaturesPlugin/doc/filletFeature.rst | 84 +++++++++++++++++- src/FeaturesPlugin/doc/images/Fillet.png | Bin 6473 -> 566 bytes src/FeaturesPlugin/doc/images/FilletFixed.png | Bin 0 -> 6473 bytes .../images/{Fillet2.png => FilletVarious.png} | Bin src/FeaturesPlugin/doc/images/fillet.png | Bin 0 -> 566 bytes .../doc/images/fillet_fixed_radius.png | Bin 0 -> 1296 bytes .../doc/images/fillet_var_radius.png | Bin 0 -> 1108 bytes .../doc/images/multirotation.png | Bin 0 -> 758 bytes .../doc/images/multitranslation.png | Bin 0 -> 642 bytes src/FeaturesPlugin/doc/linearCopyFeature.rst | 47 +++++++++- 24 files changed, 342 insertions(+), 9 deletions(-) create mode 100644 src/BuildPlugin/doc/TUI_subshapeFeature.rst create mode 100644 src/BuildPlugin/doc/examples/subshapes.py create mode 100644 src/BuildPlugin/doc/images/feature_subshapes.png create mode 100644 src/FeaturesPlugin/doc/TUI_angularcopyFeature.rst create mode 100644 src/FeaturesPlugin/doc/TUI_filletfixedFeature.rst create mode 100644 src/FeaturesPlugin/doc/TUI_filletvariableFeature.rst create mode 100644 src/FeaturesPlugin/doc/TUI_linearcopyFeature.rst create mode 100644 src/FeaturesPlugin/doc/examples/angularcopy.py create mode 100644 src/FeaturesPlugin/doc/examples/fillet1.py create mode 100644 src/FeaturesPlugin/doc/examples/fillet2.py create mode 100644 src/FeaturesPlugin/doc/examples/linearcopy.py create mode 100644 src/FeaturesPlugin/doc/images/FilletFixed.png rename src/FeaturesPlugin/doc/images/{Fillet2.png => FilletVarious.png} (100%) create mode 100644 src/FeaturesPlugin/doc/images/fillet.png create mode 100644 src/FeaturesPlugin/doc/images/fillet_fixed_radius.png create mode 100644 src/FeaturesPlugin/doc/images/fillet_var_radius.png create mode 100644 src/FeaturesPlugin/doc/images/multirotation.png create mode 100644 src/FeaturesPlugin/doc/images/multitranslation.png diff --git a/src/BuildPlugin/doc/TUI_subshapeFeature.rst b/src/BuildPlugin/doc/TUI_subshapeFeature.rst new file mode 100644 index 000000000..10d0f8f80 --- /dev/null +++ b/src/BuildPlugin/doc/TUI_subshapeFeature.rst @@ -0,0 +1,12 @@ + + .. _tui_create_subshape: + +Create Sub-shapes +================= + +.. literalinclude:: examples/subshapes.py + :linenos: + :language: python + +:download:`Download this script ` + diff --git a/src/BuildPlugin/doc/examples/subshapes.py b/src/BuildPlugin/doc/examples/subshapes.py new file mode 100644 index 000000000..4f0519ff7 --- /dev/null +++ b/src/BuildPlugin/doc/examples/subshapes.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +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(-56.65008576329333, 13.33962264150944, 9.528301886792452, 66.69811320754719) +SketchLine_1.result().setColor(225, 0, 0) +SketchLine_2 = Sketch_1.addLine(9.528301886792452, 66.69811320754719, 78.47855917667239, -27.54545454545455) +SketchLine_2.result().setColor(225, 0, 0) +SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint()) +SketchLine_3 = Sketch_1.addLine(78.47855917667239, -27.54545454545455, 7.795883361921087, -89.2195540308748) +SketchLine_3.result().setColor(225, 0, 0) +SketchConstraintCoincidence_2 = Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint()) +SketchLine_4 = Sketch_1.addLine(7.795883361921087, -89.2195540308748, 12.64665523156088, -20.9622641509434) +SketchLine_4.result().setColor(225, 0, 0) +SketchConstraintCoincidence_3 = Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint()) +SketchLine_5 = Sketch_1.addLine(12.64665523156088, -20.9622641509434, -56.65008576329333, 13.33962264150944) +SketchLine_5.result().setColor(225, 0, 0) +SketchConstraintCoincidence_4 = Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_5.startPoint()) +SketchConstraintCoincidence_5 = Sketch_1.setCoincident(SketchLine_5.endPoint(), SketchLine_1.startPoint()) +model.do() +Face_1 = model.addFace(Part_1_doc, [model.selection("FACE", "Sketch_1/Face-SketchLine_1r-SketchLine_2r-SketchLine_3r-SketchLine_4r-SketchLine_5r")]) +SubShapes_1 = model.addSubShapes(Part_1_doc, model.selection("FACE", "Face_1_1"), [model.selection("EDGE", "Sketch_1/Edge-SketchLine_5"), model.selection("EDGE", "Sketch_1/Edge-SketchLine_4")]) +model.do() +model.end() diff --git a/src/BuildPlugin/doc/images/feature_subshapes.png b/src/BuildPlugin/doc/images/feature_subshapes.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e08889110206f998e6290605f984caa9421186 GIT binary patch literal 682 zcmV;b0#*HqP)tV#h2EO5qTp0obA$=H@jCoJTu~ zRa%}4G9o7B5#%edA8?xg1#djkR+`dN{Yq&!l&0FnkaHRw0*M)@)7olqNwcfmFw}r( z+I11tDT?y~y}FV-6d!Y}`YyS4v2b>Kg<<^@Or^~Qecp;MV~dq`H1VO-W|S%u?5PTI_VGTPm9@;x&l6pUQeIYuE#F2k9AZb+HkJ}` z#(h4_05gd?wzfS1AQ%d8<-t{2>(?_B)`>1eal2Y6DJtR3h=)5jZ)3@|;QuhqxX(w{ z3__tW-N!r(P9~X}_H)YJPQf}m!=qlhE?mNrYstuG2$WLvJnAJ9%R|= Sub-shapes* item or +#. click **Sub-shapes** button in the toolbar + +.. image:: images/feature_subshapes.png + :align: center + +.. centered:: + **Sub-shapes** button + +The following property panel appears. .. image:: images/SubShapes.png :align: center .. centered:: - Create sub-shapes + Sub-shapes property panel + +Input fields: + +- **Shape** panel contains shape to be modified. Shape is selected in 3D OCC viewer or object browser; +- **Sub-shapes** panel contains list of sub-shapes of given shape to be included into result. Sub-shapes are selected in 3D OCC viewer. + +**TUI Command**: *model.addSubShapes(Part_doc, shape, sub-shapes)* + +**Arguments**: 1 part + shape in format *model.selection(TYPE, shape)* + list of sub-shapes in format *model.selection(TYPE, subshape)*. + +Result +"""""" +Result of operation is shown below. + +.. image:: images/SubShapes.png + :align: center + +.. centered:: + Sub-shapes + +**See Also** a sample TUI Script of a :ref:`tui_create_subshape` operation. + + + + diff --git a/src/FeaturesPlugin/doc/TUI_angularcopyFeature.rst b/src/FeaturesPlugin/doc/TUI_angularcopyFeature.rst new file mode 100644 index 000000000..11df5f0f8 --- /dev/null +++ b/src/FeaturesPlugin/doc/TUI_angularcopyFeature.rst @@ -0,0 +1,12 @@ + + .. _tui_create_angularcopy: + +Create Angular copy +=================== + +.. literalinclude:: examples/angularcopy.py + :linenos: + :language: python + +:download:`Download this script ` + diff --git a/src/FeaturesPlugin/doc/TUI_filletfixedFeature.rst b/src/FeaturesPlugin/doc/TUI_filletfixedFeature.rst new file mode 100644 index 000000000..e573efec2 --- /dev/null +++ b/src/FeaturesPlugin/doc/TUI_filletfixedFeature.rst @@ -0,0 +1,12 @@ + + .. _tui_create_fillet1: + +Create Fillet by fixed radius +============================= + +.. literalinclude:: examples/fillet1.py + :linenos: + :language: python + +:download:`Download this script ` + diff --git a/src/FeaturesPlugin/doc/TUI_filletvariableFeature.rst b/src/FeaturesPlugin/doc/TUI_filletvariableFeature.rst new file mode 100644 index 000000000..ddcee3c82 --- /dev/null +++ b/src/FeaturesPlugin/doc/TUI_filletvariableFeature.rst @@ -0,0 +1,12 @@ + + .. _tui_create_fillet2: + +Create Fillet by variable radius +================================ + +.. literalinclude:: examples/fillet2.py + :linenos: + :language: python + +:download:`Download this script ` + diff --git a/src/FeaturesPlugin/doc/TUI_linearcopyFeature.rst b/src/FeaturesPlugin/doc/TUI_linearcopyFeature.rst new file mode 100644 index 000000000..8b52750e5 --- /dev/null +++ b/src/FeaturesPlugin/doc/TUI_linearcopyFeature.rst @@ -0,0 +1,11 @@ + + .. _tui_create_linearcopy: + +Create Linear copy +================== + +.. literalinclude:: examples/linearcopy.py + :linenos: + :language: python + +:download:`Download this script ` diff --git a/src/FeaturesPlugin/doc/angularCopyFeature.rst b/src/FeaturesPlugin/doc/angularCopyFeature.rst index 3d3fec12c..3c5c989b8 100644 --- a/src/FeaturesPlugin/doc/angularCopyFeature.rst +++ b/src/FeaturesPlugin/doc/angularCopyFeature.rst @@ -2,9 +2,46 @@ Angular copy ============ +The feature **Angular copy** makes a compound of several rotated shapes basing on the initial shape. + +To create Angular copy in the active part: + +#. select in the Main Menu *Part - > Angular copy* item or +#. click **Angular copy** button in the toolbar + +.. image:: images/multirotation.png + :align: center + +.. centered:: + **Angular copy** button + +The following property panel appears. .. image:: images/AngularCopy.png :align: center .. centered:: - Angular copy definition + Angular copy property panel + +Input fields: + +- **Main objects** panel contains shapes to be rotated. Shapes are selected in 3D OCC viewer or object browser; +- **Vector of rotation** defines the axis of rotation. Vector is edge, axis selected in 3D OCC viewer or object browser; +- **Angular Step** check-box turns on/off definition of the angle by which the object is rotated. By default (if the checkbox is not checked), **Angular Step** = 2 * PI / NbTimes; +- **Nb. Copies** defines the number of rotated shape copies in the resulting compound. If **Nb. Copies** = 1, the result contains only the initial shape. + +**TUI Command**: *model.addMultiRotation(Part_doc, [shape], axis, step, Nb)* + +**Arguments**: 1 part + list of shapes in format *model.selection(TYPE, shape)* + axis in format *model.selection(TYPE, shape)*+ real (step value) + integer (Nb. Copies). + +Result +"""""" +Result of cylinder rotation is compound. + +.. image:: images/angularcopy.png + :align: center + +.. centered:: + Angular copy + +**See Also** a sample TUI Script of a :ref:`tui_create_angularcopy` operation. diff --git a/src/FeaturesPlugin/doc/examples/angularcopy.py b/src/FeaturesPlugin/doc/examples/angularcopy.py new file mode 100644 index 000000000..02483c19a --- /dev/null +++ b/src/FeaturesPlugin/doc/examples/angularcopy.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +Cylinder_1 = model.addCylinder(Part_1_doc, model.selection("VERTEX", "PartSet/Origin"), model.selection("EDGE", "PartSet/OZ"), 5, 10) +AngularCopy_1 = model.addMultiRotation(Part_1_doc, [model.selection("SOLID", "Cylinder_1_1")], model.selection("EDGE", "PartSet/OY"), 90, 3) +model.do() +model.end() diff --git a/src/FeaturesPlugin/doc/examples/fillet1.py b/src/FeaturesPlugin/doc/examples/fillet1.py new file mode 100644 index 000000000..67299d876 --- /dev/null +++ b/src/FeaturesPlugin/doc/examples/fillet1.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +Box_1 = model.addBox(Part_1_doc, 10, 10, 10) +Fillet_1 = model.addFillet(Part_1_doc, [model.selection("FACE", "Box_1_1/Front"), model.selection("EDGE", "Box_1_1/Left&Box_1_1/Top")], 2) +model.do() +model.end() diff --git a/src/FeaturesPlugin/doc/examples/fillet2.py b/src/FeaturesPlugin/doc/examples/fillet2.py new file mode 100644 index 000000000..a72a7ec78 --- /dev/null +++ b/src/FeaturesPlugin/doc/examples/fillet2.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +Box_1 = model.addBox(Part_1_doc, 10, 10, 10) +Fillet_1 = model.addFillet(Part_1_doc, [model.selection("EDGE", "Box_1_1/Left&Box_1_1/Top")], 1, 3) +model.do() +model.end() diff --git a/src/FeaturesPlugin/doc/examples/linearcopy.py b/src/FeaturesPlugin/doc/examples/linearcopy.py new file mode 100644 index 000000000..5126b8892 --- /dev/null +++ b/src/FeaturesPlugin/doc/examples/linearcopy.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Part_1 = model.addPart(partSet) +Part_1_doc = Part_1.document() +Sphere_1 = model.addSphere(Part_1_doc, model.selection("VERTEX", "PartSet/Origin"), 10) +LinearCopy_1 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Sphere_1_1")], model.selection("EDGE", "PartSet/OX"), 30, 3, model.selection("EDGE", "PartSet/OY"), 30, 2) +model.do() +model.end() diff --git a/src/FeaturesPlugin/doc/filletFeature.rst b/src/FeaturesPlugin/doc/filletFeature.rst index 08343f728..8e9c329c5 100644 --- a/src/FeaturesPlugin/doc/filletFeature.rst +++ b/src/FeaturesPlugin/doc/filletFeature.rst @@ -2,16 +2,92 @@ Fillet ====== +The feature **Fillet** creates fillets on the edges of a shape. -.. image:: images/Fillet.png +To create Fillet in the active part: + +#. select in the Main Menu *Feature - > Fillet* item or +#. click **Fillet** button in the toolbar + +.. image:: images/fillet.png + :align: center + +.. centered:: + **Fillet** button + +There are 2 types of fillet: + + .. image:: images/fillet_fixed_radius.png + :align: left + fillet by fixed radius + + .. image:: images/fillet_var_radius.png + :align: left + fillet by variable radius + +Fillet by fixed radius +---------------------- + +The property panel is shown below. + +.. image:: images/FilletFixed.png :align: center .. centered:: - Fillet by fixed radius + Fillet by fixed radius property panel + +Input fields: + +- **Faces or/and edges** panel contains faces and edges on which fillet is done. All edges of face are subjected to fillet operation. Faces and edges are selected in 3D OCC viewer; +- **Radius** defines fillet radius. + +**TUI Command**: *model.addFillet(Part_doc, [face,edge], radius)* + +**Arguments**: 1 part + list of faces and edges subjected to fillet operation in format *model.selection(TYPE, shape)* + real (radius value). + +Result +"""""" + +Result of **Fillet by fixed radius** is shown below. +.. image:: images/fillet_fix_rad.png + :align: center -.. image:: images/Fillet2.png +.. centered:: + Fillet by fixed radius + +**See Also** a sample TUI Script of a :ref:`tui_create_fillet1` operation. + +Fillet by variable radius +------------------------- + +Alternatively, there is a possibility to create a fillet with a variable radius. + +.. image:: images/FilletVarious.png :align: center .. centered:: - Fillet by varyable radius + Fillet by variable radius + +Input fields: + +- **Faces or/and edges** panel contains faces and edges on which fillet is done. All edges of face are subjected to fillet operation. Faces and edges are selected in 3D OCC viewer; +- **Start radius** defines the fillet radius at the start of the selected edge(s); +- **End radius** defines the fillet radius at the end of the selected edge(s). + +**TUI Command**: *model.addFillet(Part_doc, [face,edge], R1, R2)* + +**Arguments**: 1 part + list of faces and edges subjected to fillet operation in format *model.selection(TYPE, shape)* + 2 reals (start and end radius values). + +Result +"""""" + +Result of **Fillet by variable radius** is shown below. + +.. image:: images/fillet_var_rad.png + :align: center + +.. centered:: + Fillet by variable radius + +**See Also** a sample TUI Script of a :ref:`tui_create_fillet2` operation. diff --git a/src/FeaturesPlugin/doc/images/Fillet.png b/src/FeaturesPlugin/doc/images/Fillet.png index 7f804075fcb44f8b2ad504d6f3767b1a824e0c37..3b5a98289beb35c659debbc7cecde2e9f7a62c56 100644 GIT binary patch literal 566 zcmV-60?GY}P)! ztFQjYm*@9;{_yY$tu+9F=ukv!odw!y9UJs#f%t^5AC>0bECL9vHG$|*#8B#0YV2Xb z>+zo7P1P-Hb>`{)waoR5&$eZCspKo%o9zvKtF%p(-@ZeM;mL^y-?Jm>qspbb z8}F7a^P%ym_h;1@5dOZadY{Sw_93@f9KD!dzZL#+_@Gg5N|uU8-d~=+w5b4|O-}8G zG++WXz_cvOSYBBvoK8Itzr68op||Tt7~oV#r5m)CEw&2a0N??9N-6)jVDQSs_>
B1F``-7U&(pp8QLL{}MFkH#Rpu0>7LJns7Xs z=mF8+xWbkL-W^XSdTORMP@d1^{`432iMUXn&*T8M0e7sJ=nH<%umAu607*qoM6N<$ Ef{(!iF#rGn literal 6473 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
B1F``-7U&(pp8QLL{}MFkH#Rpu0>7LJns7Xs z=mF8+xWbkL-W^XSdTORMP@d1^{`432iMUXn&*T8M0e7sJ=nH<%umAu607*qoM6N<$ Ef{(!iF#rGn literal 0 HcmV?d00001 diff --git a/src/FeaturesPlugin/doc/images/fillet_fixed_radius.png b/src/FeaturesPlugin/doc/images/fillet_fixed_radius.png new file mode 100644 index 0000000000000000000000000000000000000000..0897bdeb864087237a04208ec776436c92544c6b GIT binary patch literal 1296 zcmV+r1@HQaP)J$QZ>ya5ZGi?0?IsO`V{cG;qzWh3E*^l9wv73$%PLVG`+oP zvr8cIl7$C@!KP2Xt_^8s^IYIIsB4i(#DA;%M!;`$%#un?h##cd@OgKS2;g*kW&=lo z@iU7bIrrup8wvqOvhdzO-`VXuKAbvvdO^R?Ow$t#itF8-9hZBqcg!Pplck2w+mHa@ zbbA&7hXF_F6Lag=uX}YCU`-Yt3I-c@dH3ZYL?IxOd2e=HJLc~)%7Ip(L>m(Bj-T97 zws^_u_3K_KNfqAh@42w${cTRAls#2Azyw$RLW|Ab1{4C%-ve;EJs#j&z`AnT@{?<; z*31KuoousED0JbgLx=9qf2i0hG%Y_>cwE*=4@@)S;}u#w{57B!$a=AA&9PPPTCL3@K&Pu;Cy(+gnW=Us#Kj68I0l{jd^PJ*%EuysZ4`dZm=@dV5=fMN0XH zP|A2~)8>o1U7s`XeR=@m7|$+WJ=JV7cLoE!k47VrbA#sY8m-M^sw+KRu8EUM2QNw| z0Gbfa)z7SG0O<4ggaJ^h3+UbU&elr~hyHlNnsfpHEGV5f7NEE1<`k6b?r3evs;;cM zI$>OHLO8(Cdi}p;wb%r}olr0jp@lwpcYBvZ*Goq7r~L-ZCQ}X&QA*`jS5|h6NfMqB z03omwYsb)aJ!Ko0b^rxB@t50Zly(3hWo1-K`H5HCOaSO9;`?^g?EI71AD}rC0NEyO z#8x6)^Vz4D+Ag*i0qwxjOaP#nhO5fz&gZ+oY-ws~o(Wt7$_$^kD*HhkXNkql-8y(lbc4mJZeU_-KSfPVl(_q-?;(x99G0000M$Z zjWnoe04|R=A24#NT_PSShk*elKGB`>*#74F36h888YI8b1B9 zWsdN2rq(R=x$+%Ndn$GnEHr$4V!W^ZyJkVLCbCZ{OF>4~+Oqpx57q-V;H1mrwa)@@ zdAwfWGr+#rySs6xXWK^LUy$>up|!Q?o|PGURg^L58Lk2?F{uN11Sk(1T^{d#-~?c; zeCfc&%}AugBSC2^PXHxIKZWj z_Vej$vh6@ZEU(>>Vhc4(HCMU!HQ+EH)l~=U^Va7+E+T`A%r_f<@b@QJtp^rjwj@{{ z4mF+XfoChCpG1q0)n>cC+PyB2Xtx)}u#Q}7X?B2^;e%p@(>WMER0NPvTM6NnJM?Cb-CO*?#NVuF-)@`rEDM$z!C;H`o`PNyPbid;o+V)j~#LJ z2LkS~JEQ)@BwN9Bu!6+C&TGGUO3OMn6>VBw-P(LVEMki-M5!q$*{@a|x(U$V)8zzY zWbl^%kM8z?qWt{2Bd;HJKC^ktR;R;}Gd(8qtiEfdr=_jeG>zc!klSX}>b93}bL6_+ z`JlGXu!VQZk^=xJ1)8R*SN6QPV}6f9M3#05A|ay5VwsAL8$c|n5aBWcu)F}%`X3-} z0MTk)Q_KN#QkDlmM26lv_Rimv<|IIK9G74Y0wH+x{rCDhySuW1%gn5Z{)7BG$3Og_ z`|8hEbAS$DtKrjc#%~E`6HI(m^YKqDZT>vq7hsFw(*qFKXCMq%V#e7yzC&e0uxL{3=0^hLgoh3Usf z5Y$xRr9eO}xONmF37|$lQOwl8pq++KZ=TD$q($i*8V6o5e0tq{1`W6shhPn`1N)+d a1N;MB&42q~h>xBC0000Szd$~=1mdWuR|+> ztw7L=5eAAENkSMRky!`^V!|jFf)^o%sJRUzO3Xw^%D^nw%!zZ_Qm|n;{q#HC_`%Y` zJU8b#&w1X5_c=e5QB?Y9>1XgzXhn#T@u4hlXXhezGF;;U<{A&MGuNv6_U09+cT^03 z+fLB&cItH6C2Nl%*L)QK{nJ3HP%=hh-=6%-Bl=uR1pqj|%xWTbMYh&e*PKc*CKnh? z=3AQ$cnOqPi?abB82qtNUUgFq0K~Xv00}(LBec4*CX#6X?+7mU_hK+Q4*;Ex?$`b~ zzkSx(F}1w`5sqXYo(5y}5;f{}Gm)`uO}0g~MgGk1j|wN2*Vmb9Sy@gDHQ{{k%ja*} zySs!LS9?x4&!5xlfBhxF9p~r3I1y|BVgbPG^9cl2x21!PSp{HeGj@CoXgMBs_vA#< z{l*4I(_LGwEJCn=v7&no^}&g+o*M)pS);~)f=6RWz?dlFv9OAZOCj_Fz^lp02(K?_ zP0(m_i0A?UIRFfgynknFvG;SDXtX`4C7tOQT~FVSheIt~j9iX3Nw_RTRchmPO+;jt zIInNoGcYt51i?T6bVfY}U)nh1ZWVC+iulbvjkAJ)4*<~Po==l8aZJiwdAoWjFu(9Z z9jM%93COCx*CFYY9 zZ7LIIOl6|yL?)tFS5PRmyK&U55t<807*qoM6N<$f^$Sj%>V!Z literal 0 HcmV?d00001 diff --git a/src/FeaturesPlugin/doc/images/multitranslation.png b/src/FeaturesPlugin/doc/images/multitranslation.png new file mode 100644 index 0000000000000000000000000000000000000000..d0d9c157b300366145025a8d3b658f18bf85fa94 GIT binary patch literal 642 zcmV-|0)737P)-m`C~wK?;sXFqIb%cW56V%n^(y4Xcg z1W|cWEUFt3%1ToMg&?oGsV<_c=%O1T>~EL5vOsY~#K;zvV&ugbOhiQY=UnIO>XdG$ z6Fu<4_x?Q3`vV_A9|5luy%sZ$WtQRTx->MAU0FE<0Qp?LAsv6#_7~o7C{jIg-(CrP zkC$fRb4y$^|H+t8=Ds6F>^NQ_u_(G*hpoH!i6jUGn1sd0_aAoab-y+`^qB#m zIvXZhJvicX)6Na|*{6rkTwnmy#QV2}PhY=u8m%Azur}J!5;;KD`9)qh*Lyt^4s`^> zp^jj{9}vL#4gg%w98JwrOmSf9bcBL0CV66Y4c}c}e-Zpo2hO>xXQ1x~01z;qjz7P> z{fLD5m#_I+I*X$KHUZqyl3ktqeHM%O4glsB7Rt%gY;*MrtfhNoIlGi;+e@ZIE}v@z z@I*^GWm$2`5d{FG2I*rmHCuB7HrhXURdX&64 Linear copy* item or +#. click **Linear copy** button in the toolbar + +.. image:: images/multitranslation.png + :align: center + +.. centered:: + **Linear copy** button + +The following property panel appears. .. image:: images/LinearCopy.png :align: center .. centered:: - Linear copy + Linear copy property panel + +Input fields: + +- **Main objects** panel contains shapes to be translated. Shapes are selected in 3D OCC viewer or object browser; +- **First direction** defines translation in the first direction: + + - **Vector of translation** defines vector along which the object will be translated. Vector is edge, axis selected in 3D OCC viewer or object browser; + - **Step** defines the distance between the shape copies; + - **Nb. Copies** is the number of shape copies; + +- **Second direction** check-box turns on/off translation in the second direction: + + - **Vector of translation** defines vector along which the object will be translated. Vector is edge, axis selected in 3D OCC viewer or object browser; + - **Step** defines the distance between the shape copies; + - **Nb. Copies** defines the number of shape copies. + +**TUI Command**: *model.addMultiTranslation(Part_doc, [shape], axis1, step1, Nb1, axis2, step2, Nb2)* + +**Arguments**: 1 part + list of shapes in format *model.selection(TYPE, shape)* + 2 axis in format *model.selection(TYPE, shape)*+ 2 real (step values) + 2 integers (Nb. Copies). + +Result +"""""" +Result of operation is compound. + +.. image:: images/linearcopy.png + :align: center + +.. centered:: + Sub-shapes + +**See Also** a sample TUI Script of a :ref:`tui_create_linearcopy` operation. \ No newline at end of file -- 2.39.2