The easiest way to draw a Path is with no arguments.
Point pt[5];
pt[0].set(-1, -2);
pt[1].set(0, -3);
pt[2].set(1, 0);
pt[3].set(2, 1);
pt[4].set(-1, 2);
Path pa("..", true, &pt[0], &pt[1], &pt[2], &pt[3], &pt[4], 0);
pa.draw();
Fig. 12.
Since pa is closed, it can be filled as well as drawn. The
following example uses fill() with a Color argument, in
order to avoid having a large splotch of black on the page.
Common Colors are declared in the namespace Colors.
See Color Reference.
pa.fill(Colors::gray);
Fig. 13.
Closed Paths can be filled and drawn, using the function
filldraw(). This function draws the Path using the pen
specified, or MetaPost's currentpen by default. A Color
for drawing the Path can also be specified, otherwise, the
default color (currently Colors::black) is used.
In addition, the Path is filled using a second Color,
which can be specified, or the background_color
(Colors::background_color), by default.
Filling a Path using the background color causes it to hide
objects that lie behind it.
See Surface Hiding, for a description of the surface hiding
algorithm, and examples. Currently, this algorithm is quite primitive
and only works
for simple cases.
Point p0(-3, 0, 1);
Point p1(3, 1, 1);
p0.draw(p1);
pa.filldraw();
Fig. 14.
The following example uses arguments for the Colors used for
drawing and filling, and the pen. The empty string argument before the
pen argument is a placeholder for the dash pattern argument.
pa.filldraw(black, gray, "",
"pensquare xscaled 3mm yscaled 1mm rotated 60");
Fig. 15.
Paths can also be "undrawn", "unfilled", and "unfilldrawn",
using the corresponding functions:
pa.fill(gray);
p0.undraw(p1, "", "pencircle scaled 3mm");
Fig. 16.
pa.fill(gray);
Path q;
q = pa;
q.scale(.5, .5);
q.unfill();
Fig. 17.
The function unfilldraw() takes a Color argument for
drawing the Path, which is *Colors::background_color by
default. This makes it possible to unfill the Path while drawing
the outline with a visible Color. On the other hand, it also
makes it necessary to specify *Colors::background_color or
Colors::white, if the user wants to use the dash pattern and/or
pen arguments, without drawing the Path.
pa.fill(gray);
q.unfilldraw(white, "", "pensquare xscaled 3mm yscaled 1mm");
Fig. 18.
The following example demonstrates the use of unfilldraw() with
black as its Color argument. Unfortunately, it also
demonstrates one of the limitations of the surface hiding algorith: The
line from p0 to p1 is hidden by the
filled Path pa. Since the portion of pa covered by
Path q has been unfilled,
the line from p_0 to p_1
should be visible as it passes through q. However, from the
point of view of 3DLDF, there is no relationship between pa and
q; nor does it "know" whether a Path has been filled or
unfilled. If it's on a Picture, it will hide objects lying
behind it, unless the surface hiding algorithm fails for another
reason. See Surface Hiding, for more information.
p0.draw(p1);
pa.fill(gray);
q.unfilldraw(black, "", "pensquare xscaled 3mm yscaled 1mm");
Fig. 19.
See Paths; Drawing and Filling, for more information, and complete descriptions of the functions.