[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
4.2 fill
void fill(picture pic=currentpicture, path g, pen p=currentpen);
Fill the interior region bounded by the cyclic path g
on the picture
pic
, using the pen p
.
There is also a convenient filldraw
command, which fills the path
and then draws in the boundary. One can specify separate pens for each
operation:
void filldraw(picture pic=currentpicture, path g, pen fillpen=currentpen, pen drawpen=currentpen);
This fixed-size version of fill
allows one to fill an object
described in PostScript
coordinates about the user coordinate
origin
:
void fill(pair origin, picture pic=currentpicture, path g, pen p=currentpen);
This is just a convenient abbreviation for the commands:
picture opic; fill(opic,g,p); add(pic,opic,origin);
void filloutside(picture pic=currentpicture, path g, pen p=currentpen);
fills the region exterior to the path g
, out to the current
boundary of picture pic
.
Lattice gradient shading varying smoothly over a two-dimensional
array of pens p
, using fill rule fillrule
, can be produced with
void latticeshade(picture pic=currentpicture, path g, bool stroke=false, pen fillrule=currentpen, pen[][] p)
If stroke=true
, the region filled is the same as the region that
would be drawn by draw(pic,g,fillrule+zerowinding)
; in this case the path
g
need not be cyclic.
The pens in p
must belong to the same color space. One can use the
functions rgb(pen)
or cmyk(pen)
to promote pens to a
higher color space, as illustrated in the example file
latticeshading.asy
.
Axial gradient shading varying smoothly from pena
to penb
in the
direction of the line segment a--b
can be achieved with
void axialshade(picture pic=currentpicture, path g, bool stroke=false, pen pena, pair a, pen penb, pair b);
Radial gradient shading varying smoothly from
pena
on the circle with center a
and radius ra
to
penb
on the circle with center b
and radius rb
is similar:
void radialshade(picture pic=currentpicture, path g, bool stroke=false, pen pena, pair a, real ra, pen penb, pair b, real rb);
Illustrations of radial shading are provided in the example files
shade.asy
, ring.asy
, and shadestroke.asy
.
Gouraud shading using fill rule fillrule
and the vertex colors in the
pen array p
on a triangular lattice defined by the vertices
z
and edge flags edges
is implemented with
void gouraudshade(picture pic=currentpicture, path g, bool stroke=false, pen fillrule=currentpen, pen[] p, pair[] z, int[] edges); void gouraudshade(picture pic=currentpicture, path g, bool stroke=false, pen fillrule=currentpen, pen[] p, int[] edges);
In the second form, the elements of z
are taken to be successive
nodes of path g
. The pens in p
must belong to the same
color space. Illustrations of Gouraud shading are provided in the example file
Gouraud.asy
and in the solid geometry module solids.asy
.
The edge flags used in Gouraud shading are documented here:
http://partners.adobe.com/public/developer/en/ps/sdk/TN5600.SmoothShading.pdf.
Tensor product shading using fill rule fillrule
on patches
bounded by the n cyclic paths of length 4 in path array b
,
using the vertex colors specified in the n \times 4 pen array
p
and internal control points in the n \times 4
array z
, is implemented with
void tensorshade(picture pic=currentpicture, path g, bool stroke=false, pen fillrule=currentpen, pen[][] p, path[] b=g, pair[][] z=new pair[][]);
If the array z
is empty, Coons shading, in which the color
control points are calculated automatically, is used.
The pens in p
must belong to the same color space.
A simpler interface for the case of a single patch (n=1) is also
available:
void tensorshade(picture pic=currentpicture, path g, bool stroke=false, pen fillrule=currentpen, pen[] p, path b=g, pair[] z=new pair[]);
One can also smoothly shade the regions between consecutive paths of a sequence using a given array of pens:
void draw(picture pic=currentpicture, path[] g, pen[] p);
Illustrations of tensor product and Coons shading are provided in the
example files tensor.asy
, Coons.asy
, BezierSurface.asy
,
and rainbow.asy
.
The following routine uses evenodd
clipping together with the
^^
operator to unfill a region:
void unfill(picture pic=currentpicture, path g);
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |