Clone of mesa.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. ** License Applicability. Except to the extent portions of this file are
  3. ** made subject to an alternative license as permitted in the SGI Free
  4. ** Software License B, Version 1.1 (the "License"), the contents of this
  5. ** file are subject only to the provisions of the License. You may not use
  6. ** this file except in compliance with the License. You may obtain a copy
  7. ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
  8. ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
  9. **
  10. ** http://oss.sgi.com/projects/FreeB
  11. **
  12. ** Note that, as provided in the License, the Software is distributed on an
  13. ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
  14. ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
  15. ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
  16. ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
  17. **
  18. ** Original Code. The Original Code is: OpenGL Sample Implementation,
  19. ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
  20. ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
  21. ** Copyright in any portions created by third parties is as indicated
  22. ** elsewhere herein. All Rights Reserved.
  23. **
  24. ** Additional Notice Provisions: The application programming interfaces
  25. ** established by SGI in conjunction with the Original Code are The
  26. ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
  27. ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
  28. ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
  29. ** Window System(R) (Version 1.3), released October 19, 1998. This software
  30. ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
  31. ** published by SGI, but has not been independently verified as being
  32. ** compliant with the OpenGL(R) version 1.2.1 Specification.
  33. */
  34. /*
  35. * arc.h
  36. *
  37. * $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $
  38. * $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/libnurbs/internals/arc.h,v 1.1 2001/03/17 00:25:40 brianp Exp $
  39. */
  40. #ifndef __gluarc_h_
  41. #define __gluarc_h_
  42. #include "myassert.h"
  43. #include "bufpool.h"
  44. #include "mystdio.h"
  45. #include "types.h"
  46. #include "pwlarc.h"
  47. #include "trimvertex.h"
  48. class Bin;
  49. class Arc;
  50. class BezierArc;
  51. typedef class Arc *Arc_ptr;
  52. enum arc_side { arc_none = 0, arc_right, arc_top, arc_left, arc_bottom };
  53. class Arc: public PooledObj { /* an arc, in two list, the trim list and bin */
  54. public:
  55. static const int bezier_tag;
  56. static const int arc_tag;
  57. static const int tail_tag;
  58. Arc_ptr prev; /* trim list pointer */
  59. Arc_ptr next; /* trim list pointer */
  60. Arc_ptr link; /* bin pointers */
  61. BezierArc * bezierArc; /* associated bezier arc */
  62. PwlArc * pwlArc; /* associated pwl arc */
  63. long type; /* curve type */
  64. long nuid;
  65. inline Arc( Arc *, PwlArc * );
  66. inline Arc( arc_side, long );
  67. Arc_ptr append( Arc_ptr );
  68. int check( void );
  69. int isMonotone( void );
  70. int isDisconnected( void );
  71. int numpts( void );
  72. void markverts( void );
  73. void getextrema( Arc_ptr[4] );
  74. void print( void );
  75. void show( void );
  76. void makeSide( PwlArc *, arc_side );
  77. inline int isTessellated() { return pwlArc ? 1 : 0; }
  78. inline long isbezier() { return type & bezier_tag; }
  79. inline void setbezier() { type |= bezier_tag; }
  80. inline void clearbezier() { type &= ~bezier_tag; }
  81. inline long npts() { return pwlArc->npts; }
  82. inline TrimVertex * pts() { return pwlArc->pts; }
  83. inline REAL * tail() { return pwlArc->pts[0].param; }
  84. inline REAL * head() { return next->pwlArc->pts[0].param; }
  85. inline REAL * rhead() { return pwlArc->pts[pwlArc->npts-1].param; }
  86. inline long ismarked() { return type & arc_tag; }
  87. inline void setmark() { type |= arc_tag; }
  88. inline void clearmark() { type &= (~arc_tag); }
  89. inline void clearside() { type &= ~(0x7 << 8); }
  90. inline void setside( arc_side s ) { clearside(); type |= (((long)s)<<8); }
  91. inline arc_side getside() { return (arc_side) ((type>>8) & 0x7); }
  92. inline int getitail() { return type & tail_tag; }
  93. inline void setitail() { type |= tail_tag; }
  94. inline void clearitail() { type &= (~tail_tag); }
  95. };
  96. /*--------------------------------------------------------------------------
  97. * Arc - initialize a new Arc with the same type and uid of
  98. * a given Arc and a given pwl arc
  99. *--------------------------------------------------------------------------
  100. */
  101. inline
  102. Arc::Arc( Arc *j, PwlArc *p )
  103. {
  104. bezierArc = NULL;
  105. pwlArc = p;
  106. type = j->type;
  107. nuid = j->nuid;
  108. }
  109. /*--------------------------------------------------------------------------
  110. * Arc - initialize a new Arc with the same type and uid of
  111. * a given Arc and a given pwl arc
  112. *--------------------------------------------------------------------------
  113. */
  114. inline
  115. Arc::Arc( arc_side side, long _nuid )
  116. {
  117. bezierArc = NULL;
  118. pwlArc = NULL;
  119. type = 0;
  120. setside( side );
  121. nuid = _nuid;
  122. }
  123. #endif /* __gluarc_h_ */