/usr/include/geomview/polyint.h is in libgeomview-dev 1.9.5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | /* Copyright (C) 1992-1998 The Geometry Center
* Copyright (C) 1998-2000 Stuart Levy, Tamara Munzner, Mark Phillips
*
* This file is part of Geomview.
*
* Geomview is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* Geomview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Geomview; see the file COPYING. If not, write
* to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
* USA, or visit http://www.gnu.org.
*/
#ifndef POLYINT_H
#define POLYINT_H
#define PW_VERT 1 /* What kinds of polygon intersections do we want? */
#define PW_EDGE 2
#define PW_FACE 4
#define PW_VISIBLE 8
/*
* Tolerance - a good value to pass to PolyZInt and its subsidiaries.
*/
#define POLYINT_TOL 1.e-6
/*
* PolyZInt
* Finds intersection of z-axis and arbitrary flat polygon.
*
* Input:
* n_verts # of vertices in polygon (the length of the verts array)
* verts vertices of polygon
* tol Tolerance. Any point whose distance from the z-axis
* is less than tol will be considered hit.
*
* Output:
* All output values are vvecs (See ooglutil.h). They must already be
* initialized when passed to PolyZInt. Any new intersection points found
* by PolyZInt will be appended onto the vvec. The count field of all the
* vvecs must be up to date. When PolyZInt returns, this field will reflect
* any new elements that have been added to the vvec (ie, the new count
* field will be equal to the old count field plus the number of intersection
* points found by PolyZInt). Note that all the vvecs will be the same
* length. PolyZInt will return the number of intersection points found.
* ip Intersection points (Point3). These are the points where
* the Z-axis intersects the plane containing the polygon.
* Note that if tol > 0.0, these points may not actually
* be inside the polygon.
* vertices Vertex intersections (ints - indices into verts). If no
* vertex intersection was found, the corresponding element
* in this vvec will be set to -1.
* edges Edge intersections (ints - indices of first point in
* verts list). If no edge intersection was found, the
* corresponding element in this vvec will be set to -1.
* ep Edge intersection locations, if any were found (Point3).
* An element of this array will contain valid data iff
* the corresponding element of the edges vvec is not equal
* to -1. The elements of this are guarenteed to be points
* on the edge, but, because of the tolerance, may not be
* equal to the corresponding elements of the ip array.
* For every intersection point found, ip will be filled in. vertices will
* be filled in only if a vertices was within tol of the intersection point.
* If a vertices was within tol of the intersection point, the edges to which
* the point belongs will not be considered to have been hit.
*/
int PolyZInt(int n_verts, Point3 *verts, float tol, int wanted, vvec *hits);
/*
* PolyNearNegZInt
* Wrapper for PolyZInt designed for mouse picking. Finds the
* intersection closest to the origin on the positive Z axis.
* Returns non-zero if there was a hit.
*
* Input:
* (See above)
* Output:
* ip Intersection point.
* vertex Index of vertex or -1 if there was no vertex hit.
* edge Index of first vertex of edge or -1 if there was no
* edge hit.
* ep Edge point.
* wanted Bit-mask of PW_{FACE|VERT|EDGE}: want which kinds of picks?
* zmin Only accept picks where z<zmax (closer than zmax; -1=near, 1=far clip plane)
*/
int PolyNearPosZInt(int n_verts, Point3 *verts, float tol,
Point3 *ip, int *vertex, int *edge, Point3 *ep,
int wanted, float zmax);
/*
* PolyLineInt
* Finds intersection of arbitrary line and arbitrary flat polygon.
* pt1 One point on the line
* pt2 A different point on the line
* Other arguments as above
*/
int PolyLineInt(Point3 *pt1, Point3 *pt2, int n_verts, Point3 *vert,
float tol, vvec *ip, vvec *vertices, vvec *edges, vvec *ep);
/*
* PolyRayInt
* Finds intersection of an arbitrary ray and an arbitrary flat polygon.
* The endpoint is included.
* pt1 Endpoint of the ray
* pt2 A different point on the ray
* Other arguments as above
*/
int PolyRayInt(Point3 *pt1, Point3 *pt2, int n_verts, Point3 *verts,
float tol, vvec *ip, vvec *vertices, vvec *edges, vvec *ep);
/*
* PolySegmentInt
* Finds the intersection of an arbitrary segment and an arbitrary flat
* polygon. The endpoints are included.
* pt1 One endpoint of the segment
* pt2 The other endpoint of the segment
* Other arguments as above
*/
int PolySegmentInt(Point3 *pt1, Point3 *pt2, int n_verts, Point3 *verts,
float tol, vvec *ip, vvec *vertices, vvec *edges, vvec *ep);
/*
* PolyInt_Align
* Creates a coordinate system such that the first specified point becomes
* the origin and the second becomes (0, 0, -1)
* pt1 Point which will map to the origin
* pt2 Point which will map to (0, 0, -1)
* T Matrex in which the transformation will be placed
*/
void PolyInt_Align(Point3 *pt1, Point3 *pt2, Transform T);
#endif /* POLYINT_H */
|