/usr/include/geomview/pick.h is in libgeomview-dev 1.9.4-4.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 | /* 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.
*/
/* Authors: Charlie Gunn, Stuart Levy, Tamara Munzner, Mark Phillips */
#ifndef PICKDEF
#define PICKDEF
/*
* Public definitions for Geom Picking.
*/
typedef struct Pick Pick;
/* Things to look for while picking
* Specify PW_VERT|PW_EDGE|PW_FACE for all,
* or a subset for more specific picks.
* PW_VISIBLE checks Appearance to see what's
* actually visible.
*/
#define PW_VERT 1
#define PW_EDGE 2
#define PW_FACE 4
#define PW_VISIBLE 8
#define PA_END 100
#define PA_THRESH 101 /* float; x/y threshold (in projected space) */
#define PA_POINT 102 /* Point3 *; Picked 3D point (object space) */
/* Note PA_POINT gives a Point3, not an HPoint3! */
#define PA_DEPTH 103 /* float; depth (== PA_POINT's screen z component) */
#define PA_GPRIM 104 /* Geom *; geometric primitive picked if any */
#define PA_TPRIM 105 /* Transform; from PA_GPRIM to
PA_POINT, PA_VERT, etc. */
#define PA_TPRIMN 128 /* TransformN; from PA_GPRIM to
PA_POINT, PA_VERT, etc. */
#define PA_TWORLD 111 /* Transform; from PA_POINT, PA_VERT, etc. to
* world coords */
#define PA_TWORLDN 129 /* Transform; from PA_POINT, PA_VERT, etc. to
* world coords */
#define PA_WANT 106 /* int; bitmask of desirable values */
#define PA_VERT 107 /* HPoint3 v; picked vertex, if any */
#define PA_EDGE 108 /* HPoint3 e[2]; endpoints of picked
edge, if any */
#define PA_FACE 109 /* HPoint3 *f; pointer to array of vertices of
picked face, if any */
#define PA_FACEN 110 /* number of elements in PA_FACE array; NOTE:
when setting PA_FACE you must also set
PA_FACEN. */
/* Stuff to specify via PickSet() to allow
* INSTs with "location" fields to be pickable.
*/
#define PA_TC2N 112 /* Tfm camera coords to NDC (-1..+1) */
#define PA_TW2N 113 /* Tfm global coords to NDC */
#define PA_TS2N 114 /* Tfm screen (pixels; 0,0=lower left) to NDC */
extern Pick *PickSet( Pick *, int attr, ... );
extern int PickGet( Pick *, int attr, void *attrp );
extern void PickDelete( Pick * );
/*
* Geometric Picking routines.
* GeomMousePick() is intended for normal use by application programs.
* g is the root of the Geom tree
* p is the Pick structure created by PickSet(), etc., or NULL for default;
* If p!=NULL, it is modified in place, so results of the pick can be
* retrieved by later PickGet() calls.
* ap is the Appearance in effect when g is drawn, used to determine
* visibility of features if PW_VISIBLE is set;
* Tproj is the complete object-to-screen projection matrix;
* it normally maps world coordinates in g's space to
* the unit cube -1 <= {x, y, z} <= 1,
* with z = -1 at the near and z = +1 at the far clipping plane,
* x = y = 0 at the center of the screen;
* xpick and ypick are the relative (-1 <= {x,y} <= 1) window
* coordinates of the pick.
*
* Typical use:
* Point3 rawpt, pickworld, pickprim;
* double mousex, mousey; ( each reduced to range -1 .. +1; 0=center )
* Geom *world, *g;
* Pick *p = PickSet(NULL, PA_END);
* Transform Tworld2screen, Tpick2world, Tpick2prim;
* CamView( camera, Tworld2screen ); ( camera's world to screen )
*
* g = GeomMousePick( world, p, ap, Tworld2screen, mousex, mousey );
* if(g != NULL) { (then g == world)
* PickGet(p, PA_POINT, &rawpt);
* PickGet(p, PA_TWORLD, Tpick2world);
* Pt3Transform(Tpick2world, &rawpt, &pickworld); (in "world"'s coords)
*
* PickGet(p, PA_TPRIM, Tpick2prim);
* Pt3Transform(Tpick2prim, &rawpt, &pickprim); (in leaf-level gprim's coords)
* }
*/
extern Geom *GeomMousePick(Geom *g, Pick *p, Appearance *ap,
Transform Tproj, TransformN *TNproj, int *axes,
double xpick, double ypick );
/*
* GeomPick() is an internal routine:
* g, p, ap are as above for GeomMousePick.
* T is adapted for convenience in pick calculations;
* it is translated such that the pick goes through (x,y) = (0,0).
*/
extern Geom *GeomPick(Geom *g, Pick *p, Appearance *ap,
Transform T, TransformN *TN, int *axes);
#endif /*PICKDEF*/
|