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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
<!doctype HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Filled Areas</title>
<link rel="stylesheet" type="text/css" href="../../style.css">
</head>
<body>
<h2 align="center">Filled Areas</h2>
<p>It is an area filled with the foreground color, but it depends on the
current interior style. The <font>SOLID</font> style
depends only on the foreground color. The <font>HATCH</font>
and
<font>STIPPLE </font> style depend on the foreground color, background color and on the back opacity attribute. The
hatch lines drawn with this style do not depend on the other line attributes. The
<font>PATTERN</font> style depends only on global canvas
attributes.</p>
<p>The filled area includes the line at the edge of the area. So if you draw a
filled rectangle, sector or polygon on top of a non filled one using the same
coordinates, no style and 1 pixel width, the non filled primitive should be
obscured by the filled primitive. But depending on the driver implementation
some pixels at the edges may be not included. IMPORTANT: In the Postscript and
PDF drivers the line at the edge is not included at all.</p>
<p>If
either the background or the foreground color are modified, the hatched and
monochromatic fillings must be modified again in order to be updated.</p>
<p>Note that when a Filling Attribute is modified, the active filling style is
now that of the modified attribute (hatch, stipple or pattern). Notice that
this is not true for the clipping area. When the clipping area is modified,
the clipping is only affected if it is active.</p>
<hr>
<pre class="function"><span class="mainFunction">Filled <a name="Polygons">Polygons</a></span></pre>
<p>Filled polygons can be created using <font><strong>cdBegin(</strong>CD_FILL<strong>)/cdVertex(x,y)/.../cdEnd()</strong></font>.</p>
<p>See the documentation of <a href="polygon.html">cdBegin/cdVertex/cdEnd</a>.</p>
<pre class="function"><span class="mainFunction">void <a name="cdBox">cdCanvasBox</a>(cdCanvas* canvas, int xmin, int xmax, int ymin, int ymax); [in C]</span>
void cdfCanvasBox(cdCanvas* canvas, double xmin, double xmax, double ymin, double ymax); [in C]
void wdCanvasBox(cdCanvas* canvas, double xmin, double xmax, double ymin, double ymax); (WC) [in C]
canvas:Box(xmin, xmax, ymin, ymax: number) [in Lua]
canvas:fBox(xmin, xmax, ymin, ymax: number) [in Lua]
canvas:wBox(xmin, xmax, ymin, ymax: number) (WC) [in Lua]</pre>
<p>Fills a rectangle according to the current interior style. All points in
the interval <font><strong>x_min<=x<=x_max, y_min<=y<=y_max</strong></font>
will be painted. When the interior style <font>CD_HOLLOW</font>
is defined, the function behaves like its equivalent <strong>
<font>cdRect</font>.</strong></p>
<pre class="function"><span class="mainFunction">void <a name="cdSector">cdCanvasSector</a>(cdCanvas* canvas, int xc, int yc, int w, int h, double angle1, double angle2); [in C]</span>
void cdfCanvasSector(cdCanvas* canvas, double xc, double yc, double w, double h, double angle1, double angle2); [in C]
void wdCanvasSector(cdCanvas* canvas, double xc, double yc, double w, double h, double angle1, double angle2); (WC) [in C]
canvas:Sector(xc, yc, w, h, angle1, angle2: number) [in Lua]
canvas:fSector(xc, yc, w, h, angle1, angle2: number) [in Lua]
canvas:wSector(xc, yc, w, h, angle1, angle2: number) (WC) [in Lua]</pre>
<p>Fills the arc of an ellipse aligned with the axis, according to the current
interior style, in the shape of a pie. It is drawn counter-clockwise. The
coordinate <b>(xc,yc)</b> defines the center of the ellipse.
Dimensions <b>w</b> and <b>h</b> define the elliptic axes X
and Y, respectively. </p>
<p>Angles <b>angle1</b> and <b>angle2</b>, in degrees,
define the arc's beginning and end, but they are not the angle relative to the
center, except when w==h and the ellipse is reduced to a circle. The arc
starts at the point <b>(xc+(w/2)*cos(angle1),yc+(h/2)*sin(angle1))</b>
and ends at <b>(xc+(w/2)*cos(angle2),yc+(h/2)*sin(angle2))</b>. A
complete ellipse can be drawn using 0 and 360 as the angles. </p>
<p>The angles are specified so if the size of the ellipse (w x h) is changed,
its shape is preserved. So the angles relative to the center are dependent
from the ellipse size. The actual angle can be obtained using <tt><b>rangle =
atan2((h/2</b></tt><b>)*sin(angle),(w/2)*cos(angle))</b>.</p>
<p>The angles are given in degrees. To specify the angle in radians, you can
use the definition <font size="2"><strong>CD_RAD2DEG</strong></font>
to multiply the value in radians before passing the angle to CD. </p>
<p>When the interior style <font><strong>CD_HOLLOW</strong></font> is defined,
the function behaves like its equivalent <strong><font>cdArc</font></strong>,
plus two lines connecting to the center.</p>
<p align="center"><font size="4">Sector Parameters</font><br>
<img src="../../img/sector.gif" border="2" width="161" height="160"></p>
<pre class="function"><span class="mainFunction">void <a name="cdChord">cdCanvasChord</a>(cdCanvas* canvas, int xc, int yc, int w, int h, double angle1, double angle2); [in C]</span>
void cdfCanvasChord(cdCanvas* canvas, double xc, double yc, double w, double h, double angle1, double angle2); [in C]
void wdCanvasChord(cdCanvas* canvas, double xc, double yc, double w, double h, double angle1, double angle2); (WC) [in C]
canvas:Chord(xc, yc, w, h, angle1, angle2: number) [in Lua]
canvas:fChord(xc, yc, w, h, angle1, angle2: number) [in Lua]
canvas:wChord(xc, yc, w, h, angle1, angle2: number) (WC) [in Lua]</pre>
<p>Fills the arc of an ellipse aligned with the axis, according to the current
interior style, the start and end points of the arc are connected. The
parameters are the same as the <strong><font>cdSector</font></strong>.</p>
<p>When the interior style <font><strong>CD_HOLLOW</strong></font> is defined,
the function behaves like its equivalent <strong><font>cdArc</font></strong>,
plus a line connecting the arc start and end points.</p>
<p align="center"><font size="4">Chord Parameters</font><br>
<img src="../../img/chord.gif" border="2" width="161" height="160"></p>
<h3>Attributes</h3>
<pre class="function"><span class="mainFunction">int <a name="cdBackOpacity">cdCanvasBackOpacity</a>(cdCanvas* canvas, int opacity); [in C]</span>
canvas:BackOpacity(opacity: number) -> (old_opacity: number) [in Lua]</pre>
<p>Configures the background opacity to filling primitives based on the
foreground and background colors. Values: <font><b>
CD_TRANSPARENT</b></font> or <b>CD_OPAQUE</b>. If it is opaque
the primitive will erase whatever is in background with the background color.
If it is transparent, only the foreground color is painted. It returns the previous value. Default value: <b>
CD_TRANSPARENT</b>. Value <b><b>CD_QUERY</b> </b>simply returns the
current value. In some drivers is always opaque.</p>
<p align="center"><font size="4">Back Opacity Attribute<br>
</font><img src="../../img/opacity.gif" border="2" width="260" height="136"></p>
<pre class="function"><span class="mainFunction">int <a name="cdFillMode">cdCanvasFillMode</a>(cdCanvas* canvas, int mode); [in C]</span>
canvas:FillMode(mode: number) -> (old_mode: number) [in Lua]</pre>
<p>Selects a predefined polygon fill rule (<b>CD_EVENODD</b> or <strong>CD_WINDING</strong>). Returns the previous value. Default value: <b>
CD_EVENODD</b>. Value <b><b>CD_QUERY</b> </b>simply returns the current
value.</p>
<p align="center"><font size="4">Fill Modes</font><br>
<img src="../../img/fillmode.gif" border="2" width="260" height="136"></p>
<pre class="function"><span class="mainFunction">int <a name="cdInteriorStyle">cdCanvasInteriorStyle</a>(cdCanvas* canvas, int style); [in C]</span>
canvas:InteriorStyle(style: number) -> (old_style: number) [in Lua]</pre>
<p>Configures the current style for the area filling primitives: <b>
CD_SOLID</b>, <strong><b>CD_HOLLOW</b></strong>, <b>CD_HATCH</b>,
<b>CD_STIPPLE</b> or <b>CD_PATTERN</b>. Note that <b>
CD_HATCH</b> and <b>CD_STIPPLE</b> are affected by the backopacity. It returns the previous value. Default value: <b>CD_SOLID</b>. Value
<b><b>CD_QUERY</b> </b>simply returns the
current value.</p>
<p>If <i>a stipple</i> or <i>a pattern</i> were not defined, when they are
selected the state of the
attribute is not changed. </p>
<p>When the style <strong>CD_HOLLOW</strong> is defined, functions
<strong>cdBox</strong> and <strong>cdSector</strong> behave as their
equivalent <strong>cdRect</strong> and <strong>cdArc+Lines</strong>, and the
polygons with style <b>CD_FILL</b> behave like <b>CD_CLOSED_LINES</b>.</p>
<pre class="function"><span class="mainFunction">int <a name="cdHatch">cdCanvasHatch</a>(cdCanvas* canvas, int style); [in C]</span>
canvas:Hatch(style: number) -> (old_style: number) [in Lua]</pre>
<p>Selects a predefined <i>hatch</i> style (<b>CD_HORIZONTAL</b>, <b>CD_VERTICAL</b>,
<b>CD_FDIAGONAL</b>, <b>CD_BDIAGONAL</b>,
<b>CD_CROSS</b> or <b>CD_DIAGCROSS</b>) and sets the
interior style to <b>CD_HATCH</b>. The lines are drawn with the foreground
color, and the background is drawn with the background color if back opacity
is opaque. Returns the previous value.
Default value: <b>CD_HORIZONTAL</b>. Value <b><b>CD_QUERY</b> </b>
simply returns the current value. The foreground and background colors must be
set before setting the style. In some drivers is always opaque.</p>
<p align="center"><font size="4">Hatch Styles</font><br>
<img src="../../img/hatch.gif" border="2" width="182" height="348"></p>
<pre class="function"><span class="mainFunction">void <a name="cdStipple">cdCanvasStipple</a>(cdCanvas* canvas, int w, int h, const unsigned char *fgbg) [in C]</span>
canvas:Stipple(stipple: cdStipple) [in Lua]</pre>
<p>Defines a <b><b>wxh</b> </b>matrix of zeros (0) and ones (1). The zeros are
mapped to the background color or are transparent, according to the background
opacity attribute. The ones are mapped to the foreground color. The function
sets the interior style to <b>CD_STIPPLE</b>. To avoid having to deal
with matrices in C, the element <b>(i,j)</b> of <b>fgbg</b>
is stored as <b>fgbg[j*w+i]</b>. The origin is the left bottom corner
of the image. It does not need to be stored by the
application, as it is internally replicated by the library. In some
drivers is always opaque. The foreground and background colors must be set
before setting the style. </p>
<pre class="function"><span class="mainFunction">void <a name="wdStipple">wdCanvasStipple</a>(cdCanvas* canvas, int w, int h, const unsigned char *fgbg, double w_mm, double h_mm); [in C]</span>
canvas:wStipple(stipple: cdStipple, w_mm, h_mm: number) [in Lua]</pre>
<p>Allows specifying the stipple in world coordinates. Another stipple will be
created with the size in pixels corresponding to the specified size in
millimeters. The new size in pixels will be an integer factor of the original
size that is closets to the size in millimeters. The use of this function may produce very large or very small
stipples.</p>
<pre class="function"><span class="mainFunction">unsigned char* <a name="cdGetStipple">cdCanvasGetStipple</a>(cdCanvas* canvas, int* w, int* h); [in C]</span>
canvas:GetStipple() - > (stipple: cdStipple) [in Lua]</pre>
<p>Returns the current <i>stipple</i> and its dimensions. Returns NULL if no
<i>stipple</i> was defined.</p>
<pre class="function"><span class="mainFunction">void <a name="cdPattern">cdCanvasPattern</a>(cdCanvas* canvas, int w, int h, const long int *color); [in C]</span>
canvas:Pattern(pattern: cdPattern) [in Lua]</pre>
<p>Defines a new <b><b>wxh</b> </b>color matrix and sets the interior style
to <b>CD_PATTERN</b>. To avoid having to deal with matrices in C, the
color element <b>(i,j)</b> is stored as <b>color[j*w+i]</b>.
The origin is the left bottom corner of the image. It
does not need to be stored by the application, as it is internally replicated
by the library.</p>
<pre class="function"><span class="mainFunction">void <a name="wdPattern">wdCanvasPattern</a>(cdCanvas* canvas, int w, int h, const long int *color, double w_mm, double h_mm); [in C]</span>
canvas:wPattern(pattern: cdPattern, w_mm, h_mm: number) [in Lua]</pre>
<p>Allows specifying the pattern in world coordinates. Another pattern will be
created with the size in pixels corresponding to the specified size in
millimeters. The new size in pixels will be an integer factor of the original
size that is closets to the size in millimeters. The use of this function may produce very large or very small
patterns.</p>
<pre class="function"><span class="mainFunction">long int* <a name="cdGetPattern">cdCanvasGetPattern</a>(cdCanvas* canvas, int* w, int* h); [in C]</span>
canvas:GetPattern() - > (pattern: cdPattern) [in Lua]</pre>
<p>Returns the current <i>pattern</i> and its dimensions. Returns NULL if no
<i>pattern</i> was defined.</p>
<h3>Extras in Lua</h3>
<pre class="function"><a name="cdCreatePattern">cd.CreatePattern</a>(width, height: number) -> (pattern: cdPattern)</pre>
<p>Creates a pattern in Lua.</p>
<pre class="function"><a name="cdKillPattern">cd.KillPattern</a>(pattern: cdPattern)</pre>
<p>Destroys the created pattern and liberates allocated memory. If this
function is not called in Lua, the garbage collector will call it.</p>
<pre class="function"><a name="cdCreateStipple">cd.CreateStipple</a>(width, height: number) -> (stipple: cdStipple)</pre>
<p>Creates a stipple in Lua.</p>
<pre class="function"><a name="cdKillStipple">cd.KillStipple</a>(stipple: cdStipple)</pre>
<p>Destroys the created stipple and liberates allocated memory. If this
function is not called in Lua, the garbage collector will call it.</p>
<h3><a name="DataAccess">Data Access</a></h3>
<p>Data access in Lua is done directly using the operator "<font>[y*width
+ x]</font>". </p>
<p>All new types can have their values checked or changed directly as if they
were Lua tables:</p>
<pre>pattern[y*16 + x] = cd.EncodeColor(r, g, b)
...
color = pattern[y*16 + x]
r, g, b = cd.DecodeColor(color)
...
cd.Pattern(pattern)</pre>
<p>Notice that the type of value returned or received by
<font size="3">pattern[i]</font><font size="2"> </font>is a
<font>lightuserdata</font>, the same type used with functions <b>
<font size="3">cdEncodeColor</font></b>, <b>
<font size="3">cdDecodeColor</font></b>, <b>
<font size="3">cdPixel</font></b>, <b>
<font size="3">cdForeground</font></b><font size="2">
</font>and <b> <font size="3">cdBackground</font></b>. The value
returned or received by <font>stipple</font><font size="3">[i]</font>
is a number.</p>
</body>
</html>
|