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 /* 36 * bin.c++ 37 * 38 */ 39 40 //#include "glimports.h" 41 //#include "mystdio.h" 42 //#include "myassert.h" 43 #include "bin.h" 44 45 /*---------------------------------------------------------------------------- 46 * Constructor and destructor 47 *---------------------------------------------------------------------------- 48 */ 49 Bin::Bin() 50 { 51 head = NULL; 52 current = NULL; 53 } 54 55 Bin::~Bin() 56 { 57 assert( head == NULL); 58 } 59 60 /*---------------------------------------------------------------------------- 61 * remove_this_arc - remove given Arc_ptr from bin 62 *---------------------------------------------------------------------------- 63 */ 64 65 void 66 Bin::remove_this_arc( Arc_ptr arc ) 67 { 68 Arc_ptr *j; 69 for( j = &(head); (*j != 0) && (*j != arc); j = &((*j)->link) ); 70 71 if( *j != 0 ) { 72 if( *j == current ) 73 current = (*j)->link; 74 *j = (*j)->link; 75 } 76 } 77 78 /*---------------------------------------------------------------------------- 79 * numarcs - count number of arcs in bin 80 *---------------------------------------------------------------------------- 81 */ 82 83 int 84 Bin::numarcs() 85 { 86 long count = 0; 87 for( Arc_ptr jarc = firstarc(); jarc; jarc = nextarc() ) 88 count++; 89 return count; 90 } 91 92 /*---------------------------------------------------------------------------- 93 * adopt - place an orphaned arcs into their new parents bin 94 *---------------------------------------------------------------------------- 95 */ 96 97 void 98 Bin::adopt() 99 { 100 markall(); 101 102 Arc_ptr orphan; 103 while( (orphan = removearc()) != NULL ) { 104 for( Arc_ptr parent = orphan->next; parent != orphan; parent = parent->next ) { 105 if (! parent->ismarked() ) { 106 orphan->link = parent->link; 107 parent->link = orphan; 108 orphan->clearmark(); 109 break; 110 } 111 } 112 } 113 } 114 115 116 /*---------------------------------------------------------------------------- 117 * show - print out descriptions of the arcs in the bin 118 *---------------------------------------------------------------------------- 119 */ 120 121 void 122 Bin::show( const char *name ) 123 { 124 #ifndef NDEBUG 125 _glu_dprintf( "%s\n", name ); 126 for( Arc_ptr jarc = firstarc(); jarc; jarc = nextarc() ) 127 jarc->show( ); 128 #endif 129 } 130 131 132 133 /*---------------------------------------------------------------------------- 134 * markall - mark all arcs with an identifying tag 135 *---------------------------------------------------------------------------- 136 */ 137 138 void 139 Bin::markall() 140 { 141 for( Arc_ptr jarc=firstarc(); jarc; jarc=nextarc() ) 142 jarc->setmark(); 143 } 144 145 /*---------------------------------------------------------------------------- 146 * listBezier - print out all arcs that are untessellated border arcs 147 *---------------------------------------------------------------------------- 148 */ 149 150 void 151 Bin::listBezier( void ) 152 { 153 for( Arc_ptr jarc=firstarc(); jarc; jarc=nextarc() ) { 154 if( jarc->isbezier( ) ) { 155 assert( jarc->pwlArc->npts == 2 ); 156 #ifndef NDEBUG 157 TrimVertex *pts = jarc->pwlArc->pts; 158 REAL s1 = pts[0].param[0]; 159 REAL t1 = pts[0].param[1]; 160 REAL s2 = pts[1].param[0]; 161 REAL t2 = pts[1].param[1]; 162 _glu_dprintf( "arc (%g,%g) (%g,%g)\n", s1, t1, s2, t2 ); 163 #endif 164 } 165 } 166 } 167 168