1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
\subsection{The \texttt{fill} command}
Another common command in \MP{} is the |fill| command. This is used to
fill closed paths (or cycles). In order to construct a cycle, |cycle|
may be appended to the path declaration. For example,
\begin{lstlisting}[style=MP]
path p;
p := z1{right}..z2{dir 45}..{up}z3--cycle;
fill p withcolor red;
draw p;
\end{lstlisting}
produces \autoref{fig:fill}. Notice that |p| is essentially the same
curved path as in \autoref{fig:draw1} with the additional piece that
connects |z3| back to |z1| with a line segment using |--cycle|.
\begin{figure}
\begin{withattachment}{fill.mp}
\centering
\includegraphics{fill.mps}
\end{withattachment}
\caption{\texttt{fill} example}
\label{fig:fill}
\end{figure}
Just as it is necessary to fill closed paths, it may also be necessary
to \textit{unfill} closed paths. For example, the annulus in
\autoref{fig:annulus1} can be constructed by
\begin{lstlisting}[style=MP]
color bbblue;
bbblue := (3/5,4/5,1);
path p,q;
p := fullcircle scaled (2*54);
q := fullcircle scaled (2*27);
fill p withcolor bbblue;
unfill q;
draw p;
draw q;
\end{lstlisting}
The |fullcircle| path is a built-in path that closely
approximates a circle in \MP{} with diameter 1\,bp traversed
counter-clockwise. This path is not exactly a circle since it is
parameterized by a B\'{e}zier curve and not by trigonometric functions;
however, visually it is essentially indistinguishable from an exact
circle.
\begin{figure}
\begin{withattachment}{annulus.mp}
\centering
\includegraphics{annulus-1.mps}
\end{withattachment}
\caption{\texttt{unfill} example}
\label{fig:annulus1}
\end{figure}
Notice that |p| is a |fullcircle| of radius 54\,bp (3/4\,in) and |q| is
a |fullcircle| of radius 27\,bp (3/8\,in). The annulus is constructed
by filling |p| with the baby blue color |bbblue| and then unfilling |q|.
The |unfill| command above is equivalent to
\begin{lstlisting}[style=MP]
fill q withcolor background;
\end{lstlisting}
where |background| is a built-in color which is |white| by default.
Often the |unfill| command appears to be the natural method for
constructing figures like \autoref{fig:annulus1}. However, the |fill|
and |unfill| commands in \autoref{fig:annulus1} can be replaced by
\begin{lstlisting}[style=MP]
fill p--reverse q--cycle withcolor bbblue;
\end{lstlisting}
\begin{figure}
\begin{withattachment}{annulus.mp}
\centering
\includegraphics{annulus-2.mps}
\end{withattachment}
\caption{Avoiding an \texttt{unfill}}
\label{fig:annulus2}
\end{figure}
The path |p--reverse q--cycle| travels around |p| in a counter-clockwise
directions (since this is the direction that |p| traverses) followed by
a line segment to connect to |q|. It then traverses clockwise around
|q| (using the |reverse| operator) and finally returns to the starting
point along a line segment using |--cycle|. This path is illustrated in
\autoref{fig:annulus2}. One reason for using this method to construct
the annulus as opposed to the |unfill| command is to ensure
\textit{proper transparency} when placing the figure in an external
document with a non-white background. If the former method is used and
the annulus is placed on a non-white background, say magenta, then the
result is \autoref{fig:annulus3}.
\begin{figure}
\begin{withattachment}{annulus.mp}
\centering
\includegraphics{annulus-3.mps}
\end{withattachment}
\caption{Improper transparency using \texttt{unfill}}
\label{fig:annulus3}
\end{figure}
It may be desired to have the interior of |q| be magenta instead of
|white|. This could be accomplished by redefining |background|;
however, the latter method described above is a much simpler solution.
|