[Commit] papers/xr_ols2003 api.tex,1.3,1.4 appendix.tex,1.1,1.2

Carl Worth commit@keithp.com
Thu, 15 May 2003 13:04:50 -0700

Committed by: cworth

Update of /local/src/CVS/papers/xr_ols2003
In directory home.keithp.com:/tmp/cvs-serv16992

Modified Files:
	api.tex appendix.tex 
Log Message:
Added some figure references. Added stars example

Index: api.tex
RCS file: /local/src/CVS/papers/xr_ols2003/api.tex,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- api.tex	15 May 2003 17:34:17 -0000	1.3
+++ api.tex	15 May 2003 20:04:48 -0000	1.4
@@ -78,13 +78,14 @@
 surface as appropriate, (eg. write the image to a file, display the
 graphics on the screen, etc.).
-Sections~\ref{sec:path_example}-\ref{sec:pattern_example} provide examples
+Sections~\ref{sec:transformations}-\ref{sec:patterns} provide examples
 that build on this initial program. Each example consists of a single
 function that accepts an XrState pointer and performs drawing
 operations. Each example can be made into a complete program by simply
 adding the new function call to the program of Figure~\ref{fig:source_minimal}.
 All coordinates passed from user code to Xr are in a coordinate system
 known as ``user space''. These coordinates must be transformed to
@@ -108,7 +109,7 @@
 Programs using a structured approach to drawing will modify graphics
 state parameters in a hierarchical fashion. For example, a program may
-traverse a tree of objects to be drawn, modifying the CTM, current
+traverse a tree of objects to be drawn modifying the CTM, current
 color, line width, etc. at each level of the hierarchy.
 Xr supports this hierarchical approach to graphics by maintaing a
@@ -122,7 +123,8 @@
 This model has proven effective within structured C programs. Most
 drawing functions can be written with the following style:
-void draw_something (XrState *xrs)
+draw_something (XrState *xrs)
     XrSave (xrs);
@@ -136,7 +138,7 @@
 to more readily reusable code. Sometimes a single function will
 contain multiple sections of code framed by XrSave/XrRestore calls.
 Some find it more readable to include a new indented block between the
-XrSave/XrRestore calls in this case. Figure~\ref{fig:caps_joins_code}
+XrSave/XrRestore calls in this case. Figure~\ref{fig:caps_joins_source}
 contains an example of this style.
 \subsection{Path Construction}
@@ -164,6 +166,18 @@
 It is often convenient to specify path coordinates as relative offsets
 from the current point rather than as aboslute coordinates. To allow
 this, Xr provides XrRelMoveTo, XrRelLineTo, and XrRelCurveTo.
+Figure~\ref{fig:spiral} shows a rendering of a path constructed with
+one call to XrMoveTo and four calls to XrRelLineTo in a loop. The
+source code for this figure can be seen in
+  \begin{center}
+  \epsfxsize=2in
+  \epsfbox{examples/spiral}
+  \caption{Nested box illusion---constructed with XrMoveTo and XrRelLineTo}
+  \label{fig:spiral}
+  \end{center}
 Finally, XrClosePath closes the current subpath. This operations
 involves adding a straight line segment from the current point to the
@@ -173,7 +187,7 @@
 XrRelLineTo. The distinction is that a closed subpath will have a join
 at the junction of the final coincident point while an unclosed path
 will have caps on either end of the path, (even if the two ends happen
-to be coincident). See Section~\ref{sec:caps_joins_example} for more
+to be coincident). See Section~\ref{sec:path_drawing} for more
 discussion of caps and joins.
 As rectangular paths are commonly used, Xr provides a convenience
@@ -189,6 +203,7 @@
 \subsection{Path Drawing}
 After a path is constructed, it can be drawn in one of two ways:
 stroking its outline (XrStroke) or filling its interior (XrFill).
@@ -202,25 +217,34 @@
 different cap styles, (butt, square, or round), applied at either end
 of the path. The cap style is set with the XrSetLineCap function.
