From 2831dcbfb5d57dbca5d1fb9bfe9b73fa6422777f Mon Sep 17 00:00:00 2001 From: jkriege2 Date: Tue, 6 Sep 2022 11:07:52 +0200 Subject: [PATCH] jkqtcommon/jkqtpdrawingtools.h: added template-function to draw a decorated line JKQTPlotter: add auto-generated line-decorator images --- doc/CMakeLists.txt | 10 ++- doc/images/JKQTPArrow.png | Bin 528 -> 0 bytes doc/images/JKQTPArrowAndBar.png | Bin 547 -> 0 bytes doc/images/JKQTPBarDecorator.png | Bin 426 -> 0 bytes doc/images/JKQTPBracketDecorator.png | Bin 483 -> 0 bytes doc/images/JKQTPCircleDecorator.png | Bin 562 -> 0 bytes doc/images/JKQTPDiamondDecorator.png | Bin 524 -> 0 bytes doc/images/JKQTPDiamondDecoratorAndBar.png | Bin 569 -> 0 bytes doc/images/JKQTPDoubleArrow.png | Bin 645 -> 0 bytes doc/images/JKQTPDoubleArrowAndBar.png | Bin 723 -> 0 bytes doc/images/JKQTPFilledArrow.png | Bin 471 -> 0 bytes doc/images/JKQTPFilledCircleDecorator.png | Bin 501 -> 0 bytes doc/images/JKQTPFilledDiamondDecorator.png | Bin 464 -> 0 bytes .../JKQTPFilledDiamondDecoratorAndBar.png | Bin 515 -> 0 bytes doc/images/JKQTPFilledDoubleArrow.png | Bin 555 -> 0 bytes doc/images/JKQTPFilledRectangleDecorator.png | Bin 498 -> 0 bytes doc/images/JKQTPFilledTriangleDecorator.png | Bin 475 -> 0 bytes .../JKQTPFilledTriangleDecoratorAndBar.png | Bin 555 -> 0 bytes .../JKQTPFilledTriangleDecoratorAndStop.png | Bin 729 -> 0 bytes doc/images/JKQTPHalfBarDecorator.png | Bin 392 -> 0 bytes doc/images/JKQTPHarpoonDecorator.png | Bin 422 -> 0 bytes doc/images/JKQTPHarpoonDecoratorAndBar.png | Bin 512 -> 0 bytes doc/images/JKQTPNoDecorator.png | Bin 345 -> 0 bytes doc/images/JKQTPRectangleDecorator.png | Bin 541 -> 0 bytes doc/images/JKQTPSkewedBarDecorator.png | Bin 452 -> 0 bytes doc/images/JKQTPTriangleDecorator.png | Bin 527 -> 0 bytes doc/images/JKQTPTriangleDecoratorAndBar.png | Bin 601 -> 0 bytes doc/images/linedecorators/arrow.png | Bin 0 -> 1129 bytes doc/images/linedecorators/arrow_bar.png | Bin 0 -> 1300 bytes doc/images/linedecorators/bar.png | Bin 0 -> 938 bytes doc/images/linedecorators/bracket.png | Bin 0 -> 997 bytes doc/images/linedecorators/circle.png | Bin 0 -> 1196 bytes doc/images/linedecorators/diamond.png | Bin 0 -> 1125 bytes doc/images/linedecorators/diamond_bar.png | Bin 0 -> 1233 bytes doc/images/linedecorators/double_arrow.png | Bin 0 -> 1339 bytes .../linedecorators/double_arrow_bar.png | Bin 0 -> 1553 bytes doc/images/linedecorators/filled_arrow.png | Bin 0 -> 1066 bytes doc/images/linedecorators/filled_circle.png | Bin 0 -> 1071 bytes doc/images/linedecorators/filled_diamond.png | Bin 0 -> 1018 bytes .../linedecorators/filled_diamond_bar.png | Bin 0 -> 1136 bytes .../linedecorators/filled_double_arrow.png | Bin 0 -> 1290 bytes .../linedecorators/filled_rectangle.png | Bin 0 -> 1191 bytes doc/images/linedecorators/filled_triangle.png | Bin 0 -> 1038 bytes .../linedecorators/filled_triangle_bar.png | Bin 0 -> 1188 bytes doc/images/linedecorators/half_bar.png | Bin 0 -> 842 bytes doc/images/linedecorators/harpoon.png | Bin 0 -> 906 bytes doc/images/linedecorators/harpoon_bar.png | Bin 0 -> 1095 bytes doc/images/linedecorators/none.png | Bin 0 -> 736 bytes doc/images/linedecorators/rectangle.png | Bin 0 -> 1253 bytes doc/images/linedecorators/skewed_bar.png | Bin 0 -> 917 bytes doc/images/linedecorators/triangle.png | Bin 0 -> 1081 bytes doc/images/linedecorators/triangle_bar.png | Bin 0 -> 1210 bytes lib/jkqtcommon/jkqtpdrawingtools.h | 77 ++++++++++++------ .../jkqtplotter_doc_imagegenerator.cpp | 65 +++++++++++---- 54 files changed, 108 insertions(+), 44 deletions(-) delete mode 100644 doc/images/JKQTPArrow.png delete mode 100644 doc/images/JKQTPArrowAndBar.png delete mode 100644 doc/images/JKQTPBarDecorator.png delete mode 100644 doc/images/JKQTPBracketDecorator.png delete mode 100644 doc/images/JKQTPCircleDecorator.png delete mode 100644 doc/images/JKQTPDiamondDecorator.png delete mode 100644 doc/images/JKQTPDiamondDecoratorAndBar.png delete mode 100644 doc/images/JKQTPDoubleArrow.png delete mode 100644 doc/images/JKQTPDoubleArrowAndBar.png delete mode 100644 doc/images/JKQTPFilledArrow.png delete mode 100644 doc/images/JKQTPFilledCircleDecorator.png delete mode 100644 doc/images/JKQTPFilledDiamondDecorator.png delete mode 100644 doc/images/JKQTPFilledDiamondDecoratorAndBar.png delete mode 100644 doc/images/JKQTPFilledDoubleArrow.png delete mode 100644 doc/images/JKQTPFilledRectangleDecorator.png delete mode 100644 doc/images/JKQTPFilledTriangleDecorator.png delete mode 100644 doc/images/JKQTPFilledTriangleDecoratorAndBar.png delete mode 100644 doc/images/JKQTPFilledTriangleDecoratorAndStop.png delete mode 100644 doc/images/JKQTPHalfBarDecorator.png delete mode 100644 doc/images/JKQTPHarpoonDecorator.png delete mode 100644 doc/images/JKQTPHarpoonDecoratorAndBar.png delete mode 100644 doc/images/JKQTPNoDecorator.png delete mode 100644 doc/images/JKQTPRectangleDecorator.png delete mode 100644 doc/images/JKQTPSkewedBarDecorator.png delete mode 100644 doc/images/JKQTPTriangleDecorator.png delete mode 100644 doc/images/JKQTPTriangleDecoratorAndBar.png create mode 100644 doc/images/linedecorators/arrow.png create mode 100644 doc/images/linedecorators/arrow_bar.png create mode 100644 doc/images/linedecorators/bar.png create mode 100644 doc/images/linedecorators/bracket.png create mode 100644 doc/images/linedecorators/circle.png create mode 100644 doc/images/linedecorators/diamond.png create mode 100644 doc/images/linedecorators/diamond_bar.png create mode 100644 doc/images/linedecorators/double_arrow.png create mode 100644 doc/images/linedecorators/double_arrow_bar.png create mode 100644 doc/images/linedecorators/filled_arrow.png create mode 100644 doc/images/linedecorators/filled_circle.png create mode 100644 doc/images/linedecorators/filled_diamond.png create mode 100644 doc/images/linedecorators/filled_diamond_bar.png create mode 100644 doc/images/linedecorators/filled_double_arrow.png create mode 100644 doc/images/linedecorators/filled_rectangle.png create mode 100644 doc/images/linedecorators/filled_triangle.png create mode 100644 doc/images/linedecorators/filled_triangle_bar.png create mode 100644 doc/images/linedecorators/half_bar.png create mode 100644 doc/images/linedecorators/harpoon.png create mode 100644 doc/images/linedecorators/harpoon_bar.png create mode 100644 doc/images/linedecorators/none.png create mode 100644 doc/images/linedecorators/rectangle.png create mode 100644 doc/images/linedecorators/skewed_bar.png create mode 100644 doc/images/linedecorators/triangle.png create mode 100644 doc/images/linedecorators/triangle_bar.png diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index d3e0b9b768..0931fd40ea 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -96,8 +96,16 @@ if(JKQtPlotter_BUILD_TOOLS) WORKING_DIRECTORY ${JKQtPlotter_QT_BINDIR} DEPENDS jkqtplotter_doc_imagegenerator ) - add_dependencies(JKQTPlotter_GenerateDocImages JKQTPlotter_GenerateDocImages_listplotsymbols) + + add_custom_target(JKQTPlotter_GenerateDocImages_listlinedecorators + COMMENT "Building JKQTPlotter Documentation Images: LISTLINEDECORATORS" + COMMAND ${JKQTPlotter_GenerateDocImages_COMMAND} --listlinedecorators --iconsize=32 --outputdir="${JKQTPlotter_GenerateDocImages_OutputDir}/linedecorators/" + WORKING_DIRECTORY ${JKQtPlotter_QT_BINDIR} + DEPENDS jkqtplotter_doc_imagegenerator + ) + add_dependencies(JKQTPlotter_GenerateDocImages JKQTPlotter_GenerateDocImages_listlinedecorators) + endif(JKQtPlotter_BUILD_TOOLS) diff --git a/doc/images/JKQTPArrow.png b/doc/images/JKQTPArrow.png deleted file mode 100644 index 2677afc59d19ed9aac26d170c1d07a33d01c58ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmV+r0`L8aP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004pNklqVh}!2qWdAH4^qy|mk*)j~1}heMFD zS`m+qw>GbaDaKn34=+94>PI{J`%= zHY=PHqY>>kpLUCXb-0;3pGUWg?H0!)VlkLZ==Jz~89wfyoLl5@Kr{-o8T~%5$nz10 z#R826(rLI{O1VY$dqg6zSTG#&iXv}wxX7*7-^ne)ZrET@xL8LcUb)9h9Ujgtve_UI zfX#;Sm{(Nrw8M37pAWelIvusSr4);>+cBN;t~wraU=L@riA)A=_X~1MVgDDi8UI#| zYKQmbei}sw!nvi$IIP$3cqr$VBICf`$Wlqj%`OV^Jandsp*he%bD+WZI{?2l41_!A Sg&O$)0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004+Nklxg3T=9FH`_ zh{xe{QY@lSFK08<>j(s3GC`w(*^F=)?KW?4x69vQKBr0nrT69GfWZK%6g(cT%Np$U za?4_o3Ix<~dUiYX`+TkKcJ9g^n~jD9l(RgUu`c?2FdDg;)yj7&JL3+=+17lo<*#O; z5Nb6{CVZ!|wT?v4>F{8&pjq#*yly5@sX(hmBEir5YQ;O+YSGZEEN?WED3y2(tCy}M zmkY5N#m}_7*GwXx=f&A9r6-a}em9By&GKP0iA;viDikQa!2Om#%`6rKgQ!+99#hSY zuuG9mFPAC3%x#uWG?O!(qS2uEDwi!^WcCo>E!AWuN3h)Qkxr}4Opaj5ex=yQUS(!- lZaY0n^Rav$AIoO}d;tPK-geRaQ)~bL002ovPDHLkV1iBu?Ro$J diff --git a/doc/images/JKQTPBarDecorator.png b/doc/images/JKQTPBarDecorator.png deleted file mode 100644 index 5072802fba2a3e22e4aea591b60ea891789be6c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmV;b0agBqP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0003YNkljCLE9 z3Je35MUS*(=ykDaqT9uEie4|_^z+jvh&LPDZuDB>>Hk)Ly`~cL4u|mc=W|-4Wv^G_ zAARCC9&hc^RQlLB<8)Y zSK`$Qu8U457cnoLUXqyiTrXA3)AS0he1gS1O~2oxUY9K9z5drqs?g_Gq0cMe4xXQX UUEwIqApigX07*qoM6N<$f^ki~c>n+a diff --git a/doc/images/JKQTPBracketDecorator.png b/doc/images/JKQTPBracketDecorator.png deleted file mode 100644 index 522ab774653b42a25f6ad27f5e58cd3e6d4b4c06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmV<90UZ8`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM00046Nkl6vy#tG(v=+@FY5gif9C_j@M8V z5`xwXcncjNA?SDlHH|;Nymd+8y-q`G0>q!nejlY0;&JoohQmlEk;%{n*4`v`ROa(& zwJ@9Ed`72(Xw-2l|DpI>C2z4XFIX;V$Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM00050Nkl9l2kiAJg63Iz!YjY3D^4-i^Hrx!Ikp;92ZbAGq8=8`!}?pCbbOFY@)eP^e5GV{() zh5y6DRT>_y(x4dE!vU)mmP=AxKmo4r@2FH@u|TCFpTmJd0h-0L3EAX1u01TMMk zb`l5-_i~-hsGrqJ{B$~ay~t$94CM2456f@}wHos|ZF!`0J?r=OhJGL0E#1Qjy##9?Kih}{fi$9ch{v7v|9N6s8&%fBNT#0gFpZuA9T+*w{R8fCxlC=L;@xg zi7>Yt_4-M&9=X<)o1|tFu^4Q&EB(YH##QL&@gSE&uXiycZ_013Cw@;)clKjB=c*(> z7RHsEvv^!-ek_dZdW~REX?`qX-j>`vT%`c`0;zwNckvKV3IG5A07*qoM6N<$g7ez! Ap#T5? diff --git a/doc/images/JKQTPDiamondDecorator.png b/doc/images/JKQTPDiamondDecorator.png deleted file mode 100644 index b4916e243a58baf2f9050d1680237735b223d38a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 zcmV+n0`vWeP)X0ssI203*TK00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004lNklMMh-fpW! zt2`UvN60lm8Ti(ts#jG6D!UD O0000=G`P)bpf00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM00057Nklg&{ZokjLCFk|ta5Wkc2q2wCqk&dS%qd7+@8v}#Q$(*vv52oPn9X>4THb;= zz4zB1R4VXzU@+kJ7FSoId9NxbmqWL^Okz&seYop3^EnSE@y7uJ`w-*YWwuIj83^Z~9MAz*T0y zw|cHJySyh8xZMi6%Ixx{PL$0m=qjWAyHtaV_j$Q^pA+C4HUq(48eP+-00000NkvXX Hu0mjf!X^2@ diff --git a/doc/images/JKQTPDoubleArrow.png b/doc/images/JKQTPDoubleArrow.png deleted file mode 100644 index 598fabc033daa8317c58c00b3735bb75d56adc7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0005}NklGF>LAmeOzDT`I!&I!U9|_93Rt*u`@0f zp;puU=_y|?V%Uu+ln1L8gMk#;!%BrsZf{e(x5t-tG7M?vR4(K25LPQR8j_otfzgPu zF|4kl-GQrgU#ncA^3Y z2bA*rX~yZKZ%8V|Q(YLebf2Q{?C#Qva?gJnn<9qz5P}CYwb%&130&CjCpIgQHXW@ewu~{pT7zQ8As;jRrP0MpIObltvsG f{-x#O4@v{Cm%r$&BRs3S00000NkvXXu0mjf#s3_h diff --git a/doc/images/JKQTPDoubleArrowAndBar.png b/doc/images/JKQTPDoubleArrowAndBar.png deleted file mode 100644 index cb91566df2e183ad3a9e22bfda6e5f59575297ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmV;^0xbQBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0006?Nklzg*UwNzK@v4J0TudWyzWM@Z$r?|MFy`A)QTrQH5Xl`bFoU=1)D+~`4AOHR_{HVLQ zNL-xAWoFXR!Q>>jx1zqjPJche#e|0w7DizqJw2kXcCM`Gv#*ou#Xbygadq zjHI%Xp&@p6#aqRDVuH3d($ZvAU9GM9;46X4-J>H$N2#yZAx}+}XV}`3B^C9Q6uDVa zVr_jRaJml<%+1l;OKGWu*&WWYF|M!0Qgw#TP7)ISNnii!+KOdmL`CVKHa1dFKtu#n zQ<4uwMIU^KRa8iwsRnm^Oiqq8 zxcz;->SkeqnHfE{@J&}K&d<}=C*LRaLOm+l*!8r$%)tR!S!8E(c&JxD=IgrOR^w<+0>%Lc1t^3=GChF~*_4F0~)^$$t zhcI+iD~XK_LPZlpSAFi(A4c#gns`@gK|@H_Nq&_s`~kThpog>Y{+j>*002ovPDHLk FV1nsvMalpG diff --git a/doc/images/JKQTPFilledArrow.png b/doc/images/JKQTPFilledArrow.png deleted file mode 100644 index 5c42fd9f2c22c996ddb08564c9dec06f616f8117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471 zcmV;|0Vw{7P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0003_Nkl1XI5PzkLPK%4t3K2CfL#vV~ zRVqZ`22@H{K&L<}5#IAn&R2YA*D^R~c22TSrkI(1i)SbAjDvqjC~b;R+7zL*DT0>X z?NBJ7R6@Ou;SlRJu2=r#j|C?^9wVKG;~<$tHj79E#Ug4o3D)okj+w=wBfDxANE5otfs`5dPcXC@QXU^1q=*lO{n4}T_oJU$ndG@B|z&&X)R zJO2Et^sAzhd|vfPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004ONklX1BpT<=(vFAomsP+*_pg=cJrEd=S}vTU$bk-Clfns;Qtg@)ufH} ze8zH#`5eb1yCbECwcAB5hin#^4AN;do9wPLiIS@`K_C+)GR@v8RU^K#djpq~NG2(Ft@jYZ&tHpl7N{#hr zpHQbmw~&X1La0>Or(B=2dh!Vk28c#cDA3nIv50nCK3qw^vkE?P0J-%`S$>4{400000NkvXXu0mjfcn{r= diff --git a/doc/images/JKQTPFilledDiamondDecorator.png b/doc/images/JKQTPFilledDiamondDecorator.png deleted file mode 100644 index a7ea0a7f5e65245db2695823377f497024751b52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 464 zcmV;>0WbcEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0003;Nkls^yx&4%|2_jefhl9L?WnEP_N4^biD(~ zB>H{&)~(>JcYVDcW-}a*v__n)&8GATv}G+8>6TJ3Rxdui^%}LBJOL63Y&JBh^ggRU zpPpF1SkSez*Q~o8MkBP_C={eG9QNt+*7MfS`qaExbzixRZWq&O&_1=tRvtbzr}c7? z{~)Zw;p3u>x0Mcpp;Vz<|*J0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004cNklklpJ$FIy)*A|I&y~h)O>pv&&<5^@o(7hZ?ov1$fBFn zbc*?$XDP+#n+=*xo~cX*+lZ#+ z^C6c*B*HuOeTYun@fh_wl1bR@+FN`7mWzw7(#?^E^_m|j^hUaYOQ1vowHihv>~^SB z;PLSJ+oD6dS6(jKJ*VI2ClNB4{xjDQL9X0ssI203*TK00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004^Nkl-%yNS zk7E3K6ypb&%@7PC9!I^7UJsiM-Tx~~qY-vHyIQRX1mN*NuZK!?3Z0I<0Bt&*yh=d6smSGEv7G!g8rI$8 z?J-EYP~as3vd(cT1(WGqQ5-ZU?KV&TL=NNq9+L^0O(c_SD$XnqK`o~*aG3J1{FSlT zlID_}$Tb{>%XP9eoB1eH<9$9}_>ET@OIcPb7!0u6u^j5ay&+(fkc8GrPnRR6pL&Oyk54ZG`}CCk?`Oe zj~ZXM+-`Z=b<%0XVtjow_ZVNa424iGqu;;PQp{q(7x(a!@zX7TjfC-Z`c{@=E*aCg t{brV8Bzim?zLlkzd;YxlKrwzbzy}(FEN({Yt4aU>002ovPDHLkV1ltv=T-m! diff --git a/doc/images/JKQTPFilledRectangleDecorator.png b/doc/images/JKQTPFilledRectangleDecorator.png deleted file mode 100644 index bd599519094640ea47861e67b839725af0e7e72d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004LNklpwXy^NIZasQl}v*g;L^oXOokgGqZO#b91kqk@)6Bh$%kV9J@TcVIOoV11|1INbvoLM zEjA~Y!(u@vS^tMNhw|og6bcele9UCfYGFLaeox2b{)XmI@eDJB^2FU*JPQq=yx*e* zbhW~8h-QZUKra_M6JdI^V^E%qb{NWI=Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0003}NklAS-T1f$5-Lg^m!Q;XX!I%) zF2OyZ64yYX(Mwb+O09%M!Q-9dP0p-c%UQ?lNcNwJtjTQh+szCHzAzuHDj%&XuhH8r zayb->XtgjNW4-2i$Gk?L&jm=UNqLGs959`tRufy|j!U~G7{qGDE6piK-=N(tN+m=h!k5XI zxHMuhWV5{9E+uGNXrqDANc?(G`TVb#j$^g@bKAo{hJFf_Yqxn@)5+`idGc}pivAN+ zj_x9ED1^m=XB>MQ?HVd~xu8

BL{3Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004^NklCo(Ev!})KT)s4V8CWWLkY5~?{?5? zp;AGogVhS75jGoqK4i0KG|=k_m)dPgmLPY*xZQ%^S!3^GvA|@4MuS|AG9}2Zo=(%k zOB?$FUM~Ux%9J3V`hJgoAIT)%-p-|2VqE-{CXuG8;VxFsh(k+z`4htp06zz7X z)go!V9!@9LYaxF!5h9(=$K-P!uP)VfI1r1WTE%#b!$DN;W;238ns~zHLZLu?F^^II zQI{u`qH<@&oykz}lldISBlX4HPo39gC*AkDJnTe2os7*UMXuv->c7_IVK-ra&E=AY zS97~Md(vQlav6~b>9VbMtL{CxPW_^8G>S?EqtP>UdA?Rxq%My{eK=IIE{|A!u~4`! tk7U(nGbQWtT(?aX$xB@hUh2;Wcn8l(m-S^+GN1qe002ovPDHLkV1j=J@G<}Z diff --git a/doc/images/JKQTPFilledTriangleDecoratorAndStop.png b/doc/images/JKQTPFilledTriangleDecoratorAndStop.png deleted file mode 100644 index 07091a1598ca47c90050e09063771d285ba240f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmV;~0w(>5P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0006|NklcI(DEJ%vd+4#mBbmg|5N>WH&4wi&x3{RN!SuAG*|6%pjEtb60r&Tk zW?+@a-KIRqi zp^`PKs<67s2hph9rNO-ZaJh7|rbTTnc6Yfss6~2v!KsX$tc^uCGy9nQlNqozc@H*ATRY)YoHpSke?`c$}SKV1VbNmZZ>1(4)7u%4Huc zEoHu%pLrY|p{ol81!!!=Qak8X@_c|1R3XGhj*OAEHQ@$@98sNl3#RSEJl z%ojZp39hQc!PB_iynUtZkMvPhJ*ZdC&t=d6hCO02jE?g1qYm(Tae6A_nRIvamK6+2 zY77G&CnxCd=gqOM4&&pvx{~o+P#HoYIW|mg4=VWnJ~}(O$WAAJBku0xR36CY@%V_X zEi^Z?L3=v_0ld7(sl1{0pe~!8h272{B##H-u#D%Qln1@k!9i|v3Oe{otDAy?NQ57q z3P5F`Vto2Hn?K$+9BPHlO*}lv*l(cV;2_t(nw1#XKP=(jLksW*Ll3gYQ^>Vh00000 LNkvXXu0mjfr_e)P diff --git a/doc/images/JKQTPHalfBarDecorator.png b/doc/images/JKQTPHalfBarDecorator.png deleted file mode 100644 index d00f93e102547e1e18704086eb11b9b624b0e8b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^)<7)D!2~23ln>qnl8nVc?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKtZ7r*NBqf{Irtt#G+IN_oCF)yyA@flDJR~ zke2_RE{-7)?r*O-ay2=K94quaC|%OLr)k#*i*4nhjn^+~uV~q>nIXyg?p1cn_6ldU zHs8Gm{%5(x{*iD?)AtrGySt|j9huI3N@zB3(*oh;nzrej0>w)oAK3KZcf|TYk-Mvx z*Qv+_tomzkL;R@l6r013UWiXOLsA>5Dt|MY-g@b-XWO8=yi{Kqk(FF=T+5RnJHS8J~dW}8z-!M@^bg0_hss9 i1?%T+NZa_bft~-x(ie=P$^yWkVDNPHb6Mw<&;$T$JDidL diff --git a/doc/images/JKQTPHarpoonDecorator.png b/doc/images/JKQTPHarpoonDecorator.png deleted file mode 100644 index 6090e6c1e66813ce1fbd5c65115b5b9324e1b171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmV;X0a^ZuP)X0ssI21lAGc00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0003UNkl_=toXpcLT@D0CVp;0hvI zABWIrID?MDNACPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004ZNkliYG_nMqELts!tZuAvv=e6T=v46xn#f9?CvD{+0D#I_*a=+ zBQv=#X}3ctgu#Gbs`2KYPIRD6=2j|ntj3jlIKb^jB7s&5vl+elS+R(CoQ~DFa*s#! zddTPD@j#Lg2%uC#zmNT%JneR2x05+cVyxZk72`3gRYaq(SYWdunMAovzTtlPinrBP zE8-4^VYL!&I!*5@iNQUeF&d#>M=Aw}gDCxeWV47w5R1_{O8mG#5_36pI#?`lyOBAX z<@;W)9wOUvN#+cP^zt2CnJ90gMuV(Er<1(i=lhNLtzZzf8XX(OeUivlD3F6$?RDJC zoopu}Zxe-J*eO#_Yw#Qsyh-@0}bV`XX z7a@AR+=*=W+|5QnBAe##ZnvTl+4OBSVKTYK1$+SQbmF~*AIFOT0000Y!!2~3`R~|M1QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKtZ7r*NBqf{Irtt#G+IN_oCF)yyA@flDJR~ zkd_OcE{-7)?r*Pdeyzt5dL>}6g4dGn=|?}ZCq--ycGR2})?cMed) m|4HuGa?M_w-L}1ZfI0Zme~T-BO-q4(WAJqKb6Mw<&;$V4>5&uw diff --git a/doc/images/JKQTPRectangleDecorator.png b/doc/images/JKQTPRectangleDecorator.png deleted file mode 100644 index 6e41cfe8e489d07032f88766a87d93a688d2157c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 541 zcmV+&0^Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004$NklvqZMd`>SVF{O{k1UDSgOHtb`zP?ba(Mw6JXWe2!p+MKt zJf17#&YB(y!SAPQX;;Uc5q-5ntA%6|W;3)}?DuqE)YWnSNBS?<IZqEWgd>;?4o`Zkvzf84pr;kfxcd_L&)HbC|@~p{32BTWVY)1EQ zrI7wCuBgL-E|hc!UCMPh5RaqLc!>LO7wBr`@)OdJM`SW;=JFHLHyZ>3YUc7&_?oJz f51mDCO9#FI*!}@yx@|LZ00000NkvXXu0mjfm*nom diff --git a/doc/images/JKQTPSkewedBarDecorator.png b/doc/images/JKQTPSkewedBarDecorator.png deleted file mode 100644 index a5cd7c6df395720a666d6af63e138eb0ece0ef3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmV;#0XzPQP)bpf00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0003yNkl8*mwXThwy=z-qHgI z-a;+36(olcJb@ypMeIZnJb{IFK0Xtiz{sk^SDb+VYBsyYugI>3aQ1fxTNvEwG%Sl| zFY)fp29XE`16q2CcMpfqG_2RO^b+sxb`g)`bfTq~cz3M^!=RZZ*uCFlGC?MTQi;B> zgt;%)Mg#dgblv^4qft~Uw969UR;{TNOcR|BMkDtz>G$a*>qqVf*7+RABOM!$-L2J% zmaG8Xhl4LGuh&B?ramT4Uv@jz=@iW-3I)GbUcHWNmgeie;C|D}%jIrfN~aIGRckW& zqLsH?VzHq4x;Nb1nn;kfTt>SM+kV~ZuP5D(bv8q*g<>&yE6;~pjForCEz-(U+}o|| u6KUls?%fX6s!S{I$$KfLzdP8%=?2cRp5bz(BmBt#0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0004oNkl5!_@_AZ~ zL~uC#YcRuGezeprtGQsPG(MZ># zY+j+RKvznsL|be&jK@4952fmx4P9HA4E%m2x>9yK8u9mjO|Ny?6&8!3T76pg75t^H zGF>UR)K#o27FHk4O3kV!G@vLiIdzOjU-aE&@$m1Rtvod;_)s83)lo R5(oeQ002ovPDHLkV1lJm++zR$ diff --git a/doc/images/JKQTPTriangleDecoratorAndBar.png b/doc/images/JKQTPTriangleDecoratorAndBar.png deleted file mode 100644 index 72ab8a77a08f195c07ff8d24deaf1d5535259edc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)X0ssI2;Yieo00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D01|XXSaefwW^{L9 za%BKVa%E+1b7*gLUR4MM0005dNklA&3*HOfQagbUclgeCzTtiD zz2~U#|JgXKfqEUC4%ISn@8Izu7^GST4jk_9ae9hk5#25(6Kc-5xWN8C)iQA4P%1&C zqDQC0!2v=cWV2|u@%DyVjrIF|8kT|shv#RO^5zD2ceuVrGzzyHMk8yg)o?hlwS`22 zhNa-+JP1K!F{;0rPVw-7t1J3GhlkXcf)9t26F8kz&v<%*%Z1%tcBXAMYD)2U4j&(A zHjzr<=m=UZd)cEAZ3#3QFqvStjifK`ul($c4GaI3Fmry+j>L>)64ffzbF9W; zKDXH{ky}hS46BvhNIN_1wpGIN9Da~nOeRC0==PR63-db%A$O~V%S#*|!(dRHTg-Tj zcpSqaEtR0$K{B`Bk9;1zp0eCaVlfB)a*L67;5)Y%DF@+J_IfGz-X5R1#Yj24z9JIg nJhvF-XPQ4Y4t%h2-~r$Zinc4f&6DkB00000NkvXXu0mjfL$?Is diff --git a/doc/images/linedecorators/arrow.png b/doc/images/linedecorators/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..61e74cb6783f1bce659855764a3b74fddb8add96 GIT binary patch literal 1129 zcmV-v1eW`WP)*-`@0@op+DH00Q&oZFJEMMJj&;9-$aPbn}NAG;LI7|+O?RwU>L@mCr`+uN6FMw z(%~S7hT`sm8f!{mDKj%bON)%%yMfwTpsfukF9&w*ii-=&VQmxa>H;b%fb4AG`*+~^ zbKvPy;Okc@fwN~V-QEx}f2RC?^6p*ID56_ix{l#l@zU?&u)jzb6BM82I^@ z*a^_nLsnIhb~{;DM-B{xwzJtxEx)ipu3t|AWNt3m&_H@TQTY3p=mltPC5wt=w6=z~ zJ#>hC^TyORUN2c&OJ-z<2*GjiAbIBwIWb{sS(5?`43PEplI^N0$^J@Qy-GGUnc7Z` z&nGXEix!j03UbsNMdKHioB!B#{(EZrr@sO7gT)6_2lqBHgY#gr_=q$x z`21NP?AVyNtR^`b$jbvZYyjT91AhMo4j%?OJAu?xt*teep(vT1mAjNW*pDB9pFj1s zPA9N$A8_CRuz$adJ$r!WX5i*cv8k>G?%e~{tkKVp&s`u4qoYbTgTW3DOUBjMY{1s7 z5}-QR?c3$MAU+>ZQv=+;FMn@rl*^{tMoruV`1K3;^hq0RUmq|vrMGoB0GCS}Y(asx zc0(~W1)M%DZ7d}PaJzxBvhZ^(5nyss2{ah&;2_}l>uon~RI(WiHZKpbN9dWy1DrS^ zeIhec>bixnuzUB)V;O7QZlJPKYXA6gprZp=x6b(dkOGX1Xafz` zn6_y``vsH>CCA8F}mPJ)w@WLlc`^b{Np2U%E1R#uX?Z<8-x zkkixgIM?Y}TqG+h#IK|zxt5qk*8|ei<$bBns@cY572Vx(uyHtm_IBXpN%L#z1Xy}h v{8wpj2lDeJInnS>o&@8`s{hZ>su$o7nFVcA6y$Wu00000NkvXXu0mjfG1U{R literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/arrow_bar.png b/doc/images/linedecorators/arrow_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c858658bd5718d505c0670a954d361a7d4e33a GIT binary patch literal 1300 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 r?>Mc_6>{@k;4j9%Ph`~8bUm?RU^ zM>5F|`oS=B?>+aP^PM?!=FA-(N#ZYtzSIVk8vh(nGR+MQKrB`=^+^=R0mH*Udpq#t ziPE=b4RHE&QPk&xt|&>ctxe8;KM;)q&CS5dm4Mp~1cREZ&k1UcA3sQoMQOi!MRs(M zRx3GkCVBIw<|gEV_7QOKAYd{92M(ym>~_Fr10Frn)P!6xYOcZSm9Wo*-w#w&0HF}@ z@gq=GrMW5Dplt-Swn_r*>Qaww*#dYxz`y`7Gz1(zteF`(QSgT<9w(0-BOMO1x|&?L zko5VaKZ#(FtgV&n!9kJ9Q)N#N`R$u}EF2~`Z6ZCM>~jm}fTvH%ojb|0GIHNONp{Kp z-MdM%ncTjeymLp|K3~C9x3-c1X|s`6u8^an%2+H$>h=<1R?xOg$y z-JM(Z(k0U6BHix1)h5x?Bji($)vL)+NRgR6Tl)L^)$=FkfIxt3Ya=2+Uq61e=nT%dE&+mA!Ia?k01Y8Zg7xn zX;GrVWKzqh9dPfSq|Mn=f9XUXZ)MRwXW^5jYN8+p$j8MoWXXq5E(rR{K}%W2|(FJH*MKJw^M za>ov`p+PcmHnKLGylgr;zkHeO?3Bb*RVCq?Nz`a0=gyUIJaUA*b&LG;DIe{E)c3u~Bn~&5mFh4R z9*=yEq~`c>e-5W6ret!;OiW3XmjmOJ(KQbJ85} z^(!!E4iJf`1 vl>;IX*{b_nP@Mk)|6~07H&|)|N{#;j60b&VZ}7b400000NkvXXu0mjf$_-Pt literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/double_arrow.png b/doc/images/linedecorators/double_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..fc534ad439a9d649481174d0e9b8e15b9dc59dbe GIT binary patch literal 1339 zcmV-B1;qM^P)B(P3voq@WC>!cal&UPv#3R%!;OP=Xgqs3^5a#3s}E{T~)`JkE?d<4gwq zKiIHmpLNz*>)Y$B{hjdwkbfB7V;#U)<9`CiI)JgpKTm+KN4%Dnikv(t5+1H2BEp!5 zg?Z$WuENW0r$Bzbk?7Q^BK7qm&CNQRnvD6!k7i=BvfT1`SK&SaQd5mYdwUHs2JU`D zgh)$^NKla4rKBiPAt7!F!4e__%SCExM0V^DNlq3? zN^<+-oq=bXU|^s~RFuf9St7NyB99-7?Aj#)ntWE4NNDJoCodu*xEmG=WM#p^g%B49 zg@wAlW(~Y}0hN`odbLZg3k#v92CP>1h3h^7s;Xe`UYIZejvj@E2IJcC<8a}E&b_=G zy0BOryZ`wUrc415<@W4ZXlfdL*rO*PCkLXUASMQKb8W8|7ei8#&SPWY9D-;z$a`Le5ySw#0-?|mXjWd$-^V8e!-7~)?U0sl$4_mf? zudiW0aU$&82@fACVMAef0$N%iJsl=bhLjX2FCX?6KqDwDgx|lRu5M)a3_wQ*T)z(M z*PBaz+B7Y?vNALO?d@>w8mwDqwx2Nr4jt04?d_Li0`A_0_;{EQqK!NIV7JCv5XEeUs_t`1I| zfUq!ga{m6BU~jM4J}1YpS+T;_pY6vGh`f0t5*$1Rs>Ct+`a~KVRaA+6%}yxDjYnhJL~Un-tqo1 zuvsQ0X)mx^;oLc6egA&P&2Y>Kc>f;m-&bLimfDIcAQc6mOkIN$jeEkZ~p27L^Dp(>T&80eU1O=(!Nl#aqQD3ho zrz2EU7-}#wQae6CV1y@a`QH6liBoNPszWwDbli>gx-O7ppwT z$bhF$RVX@xJ9l9Gc=eZ%V4Te5<$B(W=+W2OI&z;QCcv4-6d0(2F)dByKy|gMJXc}0 z!kIIM|HFrkD#^>UPs&JPmjGuP)4X{`V=5`p_tTx9s}_sCM*ZIh+1a{owZiGs_DOLD zCIZ^phHgyJ(T*FFC(zcWl_Ua_Cc&dex^A(kDj!UWE3m16>C;sR#>bDmF?j+F4O)5q zlDD?jxK>%IJ!K#%uEK_ZZ{J4e&>d)LF)A@S+J3Xl&o`6eDm?S2=qLdqyLXFpb&2HV xi39|A?pc2&0U{zjJt96nIy{NLmViHn{{Uueems4=nGpa0002ovPDHLkV1k*$bGrZl literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/double_arrow_bar.png b/doc/images/linedecorators/double_arrow_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..36ce05feacc8f4150a0a1da3b7d4de09d18a97a9 GIT binary patch literal 1553 zcmV+s2JZQZP)R1j8FCP``_Wrhl6@4|!-)O=**14{5wN*1OjnVFf+`hIMN>vhK0G}8p% zf(vKP+2@?S*V$*^br}ni#QzwU=61l`Fb@I6#lZ37X4!fyEX;NVoSlJ|7QoTbEZb{g zzALbQKai1Ow(YerO$HPdNs4=W%j4stv^_n==Ho{oG!$rSGy3+^f$<2)%Toe%bOah2 zB*j}=faYeU-O-_t@%Al{o(@Dr7{vucU_1ii;*>y#hZQnLpT3U|(Ao;PxQJa$3=k3m zJb!K!7Yu=Eu0UU(LPm45oOF3P(B2NLTnW_F06TUF0Y{DiRaJnyyV2bMfX+^!vJ!A} z1A>Ef$4yfN9UOqbKw!ZFptcrx@&wqm3m_%<)KtL31Bi|W4jcfkT{DRr08m&6L`DLc znd2DH*cconQ&UM_UotF=EGUrv&`|Q_OR}<(T(d^8@981u&!5uL1qEbH4XM#g-JSAs z5+DNu^^Y5mfT}7oA%UDVi#&XoY;07YC5MJc7Z)WkOG|RoCi2D&^4mAH-P5OJTpVd{uh?5zk()P@ zIXPrspL*@+XtB9b7PI)IMNxG5}HUHh+WJU(LZk^iR*_n)p zkoLxny8Dbzz`c89csRLuF?s&HZeC4geku%gV^~baLN5Iaxb9^+{@<(Zw=4T55qtqZB@X+_Oid2|%7btKLgD z1O77F+T>KUPi-ym{ym`4sO>B)05323ln4lrZ>x+9prQh>wFPo>f$iIYp&=k40l0Zn z=A1hRBqaekIkHY&-53Y{)~OB-id@LfmeU9elZvkIRBdcTTkYOWUb!M=skc{ItEGkX z^AlS)H?q1~`g?lF4I7kKVPT;%=gk}G_w!TxWfB6ud?AaA$qN@mu=x9{Q+4#?;v#}4 zIay>zLxXu7)g{Fc=w!gWc_IYE z!>3-DOo7Hm$vmy(t*uqYDl4U?j3&iU=n(Mr>z^%X479c?nHUtLzgXtwsYx*u=KE)8 z0+2v_JkZ}S0>|FobbI}i1OTGwtgPfQCH`3g{ucfNoU^PsI!OJN00000NkvXXu0mjf D)Q{ha literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/filled_arrow.png b/doc/images/linedecorators/filled_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..7b2f2b927f512927fd5c58676c820196a6bba182 GIT binary patch literal 1066 zcmV+_1l9YAP)^5Oo4kGbFUg!-m1op)g_u zl$Kg0kcTRVCz;DnMhdYjvWKTfC&>qYrYV|odZl0)~~OxLD-iL6NE| zk^1_;nhXN}2An!2l1hmzSRhhY=R9wkB8h}Zb+yRxNpj;su;M zslr#UR?#&zK4p04!v~l#19tDWe*5u5J#KH;^63*SUThgMZCd_#`3<;oMTNJuS-o9a z8n7I1T)z(c_URMWjc?!7kd6*`^$N0Cm_Hw`UUk-W8gTnIY}f$R)hc|&ir^IlKy58F zH$zob{|m{xccG<4mnD61?gd12g;ri3P^!U@&Fal)7+M}YfID}fp#gU7f>EQ~uS=(O z#5OdzpLZItWJz#Yd!(la9zL{$8ipQ!{pze+R0N+tI}K=SgLCKL#tm4xGJjj)?FI{^ zz1=RNvu4@FCX@DFe*Yfcy|arqO}KOk_V3qWQ3#~W zMmh~MXIjVi?y12|O)zl;DO|fY@Hhpp1iQO+d!H-x(IfYXDUs04UartNb71)JfhXujPY;Y83v1RueZ5X} z%a?nL<$4Faer*?O7`h;Io0uj|a`x(!DgCdI{c!oRzESJ!)K#D#YzCO7ZsWVUoE1w- zVD@ag&}33y>-}lsaoD*N4jk|w%P|B-kJbsOuh7a$7!vtIQ~CKbxLh0tbamxlRsA0c k_oe86fI>h)fP<`g3l^iX@aHrK&YZv5h)0Q zx@@6EBd&@Sij;JrT^4kqNFunXxM-=1xDo_$Xj(H!vP~B(Ax_G1Mv7UOi!!lzkCUbB0`uW ze*cE1CMlvjci`GJXm1Cv7q)BxpD+70{$2!qKDpzI7sG`MP+vdS9ty#>ZLoJQl$Ajw zBIDE3@Z?F(ZeuanwF`FafT}8SpNeo8o;`z;C*k__%-6|{fWg7pGOw?f#P{r(f6dLC z(h06u0S6Dl>C=YYCXqC>8vTMM|2(+|_w?~hlqeJ%g#fuA)d>|luUvKgt52VgcZChpn9zKNH zS~zk7rbn5@=<9=( zD~+!!DUr45Q1=0f0>L0SojHVO9^!HM^hsKWuU{o0BS<8)$JGQJI%GV$JR=$v^$rH1 zzhBM+1MusY*oTH-=T2kSwA;0d*t!oQ88A932_}#Je$n0ZJ7%-NrcH8=$Bp~>@&%3_ zRgYUnKrANhLu#_Y;A~%%ilQQ@r~sD>+-^BnR>GP!lE{Gr#(a;C%1fuqrM8(uKsY?N ze1kzLTdj`R>6E~dhubaPojpTjTem`89en;Q4W=IS_2sJ(N<&hZ(vuw<6D>`J-45Hg ztCKA&%guLftu&QdcQq9c9>9$oaO{}2T{i)#!jw!nRhUvyTr4G pk$)G30&~9#{|6}ee}e^2z#j?LYQ&&3koN!p002ovPDHLkV1nec?_vM| literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/filled_diamond.png b/doc/images/linedecorators/filled_diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..e55237b1f1e9c43027b3df9a84941537aef626ce GIT binary patch literal 1018 zcmV&+Nd*P9(rnqPMbH-!SoEw&Hn`0JpjAOOac}bprr-gy~~I@GdMC*1REOQ z!w2~G4VIRmu@UO)p`gHW*NLz`0l^?_+Xj~|>HXXseEbMQLr_%(uU}j0J`vVWf%bMd zbSQkkbt@b_3KuTG$Oyc7WBCx`VZ8#@u7%5&AuDV7^O+fV`xZWZvebPdtW`i`BkbE} z3?5)`5UyRb)O|9fKLHC1aO)P7mcpx7@Z}45Jg~SJ?(_XS%+A8elWBKvmh>fHU;ygs zATJO6et7W$K7WSJPADvdn>V4W3nnMw{d>52HEpf|&YXc~&sJe5sdDFzNJWLn{{13% z@5b-@=#fZOmB^7JDZ7oNu1@6magnkz5x3i%?dlTX^NBP!i)3Yq)Ypr6Jm&0!!Bx49 z#*-(S|LfQFa=S%9@aV_SDO-PQt~De^l^YUC`g3 zT<`#g59Dw(8=i=O*BgK0*udhVig9pISKBLBlDF;Yfwnd%DKWNX<}_%M`FTA& zdc80_tiL`V{P>~m#l>*?baL++8PVj$+9TMWfaz%sFmw$Mt5lbkmiKcwV8;&FyBEgB zVBQc6nb?cz444h7Ix%9WZ95!tV_j&kG zRp55Ro;}fhc6Mq>i-#o&`1*CZe7#<+z`uSO`xX{zfT7Fff?c~HJIPN|Q=^Hku7(X8 z!q0nq;lv3ze?Go_N(l%Rrj^0Y%xEo*Bs&{+?lcBlRJ2;}VS0Mt)G0W45DpxG@o`mF zcXwjjq!SQXm_h+Z7N$t@^Hs7T`8u5{)Aj4khGveI7I^+#51aGz$=O6rfZ4(nIai%d zU2YtXbcAFck4JZZk<%d_%Mvg*r!q}cm_h-sEKGkR1_f-{0y#OU6{f!lLjnQ;*u2@U o;bb1$H$ryv|F1E-2Vgh90Z6tzzK%A|v;Y7A07*qoM6N<$f<9X70ssI2 literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/filled_diamond_bar.png b/doc/images/linedecorators/filled_diamond_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4ca9be130df1eaed2637dca8f500d43bda4159 GIT binary patch literal 1136 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 FV1mBtFjN2l literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/filled_triangle.png b/doc/images/linedecorators/filled_triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..0f957e4448555489754b773959e152477b5ff355 GIT binary patch literal 1038 zcmV+p1o8WcP)+&5kv(+wTPlGiinCLp%xivu(2f|gK>I&)eahMDO-oj3E| za|-*z<-K|Lyz}vY=bn2H;}H>I3B#Ld2QrQS1Z3KQOyfTRnRX!4$aY0*R~PKvtM{u` z!Rpnqk(Z}q%^JwhhxT??T(Am{E8F1Q9IRLYEiEuJ1EG*!WxI{D7Ps$6c@r zcQPP58yXs5a1gd_GnYAk9!5tq8a%jJ1DczmyBnsbjdNG8LPrOzU+A*Pxy1JmL3378`WCZTthqGtl!-ts6!-sJCG}P2M zX4W>uE-qgdsjL*)u|wp_72~|uD{|_T$gW)?7cQi2CL9*Ic~hjL!-lUWNRNR2evuO= zM6$9(jvNtr`*wcWqen%`%0$}Q(sWS~3aPm*TSP#ls!COMcG^-ascnNdZotKhx~`8O zhhxVeD{J9*1_t2WJ2-sUX0Ad>3DnlYx^=qBK7E3*F&)*_I=5#J`2E&(CMRHIM1#I` z2@W3Az^kimhLRo*9RjZxDk>76&(5lwpFiuEnu6WCV}z8J&aZQR0vz5KTHl|07NCdWThewZ$vc`kZ%a>4J4?B12NpAmsXS{a+fdE{; zo?I>`2exk20r2`Yym@0TYa~DffTzg>}Ao0n3*gb(mq%2ndCAM~n|P7&M-gK^w{Pa^21X0loTs+C8_l zKwqD^jfn}kdlycg)KuV1y6CK$@rs{CiLMMbIE3*2+T*1xB_NAxKbQegaFm2qJ zxK{msO+k+*J%_BIqCzvOs0f}uwWlkAfQbp%yg7MciUu4lOpA>>cXYkCw%XTa$bhwL zVcD|O3e#d^Zq7Mh3%m4rY07*qo IM6N<$g72~85C8xG literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/filled_triangle_bar.png b/doc/images/linedecorators/filled_triangle_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..30615846bac069dc2ccc9dd799ee4951e8583e71 GIT binary patch literal 1188 zcmV;V1Y7%wP)6EFzK$Dya;$wuGRAk&jeh~KP4m*F(BE&HdIRrW@+7=}KRo9C zeK>Xus;Y+H6%;^QTgJ>73AY<=--ZVdl$tD%@#6e>k@9kp6)Qw8T(I`%VO6(ei8`}pjf!k(Nj|r(PUl>{Z0$=e09UVyR8)wRmWnhriA1Bx=LCa^HK&21 zB8_`PgUHUEB9)aQ3m1yGTq4!gA}3CW`2E&-jg1@3(M*t!*Ra-git{5}#}a$;ajALrIA?fY-0#*)!MuK1+_?iqMNnC( z&w+rs-%nO`G7r0eJC3WyPPp zvU3(l0bN~cl+pZtUB5#^=5Y=O%%88pnKbG5GM_((i4)B-yk5Qf{pPWMECAs!ynSnS zHW08@%Ag0y(o*nv)NqeSE9Ys`l$PGSNvtCj(yH(9VLgh(!{gCw@+FV~^!A$5HxSUR zC=#)boi$61Gn&^6#l?D{OoZ}sc=gKqzO@zJy@Qq(Sg^p_Us3{jdAg|$3=C({xB?K1 zslbuWe)*zY8V{#ajTq@{VPR@IyUr{YHHGxl`sIQ5YxPQ=C$haXbL(U z=@~Q@l$B{l6&AviC*zZ43P30Xix(#+Cc|NanEo_w-O}~m&@g^kmJFCN113yJjhOy4 zqS4IRVhKQBA55Q~8R7p0*!NxFFTuZWgLWHWH+}((3^X>FN`OTG0000T3>g>ED_P|Em1T|w6|Az+};4hVnkzOM5;7OG`um(fD}faku3u z_5Kd5tZ;|-c!0@CV0G1UGhap1_?bw2Fu}4=$KyodFp=9$G(Ampd~Dg$X2|7;s;Y<- zg(#mF$IS;I5+Mo(`4fqlUd|4DJ}!e~QXKo)DR6QE%*^mnw!6#e9*+az@XzwpW_o-1 zS*Z-Z7l5@jU|;|k9tM0q;N=B~M1Ww>0ypjB(?0Oq{7I*|gR3fc^jOS>B(;}~4K9Jf zL2>NkQy?1UZhm^oo&53=P*r=j$YS2!xJnNWc-Qy$`TLz6ajqDE?QLLW1nBDnW@mv= z$YyuVkpbaxxY1_D4`-Pdece-r#B7Z=6d)WxRL zyyK;~TtI6p3oI4e-p*q`#jyaqzH(zK6?=FH+~13H6$R+*G>Yx%G1jhC*b;!dyP{BC zY$^rh^Wxmb#^P@3V*P%=?aH&oUpOWQbZ*IiKas%;vf2Y5XEl2;i!R z;B*2mmuN>v()H=7Fd{1pcz6KX+JNC<#Zw3yYR%FT+0a0mOk{I2`S7553c+Y&!0jzL zK2BOJWK$Elu%OAX;h=62+}s4Zx&X5oxV{F~)_~<@ptV)iVZVgpmcG1@Q&XhXO4ikp zv$KkYo|_}>cE!SxRB{Q}?PO06sn?TzedO-0VxdX$>4{8AA_20vm>e4;4-X@c8@T~C z8(Cc~n#~q@Mjznyl7oX}Muso}Aay#jriPrDATKVy7x#Mx?Cz5N{bIIzdX#@IKjHP2 zTwNu*yGf%_GDEK?8ym@)8S?Hf{CHn8V0KolYpa!lJUV$Zf%#2$Wot6ugB<8qM$1Ekq38S!Sud*o+<^>v`51E{S9hK7KqrYLOA;p6cD z4hOKcB|aSvV1FNYewO!*jRkIQfaGN9JGlX*h?1VJV%lFP5C9Gj&4nq-ge=p8b!D4rIfX7F9U!xHyFAo)4Rt6Xh;fYpB?YiqN&I6sj0- zbtMUX6T80;yu8T!rlm=<`6jlc1kh_VH4)W-Kma&6kc&M(mlr0z9w;o7i_OT0R6=Bg z?eqP;cw~dcI-P*eC+}-CibpnBY*`tQn5bmx%J5qQj*mlyepZ-rb3?b9sw%)@iL5Yb zNr(X+4^UJjUKZYykN}jHhKjAM1WYEaQdI|84M4e gB|rY3p&xI+FTsUYi^I}aCjbBd07*qoM6N<$f{v%26#xJL literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/harpoon_bar.png b/doc/images/linedecorators/harpoon_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..260d154e8c82f9ca9343235425489ada4492b922 GIT binary patch literal 1095 zcmV-N1i1T&P)k$MZ~Twt^^SU zS4uZ7D!LF+a3ku%O~DExB^xR2!cBEiq%8;*6tN0TYo%BdtXLI{2}!W@XO4^OFqyv8 zPLoVV(F4Ow-n;L;d(OM}&P>KZlK6*FWVZu$!yW+!27t?#ZCQFT9JZxEX(+YDeEbOP-w#Yq=6(5SFe&26U$GXOp--Kq{}6H zvlzJx5D1X__Q??l65sej#aCG>S|!`Ucm2{+Pxl1;&RD`fh4u!(rL+bT}NqwrxT% zo$U7Q(zhJ^emMt&#`b~0$i)NmShGgf4+f>aG&KD3%j^Wnq=alb+0jv8dRn!0yCr1P$@+XiadE!rWCy=r z_gxbpV+u@88i|@IOzC7j9&?4M(0K7e(zBrfC@YgTg8-2TuyZF6i>ZTME@00dBU!)S z_J6f=h7tj#rNHXdDp4y6)1LrEfLJWI+s)qw`@RhQA^87s)NTjt#!nwzZw&vS(+>au N002ovPDHLkV1n>52}A$@ literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/none.png b/doc/images/linedecorators/none.png new file mode 100644 index 0000000000000000000000000000000000000000..08c044e33715680177e2b6a9dced06b5a6e75334 GIT binary patch literal 736 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 literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/triangle.png b/doc/images/linedecorators/triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..8e454c1322db9a0b904c25055e8b581e8723e8a5 GIT binary patch literal 1081 zcmV-91jhS`P)q$gGRA_cOV#4+w!vZxw#n#1b~c;q=#S>)?`3h8qm-H z_%Ymse^9|yjEO(}T*0IkC4DCu;Pb94GWmy7)P(K6R&kbD8w*U9#FA+IRpyLa0D z3m3?@ZFMP8^W>vP_61TRTWuMLUwkNo13x6 z`2FO|m*ykefq?-befY3sKv@}SvuOp%$|7rO$hJ0eWW-o_u?6`2nQUp1f>vLzFKT-P zzh6ie6{)}d`bGMD=(?|^E7xw+)vV02q+z6DI++c#i*Tx}md$T@0jOKWGd0R;uX!UC|i z7J06f72xh&pu1b1YifZ0exR^0x_@iF1|wj79q{|LWXH#Wr6s*>Mg~w)0=V6P$0Jvl zOZtu-lm1{3uy1>PV`D&lJuo!|96SiLwE?$p0|#Q9buGz&#YOdPhKYXq6!|EdpDzT% z&Eo;ioY9iojuR&&Yo@1xvu7n!o;?E|JdpW|i-CawnacZ;!M=ut`8aQeF4 zKxwJDz@ow90R{(whYx|DKV=E!<^p|vz?CcJ=Zh$SnZk7Pq;{>k-GIX(eO4e`3ub2I zYNXKZ28{qeegLOW$1Y4^!Y&t(ogJU!cya2KdhhibD|EX-w+rOt0O{%G3e#R=co@jb z1Dwvp=h6wVv?N>2e!-rd1O8R)`#(nZy#Rjz>Zl}F^rhvN00000NkvXXu0mjf7?K7T literal 0 HcmV?d00001 diff --git a/doc/images/linedecorators/triangle_bar.png b/doc/images/linedecorators/triangle_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..ac406c3034a5b7edd351fa18a500f1515a8587da GIT binary patch literal 1210 zcmV;r1V#IaP)sJKw8D{UdEO$GlVwJO?b(~7YjkBjRtoy^qy zJAxi~%)Ghxy?5_<_uhG#I7kxzF!Jm+z;65}z_yhuDu8Izw&gY0N5HC8KvR=#%WH7h zRs`R^1*)om*RO3^UV}3yv$nPZ%a_Z&+pV_=6O8?W0^r6CV8x1@n2`)}69K9Uj2j1h z_#k<%wf=r%zpf5gwhXv_J?kbU4dx14wvgw}jVzxrgY4?kuQnlf1hlr2Uaz%ten0v6 zvD_ayLLNMrGcyt)`vk;djJR#4XCAV(Xb=IsQgTb_y`0*q4G0`ZQmq(5nLku3!vZY0`&kF0-iT;HPW?54b zy?f2`CMMwJOLE^nDQGn{=At%Ah(yGRS+n$KJv~xVcJ3s7K68W=6_Kk~liRjQzq;By z@5lrMgF>grLmoRu_Vwk!t>iH{D1{6lzkapW>F$sFTC$P5b?iX+Je;fojM$cR6dn12nDKsXEpgFql)!`ajtstS~r%Kg==iS^&T1GaAm zIymwgLAe)-x7_oS<6gX`cz1}~M4+hENV$m%rA+KE{>*}O` z^r%rcH@^l`z?(O+D_RSMfLE`8pFfRy4hJxGD)9b2@cp~>Tmu8Zo;|?n)6x$Ffb-{p zY14q79(fiD8OMwo0kIemi5Q&?hk@Q+v+mfjKzTW!C_rVUT>XBLO`0Sm3=IL!Vb-^` z0W~$i)2D#T1vE4OyLJJ2zmr^1G}EOz<~ZdqX>*GzF| z#zL14Oes)YEZ-{Qb9L@qW7V}2EiJ(0$$;0J`CKLfdVA$n^RK|Z{{{XM{QqyzZUgMb YFLc<}B}G@hR{#J207*qoM6N<$f_{!c*Z=?k literal 0 HcmV?d00001 diff --git a/lib/jkqtcommon/jkqtpdrawingtools.h b/lib/jkqtcommon/jkqtpdrawingtools.h index 287b9bc110..2d75e8108f 100644 --- a/lib/jkqtcommon/jkqtpdrawingtools.h +++ b/lib/jkqtcommon/jkqtpdrawingtools.h @@ -203,31 +203,31 @@ JKQTCOMMON_LIB_EXPORT JKQTPGraphSymbols String2JKQTPGraphSymbols(const QString& * \see \ref JKQTPlotterGeometricArrows and \ref JKQTPlotterGeometricGraphs */ enum JKQTPLineDecoratorStyle { - JKQTPNoDecorator=0, /*!< \brief no decorator, i.e. a simple line-end */ - JKQTPArrow, /*!< \brief a simple arrow tip, unfilled \image html JKQTPArrow.png*/ - JKQTPFilledArrow, /*!< \brief a nice filled arrow tip \image html JKQTPFilledArrow.png */ - JKQTPTriangleDecorator, /*!< \brief a triangular arrow tip \image html JKQTPTriangleDecorator.png */ - JKQTPFilledTriangleDecorator, /*!< \brief a triangular filled arrow tip \image html JKQTPFilledTriangleDecorator.png */ - JKQTPTriangleDecoratorAndBar, /*!< \brief a triangular arrow tip, with vertical bar \image html JKQTPTriangleDecoratorAndBar.png */ - JKQTPFilledTriangleDecoratorAndBar, /*!< \brief a triangular filled arrow tip, with vertical bar \image html JKQTPFilledTriangleDecoratorAndBar.png */ - JKQTPDoubleArrow, /*!< \brief a nice double-arrow tip \image html JKQTPDoubleArrow.png*/ - JKQTPFilledDoubleArrow, /*!< \brief a nice filled double-arrow tip \image html JKQTPFilledDoubleArrow.png */ - JKQTPCircleDecorator, /*!< \brief an open circle tip \image html JKQTPCircleDecorator.png */ - JKQTPFilledCircleDecorator, /*!< \brief a filled circle tip \image html JKQTPFilledCircleDecorator.png */ - JKQTPRectangleDecorator, /*!< \brief an open rectangle tip \image html JKQTPRectangleDecorator.png */ - JKQTPFilledRectangleDecorator, /*!< \brief a filled rectangle tip \image html JKQTPFilledRectangleDecorator.png */ - JKQTPArrowAndBar, /*!< \brief a simple arrow tip, unfilled, with vertical bar \image html JKQTPArrowAndBar.png */ - JKQTPDoubleArrowAndBar, /*!< \brief a simple double-arrow tip, unfilled, with vertical bar \image html JKQTPDoubleArrowAndBar.png */ - JKQTPBarDecorator, /*!< \brief a full vertical bar \image html JKQTPBarDecorator.png */ - JKQTPBracketDecorator, /*!< \brief a vertical bracket decorator \image html JKQTPBracketDecorator.png */ - JKQTPDiamondDecorator, /*!< \brief an open diamond tip \image html JKQTPDiamondDecorator.png */ - JKQTPDiamondDecoratorAndBar, /*!< \brief an open diamond tip \image html JKQTPDiamondDecoratorAndBar.png */ - JKQTPFilledDiamondDecorator, /*!< \brief a filled diamond tip \image html JKQTPFilledDiamondDecorator.png */ - JKQTPFilledDiamondDecoratorAndBar, /*!< \brief a filled diamond tip \image html JKQTPFilledDiamondDecoratorAndBar.png */ - JKQTPHalfBarDecorator, /*!< \brief a half vertical bar \image html JKQTPHalfBarDecorator.png */ - JKQTPHarpoonDecorator, /*!< \brief an harpoon arrow \image html JKQTPHarpoonDecorator.png */ - JKQTPHarpoonDecoratorAndBar, /*!< \brief an harpoon arrow, with vertical bar \image html JKQTPHarpoonDecoratorAndBar.png */ - JKQTPSkewedBarDecorator, /*!< \brief a skewed vertical bar \image html JKQTPSkewedBarDecorator.png */ + JKQTPNoDecorator=0, /*!< \brief no decorator, i.e. a simple line-end \image html linedecorators/none.png */ + JKQTPArrow, /*!< \brief a simple arrow tip, unfilled \image html linedecorators/arrow.png */ + JKQTPFilledArrow, /*!< \brief a nice filled arrow tip \image html linedecorators/filled_arrow.png */ + JKQTPTriangleDecorator, /*!< \brief a triangular arrow tip \image html linedecorators/triangle.png */ + JKQTPFilledTriangleDecorator, /*!< \brief a triangular filled arrow tip \image html linedecorators/filled_triangle.png */ + JKQTPTriangleDecoratorAndBar, /*!< \brief a triangular arrow tip, with vertical bar \image html linedecorators/triangle_bar.png */ + JKQTPFilledTriangleDecoratorAndBar, /*!< \brief a triangular filled arrow tip, with vertical bar \image html linedecorators/filled_triangle_bar.png */ + JKQTPDoubleArrow, /*!< \brief a nice double-arrow tip \image html linedecorators/double_arrow.png*/ + JKQTPFilledDoubleArrow, /*!< \brief a nice filled double-arrow tip \image html linedecorators/filled_double_arrow.png */ + JKQTPCircleDecorator, /*!< \brief an open circle tip \image html linedecorators/circle.png */ + JKQTPFilledCircleDecorator, /*!< \brief a filled circle tip \image html linedecorators/filled_circle.png */ + JKQTPRectangleDecorator, /*!< \brief an open rectangle tip \image html linedecorators/rectangle.png */ + JKQTPFilledRectangleDecorator, /*!< \brief a filled rectangle tip \image html linedecorators/filled_rectangle.png */ + JKQTPArrowAndBar, /*!< \brief a simple arrow tip, unfilled, with vertical bar \image html linedecorators/arrow_bar.png */ + JKQTPDoubleArrowAndBar, /*!< \brief a simple double-arrow tip, unfilled, with vertical bar \image html linedecorators/double_arrow_bar.png */ + JKQTPBarDecorator, /*!< \brief a full vertical bar \image html linedecorators/bar.png */ + JKQTPBracketDecorator, /*!< \brief a vertical bracket decorator \image html linedecorators/bracket.png */ + JKQTPDiamondDecorator, /*!< \brief an open diamond tip \image html linedecorators/diamond.png */ + JKQTPDiamondDecoratorAndBar, /*!< \brief an open diamond tip \image html linedecorators/diamond_bar.png */ + JKQTPFilledDiamondDecorator, /*!< \brief a filled diamond tip \image html linedecorators/filled_diamond.png */ + JKQTPFilledDiamondDecoratorAndBar, /*!< \brief a filled diamond tip \image html linedecorators/filled_dimanond_bar.png */ + JKQTPHalfBarDecorator, /*!< \brief a half vertical bar \image html linedecorators/half_bar.png */ + JKQTPHarpoonDecorator, /*!< \brief an harpoon arrow \image html linedecorators/harpoon.png */ + JKQTPHarpoonDecoratorAndBar, /*!< \brief an harpoon arrow, with vertical bar \image html linedecorators/harpoon_bar.png */ + JKQTPSkewedBarDecorator, /*!< \brief a skewed vertical bar \image html linedecorators/skewed_bar.png */ JKQTPLineDecoratorCount, /*!< \brief can be used to iterate over all symbols using: for (int i=0; i(JKQTPLineDecoratorCount); i++) { JKQTPLineDecoratorStyle s=static_cast(i); ... } */ JKQTPMaxLineDecoratorID=JKQTPLineDecoratorCount-1, /*!< \brief points to the last available symbol, can be used to iterate over all symbols: for (int i=0; i<=static_cast(JKQTPMaxLineDecoratorID); i++) { JKQTPLineDecoratorStyle s=static_cast(i); ... } */ @@ -263,6 +263,20 @@ JKQTCOMMON_LIB_EXPORT JKQTPLineDecoratorStyle String2JKQTPLineDecoratorStyle(con template inline void JKQTPPlotLineDecorator(TPainter& painter, double x, double y, double angle_rad, JKQTPLineDecoratorStyle style, double size, QPointF* line_start=nullptr); +/*! \brief plot a line with the given decorators \a style1 and a style2 at the start- and end-point repsectively, using the painter's current pen + \ingroup jkqtptools_drawing + + \tparam TPainter Type of \a painter: A class like JKQTPEnhancedPainter or QPainter + \param painter the QPainter to draw to + \param l line to draw + \param style1 type of the first decorator to plot, see JKQTPLineDecoratorStyle + \param size1 size of the first decorator + \param style2 type of the second decorator to plot, see JKQTPLineDecoratorStyle + \param size2 size of the second decorator + */ +template +inline void JKQTPPlotDecoratedLine(TPainter& painter, const QLineF& l, JKQTPLineDecoratorStyle style1, double size1, JKQTPLineDecoratorStyle style2, double size2); + /** \brief calculates the tail decorator size from the line width \a line_width, using decoratorSizeFactor and a non-linear scaling function that levels off towards small \a line_width and increases sub-linearly for large ones, so the arrow heads to not grow too much */ JKQTCOMMON_LIB_EXPORT double JKQTPLineDecoratorStyleCalcDecoratorSize(double line_width, double decoratorSizeFactor); @@ -898,6 +912,19 @@ inline void JKQTPDrawTooltip(TPainter& painter, double x, double y, const QRectF } } +template +inline void JKQTPPlotDecoratedLine(TPainter& painter, const QLineF& l, JKQTPLineDecoratorStyle style1, double size1, JKQTPLineDecoratorStyle style2, double size2) { + const double angle1=atan2(l.p2().y()-l.p1().y(), l.p2().x()-l.p1().x()); + const double angle2=atan2(l.p1().y()-l.p2().y(), l.p1().x()-l.p2().x()); + QPointF lx1=l.p1(), lx2=l.p2(); + JKQTPPlotLineDecorator(painter, l.p1().x(), l.p1().y(), angle1, style1, size1, &lx1); + JKQTPPlotLineDecorator(painter, l.p2().x(), l.p2().y(), angle2, style2, size2, &lx2); + // draw corrected line + painter.drawLine(QLineF(lx1, lx2)); + +} + + template inline void JKQTPPlotLineDecorator(TPainter& painter, double x, double y, double angle_rad, JKQTPLineDecoratorStyle style, double size, QPointF* line_start) { if (line_start) *line_start=QPointF(x,y); diff --git a/tools/jkqtplotter_doc_imagegenerator/jkqtplotter_doc_imagegenerator.cpp b/tools/jkqtplotter_doc_imagegenerator/jkqtplotter_doc_imagegenerator.cpp index 2ff979b1c8..48dd77bc3f 100644 --- a/tools/jkqtplotter_doc_imagegenerator/jkqtplotter_doc_imagegenerator.cpp +++ b/tools/jkqtplotter_doc_imagegenerator/jkqtplotter_doc_imagegenerator.cpp @@ -25,6 +25,24 @@ #include "jkqtcommon/jkqtpenhancedpainter.h" #include +void startPainting(QImage& img, JKQTPEnhancedPainter& p, int iconsizex, int iconsizey, QColor backgroundColor) { + img=QImage(QSize(iconsizex,iconsizey),QImage::Format_ARGB32_Premultiplied); + img.fill(backgroundColor); + p.begin(&img); + p.setRenderHint(QPainter::Antialiasing); + p.setRenderHint(QPainter::TextAntialiasing); + p.setRenderHint(QPainter::SmoothPixmapTransform); +} + +void startPainting(QImage& img, JKQTPEnhancedPainter& p, int iconsize, QColor backgroundColor) { + startPainting(img, p, iconsize,iconsize,backgroundColor); +} + + +void stopPaintingAndSave(QImage& img, JKQTPEnhancedPainter& p, const QString& filename) { + p.end(); + img.save(filename); +} int main(int argc, char* argv[]) { @@ -38,6 +56,8 @@ int main(int argc, char* argv[]) parser.addOption(outputDirectoryOption); QCommandLineOption listsymbolsOption("listsymbols", "list all symbols in the given output file and generate images."); parser.addOption(listsymbolsOption); + QCommandLineOption listlinedecoratorsOption("listlinedecorators", "list all line-endings in the given output file and generate images."); + parser.addOption(listlinedecoratorsOption); QCommandLineOption iconsizeOption("iconsize", "typical size of the generatued images.", "iconsize", "24"); parser.addOption(iconsizeOption); QCommandLineOption backgroundOption("background", "background color.", "background", "white"); @@ -46,36 +66,45 @@ int main(int argc, char* argv[]) const QDir outputDir(parser.value(outputDirectoryOption)); const bool listsymbols=parser.isSet(listsymbolsOption); + const bool listlinedecorators=parser.isSet(listlinedecoratorsOption); const int iconsize=parser.value(iconsizeOption).toInt(); const QColor backgroundColor = jkqtp_String2QColor(parser.value(backgroundOption)); + + if (listsymbols) { for (uint64_t i=0; i(i); - QImage img(QSize(iconsize,iconsize),QImage::Format_ARGB32_Premultiplied); - img.fill(backgroundColor); + QImage img; JKQTPEnhancedPainter p; - p.begin(&img); - p.setRenderHint(QPainter::Antialiasing); - p.setRenderHint(QPainter::TextAntialiasing); - p.setRenderHint(QPainter::SmoothPixmapTransform); + startPainting(img, p, iconsize, backgroundColor); JKQTPPlotSymbol(p, iconsize/2,iconsize/2,s,iconsize-4,2,QColor("blue"), QColor("salmon").lighter(120),QGuiApplication::font().family()); - p.end(); - const bool ok=img.save(outputDir.absoluteFilePath(JKQTPGraphSymbols2String(s)+".png")); - std::cout<<"saving to "< "<(i); + QImage img; + JKQTPEnhancedPainter p; + startPainting(img, p, iconsize*2,iconsize, backgroundColor); + + p.setPen(QPen(QColor("red"), 1)); + p.setBrush(p.pen().color().lighter()); + JKQTPPlotDecoratedLine(p, QLineF(5, iconsize-14, iconsize, 7), JKQTPNoDecorator, 0, s, JKQTPLineDecoratorStyleCalcDecoratorSize(p.pen().widthF(), 9)); + + p.setPen(QPen(QColor("blue"), 2)); + p.setBrush(p.pen().color().lighter()); + JKQTPPlotDecoratedLine(p, QLineF(5, iconsize-5, iconsize*2-5, 17), JKQTPNoDecorator, 0, s, JKQTPLineDecoratorStyleCalcDecoratorSize(p.pen().widthF(), 9)); + + stopPaintingAndSave(img, p, outputDir.absoluteFilePath(JKQTPLineDecoratorStyle2String(s)+".png")); + } + } return EXIT_SUCCESS; }