home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / warphead.zip / H / PGPOLY.H < prev    next >
C/C++ Source or Header  |  1997-02-28  |  6KB  |  185 lines

  1. /* @(#)Z 1.6 com/src/imaging/polyclip/PGPoly.h, odimaging, od96os2, odos29646d 96/11/15 15:29:17 (96/10/29 09:26:42) */
  2. /*====START_GENERATED_PROLOG======================================
  3.  */
  4. /*
  5.  *   COMPONENT_NAME: odimaging
  6.  *
  7.  *   CLASSES:   PGContourList
  8.  *
  9.  *   ORIGINS: 82,27
  10.  *
  11.  *
  12.  *   (C) COPYRIGHT International Business Machines Corp. 1995,1996
  13.  *   All Rights Reserved
  14.  *   Licensed Materials - Property of IBM
  15.  *   US Government Users Restricted Rights - Use, duplication or
  16.  *   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  17.  *       
  18.  *   IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  19.  *   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  20.  *   PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  21.  *   CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
  22.  *   USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  23.  *   OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
  24.  *   OR PERFORMANCE OF THIS SOFTWARE.
  25.  */
  26. /*====END_GENERATED_PROLOG========================================
  27.  */
  28.  
  29. /********************************************************************/
  30. /*  Licensed Materials - Property of IBM                            */
  31. /*                                                                  */
  32. /*                                                                  */
  33. /* Copyright (C) International Business Machines Corp., 1994.       */
  34. /* Copyright (C) Apple Computer, Inc., 1994                         */
  35. /*                                                                  */
  36. /*  US Government Users Restricted Rights -                         */
  37. /*  Use, duplication, or disclosure restricted                      */
  38. /*  by GSA ADP Schedule Contract with IBM Corp.                     */
  39. /*                                                                  */
  40. /*  IBM Change History (most recent first):                         */
  41. /*          3/21/96 jab     Merge with DR4.                         */
  42. /*  <OS2>  08/22/95 aml     133968 Port DR3                         */
  43. /*                                                                  */
  44. /********************************************************************/
  45. /*
  46.   File:    PGPoly.h
  47.  
  48.   Contains:  Polygon structs for the clipper.
  49.  
  50.   Owned by:  Jens Alfke (based on algorithm by A. C. Kilgour)
  51.  
  52.   Copyright:  ⌐ 1994 - 1995 by Apple Computer, Inc., all rights reserved.
  53.  
  54.   Change History (most recent first):
  55.  
  56.      <4>   5/25/95  jpa    List.h --> LinkList.h [1253324]
  57.      <3>   9/29/94  RA    1189812: Mods for 68K build.
  58.      <2>    9/9/94  jpa    Changed _Log(ODPoint) to somPrintf(ODPoint)
  59.                   due to redefinition of LOG macro.
  60.      <1>   6/15/94  jpa    first checked in
  61.      ---------------------------Moved to ODSOM project.
  62.      <1>    5/9/94  jpa    first checked in
  63.  
  64.   In Progress:
  65. */
  66.  
  67. #ifndef _PGPOLY_
  68. #define _PGPOLY_
  69.  
  70. #ifndef _ALTPOINT_
  71. #include "AltPoint.h"
  72. #endif
  73.  
  74. #ifndef _ODTYPES_
  75. #include "ODTypes.h"
  76. #endif
  77.  
  78. #ifndef _PGCOMMON_
  79. #include "PGCommon.h"
  80. #endif
  81.  
  82. #ifndef _LINKLIST_
  83. #include "LinkList.h"
  84. #endif
  85.  
  86. #ifdef _PLATFORM_MACINTOSH_
  87. struct ODPolygon;
  88. struct ODContour;
  89. #endif
  90.  
  91. struct PGEvent;
  92. struct PGEventQueue;
  93. struct PGEdge;
  94.  
  95. class PGContourList;
  96.  
  97.  
  98. PGSense Compare( const ODPoint*, const ODPoint* );
  99.  
  100. void somPrintf( const ODPoint& );      // Overload of somPrintf, used only when logging
  101.  
  102.  
  103. // A PGVertex is a point stored in a linked list (but not a LinkedList) owned by a PGContour.
  104.  
  105. struct PGVertex :public ODPoint
  106. {
  107.   public:
  108.     PGVertex( const ODPoint*, PGVertex *prev );
  109.  
  110.     PGVertex*  GetPrevious( )  const  {return fPrevious;}
  111.     PGVertex*  GetNext( )  const    {return fNext;}
  112.  
  113.     void    Reverse( );
  114.     void    JamNext( PGVertex* );
  115.  
  116.     inline ODPoint& AsPoint( )        {return *(ODPoint*)this;}
  117.     inline const ODPoint& AsPoint( ) const  {return *(const ODPoint*)this;}
  118.  
  119. //  private:
  120.     PGVertex*  fPrevious;
  121.     PGVertex*  fNext;
  122. };
  123.  
  124.  
  125. // A PGContour is a contour of a polygon. It's a linked list of ODVertexes, but it's
  126. // not a descendent of LinkedList since it doesn't use a 'sentinel'. The vertices
  127. // form a pure circular list with no interruptions.
  128. // PGContours are themselves strung together into lists, so they inherit from Link.
  129.  
  130. struct PGContour :public Link
  131. {
  132.   public:
  133.     PGContour( LinkedList *onList );
  134.     virtual ~PGContour( );
  135.  
  136.     PGContour*  InitContour( const ODContour*, ODBoolean reverse );
  137.     void    AddAllEvents( PGEventQueue& );
  138.  
  139.     PGVertex*  First( )      {return fFirst;}
  140.     PGVertex*  Last( )        {return fLast;}
  141.     ODSLong  CountVertices( )  {return fNVertices;}
  142.  
  143.   protected:
  144.     PGVertex*  fFirst;        // First vertex in list
  145.     PGVertex*  fLast;        // Last vertex (not linked to 1st in PGOutputContours!)
  146.     ODSLong  fNVertices;      // Number of vertices in list
  147. };
  148.  
  149.  
  150. struct PGOutputContour :public PGContour
  151. {
  152.   public:
  153.     PGOutputContour( const PGEdge *left, const PGEdge *right );
  154.  
  155.     void    AddVertex( PGSide, const ODPoint* );
  156.     void    Close( );
  157.     void    AppendContour( PGOutputContour *cont, PGSide toSide );
  158.  
  159.     ODSShort  fWrapNo;      // Wrap number of this contour
  160.     PGSense    fSense;        // kPositive means clockwise
  161.  
  162.   // The following are not used by the clipper, but by Rgn2PlyM.cpp.
  163.   // Both take QuickDraw coordinates:
  164.     PGOutputContour( short x, short y );
  165.     void    AddVertex( PGSide, short x, short y );
  166. };
  167.  
  168.  
  169. // kIgnoredOutput is a special output-contour-pointer used to indicate that
  170. // there is an output contour but it is not needed (due to its wrap number.)
  171. #define kIgnoredOutput ((PGOutputContour*)0xFFFFFFFF)
  172.  
  173.  
  174. class PGContourList :public LinkedList
  175. {
  176.   public:
  177.     void    ReadPolygon( const ODPolygon&, ODBoolean reverse, PGEventQueue& );
  178.     void    BuildPolygon( ODPolygon& );
  179. };
  180.  
  181.  
  182. #endif /*_PGPOLY*/
  183.  
  184.  
  185.