From a895fd1f68fc277c75025364edbbba1f0836d735 Mon Sep 17 00:00:00 2001 From: azv Date: Wed, 29 Jan 2020 08:23:53 +0300 Subject: [PATCH] Documentation for B-spline and Periodic B-spline features. --- src/SketchPlugin/doc/SketchPlugin.rst | 1 + src/SketchPlugin/doc/TUI_bsplineFeature.rst | 11 +++ src/SketchPlugin/doc/bsplineFeature.rst | 81 ++++++++++++++++++ src/SketchPlugin/doc/examples/bspline.py | 18 ++++ src/SketchPlugin/doc/images/bspline.png | Bin 0 -> 614 bytes .../doc/images/bspline_add_pole.png | Bin 0 -> 1173 bytes .../doc/images/bspline_creation_panel.png | Bin 0 -> 8739 bytes .../doc/images/bspline_modification_panel.png | Bin 0 -> 10280 bytes src/SketchPlugin/doc/images/bspline_p.png | Bin 0 -> 765 bytes .../doc/images/bspline_periodic_result.png | Bin 0 -> 8259 bytes .../doc/images/bspline_result.png | Bin 0 -> 7746 bytes 11 files changed, 111 insertions(+) create mode 100644 src/SketchPlugin/doc/TUI_bsplineFeature.rst create mode 100644 src/SketchPlugin/doc/bsplineFeature.rst create mode 100644 src/SketchPlugin/doc/examples/bspline.py create mode 100644 src/SketchPlugin/doc/images/bspline.png create mode 100644 src/SketchPlugin/doc/images/bspline_add_pole.png create mode 100644 src/SketchPlugin/doc/images/bspline_creation_panel.png create mode 100644 src/SketchPlugin/doc/images/bspline_modification_panel.png create mode 100644 src/SketchPlugin/doc/images/bspline_p.png create mode 100644 src/SketchPlugin/doc/images/bspline_periodic_result.png create mode 100644 src/SketchPlugin/doc/images/bspline_result.png diff --git a/src/SketchPlugin/doc/SketchPlugin.rst b/src/SketchPlugin/doc/SketchPlugin.rst index c8e4b9b7d..6d2a5af6c 100644 --- a/src/SketchPlugin/doc/SketchPlugin.rst +++ b/src/SketchPlugin/doc/SketchPlugin.rst @@ -92,6 +92,7 @@ The plug-in includes the following features for creation of 2D objects: arcFeature.rst ellipseFeature.rst arcEllipseFeature.rst + bsplineFeature.rst .. _sketch_constraints: diff --git a/src/SketchPlugin/doc/TUI_bsplineFeature.rst b/src/SketchPlugin/doc/TUI_bsplineFeature.rst new file mode 100644 index 000000000..962c33fe2 --- /dev/null +++ b/src/SketchPlugin/doc/TUI_bsplineFeature.rst @@ -0,0 +1,11 @@ + + .. _tui_create_bspline: + +Create Sketch B-spline +====================== + +.. literalinclude:: examples/bspline.py + :linenos: + :language: python + +:download:`Download this script ` diff --git a/src/SketchPlugin/doc/bsplineFeature.rst b/src/SketchPlugin/doc/bsplineFeature.rst new file mode 100644 index 000000000..5d8cde2cb --- /dev/null +++ b/src/SketchPlugin/doc/bsplineFeature.rst @@ -0,0 +1,81 @@ +.. |bspline.icon| image:: images/bspline.png +.. |bspline_p.icon| image:: images/bspline_p.png +.. |add_pole.icon| image:: images/bspline_add_pole.png + +B-spline and periodic B-spline +============================== + +The feature creates a free form spline curve in the current Sketch. + +To add a new B-spline to the Sketch: + +#. select in the Main Menu *Sketch - > B-spline* item or +#. click |bspline.icon| **B-spline** button in the Sketch toolbar. + +To add a periodic B-spline to the Sketch: + +#. select in the Main Menu *Sketch - > Periodic B-spline* item or +#. click |bspline_p.icon| **Periodic B-spline** button in the Sketch toolbar. + + +Creation of B-spline curve +"""""""""""""""""""""""""" + +.. image:: images/bspline_creation_panel.png + :align: center + +Click in the view to specify the control polygon of B-spline curve. The curve will be shown after the second point is initialized. To stop adding new poles, click **Esc** button or **Apply** the operation. + + +**TUI Command**: + +.. py:function:: Sketch_1.addSpline(degree, poles, weights, knots, multiplicities, periodic) + + :param integer: degree of B-spline. + :param array: list of poles [(x1, y1), (x2, y2), ...]. + :param array: list of weights for corresponding poles. + :param array: parametric knots of B-spline curve. + :param array: multiplicity of each knot. + :param boolean: True mentions that the B-spline curve is periodic. + :return: Result object. + +Each parameter is optional. + +Result +"""""" + +Created B-spline curve appears in the view. + +.. image:: images/bspline_result.png + :align: center + +.. centered:: + Non-periodic B-spline created + + +.. image:: images/bspline_periodic_result.png + :align: center + +.. centered:: + Periodic B-spline created + +**See Also** a sample TUI Script of :ref:`tui_create_bspline` operation. + + +Modification of B-spline curve +"""""""""""""""""""""""""""""" + +.. image:: images/bspline_modification_panel.png + :align: center + +.. centered:: + Modification panel for B-spline curve + +The following options are provided to modify the already created B-spline curve: + +#. Change weight of each pole. +#. Add new pole. + +The new pole is added after the current by pressing on the corresponding |add_pole.icon| button. The default weight for the new pole is 1. + +**Note:** adding the new pole after the last for non-periodic B-spline will not change the last point of the curve to avoid modification of full sketch. diff --git a/src/SketchPlugin/doc/examples/bspline.py b/src/SketchPlugin/doc/examples/bspline.py new file mode 100644 index 000000000..40f5bb3c2 --- /dev/null +++ b/src/SketchPlugin/doc/examples/bspline.py @@ -0,0 +1,18 @@ +from salome.shaper import model + +model.begin() +partSet = model.moduleDocument() +Sketch_1 = model.addSketch(partSet, model.defaultPlane("XOY")) + +SketchBSpline_1_poles = [(-70, -5), (-50, 30), (-40, 3), (-20, 20), (-10, -5)] +SketchBSpline_1 = Sketch_1.addSpline(poles = SketchBSpline_1_poles, weights = [1, 2, 2, 2, 1]) +[SketchPoint_1, SketchPoint_2, SketchPoint_3, SketchPoint_4, SketchPoint_5] = SketchBSpline_1.controlPoles(auxiliary = [0, 1, 2, 3, 4]) +[SketchLine_1, SketchLine_2, SketchLine_3, SketchLine_4] = SketchBSpline_1.controlPolygon(auxiliary = [0, 1, 2, 3]) + +SketchBSplinePeriodic_1_poles = [(10, -5), (30, 30), (40, 3), (60, 20), (70, -5)] +SketchBSplinePeriodic_1 = Sketch_1.addSpline(poles = SketchBSplinePeriodic_1_poles, weights = [3, 2, 1, 1, 1], periodic = True) +[SketchPoint_6, SketchPoint_7, SketchPoint_8, SketchPoint_9, SketchPoint_10] = SketchBSplinePeriodic_1.controlPoles(auxiliary = [0, 1, 2, 3, 4]) +[SketchLine_5, SketchLine_6, SketchLine_7, SketchLine_8, SketchLine_9] = SketchBSplinePeriodic_1.controlPolygon(auxiliary = [0, 1, 2, 3, 4]) + +model.do() +model.end() diff --git a/src/SketchPlugin/doc/images/bspline.png b/src/SketchPlugin/doc/images/bspline.png new file mode 100644 index 0000000000000000000000000000000000000000..149d19ee05a6a5d827ddbef48d866b17d2c5838e GIT binary patch literal 614 zcmV-s0-61ZP)T6NLPcOS&fSUPXcyEc3$V8**W_^>TUXWxi zd}44-US-5KK+qkHgnceHfZgHjd_KT0r)I+Y=Jm_Bd`5BwuzLp2%-Nn8*amQMYteET z&*o1L1U@u$$v63G-u5NE2b;rKtlzl$NJiQ_b~+uLpS+urQ60*L=Mn)Q1sTIOCEj7& z_MWFrH@J3Cesu^ik_#`^->g(S0C}a&X(ti*m!NUPbZvcY9bh;+e>n*J@~NP)2^>aR zb(Ct$=#-W*2D&5ka6kGC@V&CK+ibdgyjWdd7!(}+0T4_Gy9s>S+gM#Xx&331)sdmv zHz3z`FSz7XIEC@p;0oeHFa2YPi3>myI2$|GVY~p&0N|PH2LO<9)K(mb-0J|}ebKRW z&v51oz!tC- zNkl<)NpByOhTx1b-|OXV%3r3~6l(#D{lXr4gDVou&4{7x>xt^6@5@?NeF$((K4 zz9itj%7DeCWLq(Vq?+nsygrVDpYY)6NbxL}ZRL%(Xm4Uc9Tt(xQ41IJ}Iitu$Xt)kIE|an2N4W2IW_F@@vP&g4B) z`bZ!dAFyI(z{>IHp<-0f^IfFVIVUFAuQXup3DQ=|Uk-ZNN+gtyi@X#1N+8dUpRtd& z7IH7qHV|D5UxjV7x01V?qaRZIo@{@z$0<7+UvW*mOC#A*inj!P@Emee7_cAPY1@f$ ztX_!IoHvr<+&nj3iFmsrHvSsEo9^vZy0r|vA>Oo(bQ5LKFVh|qSU^&s->jf_EvNVe z$9Gd~qvjfX#2r7z%df#_d3GG+{0BHOg1ZmUHG(wd;wrS0RFNG>?p;pJq+=?>`%zvS ziI&Gi7IM`wF1(Z3B^0Zu%#$r48A4|}7Vzc$q}S8`6+T;?VaF$oeU&}UeEk%iDL$a= ze2gc*4nxVk69a9Jfn$XXjP`>8(`y6vybvom7vJ#LHjJg}1=5Y&*g)-~EY^|Er)PdV z@EEGFB{Wg?^Vlx81uQ8KSU%)TEOf>vigTa+E+*KHlw?`tUx6biBdyD$nvTaA+K;_! z`FjOP7lkbtOtu=E$+l2@5gVwPL~%ERZYOhf3|P|m@qz5SOBDae7a}@7kPEW4{mh)ycNfVD8!v*A~k$HyV zN(x7U-}sjQjbXzmoX0~?hc~}-awr+t%EvvJMfES(MfcUHp=5LPSsCZN9kmn&ppIkv za33?i#g6DZmP?)tpUeKj`YaW7Vea?8heM?Ma5x_LjbZPhncV2u17pxZ`3JEF7RMeK z8hEl_1pR_3y?A~ny)Nkc8v^D><8+qV8l0eFYshrV^ng20N8$mYi%a8AD!)FwYk5;l zAeOYSj^sH?<6Y zV&^Ej&&5yJL^2wyLicBO|Ht>A`~#I^N_mE;-xUA=03v!+SaefwW^{L9a%BJjc-kv3 nFW1Y=%Pvk%EJ)SMFG>dhHrNJO5L3!r00000NkvXXu0mjfdW$25 literal 0 HcmV?d00001 diff --git a/src/SketchPlugin/doc/images/bspline_creation_panel.png b/src/SketchPlugin/doc/images/bspline_creation_panel.png new file mode 100644 index 0000000000000000000000000000000000000000..88acb190027930f9d050b6092f6059ce5cdf0372 GIT binary patch literal 8739 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 E4GCWiR{#J2 literal 0 HcmV?d00001 diff --git a/src/SketchPlugin/doc/images/bspline_modification_panel.png b/src/SketchPlugin/doc/images/bspline_modification_panel.png new file mode 100644 index 0000000000000000000000000000000000000000..4bda3457381440dd9ff0d19b35a2d385e5af542e GIT binary patch literal 10280 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 literal 0 HcmV?d00001 diff --git a/src/SketchPlugin/doc/images/bspline_p.png b/src/SketchPlugin/doc/images/bspline_p.png new file mode 100644 index 0000000000000000000000000000000000000000..a23ade191f5b40be9cf79891572453e26823edf6 GIT binary patch literal 765 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 X2fjHKhxN