+Figure~\ref{fig:caps_joins} demonstrates the three possible cap and
+join styles. The source code for this figure (see
+Figure~\ref{fig:caps_joins_source}) demonstrates the use of
+XrSetLineJoin and XrSetLineCap as well as XrTranslate, XrSave, and
+  \begin{center}
+    \epsfxsize=2in \epsfbox{examples/caps_joins}
+  \caption{Demonstration of cap and join styles}
+  \label{fig:caps_joins}
+  \end{center}
 XrFill fills the area on the ``inside'' of the current path. Xr allows
 either the winding rule or the even-odd rule to be used to determine
 the area inside the path. This behavior is controlled by calling
 XrSetFillRule with a value of XrFillRuleWinding or XrFillRuleEvenOdd.
-Figure~\ref{fig:spiral_code} shows an example of code using XrMoveTo
-and XrRelLineTo to construct a spiral-shaped path. XrStroke is used to
-draw the outline of this path. Figure~\ref{fig:spiral_result} shows
-the result of this code, (a figure that appears to be several nested
-squares but is in fact a single continuous path).
-% And yes, I'm having too much fun drawing optical illusions.
+Figure~\ref{fig:stars} demonstrates the effect of the fill rule given
+a star-shaped path. With the winding rule the entire star is filled
+in, while with the even-odd rule the center of the star is considered
+outside the path and is not filled. Figure~\ref{fig:stars_source}
+contains the source code for this example.
-  \epsfxsize=2in
-  \epsfbox{examples/spiral}
-  \caption{Example showing XrStroke}
-  \label{fig:spiral_result}
+    \epsfxsize=2in \epsfbox{examples/stars}
+  \caption{Demonstration of the effect of the fill rule}
+  \label{fig:stars}
@@ -233,14 +257,6 @@
-    \epsfxsize=2in \epsfbox{examples/caps_joins}
-  \caption{Example showing cap and join styles}
-  \label{fig:caps_joins_result}
-  \end{center}
-  \begin{center}
   \caption{Example showing XrTranslate, XrRotate and XrSetLineWidth}
@@ -249,7 +265,7 @@
 \subsection{Using Patterns}

Index: appendix.tex
RCS file: /local/src/CVS/papers/xr_ols2003/appendix.tex,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- appendix.tex	15 May 2003 17:34:17 -0000	1.1
+++ appendix.tex	15 May 2003 20:04:48 -0000	1.2
@@ -29,8 +29,8 @@
-\caption{Using XrMoveTo, XrRelLineTo, and XrStroke}
+\caption{Source for nested box illusion}
@@ -89,7 +89,59 @@
-\caption{Using XrSetLineCap, XrSetLineJoin, XrSave, and XrRestore}
+\caption{Source for cap and join demonstration}
+star_path (XrState *xrs)
+    int i;
+    double theta = 4 * M_PI / 5.0;
+    XrMoveTo (xrs, 0, 0);
+    for (i=0; i < 4; i++) {
+        XrRelLineTo (xrs, 1.0, 0);
+        XrRotate (xrs, theta);
+    }
+    XrRotate (xrs, theta);
+    XrRotate (xrs, theta);
+    XrRotate (xrs, theta);
+    XrClosePath (xrs);
+draw_stars (XrState *xrs,
+            int width, int height)
+  XrSetRGBColor (xrs, 0, 0, 0);
+  XrSave (xrs);
+  {
+    XrTranslate (xrs, 5, height/2.6);
+    XrScale (xrs, height, height);
+    star_path (xrs);
+    XrSetFillRule (xrs, XrFillRuleWinding);
+    XrFill (xrs);
+  }
+  XrRestore (xrs);
+  XrSave (xrs);
+  {
+    XrTranslate (xrs,
+                 width-height-5, height/2.6);
+    XrScale (xrs, height, height);
+    star_path (xrs);
+    XrSetFillRule (xrs, XrFillRuleEvenOdd);
+    XrFill (xrs);
+  }
+  XrRestore (xrs);
+\caption{Source for stars to demonstrate fill rule}