[Openmcl-devel] XFillPolygon

Taoufik Dachraoui taoufik at mazeboard.com
Sun Mar 7 02:42:30 PST 2010


I found what is wrong in the code to fill a polygon, actually I had many
errors in the code and I corrected it as follows:

(defmacro x/fillpolygon (points &key (shape #$Complex) (mode
#$CoordModeOrigin))
"points is a list of pairs, shape is one of Complex, Convex,  or Nonconvex,
and
mode is one of CoordModeOrigin or CoordModePrevious."
    `(let ((i 0) (npoints (length ,points)))
       (ccl::%stack-block ((xpoints (* (ccl::foreign-size :<XP>oint :bytes)
       (1+ npoints))))
 (dolist (p ,points)
   (rlet ((xpoint :<XP>oint))
 (setf (pref xpoint :<XP>oint.x) (car p))
 (setf (pref xpoint :<XP>oint.y) (cadr p))
 (setf (paref xpoints (:* :<XP>oint) i) xpoint)
 (incf i)))
 (#_XFillPolygon *display*
 (window *context*)
 (graphics-context *context*)
 xpoints
 npoints
 ,shape
 ,mode
 ))))


Kind regards
Taoufik

On Sun, Mar 7, 2010 at 9:50 AM, Taoufik Dachraoui <taoufik at mazeboard.com>wrote:

> Good Morning,
>
>
> I am trying to write x/fillpolygon macro (see below) to call XFillPolygon
> as defined below:
>
> XFillPolygon(*display*, *d*, *gc*, *points*, *npoints*, *shape*, *mode*)
>       Display <http://tronche.com/gui/x/xlib/display/opening.html#Display> **display*;
>       Drawable *d*;
>       GC <http://tronche.com/gui/x/xlib/GC/manipulating.html> *gc*;
>       XPoint <http://tronche.com/gui/x/xlib/graphics/drawing/#XPoint> **points*;
>       int *npoints*;
>       int *shape*;
>       int *mode*;
>
>
>
> (defmacro x/fillpolygon (points &key (shape #$Complex) (mode
> #$CoordModeOrigin))
> "points is a list of pairs, shape is one of Complex, Convex,  or Nonconvex,
> and
> mode is one of CoordModeOrigin or CoordModePrevious."
>     `(rlet ((xpoints (:array :<XP>oint ,(length points))))
>        (let ((i 0))
>  (dolist (p ,points)
>    (rlet ((xpoint :<XP>oint))
>  (setf (pref xpoint :<XP>oint.x) (car p))
>  (setf (pref xpoint :<XP>oint.y) (cdr p))
>  (setf (paref xpoints (:array :<XP>oint ,(length points)) i) xpoint)
>  (incf i)))
>  (#_XFillPolygon *display*
>  (window *context*)
>  (graphics-context *context*)
>  xpoints
>  ,(length points)
>  ,shape
>  ,mode
>  ))))
>
>
> I am not sure if I am correctly defining xpoints, what is the correct code
> to call #_XFillPolygon?
>
> example of usage:
>
> > (x/fillpolygon '((100 40) (140 50) (130 60)))
>
>
> Kind regards
> Taoufik
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20100307/62260ee9/attachment.htm>


More information about the Openmcl-devel mailing list