gclips.h

Go to the documentation of this file.
00001 // $Id: gclips.h 751 2006-03-31 15:43:49Z alex $
00002 /* @@tag:xara-cn@@ DO NOT MODIFY THIS LINE
00003 ================================XARAHEADERSTART===========================
00004  
00005                Xara LX, a vector drawing and manipulation program.
00006                     Copyright (C) 1993-2006 Xara Group Ltd.
00007        Copyright on certain contributions may be held in joint with their
00008               respective authors. See AUTHORS file for details.
00009 
00010 LICENSE TO USE AND MODIFY SOFTWARE
00011 ----------------------------------
00012 
00013 This file is part of Xara LX.
00014 
00015 Xara LX is free software; you can redistribute it and/or modify it
00016 under the terms of the GNU General Public License version 2 as published
00017 by the Free Software Foundation.
00018 
00019 Xara LX and its component source files are distributed in the hope
00020 that it will be useful, but WITHOUT ANY WARRANTY; without even the
00021 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00022 See the GNU General Public License for more details.
00023 
00024 You should have received a copy of the GNU General Public License along
00025 with Xara LX (see the file GPL in the root directory of the
00026 distribution); if not, write to the Free Software Foundation, Inc., 51
00027 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
00028 
00029 
00030 ADDITIONAL RIGHTS
00031 -----------------
00032 
00033 Conditional upon your continuing compliance with the GNU General Public
00034 License described above, Xara Group Ltd grants to you certain additional
00035 rights. 
00036 
00037 The additional rights are to use, modify, and distribute the software
00038 together with the wxWidgets library, the wxXtra library, and the "CDraw"
00039 library and any other such library that any version of Xara LX relased
00040 by Xara Group Ltd requires in order to compile and execute, including
00041 the static linking of that library to XaraLX. In the case of the
00042 "CDraw" library, you may satisfy obligation under the GNU General Public
00043 License to provide source code by providing a binary copy of the library
00044 concerned and a copy of the license accompanying it.
00045 
00046 Nothing in this section restricts any of the rights you have under
00047 the GNU General Public License.
00048 
00049 
00050 SCOPE OF LICENSE
00051 ----------------
00052 
00053 This license applies to this program (XaraLX) and its constituent source
00054 files only, and does not necessarily apply to other Xara products which may
00055 in part share the same code base, and are subject to their own licensing
00056 terms.
00057 
00058 This license does not apply to files in the wxXtra directory, which
00059 are built into a separate library, and are subject to the wxWindows
00060 license contained within that directory in the file "WXXTRA-LICENSE".
00061 
00062 This license does not apply to the binary libraries (if any) within
00063 the "libs" directory, which are subject to a separate license contained
00064 within that directory in the file "LIBS-LICENSE".
00065 
00066 
00067 ARRANGEMENTS FOR CONTRIBUTION OF MODIFICATIONS
00068 ----------------------------------------------
00069 
00070 Subject to the terms of the GNU Public License (see above), you are
00071 free to do whatever you like with your modifications. However, you may
00072 (at your option) wish contribute them to Xara's source tree. You can
00073 find details of how to do this at:
00074   http://www.xaraxtreme.org/developers/
00075 
00076 Prior to contributing your modifications, you will need to complete our
00077 contributor agreement. This can be found at:
00078   http://www.xaraxtreme.org/developers/contribute/
00079 
00080 Please note that Xara will not accept modifications which modify any of
00081 the text between the start and end of this header (marked
00082 XARAHEADERSTART and XARAHEADEREND).
00083 
00084 
00085 MARKS
00086 -----
00087 
00088 Xara, Xara LX, Xara X, Xara X/Xtreme, Xara Xtreme, the Xtreme and Xara
00089 designs are registered or unregistered trademarks, design-marks, and/or
00090 service marks of Xara Group Ltd. All rights in these marks are reserved.
00091 
00092 
00093       Xara Group Ltd, Gaddesden Place, Hemel Hempstead, HP2 6EX, UK.
00094                         http://www.xara.com/
00095 
00096 =================================XARAHEADEREND============================
00097  */
00098 // Gavin's path clipping code
00099 
00101 //
00102 // GClipS.h
00103 //
00105 
00106 const UINT32 CLIPPING_STYLE         = 0x0007 ;
00107 const UINT32 CLIPPING_SOURCE_WINDING    = 0x0010 ;
00108 const UINT32 CLIPPING_CLIP_WINDING  = 0x0020 ;
00109 const UINT32 CLIPPING_IS_STROKED        = 0x0040 ;
00110 const UINT32 CLIPPING_IS_CLOSED     = 0x0080 ;
00111 
00112 const UINT32 EDGE_CLIP      = 0x0001 ;
00113 const UINT32 EDGE_REVERSED  = 0x0002 ;
00114 const UINT32 EDGE_CURVED        = 0x0004 ;
00115 const UINT32 EDGE_STROKED   = 0x0008 ;
00116 
00118 
00119 struct Curve {
00120     POINT   P0 ;
00121     POINT   P1 ;
00122     POINT   P2 ;
00123     POINT   P3 ;
00124 } ;
00125 
00126 struct Edge {
00127     Edge    *LK ;           // Link
00128     Edge    *RLK ;          // Reverse link - only used to initially sort the edges
00129     double  DX ;            // Slope = (XE-XS)/(YE-YE)
00130     INT32   XS,YS ;         // Start point
00131     INT32   XE,YE ;         // End point
00132     INT32   XI,YI ;         // Intersection point
00133     UINT32  FF ;            // Flags
00134     Curve   *ID ;           // Pointer to curve data - used as curve ID.
00135     UINT32  TS ;            // Start t parameter
00136     UINT32  TE ;            // End t parameter
00137 } ;
00138 
00139 struct LineEdge {
00140     Edge    *LK ;
00141     Edge    *RLK ;
00142     double  DX ;
00143     INT32   XS,YS ;
00144     INT32   XE,YE ;
00145     INT32   XI,YI ;
00146     UINT32  FF ;
00147 } ;
00148 
00149 struct CurveEdge {
00150     Edge    *LK ;
00151     Edge    *RLK ;
00152     double  DX ;
00153     INT32   XS,YS ;
00154     INT32   XE,YE ;
00155     INT32   XI,YI ;
00156     UINT32  FF ;
00157     Curve   *ID ;
00158     UINT32  TS ;
00159     UINT32  TE ;
00160 } ;
00161 
00162 struct Strip {
00163     Strip   *FSLK ;             // [L]in[K] to next strip, [F]orward sorted by [S]tart value.
00164     Strip   *RELK ;             // [L]in[K] to next strip, [R]everse sorted by [E]nd value.
00165     INT32   YS,YE ;
00166     union   {
00167         struct {
00168             INT32   XSL,XEL ;
00169             union {
00170                 double  DXL ;
00171                 __int64 FGL ;   // -infinity if curve, +infinity if strip is invalid
00172             } ;
00173             UINT32  TSL,TEL ;
00174             INT32   XSR,XER ;
00175             union {
00176                 double  DXR ;
00177                 __int64 FGR ;   // -infinity if curve
00178             } ;
00179             UINT32  TSR,TER ;
00180             Curve   *IDL,*IDR ;
00181         } ;
00182         struct {
00183             Strip   *FELK ;     // [L]in[K] to next strip, [F]orward sorted by [E]nd value.
00184             Strip   *RSLK ;     // [L]in[K] to next strip, [R]everse sorted by [S]tart value.
00185             INT32   XS,XE ;
00186             union {
00187                 double  DX ;
00188                 __int64 FG ;
00189             } ;
00190             UINT32  TS,TE ;
00191             Curve   *ID ;
00192         } ;
00193     } ;
00194 } ;
00195 
00196 struct FilledStrip {
00197     Strip   *FSLK ;             // [L]in[K] to next strip, [F]orward sorted by [S]tart value.
00198     Strip   *RELK ;             // [L]in[K] to next strip, [R]everse sorted by [E]nd value.
00199     INT32   YS,YE ;
00200     INT32   XSL,XEL ;
00201     union {
00202         double  DXL ;
00203         __int64 FGL ;           // -infinity if curve, +infinity if strip is invalid
00204     } ;
00205     UINT32  TSL,TEL ;
00206     INT32   XSR,XER ;
00207     union {
00208         double  DXR ;
00209         __int64 FGR ;           // -infinity if curve
00210     } ;
00211     UINT32  TSR,TER ;
00212     Curve   *IDL,*IDR ;
00213 } ;
00214 
00215 struct LineStrip {
00216     Strip   *FSLK ;             // [L]in[K] to next strip, [F]orward sorted by [S]tart value.
00217     Strip   *RELK ;             // [L]in[K] to next strip, [R]everse sorted by [E]nd value.
00218     INT32   YS,YE ;
00219     Strip   *FELK ;             // [L]in[K] to next strip, [F]orward sorted by [E]nd value.
00220     Strip   *RSLK ;             // [L]in[K] to next strip, [R]everse sorted by [S]tart value.
00221     INT32   XS,XE ;
00222     union {
00223         double  DX ;
00224         __int64 FG ;
00225     } ;
00226     UINT32  TS,TE ;
00227     Curve   *ID ;
00228 } ;
00229 
00231 
00232 inline bool IsMove ( CONST BYTE Type ) { return (Type & PT_MOVETO)==PT_MOVETO   ; }
00233 inline bool IsLine ( CONST BYTE Type ) { return (Type & PT_MOVETO)==PT_LINETO   ; }
00234 inline bool IsCurve( CONST BYTE Type ) { return (Type & PT_MOVETO)==PT_BEZIERTO ; }
00235 
00236 inline bool IsntMove ( CONST BYTE Type ) { return (Type & PT_MOVETO)!=PT_MOVETO   ; }
00237 inline bool IsntLine ( CONST BYTE Type ) { return (Type & PT_MOVETO)!=PT_LINETO   ; }
00238 inline bool IsntCurve( CONST BYTE Type ) { return (Type & PT_MOVETO)!=PT_BEZIERTO ; }
00239 
00241 
00242 #pragma warning( disable : 4800 )
00243 
00244 inline bool IsSourceWinding( UINT32 Flags ) { return Flags & CLIPPING_SOURCE_WINDING ; }
00245 inline bool IsClipWinding  ( UINT32 Flags ) { return Flags & CLIPPING_CLIP_WINDING   ; }
00246 inline bool IsPathStroked  ( UINT32 Flags ) { return Flags & CLIPPING_IS_STROKED     ; }
00247 inline bool IsPathClosed   ( UINT32 Flags ) { return Flags & CLIPPING_IS_CLOSED      ; }
00248 
00249 #pragma warning( default : 4800 )
00250 
00252 
00253 inline UINT32 LO( CONST UINT32 l ) { return l & 0x0000ffff ; }
00254 inline UINT32 HI( CONST UINT32 l ) { return l & 0xffff0000 ; }
00255 

Generated on Sat Nov 10 03:45:25 2007 for Camelot by  doxygen 1.4.4