/usr/include/teem/seek.h is in libteem-dev 1.11.0~svn6057-1ubuntu1.
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 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | /*
Teem: Tools to process and visualize scientific data and images .
Copyright (C) 2013, 2012, 2011, 2010, 2009 University of Chicago
Copyright (C) 2008, 2007, 2006, 2005 Gordon Kindlmann
Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
(LGPL) as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The terms of redistributing and/or modifying this software also
include exceptions to the LGPL that facilitate static linking.
This library 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 this library; if not, write to Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef SEEK_HAS_BEEN_INCLUDED
#define SEEK_HAS_BEEN_INCLUDED
#include <stdlib.h>
#include <math.h>
#include <teem/air.h>
#include <teem/biff.h>
#include <teem/hest.h>
#include <teem/ell.h>
#include <teem/nrrd.h>
#include <teem/gage.h>
#include <teem/limn.h>
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(TEEM_STATIC)
# if defined(TEEM_BUILD) || defined(seek_EXPORTS) || defined(teem_EXPORTS)
# define SEEK_EXPORT extern __declspec(dllexport)
# else
# define SEEK_EXPORT extern __declspec(dllimport)
# endif
#else /* TEEM_STATIC || UNIX */
# define SEEK_EXPORT extern
#endif
#ifdef __cplusplus
extern "C" {
#endif
#define SEEK seekBiffKey
/*
******** seekType* enum
**
** the kinds of features that can be extracted with seek3DExtract
*/
enum {
seekTypeUnknown, /* 0: nobody knows */
seekTypeIsocontour, /* 1: standard marching-cubes */
seekTypeRidgeSurface, /* 2: */
seekTypeValleySurface, /* 3: */
seekTypeRidgeLine, /* 4: */
seekTypeValleyLine, /* 5: */
seekTypeMinimalSurface, /* 6: */
seekTypeMaximalSurface, /* 7: */
seekTypeRidgeSurfaceOP, /* 8: ridge surface, using outer product rule */
seekTypeRidgeSurfaceT, /* 9: ridge surface, based on tensor T */
seekTypeValleySurfaceOP, /* 10: valley surface, using outer product rule */
seekTypeValleySurfaceT, /* 11: valley surface, based on tensor T */
seekTypeLast
};
#define SEEK_TYPE_MAX 11
typedef struct {
/* ------- input ------- */
int verbose;
const Nrrd *ninscl; /* a vanilla scalar (only) volume */
gageContext *gctx; /* for handling non-vanilla scalar volumes */
gagePerVolume *pvl; /* for handling non-vanilla scalar volumes */
int type; /* from seekType* enum */
int sclvItem,
gradItem, normItem,
evalItem, evecItem,
stngItem, hessItem; /* "stng" == strength */
int lowerInside, /* lower values are logically inside
isosurfaces, not outside */
normalsFind, /* find normals for isosurface vertices, either
with forward and central differencing on
values, or via the given normItem. **NOTE**
simplifying assumption: if gctx, and
if normalsFind, then normItem must be set
(i.e. will not find normals via differencing
when we have a gctx) */
strengthUse, /* do reject contributions to the feature for
which the strength measurement falls below
the required threshold */
strengthSign; /* the sign (either +1 of -1) of the strength
quantity when it is considered to have high
magnitude. E.g. for ridge surfaces,
hesseval[2] should be very negative so
strengthSign == -1 */
double isovalue, /* for seekTypeIsocontour */
strength, /* if strengthUse, feature needs to satisfy
strengthAns*strengthSign > strength */
evalDiffThresh; /* threshold for eigenvalue difference */
size_t samples[3]; /* user-requested dimensions of feature grid */
double facesPerVoxel, /* approximate; for pre-allocating geometry */
vertsPerVoxel; /* approximate; for pre-allocating geometry */
unsigned int pldArrIncr; /* increment for airArrays used during the
creation of geometry */
/* ------ internal ----- */
int *flag; /* for controlling updates of internal state */
const Nrrd *nin; /* either ninscl or gctx->pvl->nin */
unsigned int baseDim; /* 0 for scalars, or something else */
gageShape *_shape, /* local shape, always owned */
*shape; /* not owned */
Nrrd *nsclDerived; /* for seekTypeIsocontour: volume of computed
scalars, as measured by gage */
const double *sclvAns,
*gradAns, *normAns,
*evalAns, *evecAns,
*stngAns, *hessAns;
int reverse; /* for seekTypeIsocontour: need to reverse
sign of scalar field normal to get the
"right" isocontour normal */
double txfNormal[9]; /* for seekTypeIsocontour: how to
transform normals */
size_t spanSize; /* for seekTypeIsocontour: resolution of
span space along edge */
Nrrd *nspanHist; /* for seekTypeIsocontour: span space
histogram */
NrrdRange *range; /* for seekTypeIsocontour: range of scalars */
size_t sx, sy, sz; /* actual dimensions of feature grid */
double txfIdx[16]; /* transforms from the index space of the
feature sampling grid to the index space
of the underlying volume */
int *vidx, /* 15 * sx * sy array of vertex index
offsets, to support re-using of vertices
across voxels and slices. Yes, this means
there is allocation for edges in the voxels
beyond the positive X and Y edges */
*facevidx; /* 4 * sx * sy array of vertex indices for
degenerate points */
double *sclv, /* 4 * (sx+2) * (sy+2) scalar value cache,
with Z as fastest axis, and one sample
of padding on all sides, as needed for
central-difference-based gradients */
*grad, /* 3 * 2 * sx * sy array of gradients, for
crease feature extraction; axis ordering
(vec,z,x,y) */
*eval, /* 3 * 2 * sx * sy array of eigenvalues */
*evec, /* 9 * 2 * sx * sy array of eigenvectors */
*hess, /* 9 * 2 * sx * sy array of hessian matrices */
*t, /* 9 * 2 * sx * sy array of T tensors */
*edgealpha, /* 5 * 3 * sx * sy position of edge
intersections */
*edgenorm, /* 5 * 9 * sx * sy normal at edge
intersection */
*edgeicoord, /* 5 * 9 * sx * sy index coordinates of edge
intersection */
*facecoord, /* 4 * 2 * sx * sy coordinates of degenerate
point on face */
*facenorm, /* 4 * 3 * sx * sy normal at degeneracy */
*faceicoord, /* 4 * 3 * sx * sy index coordinates of edge
intersection */
*gradcontext, /* 3 * 2 * sx * sy spat. context of gradients */
*hesscontext, /* 9 * 2 * sx * sy spat. context of hessians */
*tcontext, /* 9 * 2 * sx * sy spat. context of T tensors */
*stngcontext; /* sx * sy lookahead for strength values */
signed char *flip, /* 2 * 5 * sx * sy record of how eigenvector(s)
of interest flip along the 5 voxel edges
that are unique to each voxel. Fastest axis
is the two eigensystem indices that are
tracked, in the case of crease lines */
*pairs, /* 4 * 12 * sx * sy connectivity on faces */
*treated; /* sx * sy mask; when strength is used, tells
* us if edges need to be treated (and if they
* were treated already) */
double *stng; /* 2 * sx * sy array of strength */
Nrrd *nvidx, *nsclv, /* nrrd wrappers around arrays above */
*ngrad, *neval,
*nevec, *nflip,
*nstng, *nhess, *nt,
*nfacevidx, *nedgealpha,
*nedgenorm, *nfacecoord,
*nfacenorm, *npairs,
*nedgeicoord, *nfaceicoord,
*ngradcontext, *nhesscontext,
*ntcontext, *nstngcontext,
*ntreated;
/* ------ output ----- */
unsigned int
voxNum, vertNum, faceNum; /* number of voxels contributing to latest
isosurface, and number of vertices and
faces in that isosurface */
double strengthSeenMax; /* in case strength was used, the maximum
vertex strength seen (from probing slabs) */
double time; /* time for extraction */
} seekContext;
/* enumsSeek.c */
SEEK_EXPORT const char *seekBiffKey;
SEEK_EXPORT const airEnum *const seekType;
/* tables.c */
SEEK_EXPORT const int seekContour3DTopoHackEdge[256];
SEEK_EXPORT const int seekContour3DTopoHackTriangle[256][16];
/* methodsSeek.c */
SEEK_EXPORT const int seekPresent;
SEEK_EXPORT seekContext *seekContextNew(void);
SEEK_EXPORT seekContext *seekContextNix(seekContext *sctx);
/* setSeek.c */
SEEK_EXPORT void seekVerboseSet(seekContext *sctx, int verbose);
SEEK_EXPORT int seekDataSet(seekContext *sctx, const Nrrd *ninscl,
gageContext *gctx, unsigned int pvlIdx);
SEEK_EXPORT int seekNormalsFindSet(seekContext *sctx, int doit);
SEEK_EXPORT int seekStrengthUseSet(seekContext *sctx, int doit);
SEEK_EXPORT int seekStrengthSet(seekContext *sctx, int strengthSign,
double strength);
SEEK_EXPORT int seekSamplesSet(seekContext *sctx, size_t samples[3]);
SEEK_EXPORT int seekTypeSet(seekContext *sctx, int type);
SEEK_EXPORT int seekLowerInsideSet(seekContext *sctx, int lowerInside);
SEEK_EXPORT int seekItemScalarSet(seekContext *sctx, int item);
SEEK_EXPORT int seekItemStrengthSet(seekContext *sctx, int item);
SEEK_EXPORT int seekItemNormalSet(seekContext *sctx, int item);
SEEK_EXPORT int seekItemGradientSet(seekContext *sctx, int item);
SEEK_EXPORT int seekItemEigensystemSet(seekContext *sctx,
int evalItem, int evecItem);
SEEK_EXPORT int seekItemHessSet(seekContext *sctx, int item);
SEEK_EXPORT int seekIsovalueSet(seekContext *sctx, double isovalue);
SEEK_EXPORT int seekEvalDiffThreshSet(seekContext *sctx, double evalDiffThresh);
/* updateSeek */
SEEK_EXPORT int seekUpdate(seekContext *sctx);
/* extract.c */
SEEK_EXPORT int seekExtract(seekContext *sctx, limnPolyData *lpld);
/* textract.c */
SEEK_EXPORT int seekVertexStrength(Nrrd *nval, seekContext *sctx,
limnPolyData *pld);
/* descend.c */
SEEK_EXPORT int seekDescendToDeg(double *coord,
double *botleft, double *botright,
double *topleft, double *topright,
int maxiter, double eps, char type);
SEEK_EXPORT int seekDescendToDegCell(double *coord,
double *Hbfl, double *Hbfr,
double *Hbbl, double *Hbbr,
double *Htfl, double *Htfr,
double *Htbl, double *Htbr,
int maxiter, double eps, char type);
SEEK_EXPORT int seekDescendToRidge(double *coord,
double *Hbfl, double *gbfl,
double *Hbfr, double *gbfr,
double *Hbbl, double *gbbl,
double *Hbbr, double *gbbr,
double *Htfl, double *gtfl,
double *Htfr, double *gtfr,
double *Htbl, double *gtbl,
double *Htbr, double *gtbr,
int maxiter, double eps,
char ridge, const double evalDiffThresh);
#ifdef __cplusplus
}
#endif
#endif /* SEEK_HAS_BEEN_INCLUDED */
|