1 /* 2 * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) 3 * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice including the dates of first publication and 13 * either this permission notice or a reference to 14 * http://oss.sgi.com/projects/FreeB/ 15 * shall be included in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 22 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 * SOFTWARE. 24 * 25 * Except as contained in this notice, the name of Silicon Graphics, Inc. 26 * shall not be used in advertising or otherwise to promote the sale, use or 27 * other dealings in this Software without prior written authorization from 28 * Silicon Graphics, Inc. 29 */ 30 /* 31 ** Author: Eric Veach, July 1994. 32 ** 33 */ 34 35 #ifndef __tessmono_h_ 36 #define __tessmono_h_ 37 38 /* __gl_meshTessellateMonoRegion( face ) tessellates a monotone region 39 * (what else would it do??) The region must consist of a single 40 * loop of half-edges (see mesh.h) oriented CCW. "Monotone" in this 41 * case means that any vertical line intersects the interior of the 42 * region in a single interval. 43 * 44 * Tessellation consists of adding interior edges (actually pairs of 45 * half-edges), to split the region into non-overlapping triangles. 46 * 47 * __gl_meshTessellateInterior( mesh ) tessellates each region of 48 * the mesh which is marked "inside" the polygon. Each such region 49 * must be monotone. 50 * 51 * __gl_meshDiscardExterior( mesh ) zaps (ie. sets to NULL) all faces 52 * which are not marked "inside" the polygon. Since further mesh operations 53 * on NULL faces are not allowed, the main purpose is to clean up the 54 * mesh so that exterior loops are not represented in the data structure. 55 * 56 * __gl_meshSetWindingNumber( mesh, value, keepOnlyBoundary ) resets the 57 * winding numbers on all edges so that regions marked "inside" the 58 * polygon have a winding number of "value", and regions outside 59 * have a winding number of 0. 60 * 61 * If keepOnlyBoundary is TRUE, it also deletes all edges which do not 62 * separate an interior region from an exterior one. 63 */ 64 65 int __gl_meshTessellateMonoRegion( GLUface *face ); 66 int __gl_meshTessellateInterior( GLUmesh *mesh ); 67 void __gl_meshDiscardExterior( GLUmesh *mesh ); 68 int __gl_meshSetWindingNumber( GLUmesh *mesh, int value, 69 GLboolean keepOnlyBoundary ); 70 71 #endif 72