Query: xdrawarcs
OS: hpux
Section: 3
Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar
XDrawArcs() XDrawArcs()
Name
XDrawArcs - draw multiple arcs.
Synopsis
XDrawArcs(display, drawable, gc, arcs, narcs)
Display *display;
Drawable drawable;
GC gc;
XArc *arcs;
int narcs;
Arguments
display Specifies a connection to an X server; returned from XOpenDisplay().
drawable Specifies the drawable.
gc Specifies the graphics context.
arcs Specifies a pointer to an array of arcs.
narcs Specifies the number of arcs in the array.
Description
This is the plural version of XDrawArc(). See XDrawArc() for details of drawing a single arc.
There is a limit to the number of arcs that can be drawn in a single call. It varies according to the server. To determine how many arcs
you can draw in a single call, find out your server's maximum request size using XMaxRequestSize(). Subtract three and divide by three:
this is the maximum number of arcs you can draw in a single XDrawArcs() call.
The arcs are drawn in the order listed in the arcs array.
By specifying one axis to be zero, a horizontal or vertical line can be drawn. Angles are computed based solely on the coordinate system,
ignoring the aspect ratio.
For any given arc, no pixel is drawn more than once. If the last point in one arc coincides with the first point in the following arc, the
two arcs will join correctly. If the first point in the first arc coincides with the last point in the last arc, the two arcs will join
correctly. If two arcs join correctly and if line_width is greater than 0 and the arcs intersect, no pixel is drawn more than once. Oth-
erwise, the intersecting pixels of intersecting arcs are drawn multiple times. Specifying an arc with one endpoint and a clockwise extent
draws the same pixels as specifying the other endpoint and an equivalent counterclockwise extent, except as it affects joins.
XDrawArcs() uses these graphics context components: function, plane_mask, line_width, line_style, cap_style, join_style, fill_style, sub-
window_ mode, clip_x_origin, clip_y_origin, and clip_mask. This function also uses these graphics context mode-dependent components:
foreground, background, tile, stipple, ts_x_origin, ts_y_origin, dash_offset, and dashes.
The following is a technical explanation of the points drawn by XDrawArcs(). For an arc specified as [x, y, width, height, angle1,
angle2], the origin of the major and minor axes is at [x+(width/2), y+(height/2)], and the infinitely thin path describing the entire cir-
cle or ellipse intersects the horizontal axis at [x,y+(height/2)] and [x+width, y+(height/2)] and intersects the vertical axis at
[x+(width/2),y] and [x+(width/2), y+height]. These coordinates can be fractional. That is, they are not truncated to discrete coordi-
nates. The path should be defined by the ideal mathematical path. For a wide line with line width line_width, the bounding outlines for
filling are given by the infinitely thin paths describing the arcs:
[x+dx/2, y+dy/2, width-dx, height-dy, angle1, angle2]
and:
[x-line_width/2, y-line_width/2, width+line_width, height+line_width,
angle1, angle2]
where:
dx=min(line_width,width)
dy=min(line_width,height)
If (height != width) the angles must be specified in the effectively skewed coordinate system of the ellipse (for a circle, the angles and
coordinate systems are identical). The relationship between these angles and angles expressed in the normal coordinate system of the
screen (as measured with a protractor) is as follows:
skewed-angle = atan(tan(normal-angle) * width/height) + adjust
The skewed-angle and normal-angle are expressed in radians (rather than in 64ths of a degree) in the range [0,2*PI], and where atan returns
a value in the range [-PI/2,PI/2], and where adjust is:
0 for normal-angle in the range [0,PI/2]
PI for normal-angle in the range [PI/2,(3*PI)/2]
2*PI for normal-angle in the range [(3*PI)/2,2*PI]
For more information, see Volume One, Chapter 6, Drawing Graphics and Text.
Structures
typedef struct {
short x, y;
unsigned short width, height;
short angle1, angle2; /* Start and end of arc, in */
/* 64ths of degrees */
} XArc;
Errors
BadDrawable
BadGC
BadMatch
See Also
XClearArea(), XClearWindow(), XCopyArea(), XCopyPlane(), XDraw, XDrawArc(), XDrawFilled(), XDrawLine(), XDrawLines(), XDrawPoint(), XDraw-
Points(), XDrawRectangle(), XDrawRectangles(), XDrawSegments(), XFillArc(), XFillArcs(), XFillPolygon(), XFillRectangle(), XFillRectan-
gles().
Xlib - Drawing Primitives XDrawArcs()