📄 triangle.h
字号:
/*! \file triangle.h \brief Exports triangulateio structure for use in del_impl.hpp You should not use struct triangulateio in your application if you are using this wrapper. *//*****************************************************************************//* *//* (triangle.h) *//* *//* Include file for programs that call Triangle. *//* *//* Accompanies Triangle Version 1.6 *//* July 28, 2005 *//* *//* Copyright 1996, 2005 *//* Jonathan Richard Shewchuk *//* 2360 Woolsey #H *//* Berkeley, California 94705-1927 *//* jrs@cs.berkeley.edu *//* *//*****************************************************************************//*****************************************************************************//* *//* How to call Triangle from another program *//* *//* *//* If you haven't read Triangle's instructions (run "triangle -h" to read *//* them), you won't understand what follows. *//* *//* Triangle must be compiled into an object file (triangle.o) with the *//* TRILIBRARY symbol defined (generally by using the -DTRILIBRARY compiler *//* switch). The makefile included with Triangle will do this for you if *//* you run "make trilibrary". The resulting object file can be called via *//* the procedure triangulate(). *//* *//* If the size of the object file is important to you, you may wish to *//* generate a reduced version of triangle.o. The REDUCED symbol gets rid *//* of all features that are primarily of research interest. Specifically, *//* the -DREDUCED switch eliminates Triangle's -i, -F, -s, and -C switches. *//* The CDT_ONLY symbol gets rid of all meshing algorithms above and beyond *//* constrained Delaunay triangulation. Specifically, the -DCDT_ONLY switch *//* eliminates Triangle's -r, -q, -a, -u, -D, -Y, -S, and -s switches. *//* *//* IMPORTANT: These definitions (TRILIBRARY, REDUCED, CDT_ONLY) must be *//* made in the makefile or in triangle.c itself. Putting these definitions *//* in this file (triangle.h) will not create the desired effect. *//* *//* *//* The calling convention for triangulate() follows. *//* *//* void triangulate(triswitches, in, out, vorout) *//* char *triswitches; *//* struct triangulateio *in; *//* struct triangulateio *out; *//* struct triangulateio *vorout; *//* *//* `triswitches' is a string containing the command line switches you wish *//* to invoke. No initial dash is required. Some suggestions: *//* *//* - You'll probably find it convenient to use the `z' switch so that *//* points (and other items) are numbered from zero. This simplifies *//* indexing, because the first item of any type always starts at index *//* [0] of the corresponding array, whether that item's number is zero or *//* one. *//* - You'll probably want to use the `Q' (quiet) switch in your final code, *//* but you can take advantage of Triangle's printed output (including the *//* `V' switch) while debugging. *//* - If you are not using the `q', `a', `u', `D', `j', or `s' switches, *//* then the output points will be identical to the input points, except *//* possibly for the boundary markers. If you don't need the boundary *//* markers, you should use the `N' (no nodes output) switch to save *//* memory. (If you do need boundary markers, but need to save memory, a *//* good nasty trick is to set out->pointlist equal to in->pointlist *//* before calling triangulate(), so that Triangle overwrites the input *//* points with identical copies.) *//* - The `I' (no iteration numbers) and `g' (.off file output) switches *//* have no effect when Triangle is compiled with TRILIBRARY defined. *//* *//* `in', `out', and `vorout' are descriptions of the input, the output, *//* and the Voronoi output. If the `v' (Voronoi output) switch is not used, *//* `vorout' may be NULL. `in' and `out' may never be NULL. *//* *//* Certain fields of the input and output structures must be initialized, *//* as described below. *//* *//*****************************************************************************//*****************************************************************************//* *//* The `triangulateio' structure. *//* *//* Used to pass data into and out of the triangulate() procedure. *//* *//* *//* Arrays are used to store points, triangles, markers, and so forth. In *//* all cases, the first item in any array is stored starting at index [0]. *//* However, that item is item number `1' unless the `z' switch is used, in *//* which case it is item number `0'. Hence, you may find it easier to *//* index points (and triangles in the neighbor list) if you use the `z' *//* switch. Unless, of course, you're calling Triangle from a Fortran *//* program. *//* *//* Description of fields (except the `numberof' fields, which are obvious): *//* *//* `pointlist': An array of point coordinates. The first point's x *//* coordinate is at index [0] and its y coordinate at index [1], followed *//* by the coordinates of the remaining points. Each point occupies two *//* REALs. *//* `pointattributelist': An array of point attributes. Each point's *//* attributes occupy `numberofpointattributes' REALs. *//* `pointmarkerlist': An array of point markers; one int per point. *//* *//* `trianglelist': An array of triangle corners. The first triangle's *//* first corner is at index [0], followed by its other two corners in *//* counterclockwise order, followed by any other nodes if the triangle *//* represents a nonlinear element. Each triangle occupies *//* `numberofcorners' ints. *//* `triangleattributelist': An array of triangle attributes. Each *//* triangle's attributes occupy `numberoftriangleattributes' REALs. *//* `trianglearealist': An array of triangle area constraints; one REAL per *//* triangle. Input only. *//* `neighborlist': An array of triangle neighbors; three ints per *//* triangle. Output only. *//* *//* `segmentlist': An array of segment endpoints. The first segment's *//* endpoints are at indices [0] and [1], followed by the remaining *//* segments. Two ints per segment. *//* `segmentmarkerlist': An array of segment markers; one int per segment. *//* *//* `holelist': An array of holes. The first hole's x and y coordinates *//* are at indices [0] and [1], followed by the remaining holes. Two *//* REALs per hole. Input only, although the pointer is copied to the *//* output structure for your convenience. *//* *//* `regionlist': An array of regional attributes and area constraints. *//* The first constraint's x and y coordinates are at indices [0] and [1], *//* followed by the regional attribute at index [2], followed by the *//* maximum area at index [3], followed by the remaining area constraints. *//* Four REALs per area constraint. Note that each regional attribute is *//* used only if you select the `A' switch, and each area constraint is *//* used only if you select the `a' switch (with no number following), but *//* omitting one of these switches does not change the memory layout. *//* Input only, although the pointer is copied to the output structure for *//* your convenience. *//* *//* `edgelist': An array of edge endpoints. The first edge's endpoints are */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -