From 9911756a8e12e69aa0251d1ec26b4ce427dde25a Mon Sep 17 00:00:00 2001 From: Henrik Tidefelt Date: Wed, 24 Dec 2025 23:45:38 +0100 Subject: [PATCH 1/3] Fix three hyphenation errors --- chapters/annotations.tex | 2 +- chapters/functions.tex | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/chapters/annotations.tex b/chapters/annotations.tex index 725c51e29..df8632f81 100644 --- a/chapters/annotations.tex +++ b/chapters/annotations.tex @@ -1566,7 +1566,7 @@ \section{Graphical User Interface}\label{annotations-for-the-graphical-user-inte \begin{semantics} The \lstinline{preferredView} annotation defines the default view when selecting the class. The value \lstinline!"info"! means class documentation (``information''), \lstinline!"diagram"! means diagram view, \lstinline!"icon"! means icon view, and \lstinline!"text"! means Modelica source code (``text''). -If not specified the default view is tool-specific. +If not specified the default view is tool specific. \end{semantics} \end{annotationdefinition} diff --git a/chapters/functions.tex b/chapters/functions.tex index 742195190..24df1386a 100644 --- a/chapters/functions.tex +++ b/chapters/functions.tex @@ -1700,7 +1700,7 @@ \section{Function Inlining and Event Generation}\label{function-inlining-and-eve If {\lstinline!Inline = false!}, the model developer proposes to not inline the function. -The default for inlining is tool-specific. +The default for inlining is tool specific. \begin{nonnormative} {\lstinline!Inline = true!} is for example used in {\lstinline!Modelica.Mechanics.MultiBody.Frames!} and in functions of {\lstinline!Modelica.Media!} to have no overhead for function calls such as resolving a vector in a different coordinate system and at the same time the function can be analytically differentiated, e.g., for index reduction needed for mechanical systems. @@ -1723,7 +1723,7 @@ \section{Function Inlining and Event Generation}\label{function-inlining-and-eve If {\lstinline!LateInline = false!}, the model developer proposes to not inline the function after symbolic transformations have been performed. -The default for late inlining is tool-specific. +The default for late inlining is tool specific. In particular, tools may automatically delay inlining in order to take advantage of function annotations for derivatives and inverses. {\lstinline!Inline = true, LateInline = false!} is identical to {\lstinline!Inline = true!}. From 241468a094ba27e0b67a5d5270323e876f1addf7 Mon Sep 17 00:00:00 2001 From: Henrik Tidefelt Date: Wed, 24 Dec 2025 23:46:21 +0100 Subject: [PATCH 2/3] Provide images to complement the textual specification of gradient fills --- chapters/annotations.tex | 63 +++++++++++++++++++++++++++++ media/cylinder-gradient.pdf | Bin 0 -> 8260 bytes media/cylinder-gradient.png | Bin 0 -> 17567 bytes media/cylinder-gradient.svg | 59 +++++++++++++++++++++++++++ media/sphere-gradient-triangle.pdf | Bin 0 -> 4688 bytes media/sphere-gradient-triangle.png | Bin 0 -> 9417 bytes media/sphere-gradient-triangle.svg | 34 ++++++++++++++++ media/sphere-gradient.pdf | Bin 0 -> 4651 bytes media/sphere-gradient.png | Bin 0 -> 13751 bytes media/sphere-gradient.svg | 34 ++++++++++++++++ 10 files changed, 190 insertions(+) create mode 100644 media/cylinder-gradient.pdf create mode 100644 media/cylinder-gradient.png create mode 100644 media/cylinder-gradient.svg create mode 100644 media/sphere-gradient-triangle.pdf create mode 100644 media/sphere-gradient-triangle.png create mode 100644 media/sphere-gradient-triangle.svg create mode 100644 media/sphere-gradient.pdf create mode 100644 media/sphere-gradient.png create mode 100644 media/sphere-gradient.svg diff --git a/chapters/annotations.tex b/chapters/annotations.tex index df8632f81..50c11b777 100644 --- a/chapters/annotations.tex +++ b/chapters/annotations.tex @@ -1009,6 +1009,7 @@ \subsubsection{Graphical Properties}\label{graphical-properties} The attributes \lstinline!HorizontalCylinder!, \lstinline!VerticalCylinder! and \lstinline!Sphere! specify gradients that represent a horizontal cylinder, a vertical cylinder and a sphere, respectively. The gradient goes from line color to fill color. +Examples of gradient fills are given in \cref{fig:cylinder-gradient,fig:sphere-gradient,fig:sphere-gradient}. The border pattern attributes \lstinline!Raised!, \lstinline!Sunken! and \lstinline!Engraved! represent frames which are rendered in a tool-dependent way --- inside the extent of the filled shape. @@ -1058,6 +1059,68 @@ \subsubsection{Graphical Properties}\label{graphical-properties} \annotationindex{FilledShape} The extent/points of the filled shape describe the theoretical zero-thickness filled shape, and the actual rendered border is then half inside and half outside the extent. +\begin{example} +Gradient fill patterns. +All gradients below use pure white for \lstinline!fillColor! and pure black for \lstinline!lineColor!. + +\Cref{fig:cylinder-gradient} shows the use of \lstinline!FillPattern.HorizontalCylinder!. +Since the gradient fill is determined before applying rotation, the line where \lstinline!fillColor! is attained gets rotated together with the rectangle. +It is also seen that the \lstinline!lineColor! is attained where the ellipse touches the the enclosing rectangle. + +\Cref{fig:sphere-gradient} shows the use of \lstinline!FillPattern.Sphere! on a \lstinline!Rectangle!. +It is seen that the \lstinline!fillColor! is attained at the center of the enclosing ellipse (coinciding with the center of the rectangle), and that the \lstinline!lineColor! is attained at the corners of the rectangle, which all lie on the enclosing ellipse. +If the rectangle would have had rounded corners (by specifying a positive \lstinline!radius!), the geometry of the gradient fill would not change, meaning that the \lstinline!lineColor! would not have been attained. +While the \lstinline!FillPattern.Sphere! name suggests that it is used to make circles look like spheres, this example also illustrates how it can be used to give a less flat look to other shapes. + +\Cref{fig:sphere-gradient-triangle} shows the use of \lstinline!FillPattern.Sphere! on a \lstinline!Polygon!. +Determining the minimal area enclosing ellipse is a non-trivial but computationally tractable problem. +\end{example} + +\begin{figure}[H] + \begin{center} +% Workaround for unreliable support for linear gradients in at least some popular PDF viewers (Apple). +\ifpdf + \includegraphics{cylinder-gradient.png} +\else + \includegraphics{cylinder-gradient} +\fi + \end{center} + \caption{ + Applying \lstinline!FillPattern.HorizontalCylinder! to an \lstinline!Ellipse! with \lstinline!startAngle!, \lstinline!endAngle!, \lstinline!rotation!, and \lstinline!closure = EllipseClosure.Chord!. + The dashed line shows the minimal enclosing axis-aligned rectangle, after rotating it together with the ellipse. + Since lighting and reflective properties of the imaginary cylinder are not defined by the specification, many details of the rendering are tool specific. + Here, a more shiny cylinder is shown to the left, and a more matte cylinder to the right. + } + \label{fig:cylinder-gradient} +\end{figure} + +\begin{figure}[H] + \begin{center} +% Warning: Is there really no need for a workaround here, similar to the one in \cref{fig:cylinder-gradient}? + \includegraphics{sphere-gradient} + \end{center} + \caption{ + Applying \lstinline!FillPattern.Sphere! to a \lstinline!Rectangle! with \lstinline!rotation!. + The dashed line shows the minimal area enclosing ellipse, after rotating it together with the rectangle. + Similar to the cylinder gradients, many details of the rendering are tool specific. + } + \label{fig:sphere-gradient} +\end{figure} + +\begin{figure}[H] + \begin{center} +% Warning: Is there really no need for a workaround here, similar to the one in \cref{fig:cylinder-gradient}? + \includegraphics{sphere-gradient-triangle} + \end{center} + \caption{ + Applying \lstinline!FillPattern.Sphere! to a \lstinline!Polygon!. + The dashed line shows the minimal area enclosing ellipse. + Similar to the cylinder gradients, many details of the rendering are tool specific. + } + \label{fig:sphere-gradient-triangle} +\end{figure} + + \subsection{Component Instance}\label{component-instance} A component instance can be represented within the diagram and/or icon layer of the enclosing class. diff --git a/media/cylinder-gradient.pdf b/media/cylinder-gradient.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b7515082b3b2b407542f8f1ca7b06e625cc4ffa2 GIT binary patch literal 8260 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 literal 0 HcmV?d00001 diff --git a/media/cylinder-gradient.svg b/media/cylinder-gradient.svg new file mode 100644 index 000000000..ffe8ded18 --- /dev/null +++ b/media/cylinder-gradient.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/sphere-gradient-triangle.pdf b/media/sphere-gradient-triangle.pdf new file mode 100644 index 0000000000000000000000000000000000000000..27990dbf951bbd30c8bcd1a3f37236119cc8844c GIT binary patch literal 4688 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 literal 0 HcmV?d00001 diff --git a/media/sphere-gradient-triangle.svg b/media/sphere-gradient-triangle.svg new file mode 100644 index 000000000..7fb3c5d6f --- /dev/null +++ b/media/sphere-gradient-triangle.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/sphere-gradient.pdf b/media/sphere-gradient.pdf new file mode 100644 index 0000000000000000000000000000000000000000..31645555f888bfd3e009793f5cd3c645156d3be7 GIT binary patch literal 4651 zcmcIo2~bl<7>-&5qXHtLNWoP^XD}vt?k5=kcThGA@WmG&yLC31y-Iv7VB^1cC82?=D*{4bNSnr$%Yk4tt)FVj0Ae_#XrdK9%HVT7#?(LfaewluYQfU$ zwL7ExEvn7mF(mu)jW^%ak2+a>QGR?5-4J!4`DrQl%C^4KyRWXiTUCB8w9IEo$B?r( z4f6|SQ@Ou9Uq|&_SUZ7N&_!EudG+SR#)@P2M!j6`m#SPFtxHzbY&ns5ZrG!)me=*? z3zmfr$$d6{an6PlHC=~PY>5v7ITM1Ziptui!?ACBU%DGUS=g?ABP zG9HQ-!mk8=SqBJooiCG$C;~=|i^1GA1`rNzWuCcp1-Fklb0K9Sf<#E=|63@0N)z zd7wnlE+)>{HeXIOAPFHQLkr2(a!Uqf7~77~E;6q8?|eE^g7`vfB67|s1YBVrxpqK| zXEIsqTv)C>Orr0e(4FP@)T}sgo+}m^k5g+K;-Qt`b!I|(oL5_MW1S{;(qJuX78#H8 zYAbH6WZ3DHmGD?({^z{f%2vQ4<8fYX#f?=N_7=?ABw1uU&a17sv5`TX+ghZM9;en; zY9UOQPXifl4w z)69qC&uvi)uwM9B34z}oP8?OlPaznaHce%kj#q*8KuY3B#Up4H!QaD^sWHn0L{|IX zPpQ$T_xt7w1HJ0XHcA%`dFEZRR>SFeQ=N9^wA8}zYTkSh>{FAv!wY-_Y zJ6IAuw?p$FakcA75kIZ$QDne8DNOw4%7q)eFX1~sK_@UjKyCvMp+&)h( zPwlkld{viV&Yr5}^TGpta#pE!8jA+yR^B0deDH{0bjo~tY4vrB*H}g2-+i?q^~w!9 zoA&O%9O-lS{yOtdPZE><)O=qb6nU+TCIYw{`{_RXHf-2y)kX0aq1~T8pHvcAs5>_L zhn2pC-io8mRl9y0l{9-+_Ms(xcJFG)|BUCK@X}RCEQU=;sa;6QaWiCuoT#LyV129s zN08DMiiy5YKq>)9Kr%~LX)u@og_9^o7^$CP02EqaN~iyvXw~W$Z`TyY zF0)t)EoBx<$@bnOgpczk-igVb=oEEJzdS=WL*m&UA4+GX^bYb5y~K<#1uCoB4KPI_a9qe;adOz literal 0 HcmV?d00001 diff --git a/media/sphere-gradient.png b/media/sphere-gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..e28a22a7b02c2605dc47c9b1bcc76c67b2022176 GIT binary patch literal 13751 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 2b7578f976c9af777a1bec7b64475bfc10fdad49 Mon Sep 17 00:00:00 2001 From: Henrik Tidefelt Date: Fri, 9 Jan 2026 12:58:21 +0100 Subject: [PATCH 3/3] Use smooth = Bezier for Polygon example --- chapters/annotations.tex | 7 +++++-- media/sphere-gradient-bezier.pdf | Bin 0 -> 4696 bytes media/sphere-gradient-bezier.png | Bin 0 -> 12101 bytes media/sphere-gradient-bezier.svg | 34 +++++++++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 media/sphere-gradient-bezier.pdf create mode 100644 media/sphere-gradient-bezier.png create mode 100644 media/sphere-gradient-bezier.svg diff --git a/chapters/annotations.tex b/chapters/annotations.tex index 50c11b777..201a58540 100644 --- a/chapters/annotations.tex +++ b/chapters/annotations.tex @@ -1110,10 +1110,13 @@ \subsubsection{Graphical Properties}\label{graphical-properties} \begin{figure}[H] \begin{center} % Warning: Is there really no need for a workaround here, similar to the one in \cref{fig:cylinder-gradient}? - \includegraphics{sphere-gradient-triangle} +% Image for smooth = None: +% \includegraphics{sphere-gradient-triangle} +% Image for smooth = Bezier: + \includegraphics{sphere-gradient-bezier} \end{center} \caption{ - Applying \lstinline!FillPattern.Sphere! to a \lstinline!Polygon!. + Applying \lstinline!FillPattern.Sphere! to a \lstinline!Polygon! with \lstinline!smooth = Bezier!. The dashed line shows the minimal area enclosing ellipse. Similar to the cylinder gradients, many details of the rendering are tool specific. } diff --git a/media/sphere-gradient-bezier.pdf b/media/sphere-gradient-bezier.pdf new file mode 100644 index 0000000000000000000000000000000000000000..45123c9f973578b9d8cd79e7bedb86d955dff8f0 GIT binary patch literal 4696 zcmcIo2~<-@6jdo|qZLG@qLmJn*rSvr|7RnL3;R)AAW%?nA>bFIkZ{7Mg3zM4B32f` zBR%f>(sGIww_+(!1gu-tVi82Zws2|@Jgwq}c4mGOlb=u|r=39NWhUHr|9fxVyazYH z+t-!gi8quy<9AR@S#gq&xi~u7Rcby(lMJ7l6$i$?Vv(^pwZ1_-^bowpOh}9KY7c6(Zek}5*0E-hu{f{xphioE zolaQ^k45Hx&Z|9K1uQZa=hYt6Xf4COf?1a&i;Ts2wFfmiGKlk=7Ad5~skMh%2$L}^ zp;$)fHj4_oE6Q}aHXfE@C>zNEN&|9$Ya2MB=!X-EJ2)Ya!wK0MPPhR81XCR1Gzu3P z5Q0I$Cs__i28Co$NCt&uP_V7!+RW^!PJksYt_lTWG|;t5;DH1Q9H<^5@j!wU4s_iK z@j!wb9H>kY;Qt(k1Ug{XNCMZr3MFGAy^@%cy zlKXk0$kOktHH`b9VVD=ebCZa~A~(jt+V2@O2k=k}Nm42@+J_wr>@uKw0nVm0wJ5NYLq?`S7q zCT!9Kw$_b17d^BOZ4C37HLAbBX~?+#cQ#wC&QR<Rt2oxe3qUM-Sysy}sb zs4hw(Bzp#Sly(SKXYCsj*Hob9bd{C|a&EUbTT%JWSy_d)emQnmXsC>~k_8Tv zGXpLT*qxf;5qeH0z8v9KQqObQP2}g_3O;vySjqEk_m6dKZ)r-s9CGy#HON6SCbe(p zNO6&ApNOAU+b9xZeWOSkUisZwN{COb)>2FqGL|BwZ)B=jndb}21cQA$r&OH&i8H>? z%60zQxe*>84J_>I6}->x&hbMt%HrUw_8z&k&A;kiYBcCP zM>tu56^}>7rS)rC<-e)sL4$AHsW5J2`<+J%M`sq-)J*!iG5<)`-N--7JTK--7Os$n z4`@mW8h%yW(Av5(rtanXu+HdtGuM_q^|~Dzwd%^<+=Mn?zcne}1RR(U`AqR~$c?Al z6TO3r7bRc(GT~-w!SqBsD;r7qH7nPzeEXW(65B&(OBt!_hlPf>A!EzAa%u@Skv8TC zQqrx(PyhxgS5iR81Yjr#CjbdZ=IqMVY8nV}7R3nDRZG-Bh)$T?=pQX3uAF}-Euha^ zjmeq2H;m%u+Bmig+xbj}^lg`iPJyl=cBdo977U%5<6iAFl&>jH&)(q}c|E}Ix=+d@ pZp+BRao?W!aYmy}u7}+uQ%l9u3Jsm8fkqIC1Og71>odof^A9#U6cqpf literal 0 HcmV?d00001 diff --git a/media/sphere-gradient-bezier.png b/media/sphere-gradient-bezier.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a8e1a757030fcb7d144f95e00e47db8924d60a GIT binary patch literal 12101 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +