|
|
@ -381,8 +381,8 @@ enum insertvertexresult {SUCCESSFULVERTEX, ENCROACHINGVERTEX, VIOLATINGVERTEX,
|
|
|
|
|
|
|
|
|
|
|
|
/* Labels that signify the result of direction finding. The result */
|
|
|
|
/* Labels that signify the result of direction finding. The result */
|
|
|
|
/* indicates that a segment connecting the two query points falls within */
|
|
|
|
/* indicates that a segment connecting the two query points falls within */
|
|
|
|
/* the direction triangle, along the left edge of the direction triangle, */
|
|
|
|
/* the direction triangle, a__int64 the left edge of the direction triangle, */
|
|
|
|
/* or along the right edge of the direction triangle. */
|
|
|
|
/* or a__int64 the right edge of the direction triangle. */
|
|
|
|
|
|
|
|
|
|
|
|
enum finddirectionresult {WITHIN, LEFTCOLLINEAR, RIGHTCOLLINEAR};
|
|
|
|
enum finddirectionresult {WITHIN, LEFTCOLLINEAR, RIGHTCOLLINEAR};
|
|
|
|
|
|
|
|
|
|
|
@ -586,12 +586,12 @@ struct event {
|
|
|
|
/* A node in the splay tree. Each node holds an oriented ghost triangle */
|
|
|
|
/* A node in the splay tree. Each node holds an oriented ghost triangle */
|
|
|
|
/* that represents a boundary edge of the growing triangulation. When a */
|
|
|
|
/* that represents a boundary edge of the growing triangulation. When a */
|
|
|
|
/* circle event covers two boundary edges with a triangle, so that they */
|
|
|
|
/* circle event covers two boundary edges with a triangle, so that they */
|
|
|
|
/* are no longer boundary edges, those edges are not immediately deleted */
|
|
|
|
/* are no __int64er boundary edges, those edges are not immediately deleted */
|
|
|
|
/* from the tree; rather, they are lazily deleted when they are next */
|
|
|
|
/* from the tree; rather, they are lazily deleted when they are next */
|
|
|
|
/* encountered. (Since only a random sample of boundary edges are kept */
|
|
|
|
/* encountered. (Since only a random sample of boundary edges are kept */
|
|
|
|
/* in the tree, lazy deletion is faster.) `keydest' is used to verify */
|
|
|
|
/* in the tree, lazy deletion is faster.) `keydest' is used to verify */
|
|
|
|
/* that a triangle is still the same as when it entered the splay tree; if */
|
|
|
|
/* that a triangle is still the same as when it entered the splay tree; if */
|
|
|
|
/* it has been rotated (due to a circle event), it no longer represents a */
|
|
|
|
/* it has been rotated (due to a circle event), it no __int64er represents a */
|
|
|
|
/* boundary edge and should be deleted. */
|
|
|
|
/* boundary edge and should be deleted. */
|
|
|
|
|
|
|
|
|
|
|
|
struct splaynode {
|
|
|
|
struct splaynode {
|
|
|
@ -633,7 +633,7 @@ struct memorypool {
|
|
|
|
int itembytes;
|
|
|
|
int itembytes;
|
|
|
|
int itemsperblock;
|
|
|
|
int itemsperblock;
|
|
|
|
int itemsfirstblock;
|
|
|
|
int itemsfirstblock;
|
|
|
|
long items, maxitems;
|
|
|
|
__int64 items, maxitems;
|
|
|
|
int unallocateditems;
|
|
|
|
int unallocateditems;
|
|
|
|
int pathitemsleft;
|
|
|
|
int pathitemsleft;
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -650,7 +650,7 @@ REAL o3derrboundA, o3derrboundB, o3derrboundC;
|
|
|
|
|
|
|
|
|
|
|
|
/* Random number seed is not constant, but I've made it global anyway. */
|
|
|
|
/* Random number seed is not constant, but I've made it global anyway. */
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long randomseed; /* Current random number seed. */
|
|
|
|
unsigned __int64 randomseed; /* Current random number seed. */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Mesh data structure. Triangle operates on only one mesh, but the mesh */
|
|
|
|
/* Mesh data structure. Triangle operates on only one mesh, but the mesh */
|
|
|
@ -693,11 +693,11 @@ struct mesh {
|
|
|
|
int holes; /* Number of input holes. */
|
|
|
|
int holes; /* Number of input holes. */
|
|
|
|
int regions; /* Number of input regions. */
|
|
|
|
int regions; /* Number of input regions. */
|
|
|
|
int undeads; /* Number of input vertices that don't appear in the mesh. */
|
|
|
|
int undeads; /* Number of input vertices that don't appear in the mesh. */
|
|
|
|
long edges; /* Number of output edges. */
|
|
|
|
__int64 edges; /* Number of output edges. */
|
|
|
|
int mesh_dim; /* Dimension (ought to be 2). */
|
|
|
|
int mesh_dim; /* Dimension (ought to be 2). */
|
|
|
|
int nextras; /* Number of attributes per vertex. */
|
|
|
|
int nextras; /* Number of attributes per vertex. */
|
|
|
|
int eextras; /* Number of attributes per triangle. */
|
|
|
|
int eextras; /* Number of attributes per triangle. */
|
|
|
|
long hullsize; /* Number of edges in convex hull. */
|
|
|
|
__int64 hullsize; /* Number of edges in convex hull. */
|
|
|
|
int steinerleft; /* Number of Steiner points not yet used. */
|
|
|
|
int steinerleft; /* Number of Steiner points not yet used. */
|
|
|
|
int vertexmarkindex; /* Index to find boundary marker of a vertex. */
|
|
|
|
int vertexmarkindex; /* Index to find boundary marker of a vertex. */
|
|
|
|
int vertex2triindex; /* Index to find a triangle adjacent to a vertex. */
|
|
|
|
int vertex2triindex; /* Index to find a triangle adjacent to a vertex. */
|
|
|
@ -707,14 +707,14 @@ struct mesh {
|
|
|
|
int checksegments; /* Are there segments in the triangulation yet? */
|
|
|
|
int checksegments; /* Are there segments in the triangulation yet? */
|
|
|
|
int checkquality; /* Has quality triangulation begun yet? */
|
|
|
|
int checkquality; /* Has quality triangulation begun yet? */
|
|
|
|
int readnodefile; /* Has a .node file been read? */
|
|
|
|
int readnodefile; /* Has a .node file been read? */
|
|
|
|
long samples; /* Number of random samples for point location. */
|
|
|
|
__int64 samples; /* Number of random samples for point location. */
|
|
|
|
|
|
|
|
|
|
|
|
long incirclecount; /* Number of incircle tests performed. */
|
|
|
|
__int64 incirclecount; /* Number of incircle tests performed. */
|
|
|
|
long counterclockcount; /* Number of counterclockwise tests performed. */
|
|
|
|
__int64 counterclockcount; /* Number of counterclockwise tests performed. */
|
|
|
|
long orient3dcount; /* Number of 3D orientation tests performed. */
|
|
|
|
__int64 orient3dcount; /* Number of 3D orientation tests performed. */
|
|
|
|
long hyperbolacount; /* Number of right-of-hyperbola tests performed. */
|
|
|
|
__int64 hyperbolacount; /* Number of right-of-hyperbola tests performed. */
|
|
|
|
long circumcentercount; /* Number of circumcenter calculations performed. */
|
|
|
|
__int64 circumcentercount; /* Number of circumcenter calculations performed. */
|
|
|
|
long circletopcount; /* Number of circle top calculations performed. */
|
|
|
|
__int64 circletopcount; /* Number of circle top calculations performed. */
|
|
|
|
|
|
|
|
|
|
|
|
/* Triangular bounding box vertices. */
|
|
|
|
/* Triangular bounding box vertices. */
|
|
|
|
|
|
|
|
|
|
|
@ -827,8 +827,8 @@ struct behavior {
|
|
|
|
/* extracting an orientation (in the range 0 to 2) and a pointer to the */
|
|
|
|
/* extracting an orientation (in the range 0 to 2) and a pointer to the */
|
|
|
|
/* beginning of a triangle. The encode() routine compresses a pointer to a */
|
|
|
|
/* beginning of a triangle. The encode() routine compresses a pointer to a */
|
|
|
|
/* triangle and an orientation into a single pointer. My assumptions that */
|
|
|
|
/* triangle and an orientation into a single pointer. My assumptions that */
|
|
|
|
/* triangles are four-byte-aligned and that the `unsigned long' type is */
|
|
|
|
/* triangles are four-byte-aligned and that the `unsigned __int64' type is */
|
|
|
|
/* long enough to hold a pointer are two of the few kludges in this program.*/
|
|
|
|
/* __int64 enough to hold a pointer are two of the few kludges in this program.*/
|
|
|
|
/* */
|
|
|
|
/* */
|
|
|
|
/* Subsegments are manipulated similarly. A pointer to a subsegment */
|
|
|
|
/* Subsegments are manipulated similarly. A pointer to a subsegment */
|
|
|
|
/* carries both an address and an orientation in the range 0 to 1. */
|
|
|
|
/* carries both an address and an orientation in the range 0 to 1. */
|
|
|
@ -938,16 +938,16 @@ int minus1mod3[3] = {2, 0, 1};
|
|
|
|
/* extracted from the two least significant bits of the pointer. */
|
|
|
|
/* extracted from the two least significant bits of the pointer. */
|
|
|
|
|
|
|
|
|
|
|
|
#define decode(ptr, otri) \
|
|
|
|
#define decode(ptr, otri) \
|
|
|
|
(otri).orient = (int) ((unsigned long) (ptr) & (unsigned long) 3l); \
|
|
|
|
(otri).orient = (int) ((unsigned __int64) (ptr) & (unsigned __int64) 3l); \
|
|
|
|
(otri).tri = (triangle *) \
|
|
|
|
(otri).tri = (triangle *) \
|
|
|
|
((unsigned long) (ptr) ^ (unsigned long) (otri).orient)
|
|
|
|
((unsigned __int64) (ptr) ^ (unsigned __int64) (otri).orient)
|
|
|
|
|
|
|
|
|
|
|
|
/* encode() compresses an oriented triangle into a single pointer. It */
|
|
|
|
/* encode() compresses an oriented triangle into a single pointer. It */
|
|
|
|
/* relies on the assumption that all triangles are aligned to four-byte */
|
|
|
|
/* relies on the assumption that all triangles are aligned to four-byte */
|
|
|
|
/* boundaries, so the two least significant bits of (otri).tri are zero. */
|
|
|
|
/* boundaries, so the two least significant bits of (otri).tri are zero. */
|
|
|
|
|
|
|
|
|
|
|
|
#define encode(otri) \
|
|
|
|
#define encode(otri) \
|
|
|
|
(triangle) ((unsigned long) (otri).tri | (unsigned long) (otri).orient)
|
|
|
|
(triangle) ((unsigned __int64) (otri).tri | (unsigned __int64) (otri).orient)
|
|
|
|
|
|
|
|
|
|
|
|
/* The following handle manipulation primitives are all described by Guibas */
|
|
|
|
/* The following handle manipulation primitives are all described by Guibas */
|
|
|
|
/* and Stolfi. However, Guibas and Stolfi use an edge-based data */
|
|
|
|
/* and Stolfi. However, Guibas and Stolfi use an edge-based data */
|
|
|
@ -1111,16 +1111,16 @@ int minus1mod3[3] = {2, 0, 1};
|
|
|
|
|
|
|
|
|
|
|
|
#define infect(otri) \
|
|
|
|
#define infect(otri) \
|
|
|
|
(otri).tri[6] = (triangle) \
|
|
|
|
(otri).tri[6] = (triangle) \
|
|
|
|
((unsigned long) (otri).tri[6] | (unsigned long) 2l)
|
|
|
|
((unsigned __int64) (otri).tri[6] | (unsigned __int64) 2l)
|
|
|
|
|
|
|
|
|
|
|
|
#define uninfect(otri) \
|
|
|
|
#define uninfect(otri) \
|
|
|
|
(otri).tri[6] = (triangle) \
|
|
|
|
(otri).tri[6] = (triangle) \
|
|
|
|
((unsigned long) (otri).tri[6] & ~ (unsigned long) 2l)
|
|
|
|
((unsigned __int64) (otri).tri[6] & ~ (unsigned __int64) 2l)
|
|
|
|
|
|
|
|
|
|
|
|
/* Test a triangle for viral infection. */
|
|
|
|
/* Test a triangle for viral infection. */
|
|
|
|
|
|
|
|
|
|
|
|
#define infected(otri) \
|
|
|
|
#define infected(otri) \
|
|
|
|
(((unsigned long) (otri).tri[6] & (unsigned long) 2l) != 0l)
|
|
|
|
(((unsigned __int64) (otri).tri[6] & (unsigned __int64) 2l) != 0l)
|
|
|
|
|
|
|
|
|
|
|
|
/* Check or set a triangle's attributes. */
|
|
|
|
/* Check or set a triangle's attributes. */
|
|
|
|
|
|
|
|
|
|
|
@ -1158,16 +1158,16 @@ int minus1mod3[3] = {2, 0, 1};
|
|
|
|
/* are masked out to produce the real pointer. */
|
|
|
|
/* are masked out to produce the real pointer. */
|
|
|
|
|
|
|
|
|
|
|
|
#define sdecode(sptr, osub) \
|
|
|
|
#define sdecode(sptr, osub) \
|
|
|
|
(osub).ssorient = (int) ((unsigned long) (sptr) & (unsigned long) 1l); \
|
|
|
|
(osub).ssorient = (int) ((unsigned __int64) (sptr) & (unsigned __int64) 1l); \
|
|
|
|
(osub).ss = (subseg *) \
|
|
|
|
(osub).ss = (subseg *) \
|
|
|
|
((unsigned long) (sptr) & ~ (unsigned long) 3l)
|
|
|
|
((unsigned __int64) (sptr) & ~ (unsigned __int64) 3l)
|
|
|
|
|
|
|
|
|
|
|
|
/* sencode() compresses an oriented subsegment into a single pointer. It */
|
|
|
|
/* sencode() compresses an oriented subsegment into a single pointer. It */
|
|
|
|
/* relies on the assumption that all subsegments are aligned to two-byte */
|
|
|
|
/* relies on the assumption that all subsegments are aligned to two-byte */
|
|
|
|
/* boundaries, so the least significant bit of (osub).ss is zero. */
|
|
|
|
/* boundaries, so the least significant bit of (osub).ss is zero. */
|
|
|
|
|
|
|
|
|
|
|
|
#define sencode(osub) \
|
|
|
|
#define sencode(osub) \
|
|
|
|
(subseg) ((unsigned long) (osub).ss | (unsigned long) (osub).ssorient)
|
|
|
|
(subseg) ((unsigned __int64) (osub).ss | (unsigned __int64) (osub).ssorient)
|
|
|
|
|
|
|
|
|
|
|
|
/* ssym() toggles the orientation of a subsegment. */
|
|
|
|
/* ssym() toggles the orientation of a subsegment. */
|
|
|
|
|
|
|
|
|
|
|
@ -1386,7 +1386,7 @@ REAL area; /* The area of the triangle. */
|
|
|
|
oalen = dxoa * dxoa + dyoa * dyoa;
|
|
|
|
oalen = dxoa * dxoa + dyoa * dyoa;
|
|
|
|
dalen = dxda * dxda + dyda * dyda;
|
|
|
|
dalen = dxda * dxda + dyda * dyda;
|
|
|
|
odlen = dxod * dxod + dyod * dyod;
|
|
|
|
odlen = dxod * dxod + dyod * dyod;
|
|
|
|
/* Find the square of the length of the longest edge. */
|
|
|
|
/* Find the square of the length of the __int64est edge. */
|
|
|
|
maxlen = (dalen > oalen) ? dalen : oalen;
|
|
|
|
maxlen = (dalen > oalen) ? dalen : oalen;
|
|
|
|
maxlen = (odlen > maxlen) ? odlen : maxlen;
|
|
|
|
maxlen = (odlen > maxlen) ? odlen : maxlen;
|
|
|
|
|
|
|
|
|
|
|
@ -1703,7 +1703,7 @@ void info()
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" -A Assigns an additional floating-point attribute to each triangle\n");
|
|
|
|
" -A Assigns an additional floating-point attribute to each triangle\n");
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" that identifies what segment-bounded region each triangle belongs\n");
|
|
|
|
" that identifies what segment-bounded region each triangle be__int64s\n");
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" to. Attributes are assigned to regions by the .poly file. If a\n");
|
|
|
|
" to. Attributes are assigned to regions by the .poly file. If a\n");
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
@ -2277,7 +2277,7 @@ void info()
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" Triangle calculates the intersection points for you and adds them to\n");
|
|
|
|
" Triangle calculates the intersection points for you and adds them to\n");
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" the triangulation--as long as your machine's floating-point precision\n");
|
|
|
|
" the triangulation--as __int64 as your machine's floating-point precision\n");
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" doesn't become a problem. You are tempting the fates if you have three\n"
|
|
|
|
" doesn't become a problem. You are tempting the fates if you have three\n"
|
|
|
|
);
|
|
|
|
);
|
|
|
@ -3143,10 +3143,10 @@ void info()
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" row of evenly spaced, segment-connected vertices? Have you simply\n");
|
|
|
|
" row of evenly spaced, segment-connected vertices? Have you simply\n");
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" defined one long segment connecting the leftmost vertex to the rightmost\n"
|
|
|
|
" defined one __int64 segment connecting the leftmost vertex to the rightmost\n"
|
|
|
|
);
|
|
|
|
);
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" vertex, and a bunch of vertices lying along it? This method occasionally\n"
|
|
|
|
" vertex, and a bunch of vertices lying a__int64 it? This method occasionally\n"
|
|
|
|
);
|
|
|
|
);
|
|
|
|
printf(
|
|
|
|
printf(
|
|
|
|
" works, especially with horizontal and vertical lines, but often it\n");
|
|
|
|
" works, especially with horizontal and vertical lines, but often it\n");
|
|
|
@ -3675,27 +3675,27 @@ struct otri *t;
|
|
|
|
struct osub printsh;
|
|
|
|
struct osub printsh;
|
|
|
|
vertex printvertex;
|
|
|
|
vertex printvertex;
|
|
|
|
|
|
|
|
|
|
|
|
printf("triangle x%lx with orientation %d:\n", (unsigned long) t->tri,
|
|
|
|
printf("triangle x%lx with orientation %d:\n", (unsigned __int64) t->tri,
|
|
|
|
t->orient);
|
|
|
|
t->orient);
|
|
|
|
decode(t->tri[0], printtri);
|
|
|
|
decode(t->tri[0], printtri);
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
printf(" [0] = Outer space\n");
|
|
|
|
printf(" [0] = Outer space\n");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
printf(" [0] = x%lx %d\n", (unsigned long) printtri.tri,
|
|
|
|
printf(" [0] = x%lx %d\n", (unsigned __int64) printtri.tri,
|
|
|
|
printtri.orient);
|
|
|
|
printtri.orient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
decode(t->tri[1], printtri);
|
|
|
|
decode(t->tri[1], printtri);
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
printf(" [1] = Outer space\n");
|
|
|
|
printf(" [1] = Outer space\n");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
printf(" [1] = x%lx %d\n", (unsigned long) printtri.tri,
|
|
|
|
printf(" [1] = x%lx %d\n", (unsigned __int64) printtri.tri,
|
|
|
|
printtri.orient);
|
|
|
|
printtri.orient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
decode(t->tri[2], printtri);
|
|
|
|
decode(t->tri[2], printtri);
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
printf(" [2] = Outer space\n");
|
|
|
|
printf(" [2] = Outer space\n");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
printf(" [2] = x%lx %d\n", (unsigned long) printtri.tri,
|
|
|
|
printf(" [2] = x%lx %d\n", (unsigned __int64) printtri.tri,
|
|
|
|
printtri.orient);
|
|
|
|
printtri.orient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -3704,37 +3704,37 @@ struct otri *t;
|
|
|
|
printf(" Origin[%d] = NULL\n", (t->orient + 1) % 3 + 3);
|
|
|
|
printf(" Origin[%d] = NULL\n", (t->orient + 1) % 3 + 3);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
printf(" Origin[%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
printf(" Origin[%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
(t->orient + 1) % 3 + 3, (unsigned long) printvertex,
|
|
|
|
(t->orient + 1) % 3 + 3, (unsigned __int64) printvertex,
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
dest(*t, printvertex);
|
|
|
|
dest(*t, printvertex);
|
|
|
|
if (printvertex == (vertex) NULL)
|
|
|
|
if (printvertex == (vertex) NULL)
|
|
|
|
printf(" Dest [%d] = NULL\n", (t->orient + 2) % 3 + 3);
|
|
|
|
printf(" Dest [%d] = NULL\n", (t->orient + 2) % 3 + 3);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
printf(" Dest [%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
printf(" Dest [%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
(t->orient + 2) % 3 + 3, (unsigned long) printvertex,
|
|
|
|
(t->orient + 2) % 3 + 3, (unsigned __int64) printvertex,
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
apex(*t, printvertex);
|
|
|
|
apex(*t, printvertex);
|
|
|
|
if (printvertex == (vertex) NULL)
|
|
|
|
if (printvertex == (vertex) NULL)
|
|
|
|
printf(" Apex [%d] = NULL\n", t->orient + 3);
|
|
|
|
printf(" Apex [%d] = NULL\n", t->orient + 3);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
printf(" Apex [%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
printf(" Apex [%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
t->orient + 3, (unsigned long) printvertex,
|
|
|
|
t->orient + 3, (unsigned __int64) printvertex,
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
|
|
|
|
|
|
|
|
if (b->usesegments) {
|
|
|
|
if (b->usesegments) {
|
|
|
|
sdecode(t->tri[6], printsh);
|
|
|
|
sdecode(t->tri[6], printsh);
|
|
|
|
if (printsh.ss != m->dummysub) {
|
|
|
|
if (printsh.ss != m->dummysub) {
|
|
|
|
printf(" [6] = x%lx %d\n", (unsigned long) printsh.ss,
|
|
|
|
printf(" [6] = x%lx %d\n", (unsigned __int64) printsh.ss,
|
|
|
|
printsh.ssorient);
|
|
|
|
printsh.ssorient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sdecode(t->tri[7], printsh);
|
|
|
|
sdecode(t->tri[7], printsh);
|
|
|
|
if (printsh.ss != m->dummysub) {
|
|
|
|
if (printsh.ss != m->dummysub) {
|
|
|
|
printf(" [7] = x%lx %d\n", (unsigned long) printsh.ss,
|
|
|
|
printf(" [7] = x%lx %d\n", (unsigned __int64) printsh.ss,
|
|
|
|
printsh.ssorient);
|
|
|
|
printsh.ssorient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sdecode(t->tri[8], printsh);
|
|
|
|
sdecode(t->tri[8], printsh);
|
|
|
|
if (printsh.ss != m->dummysub) {
|
|
|
|
if (printsh.ss != m->dummysub) {
|
|
|
|
printf(" [8] = x%lx %d\n", (unsigned long) printsh.ss,
|
|
|
|
printf(" [8] = x%lx %d\n", (unsigned __int64) printsh.ss,
|
|
|
|
printsh.ssorient);
|
|
|
|
printsh.ssorient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -3770,19 +3770,19 @@ struct osub *s;
|
|
|
|
vertex printvertex;
|
|
|
|
vertex printvertex;
|
|
|
|
|
|
|
|
|
|
|
|
printf("subsegment x%lx with orientation %d and mark %d:\n",
|
|
|
|
printf("subsegment x%lx with orientation %d and mark %d:\n",
|
|
|
|
(unsigned long) s->ss, s->ssorient, mark(*s));
|
|
|
|
(unsigned __int64) s->ss, s->ssorient, mark(*s));
|
|
|
|
sdecode(s->ss[0], printsh);
|
|
|
|
sdecode(s->ss[0], printsh);
|
|
|
|
if (printsh.ss == m->dummysub) {
|
|
|
|
if (printsh.ss == m->dummysub) {
|
|
|
|
printf(" [0] = No subsegment\n");
|
|
|
|
printf(" [0] = No subsegment\n");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
printf(" [0] = x%lx %d\n", (unsigned long) printsh.ss,
|
|
|
|
printf(" [0] = x%lx %d\n", (unsigned __int64) printsh.ss,
|
|
|
|
printsh.ssorient);
|
|
|
|
printsh.ssorient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sdecode(s->ss[1], printsh);
|
|
|
|
sdecode(s->ss[1], printsh);
|
|
|
|
if (printsh.ss == m->dummysub) {
|
|
|
|
if (printsh.ss == m->dummysub) {
|
|
|
|
printf(" [1] = No subsegment\n");
|
|
|
|
printf(" [1] = No subsegment\n");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
printf(" [1] = x%lx %d\n", (unsigned long) printsh.ss,
|
|
|
|
printf(" [1] = x%lx %d\n", (unsigned __int64) printsh.ss,
|
|
|
|
printsh.ssorient);
|
|
|
|
printsh.ssorient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -3791,28 +3791,28 @@ struct osub *s;
|
|
|
|
printf(" Origin[%d] = NULL\n", 2 + s->ssorient);
|
|
|
|
printf(" Origin[%d] = NULL\n", 2 + s->ssorient);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
printf(" Origin[%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
printf(" Origin[%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
2 + s->ssorient, (unsigned long) printvertex,
|
|
|
|
2 + s->ssorient, (unsigned __int64) printvertex,
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
sdest(*s, printvertex);
|
|
|
|
sdest(*s, printvertex);
|
|
|
|
if (printvertex == (vertex) NULL)
|
|
|
|
if (printvertex == (vertex) NULL)
|
|
|
|
printf(" Dest [%d] = NULL\n", 3 - s->ssorient);
|
|
|
|
printf(" Dest [%d] = NULL\n", 3 - s->ssorient);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
printf(" Dest [%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
printf(" Dest [%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
3 - s->ssorient, (unsigned long) printvertex,
|
|
|
|
3 - s->ssorient, (unsigned __int64) printvertex,
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
|
|
|
|
|
|
|
|
decode(s->ss[6], printtri);
|
|
|
|
decode(s->ss[6], printtri);
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
printf(" [6] = Outer space\n");
|
|
|
|
printf(" [6] = Outer space\n");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
printf(" [6] = x%lx %d\n", (unsigned long) printtri.tri,
|
|
|
|
printf(" [6] = x%lx %d\n", (unsigned __int64) printtri.tri,
|
|
|
|
printtri.orient);
|
|
|
|
printtri.orient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
decode(s->ss[7], printtri);
|
|
|
|
decode(s->ss[7], printtri);
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
if (printtri.tri == m->dummytri) {
|
|
|
|
printf(" [7] = Outer space\n");
|
|
|
|
printf(" [7] = Outer space\n");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
printf(" [7] = x%lx %d\n", (unsigned long) printtri.tri,
|
|
|
|
printf(" [7] = x%lx %d\n", (unsigned __int64) printtri.tri,
|
|
|
|
printtri.orient);
|
|
|
|
printtri.orient);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -3821,14 +3821,14 @@ struct osub *s;
|
|
|
|
printf(" Segment origin[%d] = NULL\n", 4 + s->ssorient);
|
|
|
|
printf(" Segment origin[%d] = NULL\n", 4 + s->ssorient);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
printf(" Segment origin[%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
printf(" Segment origin[%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
4 + s->ssorient, (unsigned long) printvertex,
|
|
|
|
4 + s->ssorient, (unsigned __int64) printvertex,
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
segdest(*s, printvertex);
|
|
|
|
segdest(*s, printvertex);
|
|
|
|
if (printvertex == (vertex) NULL)
|
|
|
|
if (printvertex == (vertex) NULL)
|
|
|
|
printf(" Segment dest [%d] = NULL\n", 5 - s->ssorient);
|
|
|
|
printf(" Segment dest [%d] = NULL\n", 5 - s->ssorient);
|
|
|
|
else
|
|
|
|
else
|
|
|
|
printf(" Segment dest [%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
printf(" Segment dest [%d] = x%lx (%.12g, %.12g)\n",
|
|
|
|
5 - s->ssorient, (unsigned long) printvertex,
|
|
|
|
5 - s->ssorient, (unsigned __int64) printvertex,
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
printvertex[0], printvertex[1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -3891,7 +3891,7 @@ struct memorypool *pool;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
unsigned long alignptr;
|
|
|
|
unsigned __int64 alignptr;
|
|
|
|
|
|
|
|
|
|
|
|
pool->items = 0;
|
|
|
|
pool->items = 0;
|
|
|
|
pool->maxitems = 0;
|
|
|
|
pool->maxitems = 0;
|
|
|
@ -3899,11 +3899,11 @@ struct memorypool *pool;
|
|
|
|
/* Set the currently active block. */
|
|
|
|
/* Set the currently active block. */
|
|
|
|
pool->nowblock = pool->firstblock;
|
|
|
|
pool->nowblock = pool->firstblock;
|
|
|
|
/* Find the first item in the pool. Increment by the size of (VOID *). */
|
|
|
|
/* Find the first item in the pool. Increment by the size of (VOID *). */
|
|
|
|
alignptr = (unsigned long) (pool->nowblock + 1);
|
|
|
|
alignptr = (unsigned __int64) (pool->nowblock + 1);
|
|
|
|
/* Align the item on an `alignbytes'-byte boundary. */
|
|
|
|
/* Align the item on an `alignbytes'-byte boundary. */
|
|
|
|
pool->nextitem = (VOID *)
|
|
|
|
pool->nextitem = (VOID *)
|
|
|
|
(alignptr + (unsigned long) pool->alignbytes -
|
|
|
|
(alignptr + (unsigned __int64) pool->alignbytes -
|
|
|
|
(alignptr % (unsigned long) pool->alignbytes));
|
|
|
|
(alignptr % (unsigned __int64) pool->alignbytes));
|
|
|
|
/* There are lots of unallocated items left in this block. */
|
|
|
|
/* There are lots of unallocated items left in this block. */
|
|
|
|
pool->unallocateditems = pool->itemsfirstblock;
|
|
|
|
pool->unallocateditems = pool->itemsfirstblock;
|
|
|
|
/* The stack of deallocated items is empty. */
|
|
|
|
/* The stack of deallocated items is empty. */
|
|
|
@ -4008,7 +4008,7 @@ struct memorypool *pool;
|
|
|
|
{
|
|
|
|
{
|
|
|
|
VOID *newitem;
|
|
|
|
VOID *newitem;
|
|
|
|
VOID **newblock;
|
|
|
|
VOID **newblock;
|
|
|
|
unsigned long alignptr;
|
|
|
|
unsigned __int64 alignptr;
|
|
|
|
|
|
|
|
|
|
|
|
/* First check the linked list of dead items. If the list is not */
|
|
|
|
/* First check the linked list of dead items. If the list is not */
|
|
|
|
/* empty, allocate an item from the list rather than a fresh one. */
|
|
|
|
/* empty, allocate an item from the list rather than a fresh one. */
|
|
|
@ -4033,11 +4033,11 @@ struct memorypool *pool;
|
|
|
|
pool->nowblock = (VOID **) *(pool->nowblock);
|
|
|
|
pool->nowblock = (VOID **) *(pool->nowblock);
|
|
|
|
/* Find the first item in the block. */
|
|
|
|
/* Find the first item in the block. */
|
|
|
|
/* Increment by the size of (VOID *). */
|
|
|
|
/* Increment by the size of (VOID *). */
|
|
|
|
alignptr = (unsigned long) (pool->nowblock + 1);
|
|
|
|
alignptr = (unsigned __int64) (pool->nowblock + 1);
|
|
|
|
/* Align the item on an `alignbytes'-byte boundary. */
|
|
|
|
/* Align the item on an `alignbytes'-byte boundary. */
|
|
|
|
pool->nextitem = (VOID *)
|
|
|
|
pool->nextitem = (VOID *)
|
|
|
|
(alignptr + (unsigned long) pool->alignbytes -
|
|
|
|
(alignptr + (unsigned __int64) pool->alignbytes -
|
|
|
|
(alignptr % (unsigned long) pool->alignbytes));
|
|
|
|
(alignptr % (unsigned __int64) pool->alignbytes));
|
|
|
|
/* There are lots of unallocated items left in this block. */
|
|
|
|
/* There are lots of unallocated items left in this block. */
|
|
|
|
pool->unallocateditems = pool->itemsperblock;
|
|
|
|
pool->unallocateditems = pool->itemsperblock;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -4092,16 +4092,16 @@ struct memorypool *pool;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
unsigned long alignptr;
|
|
|
|
unsigned __int64 alignptr;
|
|
|
|
|
|
|
|
|
|
|
|
/* Begin the traversal in the first block. */
|
|
|
|
/* Begin the traversal in the first block. */
|
|
|
|
pool->pathblock = pool->firstblock;
|
|
|
|
pool->pathblock = pool->firstblock;
|
|
|
|
/* Find the first item in the block. Increment by the size of (VOID *). */
|
|
|
|
/* Find the first item in the block. Increment by the size of (VOID *). */
|
|
|
|
alignptr = (unsigned long) (pool->pathblock + 1);
|
|
|
|
alignptr = (unsigned __int64) (pool->pathblock + 1);
|
|
|
|
/* Align with item on an `alignbytes'-byte boundary. */
|
|
|
|
/* Align with item on an `alignbytes'-byte boundary. */
|
|
|
|
pool->pathitem = (VOID *)
|
|
|
|
pool->pathitem = (VOID *)
|
|
|
|
(alignptr + (unsigned long) pool->alignbytes -
|
|
|
|
(alignptr + (unsigned __int64) pool->alignbytes -
|
|
|
|
(alignptr % (unsigned long) pool->alignbytes));
|
|
|
|
(alignptr % (unsigned __int64) pool->alignbytes));
|
|
|
|
/* Set the number of items left in the current block. */
|
|
|
|
/* Set the number of items left in the current block. */
|
|
|
|
pool->pathitemsleft = pool->itemsfirstblock;
|
|
|
|
pool->pathitemsleft = pool->itemsfirstblock;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -4129,7 +4129,7 @@ struct memorypool *pool;
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
VOID *newitem;
|
|
|
|
VOID *newitem;
|
|
|
|
unsigned long alignptr;
|
|
|
|
unsigned __int64 alignptr;
|
|
|
|
|
|
|
|
|
|
|
|
/* Stop upon exhausting the list of items. */
|
|
|
|
/* Stop upon exhausting the list of items. */
|
|
|
|
if (pool->pathitem == pool->nextitem) {
|
|
|
|
if (pool->pathitem == pool->nextitem) {
|
|
|
@ -4141,11 +4141,11 @@ struct memorypool *pool;
|
|
|
|
/* Find the next block. */
|
|
|
|
/* Find the next block. */
|
|
|
|
pool->pathblock = (VOID **) *(pool->pathblock);
|
|
|
|
pool->pathblock = (VOID **) *(pool->pathblock);
|
|
|
|
/* Find the first item in the block. Increment by the size of (VOID *). */
|
|
|
|
/* Find the first item in the block. Increment by the size of (VOID *). */
|
|
|
|
alignptr = (unsigned long) (pool->pathblock + 1);
|
|
|
|
alignptr = (unsigned __int64) (pool->pathblock + 1);
|
|
|
|
/* Align with item on an `alignbytes'-byte boundary. */
|
|
|
|
/* Align with item on an `alignbytes'-byte boundary. */
|
|
|
|
pool->pathitem = (VOID *)
|
|
|
|
pool->pathitem = (VOID *)
|
|
|
|
(alignptr + (unsigned long) pool->alignbytes -
|
|
|
|
(alignptr + (unsigned __int64) pool->alignbytes -
|
|
|
|
(alignptr % (unsigned long) pool->alignbytes));
|
|
|
|
(alignptr % (unsigned __int64) pool->alignbytes));
|
|
|
|
/* Set the number of items left in the current block. */
|
|
|
|
/* Set the number of items left in the current block. */
|
|
|
|
pool->pathitemsleft = pool->itemsperblock;
|
|
|
|
pool->pathitemsleft = pool->itemsperblock;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -4197,19 +4197,19 @@ int subsegbytes;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
unsigned long alignptr;
|
|
|
|
unsigned __int64 alignptr;
|
|
|
|
|
|
|
|
|
|
|
|
/* Set up `dummytri', the `triangle' that occupies "outer space." */
|
|
|
|
/* Set up `dummytri', the `triangle' that occupies "outer space." */
|
|
|
|
m->dummytribase = (triangle *) trimalloc(trianglebytes +
|
|
|
|
m->dummytribase = (triangle *) trimalloc(trianglebytes +
|
|
|
|
m->triangles.alignbytes);
|
|
|
|
m->triangles.alignbytes);
|
|
|
|
/* Align `dummytri' on a `triangles.alignbytes'-byte boundary. */
|
|
|
|
/* Align `dummytri' on a `triangles.alignbytes'-byte boundary. */
|
|
|
|
alignptr = (unsigned long) m->dummytribase;
|
|
|
|
alignptr = (unsigned __int64) m->dummytribase;
|
|
|
|
m->dummytri = (triangle *)
|
|
|
|
m->dummytri = (triangle *)
|
|
|
|
(alignptr + (unsigned long) m->triangles.alignbytes -
|
|
|
|
(alignptr + (unsigned __int64) m->triangles.alignbytes -
|
|
|
|
(alignptr % (unsigned long) m->triangles.alignbytes));
|
|
|
|
(alignptr % (unsigned __int64) m->triangles.alignbytes));
|
|
|
|
/* Initialize the three adjoining triangles to be "outer space." These */
|
|
|
|
/* Initialize the three adjoining triangles to be "outer space." These */
|
|
|
|
/* will eventually be changed by various bonding operations, but their */
|
|
|
|
/* will eventually be changed by various bonding operations, but their */
|
|
|
|
/* values don't really matter, as long as they can legally be */
|
|
|
|
/* values don't really matter, as __int64 as they can legally be */
|
|
|
|
/* dereferenced. */
|
|
|
|
/* dereferenced. */
|
|
|
|
m->dummytri[0] = (triangle) m->dummytri;
|
|
|
|
m->dummytri[0] = (triangle) m->dummytri;
|
|
|
|
m->dummytri[1] = (triangle) m->dummytri;
|
|
|
|
m->dummytri[1] = (triangle) m->dummytri;
|
|
|
@ -4226,13 +4226,13 @@ int subsegbytes;
|
|
|
|
m->dummysubbase = (subseg *) trimalloc(subsegbytes +
|
|
|
|
m->dummysubbase = (subseg *) trimalloc(subsegbytes +
|
|
|
|
m->subsegs.alignbytes);
|
|
|
|
m->subsegs.alignbytes);
|
|
|
|
/* Align `dummysub' on a `subsegs.alignbytes'-byte boundary. */
|
|
|
|
/* Align `dummysub' on a `subsegs.alignbytes'-byte boundary. */
|
|
|
|
alignptr = (unsigned long) m->dummysubbase;
|
|
|
|
alignptr = (unsigned __int64) m->dummysubbase;
|
|
|
|
m->dummysub = (subseg *)
|
|
|
|
m->dummysub = (subseg *)
|
|
|
|
(alignptr + (unsigned long) m->subsegs.alignbytes -
|
|
|
|
(alignptr + (unsigned __int64) m->subsegs.alignbytes -
|
|
|
|
(alignptr % (unsigned long) m->subsegs.alignbytes));
|
|
|
|
(alignptr % (unsigned __int64) m->subsegs.alignbytes));
|
|
|
|
/* Initialize the two adjoining subsegments to be the omnipresent */
|
|
|
|
/* Initialize the two adjoining subsegments to be the omnipresent */
|
|
|
|
/* subsegment. These will eventually be changed by various bonding */
|
|
|
|
/* subsegment. These will eventually be changed by various bonding */
|
|
|
|
/* operations, but their values don't really matter, as long as they */
|
|
|
|
/* operations, but their values don't really matter, as __int64 as they */
|
|
|
|
/* can legally be dereferenced. */
|
|
|
|
/* can legally be dereferenced. */
|
|
|
|
m->dummysub[0] = (subseg) m->dummysub;
|
|
|
|
m->dummysub[0] = (subseg) m->dummysub;
|
|
|
|
m->dummysub[1] = (subseg) m->dummysub;
|
|
|
|
m->dummysub[1] = (subseg) m->dummysub;
|
|
|
@ -4586,7 +4586,7 @@ int number;
|
|
|
|
{
|
|
|
|
{
|
|
|
|
VOID **getblock;
|
|
|
|
VOID **getblock;
|
|
|
|
char *foundvertex;
|
|
|
|
char *foundvertex;
|
|
|
|
unsigned long alignptr;
|
|
|
|
unsigned __int64 alignptr;
|
|
|
|
int current;
|
|
|
|
int current;
|
|
|
|
|
|
|
|
|
|
|
|
getblock = m->vertices.firstblock;
|
|
|
|
getblock = m->vertices.firstblock;
|
|
|
@ -4603,9 +4603,9 @@ int number;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Now find the right vertex. */
|
|
|
|
/* Now find the right vertex. */
|
|
|
|
alignptr = (unsigned long) (getblock + 1);
|
|
|
|
alignptr = (unsigned __int64) (getblock + 1);
|
|
|
|
foundvertex = (char *) (alignptr + (unsigned long) m->vertices.alignbytes -
|
|
|
|
foundvertex = (char *) (alignptr + (unsigned __int64) m->vertices.alignbytes -
|
|
|
|
(alignptr % (unsigned long) m->vertices.alignbytes));
|
|
|
|
(alignptr % (unsigned __int64) m->vertices.alignbytes));
|
|
|
|
return (vertex) (foundvertex + m->vertices.itembytes * (number - current));
|
|
|
|
return (vertex) (foundvertex + m->vertices.itembytes * (number - current));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -6506,8 +6506,8 @@ vertex pd;
|
|
|
|
/* The result is returned both in terms of x-y coordinates and xi-eta */
|
|
|
|
/* The result is returned both in terms of x-y coordinates and xi-eta */
|
|
|
|
/* (barycentric) coordinates. The xi-eta coordinate system is defined in */
|
|
|
|
/* (barycentric) coordinates. The xi-eta coordinate system is defined in */
|
|
|
|
/* terms of the triangle: the origin of the triangle is the origin of the */
|
|
|
|
/* terms of the triangle: the origin of the triangle is the origin of the */
|
|
|
|
/* coordinate system; the destination of the triangle is one unit along the */
|
|
|
|
/* coordinate system; the destination of the triangle is one unit a__int64 the */
|
|
|
|
/* xi axis; and the apex of the triangle is one unit along the eta axis. */
|
|
|
|
/* xi axis; and the apex of the triangle is one unit a__int64 the eta axis. */
|
|
|
|
/* This procedure also returns the square of the length of the triangle's */
|
|
|
|
/* This procedure also returns the square of the length of the triangle's */
|
|
|
|
/* shortest edge. */
|
|
|
|
/* shortest edge. */
|
|
|
|
/* */
|
|
|
|
/* */
|
|
|
@ -6667,9 +6667,9 @@ struct mesh *m;
|
|
|
|
/*****************************************************************************/
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
unsigned long randomnation(unsigned int choices)
|
|
|
|
unsigned __int64 randomnation(unsigned int choices)
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
unsigned long randomnation(choices)
|
|
|
|
unsigned __int64 randomnation(choices)
|
|
|
|
unsigned int choices;
|
|
|
|
unsigned int choices;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
|
|
|
|
|
|
|
@ -7485,7 +7485,7 @@ struct behavior *b;
|
|
|
|
/* WARNING: This routine is designed for convex triangulations, and will */
|
|
|
|
/* WARNING: This routine is designed for convex triangulations, and will */
|
|
|
|
/* not generally work after the holes and concavities have been carved. */
|
|
|
|
/* not generally work after the holes and concavities have been carved. */
|
|
|
|
/* However, it can still be used to find the circumcenter of a triangle, as */
|
|
|
|
/* However, it can still be used to find the circumcenter of a triangle, as */
|
|
|
|
/* long as the search is begun from the triangle in question. */
|
|
|
|
/* __int64 as the search is begun from the triangle in question. */
|
|
|
|
/* */
|
|
|
|
/* */
|
|
|
|
/*****************************************************************************/
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
@ -7649,11 +7649,11 @@ struct otri *searchtri;
|
|
|
|
char *firsttri;
|
|
|
|
char *firsttri;
|
|
|
|
struct otri sampletri;
|
|
|
|
struct otri sampletri;
|
|
|
|
vertex torg, tdest;
|
|
|
|
vertex torg, tdest;
|
|
|
|
unsigned long alignptr;
|
|
|
|
unsigned __int64 alignptr;
|
|
|
|
REAL searchdist, dist;
|
|
|
|
REAL searchdist, dist;
|
|
|
|
REAL ahead;
|
|
|
|
REAL ahead;
|
|
|
|
long samplesperblock, totalsamplesleft, samplesleft;
|
|
|
|
__int64 samplesperblock, totalsamplesleft, samplesleft;
|
|
|
|
long population, totalpopulation;
|
|
|
|
__int64 population, totalpopulation;
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
|
|
|
|
|
|
|
|
if (b->verbose > 2) {
|
|
|
|
if (b->verbose > 2) {
|
|
|
@ -7721,11 +7721,11 @@ struct otri *searchtri;
|
|
|
|
population = totalpopulation;
|
|
|
|
population = totalpopulation;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* Find a pointer to the first triangle in the block. */
|
|
|
|
/* Find a pointer to the first triangle in the block. */
|
|
|
|
alignptr = (unsigned long) (sampleblock + 1);
|
|
|
|
alignptr = (unsigned __int64) (sampleblock + 1);
|
|
|
|
firsttri = (char *) (alignptr +
|
|
|
|
firsttri = (char *) (alignptr +
|
|
|
|
(unsigned long) m->triangles.alignbytes -
|
|
|
|
(unsigned __int64) m->triangles.alignbytes -
|
|
|
|
(alignptr %
|
|
|
|
(alignptr %
|
|
|
|
(unsigned long) m->triangles.alignbytes));
|
|
|
|
(unsigned __int64) m->triangles.alignbytes));
|
|
|
|
|
|
|
|
|
|
|
|
/* Choose `samplesleft' randomly sampled triangles in this block. */
|
|
|
|
/* Choose `samplesleft' randomly sampled triangles in this block. */
|
|
|
|
do {
|
|
|
|
do {
|
|
|
@ -8699,7 +8699,7 @@ int triflaws;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
/* Take the average of the two triangles' area constraints. */
|
|
|
|
/* Take the average of the two triangles' area constraints. */
|
|
|
|
/* This prevents small area constraints from migrating a */
|
|
|
|
/* This prevents small area constraints from migrating a */
|
|
|
|
/* long, long way from their original location due to flips. */
|
|
|
|
/* __int64, __int64 way from their original location due to flips. */
|
|
|
|
area = 0.5 * (areabound(top) + areabound(horiz));
|
|
|
|
area = 0.5 * (areabound(top) + areabound(horiz));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
setareabound(top, area);
|
|
|
|
setareabound(top, area);
|
|
|
@ -8807,7 +8807,7 @@ int triflaws;
|
|
|
|
/* polygon, until `lastedge', the primary edge of the last triangle. */
|
|
|
|
/* polygon, until `lastedge', the primary edge of the last triangle. */
|
|
|
|
/* `firstedge' and `lastedge' are probably connected to other triangles */
|
|
|
|
/* `firstedge' and `lastedge' are probably connected to other triangles */
|
|
|
|
/* beyond the extremes of the fan, but their identity is not important, as */
|
|
|
|
/* beyond the extremes of the fan, but their identity is not important, as */
|
|
|
|
/* long as the fan remains connected to them. */
|
|
|
|
/* __int64 as the fan remains connected to them. */
|
|
|
|
/* */
|
|
|
|
/* */
|
|
|
|
/* Imagine the polygon oriented so that its base is at the bottom. This */
|
|
|
|
/* Imagine the polygon oriented so that its base is at the bottom. This */
|
|
|
|
/* puts `firstedge' on the far right, and `lastedge' on the far left. */
|
|
|
|
/* puts `firstedge' on the far right, and `lastedge' on the far left. */
|
|
|
@ -8839,7 +8839,7 @@ int triflaws;
|
|
|
|
/* O(n^2) time not only in the worst case, but in many common cases. It's */
|
|
|
|
/* O(n^2) time not only in the worst case, but in many common cases. It's */
|
|
|
|
/* rarely a big deal for vertex deletion, where n is rarely larger than */
|
|
|
|
/* rarely a big deal for vertex deletion, where n is rarely larger than */
|
|
|
|
/* ten, but it could be a big deal for segment insertion, especially if */
|
|
|
|
/* ten, but it could be a big deal for segment insertion, especially if */
|
|
|
|
/* there's a lot of long segments that each cut many triangles. I ought to */
|
|
|
|
/* there's a lot of __int64 segments that each cut many triangles. I ought to */
|
|
|
|
/* code a faster algorithm some day. */
|
|
|
|
/* code a faster algorithm some day. */
|
|
|
|
/* */
|
|
|
|
/* */
|
|
|
|
/* The `edgecount' parameter is the number of sides of the polygon, */
|
|
|
|
/* The `edgecount' parameter is the number of sides of the polygon, */
|
|
|
@ -9906,9 +9906,9 @@ struct otri *farright;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
long removeghosts(struct mesh *m, struct behavior *b, struct otri *startghost)
|
|
|
|
__int64 removeghosts(struct mesh *m, struct behavior *b, struct otri *startghost)
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
long removeghosts(m, b, startghost)
|
|
|
|
__int64 removeghosts(m, b, startghost)
|
|
|
|
struct mesh *m;
|
|
|
|
struct mesh *m;
|
|
|
|
struct behavior *b;
|
|
|
|
struct behavior *b;
|
|
|
|
struct otri *startghost;
|
|
|
|
struct otri *startghost;
|
|
|
@ -9919,7 +9919,7 @@ struct otri *startghost;
|
|
|
|
struct otri dissolveedge;
|
|
|
|
struct otri dissolveedge;
|
|
|
|
struct otri deadtriangle;
|
|
|
|
struct otri deadtriangle;
|
|
|
|
vertex markorg;
|
|
|
|
vertex markorg;
|
|
|
|
long hullsize;
|
|
|
|
__int64 hullsize;
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
|
|
|
|
|
|
|
|
if (b->verbose) {
|
|
|
|
if (b->verbose) {
|
|
|
@ -9969,9 +9969,9 @@ struct otri *startghost;
|
|
|
|
/*****************************************************************************/
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
long divconqdelaunay(struct mesh *m, struct behavior *b)
|
|
|
|
__int64 divconqdelaunay(struct mesh *m, struct behavior *b)
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
long divconqdelaunay(m, b)
|
|
|
|
__int64 divconqdelaunay(m, b)
|
|
|
|
struct mesh *m;
|
|
|
|
struct mesh *m;
|
|
|
|
struct behavior *b;
|
|
|
|
struct behavior *b;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
@ -10122,9 +10122,9 @@ struct behavior *b;
|
|
|
|
#ifndef REDUCED
|
|
|
|
#ifndef REDUCED
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
long removebox(struct mesh *m, struct behavior *b)
|
|
|
|
__int64 removebox(struct mesh *m, struct behavior *b)
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
long removebox(m, b)
|
|
|
|
__int64 removebox(m, b)
|
|
|
|
struct mesh *m;
|
|
|
|
struct mesh *m;
|
|
|
|
struct behavior *b;
|
|
|
|
struct behavior *b;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
@ -10135,7 +10135,7 @@ struct behavior *b;
|
|
|
|
struct otri checkedge;
|
|
|
|
struct otri checkedge;
|
|
|
|
struct otri nextedge, finaledge, dissolveedge;
|
|
|
|
struct otri nextedge, finaledge, dissolveedge;
|
|
|
|
vertex markorg;
|
|
|
|
vertex markorg;
|
|
|
|
long hullsize;
|
|
|
|
__int64 hullsize;
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
|
|
|
|
|
|
|
|
if (b->verbose) {
|
|
|
|
if (b->verbose) {
|
|
|
@ -10221,9 +10221,9 @@ struct behavior *b;
|
|
|
|
#ifndef REDUCED
|
|
|
|
#ifndef REDUCED
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
long incrementaldelaunay(struct mesh *m, struct behavior *b)
|
|
|
|
__int64 incrementaldelaunay(struct mesh *m, struct behavior *b)
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
long incrementaldelaunay(m, b)
|
|
|
|
__int64 incrementaldelaunay(m, b)
|
|
|
|
struct mesh *m;
|
|
|
|
struct mesh *m;
|
|
|
|
struct behavior *b;
|
|
|
|
struct behavior *b;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
@ -10785,9 +10785,9 @@ int *farright;
|
|
|
|
#ifndef REDUCED
|
|
|
|
#ifndef REDUCED
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
long sweeplinedelaunay(struct mesh *m, struct behavior *b)
|
|
|
|
__int64 sweeplinedelaunay(struct mesh *m, struct behavior *b)
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
long sweeplinedelaunay(m, b)
|
|
|
|
__int64 sweeplinedelaunay(m, b)
|
|
|
|
struct mesh *m;
|
|
|
|
struct mesh *m;
|
|
|
|
struct behavior *b;
|
|
|
|
struct behavior *b;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
@ -11013,15 +11013,15 @@ struct behavior *b;
|
|
|
|
/*****************************************************************************/
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
long delaunay(struct mesh *m, struct behavior *b)
|
|
|
|
__int64 delaunay(struct mesh *m, struct behavior *b)
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
long delaunay(m, b)
|
|
|
|
__int64 delaunay(m, b)
|
|
|
|
struct mesh *m;
|
|
|
|
struct mesh *m;
|
|
|
|
struct behavior *b;
|
|
|
|
struct behavior *b;
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
#endif /* not ANSI_DECLARATORS */
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
long hulledges;
|
|
|
|
__int64 hulledges;
|
|
|
|
|
|
|
|
|
|
|
|
m->eextras = 0;
|
|
|
|
m->eextras = 0;
|
|
|
|
initializetrisubpools(m, b);
|
|
|
|
initializetrisubpools(m, b);
|
|
|
@ -11114,10 +11114,10 @@ int numberofsegments;
|
|
|
|
#else /* not TRILIBRARY */
|
|
|
|
#else /* not TRILIBRARY */
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
#ifdef ANSI_DECLARATORS
|
|
|
|
long reconstruct(struct mesh *m, struct behavior *b, char *elefilename,
|
|
|
|
__int64 reconstruct(struct mesh *m, struct behavior *b, char *elefilename,
|
|
|
|
char *areafilename, char *polyfilename, FILE *polyfile)
|
|
|
|
char *areafilename, char *polyfilename, FILE *polyfile)
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
#else /* not ANSI_DECLARATORS */
|
|
|
|
long reconstruct(m, b, elefilename, areafilename, polyfilename, polyfile)
|
|
|
|
__int64 reconstruct(m, b, elefilename, areafilename, polyfilename, polyfile)
|
|
|
|
struct mesh *m;
|
|
|
|
struct mesh *m;
|
|
|
|
struct behavior *b;
|
|
|
|
struct behavior *b;
|
|
|
|
char *elefilename;
|
|
|
|
char *elefilename;
|
|
|
@ -11161,9 +11161,9 @@ FILE *polyfile;
|
|
|
|
int segmentmarkers;
|
|
|
|
int segmentmarkers;
|
|
|
|
int boundmarker;
|
|
|
|
int boundmarker;
|
|
|
|
int aroundvertex;
|
|
|
|
int aroundvertex;
|
|
|
|
long hullsize;
|
|
|
|
__int64 hullsize;
|
|
|
|
int notfound;
|
|
|
|
int notfound;
|
|
|
|
long elementnumber, segmentnumber;
|
|
|
|
__int64 elementnumber, segmentnumber;
|
|
|
|
int i, j;
|
|
|
|
int i, j;
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
|
|
|
|
|
|
|
@ -12113,7 +12113,7 @@ int leftside;
|
|
|
|
/* encountered. This step creates a fan of edges connected to endpoint1, */
|
|
|
|
/* encountered. This step creates a fan of edges connected to endpoint1, */
|
|
|
|
/* including the desired edge to endpoint2. The second step enforces the */
|
|
|
|
/* including the desired edge to endpoint2. The second step enforces the */
|
|
|
|
/* Delaunay condition on each side of the segment in an incremental manner: */
|
|
|
|
/* Delaunay condition on each side of the segment in an incremental manner: */
|
|
|
|
/* proceeding along the polygon from endpoint1 to endpoint2 (this is done */
|
|
|
|
/* proceeding a__int64 the polygon from endpoint1 to endpoint2 (this is done */
|
|
|
|
/* independently on each side of the segment), each vertex is "enforced" */
|
|
|
|
/* independently on each side of the segment), each vertex is "enforced" */
|
|
|
|
/* as if it had just been inserted, but affecting only the previous */
|
|
|
|
/* as if it had just been inserted, but affecting only the previous */
|
|
|
|
/* vertices. The result is the same as if the vertices had been inserted */
|
|
|
|
/* vertices. The result is the same as if the vertices had been inserted */
|
|
|
@ -13060,7 +13060,7 @@ int regions;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Now, we have to find all the regions BEFORE we carve the holes, because */
|
|
|
|
/* Now, we have to find all the regions BEFORE we carve the holes, because */
|
|
|
|
/* locate() won't work when the triangulation is no longer convex. */
|
|
|
|
/* locate() won't work when the triangulation is no __int64er convex. */
|
|
|
|
/* (Incidentally, this is the reason why regional attributes and area */
|
|
|
|
/* (Incidentally, this is the reason why regional attributes and area */
|
|
|
|
/* constraints can't be used when refining a preexisting mesh, which */
|
|
|
|
/* constraints can't be used when refining a preexisting mesh, which */
|
|
|
|
/* might not be convex; they can only be used with a freshly */
|
|
|
|
/* might not be convex; they can only be used with a freshly */
|
|
|
@ -13541,7 +13541,7 @@ struct badtriang *badtri;
|
|
|
|
setvertexmark(newvertex, 0);
|
|
|
|
setvertexmark(newvertex, 0);
|
|
|
|
setvertextype(newvertex, FREEVERTEX);
|
|
|
|
setvertextype(newvertex, FREEVERTEX);
|
|
|
|
|
|
|
|
|
|
|
|
/* Ensure that the handle `badotri' does not represent the longest */
|
|
|
|
/* Ensure that the handle `badotri' does not represent the __int64est */
|
|
|
|
/* edge of the triangle. This ensures that the circumcenter must */
|
|
|
|
/* edge of the triangle. This ensures that the circumcenter must */
|
|
|
|
/* fall to the left of this edge, so point location will work. */
|
|
|
|
/* fall to the left of this edge, so point location will work. */
|
|
|
|
/* (If the angle org-apex-dest exceeds 90 degrees, then the */
|
|
|
|
/* (If the angle org-apex-dest exceeds 90 degrees, then the */
|
|
|
@ -14358,7 +14358,7 @@ char **argv;
|
|
|
|
FILE *outfile;
|
|
|
|
FILE *outfile;
|
|
|
|
#endif /* not TRILIBRARY */
|
|
|
|
#endif /* not TRILIBRARY */
|
|
|
|
vertex vertexloop;
|
|
|
|
vertex vertexloop;
|
|
|
|
long outvertices;
|
|
|
|
__int64 outvertices;
|
|
|
|
int vertexnumber;
|
|
|
|
int vertexnumber;
|
|
|
|
int i;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
|
@ -14530,7 +14530,7 @@ char **argv;
|
|
|
|
struct otri triangleloop;
|
|
|
|
struct otri triangleloop;
|
|
|
|
vertex p1, p2, p3;
|
|
|
|
vertex p1, p2, p3;
|
|
|
|
vertex mid1, mid2, mid3;
|
|
|
|
vertex mid1, mid2, mid3;
|
|
|
|
long elementnumber;
|
|
|
|
__int64 elementnumber;
|
|
|
|
int i;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef TRILIBRARY
|
|
|
|
#ifdef TRILIBRARY
|
|
|
@ -14672,11 +14672,11 @@ char **argv;
|
|
|
|
int index;
|
|
|
|
int index;
|
|
|
|
#else /* not TRILIBRARY */
|
|
|
|
#else /* not TRILIBRARY */
|
|
|
|
FILE *outfile;
|
|
|
|
FILE *outfile;
|
|
|
|
long holenumber, regionnumber;
|
|
|
|
__int64 holenumber, regionnumber;
|
|
|
|
#endif /* not TRILIBRARY */
|
|
|
|
#endif /* not TRILIBRARY */
|
|
|
|
struct osub subsegloop;
|
|
|
|
struct osub subsegloop;
|
|
|
|
vertex endpoint1, endpoint2;
|
|
|
|
vertex endpoint1, endpoint2;
|
|
|
|
long subsegnumber;
|
|
|
|
__int64 subsegnumber;
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef TRILIBRARY
|
|
|
|
#ifdef TRILIBRARY
|
|
|
|
if (!b->quiet) {
|
|
|
|
if (!b->quiet) {
|
|
|
@ -14816,7 +14816,7 @@ char **argv;
|
|
|
|
struct otri triangleloop, trisym;
|
|
|
|
struct otri triangleloop, trisym;
|
|
|
|
struct osub checkmark;
|
|
|
|
struct osub checkmark;
|
|
|
|
vertex p1, p2;
|
|
|
|
vertex p1, p2;
|
|
|
|
long edgenumber;
|
|
|
|
__int64 edgenumber;
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
subseg sptr; /* Temporary variable used by tspivot(). */
|
|
|
|
subseg sptr; /* Temporary variable used by tspivot(). */
|
|
|
|
|
|
|
|
|
|
|
@ -14981,7 +14981,7 @@ char **argv;
|
|
|
|
vertex torg, tdest, tapex;
|
|
|
|
vertex torg, tdest, tapex;
|
|
|
|
REAL circumcenter[2];
|
|
|
|
REAL circumcenter[2];
|
|
|
|
REAL xi, eta;
|
|
|
|
REAL xi, eta;
|
|
|
|
long vnodenumber, vedgenumber;
|
|
|
|
__int64 vnodenumber, vedgenumber;
|
|
|
|
int p1, p2;
|
|
|
|
int p1, p2;
|
|
|
|
int i;
|
|
|
|
int i;
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
@ -15178,7 +15178,7 @@ char **argv;
|
|
|
|
FILE *outfile;
|
|
|
|
FILE *outfile;
|
|
|
|
#endif /* not TRILIBRARY */
|
|
|
|
#endif /* not TRILIBRARY */
|
|
|
|
struct otri triangleloop, trisym;
|
|
|
|
struct otri triangleloop, trisym;
|
|
|
|
long elementnumber;
|
|
|
|
__int64 elementnumber;
|
|
|
|
int neighbor1, neighbor2, neighbor3;
|
|
|
|
int neighbor1, neighbor2, neighbor3;
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
triangle ptr; /* Temporary variable used by sym(). */
|
|
|
|
|
|
|
|
|
|
|
@ -15277,7 +15277,7 @@ char **argv;
|
|
|
|
struct otri triangleloop;
|
|
|
|
struct otri triangleloop;
|
|
|
|
vertex vertexloop;
|
|
|
|
vertex vertexloop;
|
|
|
|
vertex p1, p2, p3;
|
|
|
|
vertex p1, p2, p3;
|
|
|
|
long outvertices;
|
|
|
|
__int64 outvertices;
|
|
|
|
|
|
|
|
|
|
|
|
if (!b->quiet) {
|
|
|
|
if (!b->quiet) {
|
|
|
|
printf("Writing %s.\n", offfilename);
|
|
|
|
printf("Writing %s.\n", offfilename);
|
|
|
@ -15356,8 +15356,8 @@ struct behavior *b;
|
|
|
|
REAL dotproduct;
|
|
|
|
REAL dotproduct;
|
|
|
|
REAL cossquare;
|
|
|
|
REAL cossquare;
|
|
|
|
REAL triarea;
|
|
|
|
REAL triarea;
|
|
|
|
REAL shortest, longest;
|
|
|
|
REAL shortest, __int64est;
|
|
|
|
REAL trilongest2;
|
|
|
|
REAL tri__int64est2;
|
|
|
|
REAL smallestarea, biggestarea;
|
|
|
|
REAL smallestarea, biggestarea;
|
|
|
|
REAL triminaltitude2;
|
|
|
|
REAL triminaltitude2;
|
|
|
|
REAL minaltitude;
|
|
|
|
REAL minaltitude;
|
|
|
@ -15399,7 +15399,7 @@ struct behavior *b;
|
|
|
|
minaltitude = m->xmax - m->xmin + m->ymax - m->ymin;
|
|
|
|
minaltitude = m->xmax - m->xmin + m->ymax - m->ymin;
|
|
|
|
minaltitude = minaltitude * minaltitude;
|
|
|
|
minaltitude = minaltitude * minaltitude;
|
|
|
|
shortest = minaltitude;
|
|
|
|
shortest = minaltitude;
|
|
|
|
longest = 0.0;
|
|
|
|
__int64est = 0.0;
|
|
|
|
smallestarea = minaltitude;
|
|
|
|
smallestarea = minaltitude;
|
|
|
|
biggestarea = 0.0;
|
|
|
|
biggestarea = 0.0;
|
|
|
|
worstaspect = 0.0;
|
|
|
|
worstaspect = 0.0;
|
|
|
@ -15414,7 +15414,7 @@ struct behavior *b;
|
|
|
|
org(triangleloop, p[0]);
|
|
|
|
org(triangleloop, p[0]);
|
|
|
|
dest(triangleloop, p[1]);
|
|
|
|
dest(triangleloop, p[1]);
|
|
|
|
apex(triangleloop, p[2]);
|
|
|
|
apex(triangleloop, p[2]);
|
|
|
|
trilongest2 = 0.0;
|
|
|
|
tri__int64est2 = 0.0;
|
|
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
|
|
j = plus1mod3[i];
|
|
|
|
j = plus1mod3[i];
|
|
|
@ -15422,11 +15422,11 @@ struct behavior *b;
|
|
|
|
dx[i] = p[j][0] - p[k][0];
|
|
|
|
dx[i] = p[j][0] - p[k][0];
|
|
|
|
dy[i] = p[j][1] - p[k][1];
|
|
|
|
dy[i] = p[j][1] - p[k][1];
|
|
|
|
edgelength[i] = dx[i] * dx[i] + dy[i] * dy[i];
|
|
|
|
edgelength[i] = dx[i] * dx[i] + dy[i] * dy[i];
|
|
|
|
if (edgelength[i] > trilongest2) {
|
|
|
|
if (edgelength[i] > tri__int64est2) {
|
|
|
|
trilongest2 = edgelength[i];
|
|
|
|
tri__int64est2 = edgelength[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (edgelength[i] > longest) {
|
|
|
|
if (edgelength[i] > __int64est) {
|
|
|
|
longest = edgelength[i];
|
|
|
|
__int64est = edgelength[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (edgelength[i] < shortest) {
|
|
|
|
if (edgelength[i] < shortest) {
|
|
|
|
shortest = edgelength[i];
|
|
|
|
shortest = edgelength[i];
|
|
|
@ -15440,11 +15440,11 @@ struct behavior *b;
|
|
|
|
if (triarea > biggestarea) {
|
|
|
|
if (triarea > biggestarea) {
|
|
|
|
biggestarea = triarea;
|
|
|
|
biggestarea = triarea;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
triminaltitude2 = triarea * triarea / trilongest2;
|
|
|
|
triminaltitude2 = triarea * triarea / tri__int64est2;
|
|
|
|
if (triminaltitude2 < minaltitude) {
|
|
|
|
if (triminaltitude2 < minaltitude) {
|
|
|
|
minaltitude = triminaltitude2;
|
|
|
|
minaltitude = triminaltitude2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
triaspect2 = trilongest2 / triminaltitude2;
|
|
|
|
triaspect2 = tri__int64est2 / triminaltitude2;
|
|
|
|
if (triaspect2 > worstaspect) {
|
|
|
|
if (triaspect2 > worstaspect) {
|
|
|
|
worstaspect = triaspect2;
|
|
|
|
worstaspect = triaspect2;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -15486,7 +15486,7 @@ struct behavior *b;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
shortest = sqrt(shortest);
|
|
|
|
shortest = sqrt(shortest);
|
|
|
|
longest = sqrt(longest);
|
|
|
|
__int64est = sqrt(__int64est);
|
|
|
|
minaltitude = sqrt(minaltitude);
|
|
|
|
minaltitude = sqrt(minaltitude);
|
|
|
|
worstaspect = sqrt(worstaspect);
|
|
|
|
worstaspect = sqrt(worstaspect);
|
|
|
|
smallestarea *= 0.5;
|
|
|
|
smallestarea *= 0.5;
|
|
|
@ -15508,8 +15508,8 @@ struct behavior *b;
|
|
|
|
|
|
|
|
|
|
|
|
printf(" Smallest area: %16.5g | Largest area: %16.5g\n",
|
|
|
|
printf(" Smallest area: %16.5g | Largest area: %16.5g\n",
|
|
|
|
smallestarea, biggestarea);
|
|
|
|
smallestarea, biggestarea);
|
|
|
|
printf(" Shortest edge: %16.5g | Longest edge: %16.5g\n",
|
|
|
|
printf(" Shortest edge: %16.5g | __int64est edge: %16.5g\n",
|
|
|
|
shortest, longest);
|
|
|
|
shortest, __int64est);
|
|
|
|
printf(" Shortest altitude: %12.5g | Largest aspect ratio: %8.5g\n\n",
|
|
|
|
printf(" Shortest altitude: %12.5g | Largest aspect ratio: %8.5g\n\n",
|
|
|
|
minaltitude, worstaspect);
|
|
|
|
minaltitude, worstaspect);
|
|
|
|
|
|
|
|
|
|
|
@ -15525,7 +15525,7 @@ struct behavior *b;
|
|
|
|
printf(" %6.6g - %-6.6g : %8d | %6.6g - : %8d\n",
|
|
|
|
printf(" %6.6g - %-6.6g : %8d | %6.6g - : %8d\n",
|
|
|
|
ratiotable[6], ratiotable[7], aspecttable[7], ratiotable[14],
|
|
|
|
ratiotable[6], ratiotable[7], aspecttable[7], ratiotable[14],
|
|
|
|
aspecttable[15]);
|
|
|
|
aspecttable[15]);
|
|
|
|
printf(" (Aspect ratio is longest edge divided by shortest altitude)\n\n");
|
|
|
|
printf(" (Aspect ratio is __int64est edge divided by shortest altitude)\n\n");
|
|
|
|
|
|
|
|
|
|
|
|
printf(" Smallest angle: %15.5g | Largest angle: %15.5g\n\n",
|
|
|
|
printf(" Smallest angle: %15.5g | Largest angle: %15.5g\n\n",
|
|
|
|
smallestangle, biggestangle);
|
|
|
|
smallestangle, biggestangle);
|
|
|
|