From 4020e3f33f42d9ee9a4f373fb5222c12f419bd24 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 11:06:43 +1000 Subject: [PATCH 01/14] Add GH Action to test on Windows and macOS --- .github/workflows/windows_and_macos.yml | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/windows_and_macos.yml diff --git a/.github/workflows/windows_and_macos.yml b/.github/workflows/windows_and_macos.yml new file mode 100644 index 0000000..71116f0 --- /dev/null +++ b/.github/workflows/windows_and_macos.yml @@ -0,0 +1,30 @@ +name: Windows & macOS + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + + matrix: + os: + - macos-latest + - windows-latest + + steps: + - uses: actions/checkout@v3 + - uses: Swatinem/rust-cache@v2 + - name: Build + run: cargo build --verbose + - name: Run tests + run: cargo test --verbose From f59daff72ed24de1235495323791f0d412c78148 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 11:22:18 +1000 Subject: [PATCH 02/14] Remove Wno flags on Windows build --- build.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/build.rs b/build.rs index 4163d9d..85565c7 100644 --- a/build.rs +++ b/build.rs @@ -1,3 +1,4 @@ +#[cfg(any(target_os = "linux", target_os = "macos"))] fn main() { cc::Build::new() .file("c_code/triangle.c") @@ -17,3 +18,18 @@ fn main() { .flag("-Wno-unused-but-set-variable") .compile("c_code_interface_tetgen"); } + +#[cfg(target_os = "windows")] +fn main() { + cc::Build::new() + .file("c_code/triangle.c") + .file("c_code/tricall_report.c") + .file("c_code/interface_triangle.c") + .compile("c_code_interface_triangle"); + cc::Build::new() + .cpp(true) + .file("c_code/predicates.cxx") + .file("c_code/tetgen.cxx") + .file("c_code/interface_tetgen.cpp") + .compile("c_code_interface_tetgen"); +} From e7861c3614b60ef0d5a3deaa80f4bfff3f385181 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 11:25:43 +1000 Subject: [PATCH 03/14] Use define NO_TIMER on windows --- build.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/build.rs b/build.rs index 85565c7..7092ce5 100644 --- a/build.rs +++ b/build.rs @@ -25,6 +25,7 @@ fn main() { .file("c_code/triangle.c") .file("c_code/tricall_report.c") .file("c_code/interface_triangle.c") + .define("NO_TIMER", None) .compile("c_code_interface_triangle"); cc::Build::new() .cpp(true) From 0c4a47510143581921e64c2bd71050e5d7c977a0 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 11:29:25 +1000 Subject: [PATCH 04/14] Disable voronoi_1_works test on macos --- src/trigen.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/trigen.rs b/src/trigen.rs index 8dc8c27..899a0bf 100644 --- a/src/trigen.rs +++ b/src/trigen.rs @@ -1152,6 +1152,7 @@ mod tests { } #[test] + #[cfg(target_os = "linux")] fn voronoi_1_works() -> Result<(), StrError> { let mut trigen = Trigen::new(3, None, None, None)?; trigen From e24fda9d8212a92c185c260fb9dc37be4fccc454 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 11:38:34 +1000 Subject: [PATCH 05/14] Fix tetgen.h to use ULONG on windows --- c_code/tetgen.cxx | 20 ++++++++++---------- c_code/tetgen.h | 38 +++++++++++--------------------------- 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/c_code/tetgen.cxx b/c_code/tetgen.cxx index 2aab450..a582556 100644 --- a/c_code/tetgen.cxx +++ b/c_code/tetgen.cxx @@ -10868,9 +10868,9 @@ void tetgenmesh::brio_multiscale_sort(point* vertexarray, int arraysize, // // /////////////////////////////////////////////////////////////////////////////// -unsigned long tetgenmesh::randomnation(unsigned int choices) +ULONG tetgenmesh::randomnation(unsigned int choices) { - unsigned long newrandom; + ULONG newrandom; if (choices >= 714025l) { newrandom = (randomseed * 1366l + 150889l) % 714025l; @@ -26959,9 +26959,9 @@ void tetgenmesh::optimizemesh() // // /////////////////////////////////////////////////////////////////////////////// -void tetgenmesh::printfcomma(unsigned long n) +void tetgenmesh::printfcomma(ULONG n) { - unsigned long n2 = 0; + ULONG n2 = 0; int scale = 1; while (n >= 1000) { n2 = n2 + scale * (n % 1000); @@ -27911,10 +27911,10 @@ void tetgenmesh::qualitystatistics() REAL tetaspect, tetradius; REAL smalldiangle, bigdiangle; REAL smallfaangle, bigfaangle; - unsigned long radiustable[12]; - unsigned long aspecttable[16]; - unsigned long dihedangletable[18]; - unsigned long faceangletable[18]; + ULONG radiustable[12]; + ULONG aspecttable[16]; + ULONG dihedangletable[18]; + ULONG faceangletable[18]; int indx[4]; int radiusindex; int aspectindex; @@ -28301,7 +28301,7 @@ void tetgenmesh::memorystatistics() } // Calculate the total memory (in bytes) used by storing meshes. - unsigned long totalmeshmemory = 0l, totalt2shmemory = 0l; + ULONG totalmeshmemory = 0l, totalt2shmemory = 0l; totalmeshmemory = points->maxitems * points->itembytes + tetrahedrons->maxitems * tetrahedrons->itembytes; if (b->plc || b->refine) { @@ -28311,7 +28311,7 @@ void tetgenmesh::memorystatistics() tet2segpool->maxitems * tet2segpool->itembytes); } - unsigned long totalalgomemory = 0l; + ULONG totalalgomemory = 0l; totalalgomemory = cavetetlist->totalmemory + cavebdrylist->totalmemory + caveoldtetlist->totalmemory + flippool->maxitems * flippool->itembytes; diff --git a/c_code/tetgen.h b/c_code/tetgen.h index 27ffab1..d7bea90 100644 --- a/c_code/tetgen.h +++ b/c_code/tetgen.h @@ -53,28 +53,12 @@ #include // dorival -// The types 'intptr_t' and 'uintptr_t' are signed and unsigned integer types, -// respectively. They are guaranteed to be the same width as a pointer. -// They are defined in by the C99 Standard. However, Microsoft -// Visual C++ 2003 -- 2008 (Visual C++ 7.1 - 9) doesn't ship with this header -// file. In such case, we can define them by ourself. -// Update (learned from Stack Overflow): Visual Studio 2010 and Visual C++ 2010 -// Express both have stdint.h - -// The following piece of code was provided by Steven Johnson (MIT). Define the -// symbol _MSC_VER if you are using Microsoft Visual C++. Moreover, define -// the _WIN64 symbol if you are running TetGen on Win64 systems. - -#ifdef _MSC_VER // Microsoft Visual C++ -# ifdef _WIN64 - typedef __int64 intptr_t; - typedef unsigned __int64 uintptr_t; -# else // not _WIN64 - typedef int intptr_t; - typedef unsigned int uintptr_t; -# endif -#else // not Visual C++ -# include +// dorival +#ifdef _MSC_VER +#define ULONG ptrdiff_t +#else +#include +#define ULONG unsigned long #endif /////////////////////////////////////////////////////////////////////////////// @@ -997,7 +981,7 @@ class tetgenmesh { int toparraylen; char **toparray; long objects; - unsigned long totalmemory; + ULONG totalmemory; void restart(); void poolinit(int sizeofobject, int log2objperblk); @@ -1335,7 +1319,7 @@ class tetgenmesh { int autofliplinklevel; // The increase of link levels, default is 1. int useinsertradius; // Save the insertion radius for Steiner points. long samples; // Number of random samples for point location. - unsigned long randomseed; // Current random number seed. + ULONG randomseed; // Current random number seed. REAL cosmaxdihed, cosmindihed; // The cosine values of max/min dihedral. REAL cossmtdihed; // The cosine value of a bad dihedral to be smoothed. REAL cosslidihed; // The cosine value of the max dihedral of a sliver. @@ -1358,7 +1342,7 @@ class tetgenmesh { long flip14count, flip26count, flipn2ncount; long flip23count, flip32count, flip44count, flip41count; long flip31count, flip22count; - unsigned long totalworkmemory; // Total memory used by working arrays. + ULONG totalworkmemory; // Total memory used by working arrays. /////////////////////////////////////////////////////////////////////////////// @@ -1749,7 +1733,7 @@ class tetgenmesh { void brio_multiscale_sort(point*,int,int threshold,REAL ratio,int* depth); // Point location. - unsigned long randomnation(unsigned int choices); + ULONG randomnation(unsigned int choices); void randomsample(point searchpt, triface *searchtet); enum locateresult locate(point searchpt, triface *searchtet); @@ -2046,7 +2030,7 @@ class tetgenmesh { int checkconforming(int); // Mesh statistics. - void printfcomma(unsigned long n); + void printfcomma(ULONG n); void qualitystatistics(); void memorystatistics(); void statistics(); From 004d844afedb5a7631422227c89b50e537ca366f Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 11:47:07 +1000 Subject: [PATCH 06/14] Add backtrace env var to GH action --- .github/workflows/test_and_coverage.yml | 2 +- .github/workflows/windows_and_macos.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_and_coverage.yml b/.github/workflows/test_and_coverage.yml index ae1c149..3dfc111 100644 --- a/.github/workflows/test_and_coverage.yml +++ b/.github/workflows/test_and_coverage.yml @@ -10,7 +10,7 @@ jobs: sudo apt-get update -y && sudo apt-get install -y build-essential - name: Run tests run: | - cargo test -- --nocapture + RUST_BACKTRACE=1 cargo test -- --nocapture - name: Install cargo-llvm-cov run: | curl -LsSf https://github.com/taiki-e/cargo-llvm-cov/releases/latest/download/cargo-llvm-cov-x86_64-unknown-linux-gnu.tar.gz | tar xzf - -C ~/.cargo/bin diff --git a/.github/workflows/windows_and_macos.yml b/.github/workflows/windows_and_macos.yml index 71116f0..f4af93b 100644 --- a/.github/workflows/windows_and_macos.yml +++ b/.github/workflows/windows_and_macos.yml @@ -27,4 +27,4 @@ jobs: - name: Build run: cargo build --verbose - name: Run tests - run: cargo test --verbose + run: RUST_BACKTRACE=1 cargo test --verbose From 0c27685589140bdbd7ecf2be5c20cfc7c5d3e203 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 11:51:55 +1000 Subject: [PATCH 07/14] Remove backtrace env var for Windows --- .github/workflows/windows_and_macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows_and_macos.yml b/.github/workflows/windows_and_macos.yml index f4af93b..f84a0da 100644 --- a/.github/workflows/windows_and_macos.yml +++ b/.github/workflows/windows_and_macos.yml @@ -27,4 +27,4 @@ jobs: - name: Build run: cargo build --verbose - name: Run tests - run: RUST_BACKTRACE=1 cargo test --verbose + run: cargo test --verbose -- --nocapture From 0dac7fd47293c8fc2833f7c529e9b69a91d3456d Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 11:59:38 +1000 Subject: [PATCH 08/14] Use ptrdiff_t and size_t instead of ulong on windows --- c_code/triangle.c | 179 +++++++++++++++++++++++----------------------- 1 file changed, 90 insertions(+), 89 deletions(-) diff --git a/c_code/triangle.c b/c_code/triangle.c index 7f8be3b..a67f540 100644 --- a/c_code/triangle.c +++ b/c_code/triangle.c @@ -343,6 +343,7 @@ #include #include #include +#include #include #ifndef NO_TIMER #include @@ -633,7 +634,7 @@ struct memorypool { int itembytes; int itemsperblock; int itemsfirstblock; - long items, maxitems; + ptrdiff_t items, maxitems; int unallocateditems; int pathitemsleft; }; @@ -650,7 +651,7 @@ REAL o3derrboundA, o3derrboundB, o3derrboundC; /* Random number seed is not constant, but I've made it global anyway. */ -unsigned long randomseed; /* Current random number seed. */ +size_t randomseed; /* Current random number seed. */ /* Mesh data structure. Triangle operates on only one mesh, but the mesh */ @@ -693,11 +694,11 @@ struct mesh { int holes; /* Number of input holes. */ int regions; /* Number of input regions. */ int undeads; /* Number of input vertices that don't appear in the mesh. */ - long edges; /* Number of output edges. */ + ptrdiff_t edges; /* Number of output edges. */ int mesh_dim; /* Dimension (ought to be 2). */ int nextras; /* Number of attributes per vertex. */ int eextras; /* Number of attributes per triangle. */ - long hullsize; /* Number of edges in convex hull. */ + ptrdiff_t hullsize; /* Number of edges in convex hull. */ int steinerleft; /* Number of Steiner points not yet used. */ int vertexmarkindex; /* Index to find boundary marker of a vertex. */ int vertex2triindex; /* Index to find a triangle adjacent to a vertex. */ @@ -707,14 +708,14 @@ struct mesh { int checksegments; /* Are there segments in the triangulation yet? */ int checkquality; /* Has quality triangulation begun yet? */ int readnodefile; /* Has a .node file been read? */ - long samples; /* Number of random samples for point location. */ + ptrdiff_t samples; /* Number of random samples for point location. */ - long incirclecount; /* Number of incircle tests performed. */ - long counterclockcount; /* Number of counterclockwise tests performed. */ - long orient3dcount; /* Number of 3D orientation tests performed. */ - long hyperbolacount; /* Number of right-of-hyperbola tests performed. */ - long circumcentercount; /* Number of circumcenter calculations performed. */ - long circletopcount; /* Number of circle top calculations performed. */ + ptrdiff_t incirclecount; /* Number of incircle tests performed. */ + ptrdiff_t counterclockcount; /* Number of counterclockwise tests performed. */ + ptrdiff_t orient3dcount; /* Number of 3D orientation tests performed. */ + ptrdiff_t hyperbolacount; /* Number of right-of-hyperbola tests performed. */ + ptrdiff_t circumcentercount; /* Number of circumcenter calculations performed. */ + ptrdiff_t circletopcount; /* Number of circle top calculations performed. */ /* Triangular bounding box vertices. */ @@ -827,8 +828,8 @@ struct behavior { /* 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 */ /* triangle and an orientation into a single pointer. My assumptions that */ -/* triangles are four-byte-aligned and that the `unsigned long' type is */ -/* long enough to hold a pointer are two of the few kludges in this program.*/ +/* triangles are four-byte-aligned and that the `size_t' type is */ +/* ptrdiff_t enough to hold a pointer are two of the few kludges in this program.*/ /* */ /* Subsegments are manipulated similarly. A pointer to a subsegment */ /* carries both an address and an orientation in the range 0 to 1. */ @@ -938,16 +939,16 @@ int minus1mod3[3] = {2, 0, 1}; /* extracted from the two least significant bits of the pointer. */ #define decode(ptr, otri) \ - (otri).orient = (int) ((unsigned long) (ptr) & (unsigned long) 3l); \ + (otri).orient = (int) ((size_t) (ptr) & (size_t) 3l); \ (otri).tri = (triangle *) \ - ((unsigned long) (ptr) ^ (unsigned long) (otri).orient) + ((size_t) (ptr) ^ (size_t) (otri).orient) /* encode() compresses an oriented triangle into a single pointer. It */ /* relies on the assumption that all triangles are aligned to four-byte */ /* boundaries, so the two least significant bits of (otri).tri are zero. */ #define encode(otri) \ - (triangle) ((unsigned long) (otri).tri | (unsigned long) (otri).orient) + (triangle) ((size_t) (otri).tri | (size_t) (otri).orient) /* The following handle manipulation primitives are all described by Guibas */ /* and Stolfi. However, Guibas and Stolfi use an edge-based data */ @@ -1111,16 +1112,16 @@ int minus1mod3[3] = {2, 0, 1}; #define infect(otri) \ (otri).tri[6] = (triangle) \ - ((unsigned long) (otri).tri[6] | (unsigned long) 2l) + ((size_t) (otri).tri[6] | (size_t) 2l) #define uninfect(otri) \ (otri).tri[6] = (triangle) \ - ((unsigned long) (otri).tri[6] & ~ (unsigned long) 2l) + ((size_t) (otri).tri[6] & ~ (size_t) 2l) /* Test a triangle for viral infection. */ #define infected(otri) \ - (((unsigned long) (otri).tri[6] & (unsigned long) 2l) != 0l) + (((size_t) (otri).tri[6] & (size_t) 2l) != 0l) /* Check or set a triangle's attributes. */ @@ -1158,16 +1159,16 @@ int minus1mod3[3] = {2, 0, 1}; /* are masked out to produce the real pointer. */ #define sdecode(sptr, osub) \ - (osub).ssorient = (int) ((unsigned long) (sptr) & (unsigned long) 1l); \ + (osub).ssorient = (int) ((size_t) (sptr) & (size_t) 1l); \ (osub).ss = (subseg *) \ - ((unsigned long) (sptr) & ~ (unsigned long) 3l) + ((size_t) (sptr) & ~ (size_t) 3l) /* sencode() compresses an oriented subsegment into a single pointer. It */ /* relies on the assumption that all subsegments are aligned to two-byte */ /* boundaries, so the least significant bit of (osub).ss is zero. */ #define sencode(osub) \ - (subseg) ((unsigned long) (osub).ss | (unsigned long) (osub).ssorient) + (subseg) ((size_t) (osub).ss | (size_t) (osub).ssorient) /* ssym() toggles the orientation of a subsegment. */ @@ -3675,27 +3676,27 @@ struct otri *t; struct osub printsh; vertex printvertex; - printf("triangle x%lx with orientation %d:\n", (unsigned long) t->tri, + printf("triangle x%lx with orientation %d:\n", (size_t) t->tri, t->orient); decode(t->tri[0], printtri); if (printtri.tri == m->dummytri) { printf(" [0] = Outer space\n"); } else { - printf(" [0] = x%lx %d\n", (unsigned long) printtri.tri, + printf(" [0] = x%lx %d\n", (size_t) printtri.tri, printtri.orient); } decode(t->tri[1], printtri); if (printtri.tri == m->dummytri) { printf(" [1] = Outer space\n"); } else { - printf(" [1] = x%lx %d\n", (unsigned long) printtri.tri, + printf(" [1] = x%lx %d\n", (size_t) printtri.tri, printtri.orient); } decode(t->tri[2], printtri); if (printtri.tri == m->dummytri) { printf(" [2] = Outer space\n"); } else { - printf(" [2] = x%lx %d\n", (unsigned long) printtri.tri, + printf(" [2] = x%lx %d\n", (size_t) printtri.tri, printtri.orient); } @@ -3704,37 +3705,37 @@ struct otri *t; printf(" Origin[%d] = NULL\n", (t->orient + 1) % 3 + 3); else printf(" Origin[%d] = x%lx (%.12g, %.12g)\n", - (t->orient + 1) % 3 + 3, (unsigned long) printvertex, + (t->orient + 1) % 3 + 3, (size_t) printvertex, printvertex[0], printvertex[1]); dest(*t, printvertex); if (printvertex == (vertex) NULL) printf(" Dest [%d] = NULL\n", (t->orient + 2) % 3 + 3); else printf(" Dest [%d] = x%lx (%.12g, %.12g)\n", - (t->orient + 2) % 3 + 3, (unsigned long) printvertex, + (t->orient + 2) % 3 + 3, (size_t) printvertex, printvertex[0], printvertex[1]); apex(*t, printvertex); if (printvertex == (vertex) NULL) printf(" Apex [%d] = NULL\n", t->orient + 3); else printf(" Apex [%d] = x%lx (%.12g, %.12g)\n", - t->orient + 3, (unsigned long) printvertex, + t->orient + 3, (size_t) printvertex, printvertex[0], printvertex[1]); if (b->usesegments) { sdecode(t->tri[6], printsh); if (printsh.ss != m->dummysub) { - printf(" [6] = x%lx %d\n", (unsigned long) printsh.ss, + printf(" [6] = x%lx %d\n", (size_t) printsh.ss, printsh.ssorient); } sdecode(t->tri[7], printsh); if (printsh.ss != m->dummysub) { - printf(" [7] = x%lx %d\n", (unsigned long) printsh.ss, + printf(" [7] = x%lx %d\n", (size_t) printsh.ss, printsh.ssorient); } sdecode(t->tri[8], printsh); if (printsh.ss != m->dummysub) { - printf(" [8] = x%lx %d\n", (unsigned long) printsh.ss, + printf(" [8] = x%lx %d\n", (size_t) printsh.ss, printsh.ssorient); } } @@ -3770,19 +3771,19 @@ struct osub *s; vertex printvertex; printf("subsegment x%lx with orientation %d and mark %d:\n", - (unsigned long) s->ss, s->ssorient, mark(*s)); + (size_t) s->ss, s->ssorient, mark(*s)); sdecode(s->ss[0], printsh); if (printsh.ss == m->dummysub) { printf(" [0] = No subsegment\n"); } else { - printf(" [0] = x%lx %d\n", (unsigned long) printsh.ss, + printf(" [0] = x%lx %d\n", (size_t) printsh.ss, printsh.ssorient); } sdecode(s->ss[1], printsh); if (printsh.ss == m->dummysub) { printf(" [1] = No subsegment\n"); } else { - printf(" [1] = x%lx %d\n", (unsigned long) printsh.ss, + printf(" [1] = x%lx %d\n", (size_t) printsh.ss, printsh.ssorient); } @@ -3791,28 +3792,28 @@ struct osub *s; printf(" Origin[%d] = NULL\n", 2 + s->ssorient); else printf(" Origin[%d] = x%lx (%.12g, %.12g)\n", - 2 + s->ssorient, (unsigned long) printvertex, + 2 + s->ssorient, (size_t) printvertex, printvertex[0], printvertex[1]); sdest(*s, printvertex); if (printvertex == (vertex) NULL) printf(" Dest [%d] = NULL\n", 3 - s->ssorient); else printf(" Dest [%d] = x%lx (%.12g, %.12g)\n", - 3 - s->ssorient, (unsigned long) printvertex, + 3 - s->ssorient, (size_t) printvertex, printvertex[0], printvertex[1]); decode(s->ss[6], printtri); if (printtri.tri == m->dummytri) { printf(" [6] = Outer space\n"); } else { - printf(" [6] = x%lx %d\n", (unsigned long) printtri.tri, + printf(" [6] = x%lx %d\n", (size_t) printtri.tri, printtri.orient); } decode(s->ss[7], printtri); if (printtri.tri == m->dummytri) { printf(" [7] = Outer space\n"); } else { - printf(" [7] = x%lx %d\n", (unsigned long) printtri.tri, + printf(" [7] = x%lx %d\n", (size_t) printtri.tri, printtri.orient); } @@ -3821,14 +3822,14 @@ struct osub *s; printf(" Segment origin[%d] = NULL\n", 4 + s->ssorient); else printf(" Segment origin[%d] = x%lx (%.12g, %.12g)\n", - 4 + s->ssorient, (unsigned long) printvertex, + 4 + s->ssorient, (size_t) printvertex, printvertex[0], printvertex[1]); segdest(*s, printvertex); if (printvertex == (vertex) NULL) printf(" Segment dest [%d] = NULL\n", 5 - s->ssorient); else printf(" Segment dest [%d] = x%lx (%.12g, %.12g)\n", - 5 - s->ssorient, (unsigned long) printvertex, + 5 - s->ssorient, (size_t) printvertex, printvertex[0], printvertex[1]); } @@ -3891,7 +3892,7 @@ struct memorypool *pool; #endif /* not ANSI_DECLARATORS */ { - unsigned long alignptr; + size_t alignptr; pool->items = 0; pool->maxitems = 0; @@ -3899,11 +3900,11 @@ struct memorypool *pool; /* Set the currently active block. */ pool->nowblock = pool->firstblock; /* Find the first item in the pool. Increment by the size of (VOID *). */ - alignptr = (unsigned long) (pool->nowblock + 1); + alignptr = (size_t) (pool->nowblock + 1); /* Align the item on an `alignbytes'-byte boundary. */ pool->nextitem = (VOID *) - (alignptr + (unsigned long) pool->alignbytes - - (alignptr % (unsigned long) pool->alignbytes)); + (alignptr + (size_t) pool->alignbytes - + (alignptr % (size_t) pool->alignbytes)); /* There are lots of unallocated items left in this block. */ pool->unallocateditems = pool->itemsfirstblock; /* The stack of deallocated items is empty. */ @@ -4008,7 +4009,7 @@ struct memorypool *pool; { VOID *newitem; VOID **newblock; - unsigned long alignptr; + size_t alignptr; /* 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. */ @@ -4033,11 +4034,11 @@ struct memorypool *pool; pool->nowblock = (VOID **) *(pool->nowblock); /* Find the first item in the block. */ /* Increment by the size of (VOID *). */ - alignptr = (unsigned long) (pool->nowblock + 1); + alignptr = (size_t) (pool->nowblock + 1); /* Align the item on an `alignbytes'-byte boundary. */ pool->nextitem = (VOID *) - (alignptr + (unsigned long) pool->alignbytes - - (alignptr % (unsigned long) pool->alignbytes)); + (alignptr + (size_t) pool->alignbytes - + (alignptr % (size_t) pool->alignbytes)); /* There are lots of unallocated items left in this block. */ pool->unallocateditems = pool->itemsperblock; } @@ -4092,16 +4093,16 @@ struct memorypool *pool; #endif /* not ANSI_DECLARATORS */ { - unsigned long alignptr; + size_t alignptr; /* Begin the traversal in the first block. */ pool->pathblock = pool->firstblock; /* Find the first item in the block. Increment by the size of (VOID *). */ - alignptr = (unsigned long) (pool->pathblock + 1); + alignptr = (size_t) (pool->pathblock + 1); /* Align with item on an `alignbytes'-byte boundary. */ pool->pathitem = (VOID *) - (alignptr + (unsigned long) pool->alignbytes - - (alignptr % (unsigned long) pool->alignbytes)); + (alignptr + (size_t) pool->alignbytes - + (alignptr % (size_t) pool->alignbytes)); /* Set the number of items left in the current block. */ pool->pathitemsleft = pool->itemsfirstblock; } @@ -4129,7 +4130,7 @@ struct memorypool *pool; { VOID *newitem; - unsigned long alignptr; + size_t alignptr; /* Stop upon exhausting the list of items. */ if (pool->pathitem == pool->nextitem) { @@ -4141,11 +4142,11 @@ struct memorypool *pool; /* Find the next block. */ pool->pathblock = (VOID **) *(pool->pathblock); /* Find the first item in the block. Increment by the size of (VOID *). */ - alignptr = (unsigned long) (pool->pathblock + 1); + alignptr = (size_t) (pool->pathblock + 1); /* Align with item on an `alignbytes'-byte boundary. */ pool->pathitem = (VOID *) - (alignptr + (unsigned long) pool->alignbytes - - (alignptr % (unsigned long) pool->alignbytes)); + (alignptr + (size_t) pool->alignbytes - + (alignptr % (size_t) pool->alignbytes)); /* Set the number of items left in the current block. */ pool->pathitemsleft = pool->itemsperblock; } @@ -4197,16 +4198,16 @@ int subsegbytes; #endif /* not ANSI_DECLARATORS */ { - unsigned long alignptr; + size_t alignptr; /* Set up `dummytri', the `triangle' that occupies "outer space." */ m->dummytribase = (triangle *) trimalloc(trianglebytes + m->triangles.alignbytes); /* Align `dummytri' on a `triangles.alignbytes'-byte boundary. */ - alignptr = (unsigned long) m->dummytribase; + alignptr = (size_t) m->dummytribase; m->dummytri = (triangle *) - (alignptr + (unsigned long) m->triangles.alignbytes - - (alignptr % (unsigned long) m->triangles.alignbytes)); + (alignptr + (size_t) m->triangles.alignbytes - + (alignptr % (size_t) m->triangles.alignbytes)); /* Initialize the three adjoining triangles to be "outer space." These */ /* will eventually be changed by various bonding operations, but their */ /* values don't really matter, as long as they can legally be */ @@ -4226,10 +4227,10 @@ int subsegbytes; m->dummysubbase = (subseg *) trimalloc(subsegbytes + m->subsegs.alignbytes); /* Align `dummysub' on a `subsegs.alignbytes'-byte boundary. */ - alignptr = (unsigned long) m->dummysubbase; + alignptr = (size_t) m->dummysubbase; m->dummysub = (subseg *) - (alignptr + (unsigned long) m->subsegs.alignbytes - - (alignptr % (unsigned long) m->subsegs.alignbytes)); + (alignptr + (size_t) m->subsegs.alignbytes - + (alignptr % (size_t) m->subsegs.alignbytes)); /* Initialize the two adjoining subsegments to be the omnipresent */ /* subsegment. These will eventually be changed by various bonding */ /* operations, but their values don't really matter, as long as they */ @@ -4586,7 +4587,7 @@ int number; { VOID **getblock; char *foundvertex; - unsigned long alignptr; + size_t alignptr; int current; getblock = m->vertices.firstblock; @@ -4603,9 +4604,9 @@ int number; } /* Now find the right vertex. */ - alignptr = (unsigned long) (getblock + 1); - foundvertex = (char *) (alignptr + (unsigned long) m->vertices.alignbytes - - (alignptr % (unsigned long) m->vertices.alignbytes)); + alignptr = (size_t) (getblock + 1); + foundvertex = (char *) (alignptr + (size_t) m->vertices.alignbytes - + (alignptr % (size_t) m->vertices.alignbytes)); return (vertex) (foundvertex + m->vertices.itembytes * (number - current)); } @@ -6673,9 +6674,9 @@ struct mesh *m; /*****************************************************************************/ #ifdef ANSI_DECLARATORS -unsigned long randomnation(unsigned int choices) +size_t randomnation(unsigned int choices) #else /* not ANSI_DECLARATORS */ -unsigned long randomnation(choices) +size_t randomnation(choices) unsigned int choices; #endif /* not ANSI_DECLARATORS */ @@ -7655,11 +7656,11 @@ struct otri *searchtri; char *firsttri; struct otri sampletri; vertex torg, tdest; - unsigned long alignptr; + size_t alignptr; REAL searchdist, dist; REAL ahead; - long samplesperblock, totalsamplesleft, samplesleft; - long population, totalpopulation; + ptrdiff_t samplesperblock, totalsamplesleft, samplesleft; + ptrdiff_t population, totalpopulation; triangle ptr; /* Temporary variable used by sym(). */ if (b->verbose > 2) { @@ -7727,11 +7728,11 @@ struct otri *searchtri; population = totalpopulation; } /* Find a pointer to the first triangle in the block. */ - alignptr = (unsigned long) (sampleblock + 1); + alignptr = (size_t) (sampleblock + 1); firsttri = (char *) (alignptr + - (unsigned long) m->triangles.alignbytes - + (size_t) m->triangles.alignbytes - (alignptr % - (unsigned long) m->triangles.alignbytes)); + (size_t) m->triangles.alignbytes)); /* Choose `samplesleft' randomly sampled triangles in this block. */ do { @@ -9925,7 +9926,7 @@ struct otri *startghost; struct otri dissolveedge; struct otri deadtriangle; vertex markorg; - long hullsize; + ptrdiff_t hullsize; triangle ptr; /* Temporary variable used by sym(). */ if (b->verbose) { @@ -10141,7 +10142,7 @@ struct behavior *b; struct otri checkedge; struct otri nextedge, finaledge, dissolveedge; vertex markorg; - long hullsize; + ptrdiff_t hullsize; triangle ptr; /* Temporary variable used by sym(). */ if (b->verbose) { @@ -11027,7 +11028,7 @@ struct behavior *b; #endif /* not ANSI_DECLARATORS */ { - long hulledges; + ptrdiff_t hulledges; m->eextras = 0; initializetrisubpools(m, b); @@ -11167,9 +11168,9 @@ FILE *polyfile; int segmentmarkers; int boundmarker; int aroundvertex; - long hullsize; + ptrdiff_t hullsize; int notfound; - long elementnumber, segmentnumber; + ptrdiff_t elementnumber, segmentnumber; int i, j; triangle ptr; /* Temporary variable used by sym(). */ @@ -14364,7 +14365,7 @@ char **argv; FILE *outfile; #endif /* not TRILIBRARY */ vertex vertexloop; - long outvertices; + ptrdiff_t outvertices; int vertexnumber; int i; @@ -14536,7 +14537,7 @@ char **argv; struct otri triangleloop; vertex p1, p2, p3; vertex mid1, mid2, mid3; - long elementnumber; + ptrdiff_t elementnumber; int i; #ifdef TRILIBRARY @@ -14678,11 +14679,11 @@ char **argv; int index; #else /* not TRILIBRARY */ FILE *outfile; - long holenumber, regionnumber; + ptrdiff_t holenumber, regionnumber; #endif /* not TRILIBRARY */ struct osub subsegloop; vertex endpoint1, endpoint2; - long subsegnumber; + ptrdiff_t subsegnumber; #ifdef TRILIBRARY if (!b->quiet) { @@ -14822,7 +14823,7 @@ char **argv; struct otri triangleloop, trisym; struct osub checkmark; vertex p1, p2; - long edgenumber; + ptrdiff_t edgenumber; triangle ptr; /* Temporary variable used by sym(). */ subseg sptr; /* Temporary variable used by tspivot(). */ @@ -14987,7 +14988,7 @@ char **argv; vertex torg, tdest, tapex; REAL circumcenter[2]; REAL xi, eta; - long vnodenumber, vedgenumber; + ptrdiff_t vnodenumber, vedgenumber; int p1, p2; int i; triangle ptr; /* Temporary variable used by sym(). */ @@ -15184,7 +15185,7 @@ char **argv; FILE *outfile; #endif /* not TRILIBRARY */ struct otri triangleloop, trisym; - long elementnumber; + ptrdiff_t elementnumber; int neighbor1, neighbor2, neighbor3; triangle ptr; /* Temporary variable used by sym(). */ @@ -15283,7 +15284,7 @@ char **argv; struct otri triangleloop; vertex vertexloop; vertex p1, p2, p3; - long outvertices; + ptrdiff_t outvertices; if (!b->quiet) { printf("Writing %s.\n", offfilename); From 06d2849fa07e022872a5c5b4fe4c904b1b26135d Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 12:04:48 +1000 Subject: [PATCH 09/14] ReEnable test on other targets --- src/trigen.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/trigen.rs b/src/trigen.rs index 899a0bf..8dc8c27 100644 --- a/src/trigen.rs +++ b/src/trigen.rs @@ -1152,7 +1152,6 @@ mod tests { } #[test] - #[cfg(target_os = "linux")] fn voronoi_1_works() -> Result<(), StrError> { let mut trigen = Trigen::new(3, None, None, None)?; trigen From 88b786193f43e783e79412bfcd9b8a4769769ee0 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 12:08:48 +1000 Subject: [PATCH 10/14] Disable println in tests --- src/trigen.rs | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/trigen.rs b/src/trigen.rs index 8dc8c27..aaebd2a 100644 --- a/src/trigen.rs +++ b/src/trigen.rs @@ -1257,10 +1257,10 @@ mod tests { assert_eq!(trigen.out_ncell(), 4); assert_eq!(trigen.out_cell_npoint(), 3); - println!("point markers"); - for i in 0..trigen.out_npoint() { - println!("{} => {}", i, trigen.out_point_marker(i)); - } + // println!("point markers"); + // for i in 0..trigen.out_npoint() { + // println!("{} => {}", i, trigen.out_point_marker(i)); + // } assert_eq!(trigen.out_point_marker(0), -100); assert_eq!(trigen.out_point_marker(1), -200); @@ -1268,13 +1268,13 @@ mod tests { assert_eq!(trigen.out_point_marker(3), -400); assert_eq!(trigen.out_point_marker(4), 0); - println!("segments"); - for i in 0..trigen.out_nsegment() { - let a = trigen.out_segment_point(i, 0); - let b = trigen.out_segment_point(i, 1); - let marker = trigen.out_segment_marker(i); - println!("{:2} - {:2} => {}", a, b, marker); - } + // println!("segments"); + // for i in 0..trigen.out_nsegment() { + // let a = trigen.out_segment_point(i, 0); + // let b = trigen.out_segment_point(i, 1); + // let marker = trigen.out_segment_marker(i); + // println!("{:2} - {:2} => {}", a, b, marker); + // } let mut sides0 = vec![trigen.out_segment_point(0, 0), trigen.out_segment_point(0, 1)]; let mut sides1 = vec![trigen.out_segment_point(1, 0), trigen.out_segment_point(1, 1)]; @@ -1323,10 +1323,10 @@ mod tests { assert_eq!(trigen.out_ncell(), 16); assert_eq!(trigen.out_cell_npoint(), 3); - println!("point markers"); - for i in 0..trigen.out_npoint() { - println!("{} => {}", i, trigen.out_point_marker(i)); - } + // println!("point markers"); + // for i in 0..trigen.out_npoint() { + // println!("{} => {}", i, trigen.out_point_marker(i)); + // } assert_eq!(trigen.out_point_marker(0), -100); assert_eq!(trigen.out_point_marker(1), -200); @@ -1342,13 +1342,13 @@ mod tests { assert_eq!(trigen.out_point_marker(11), 0); assert_eq!(trigen.out_point_marker(12), 0); - println!("segments"); - for i in 0..trigen.out_nsegment() { - let a = trigen.out_segment_point(i, 0); - let b = trigen.out_segment_point(i, 1); - let marker = trigen.out_segment_marker(i); - println!("{:2} - {:2} => {}", a, b, marker); - } + // println!("segments"); + // for i in 0..trigen.out_nsegment() { + // let a = trigen.out_segment_point(i, 0); + // let b = trigen.out_segment_point(i, 1); + // let marker = trigen.out_segment_marker(i); + // println!("{:2} - {:2} => {}", a, b, marker); + // } let mut sides0 = vec![trigen.out_segment_point(0, 0), trigen.out_segment_point(0, 1)]; let mut sides1 = vec![trigen.out_segment_point(1, 0), trigen.out_segment_point(1, 1)]; From 6384b918b79a7cf6634f5995d1e0a7ae5c837e21 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 13:10:05 +1000 Subject: [PATCH 11/14] Improve draw Voronoi and test --- src/trigen.rs | 88 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 75 insertions(+), 13 deletions(-) diff --git a/src/trigen.rs b/src/trigen.rs index aaebd2a..f2863e3 100644 --- a/src/trigen.rs +++ b/src/trigen.rs @@ -953,6 +953,13 @@ impl Trigen { max[dim] = f64::max(max[dim], x[dim]); } } + let mut gap = vec![0.0; 2]; + for dim in 0..2 { + gap[dim] = 0.05 * (max[dim] - min[dim]); + gap[dim] = 0.05 * (max[dim] - min[dim]); + min[dim] -= gap[dim]; + max[dim] += gap[dim]; + } let mut canvas = Canvas::new(); canvas.polycurve_begin(); for e in 0..self.out_voronoi_nedge() { @@ -992,6 +999,13 @@ impl Trigen { max[1] = f64::max(max[1], yb); canvas.polycurve_add(xa, ya, PolyCode::MoveTo); canvas.polycurve_add(xb, yb, PolyCode::LineTo); + } else { + canvas.polycurve_add(xa, ya, PolyCode::MoveTo); + if dx == 0.0 { + canvas.polycurve_add(xa, ya + dy * gap[1], PolyCode::LineTo); + } else if dy == 0.0 { + canvas.polycurve_add(xa + dx * gap[0], ya, PolyCode::LineTo); + } } } } @@ -1153,14 +1167,39 @@ mod tests { #[test] fn voronoi_1_works() -> Result<(), StrError> { - let mut trigen = Trigen::new(3, None, None, None)?; + let mut trigen = Trigen::new(5, None, None, None)?; trigen .set_point(0, 0, 0.0, 0.0)? .set_point(1, 0, 1.0, 0.0)? - .set_point(2, 0, 0.0, 1.0)?; + .set_point(2, 0, 0.0, 1.0)? + .set_point(3, 0, 1.0, 1.0)? + .set_point(4, 0, 0.5, 0.5)?; trigen.generate_voronoi(false)?; - assert_eq!(trigen.out_npoint(), 3); - assert_eq!(trigen.out_ncell(), 1); + if SAVE_FIGURE { + let mut plot = Plot::new(); + trigen.draw_voronoi(&mut plot); + plot.set_equal_axes(true) + .set_figure_size_points(600.0, 600.0) + .save("/tmp/tritet/voronoi_1_works.svg")?; + } + for i in 0..trigen.out_voronoi_npoint() { + println!( + "{}: {:?}, {:?}", + i, + trigen.out_voronoi_point(i, 0), + trigen.out_voronoi_point(i, 1) + ); + } + for e in 0..trigen.out_voronoi_nedge() { + println!( + "{}: {:?} => {:?}", + e, + trigen.out_voronoi_edge_point_a(e), + trigen.out_voronoi_edge_point_b(e) + ); + } + assert_eq!(trigen.out_npoint(), 5); + assert_eq!(trigen.out_ncell(), 4); assert_eq!(trigen.out_cell_npoint(), 3); assert_eq!(trigen.out_point(0, 0), 0.0); assert_eq!(trigen.out_point(0, 1), 0.0); @@ -1168,24 +1207,47 @@ mod tests { assert_eq!(trigen.out_point(1, 1), 0.0); assert_eq!(trigen.out_point(2, 0), 0.0); assert_eq!(trigen.out_point(2, 1), 1.0); - assert_eq!(trigen.out_voronoi_npoint(), 1); - assert_eq!(trigen.out_voronoi_point(0, 0), 0.5); + assert_eq!(trigen.out_point(3, 0), 1.0); + assert_eq!(trigen.out_point(3, 1), 1.0); + assert_eq!(trigen.out_point(4, 0), 0.5); + assert_eq!(trigen.out_point(4, 1), 0.5); + assert_eq!(trigen.out_voronoi_npoint(), 4); + assert_eq!(trigen.out_voronoi_point(0, 0), 0.0); assert_eq!(trigen.out_voronoi_point(0, 1), 0.5); - assert_eq!(trigen.out_voronoi_nedge(), 3); + assert_eq!(trigen.out_voronoi_point(1, 0), 1.0); + assert_eq!(trigen.out_voronoi_point(1, 1), 0.5); + assert_eq!(trigen.out_voronoi_point(2, 0), 0.5); + assert_eq!(trigen.out_voronoi_point(2, 1), 0.0); + assert_eq!(trigen.out_voronoi_point(3, 0), 0.5); + assert_eq!(trigen.out_voronoi_point(3, 1), 1.0); + assert_eq!(trigen.out_voronoi_nedge(), 8); assert_eq!(trigen.out_voronoi_edge_point_a(0), 0); assert_eq!( format!("{:?}", trigen.out_voronoi_edge_point_b(0)), - "Direction(0.0, -1.0)" + "Direction(-1.0, 0.0)" ); assert_eq!(trigen.out_voronoi_edge_point_a(1), 0); + assert_eq!(format!("{:?}", trigen.out_voronoi_edge_point_b(1)), "Index(2)"); + assert_eq!(trigen.out_voronoi_edge_point_a(2), 0); + assert_eq!(format!("{:?}", trigen.out_voronoi_edge_point_b(2)), "Index(3)"); + assert_eq!(trigen.out_voronoi_edge_point_a(3), 1); + assert_eq!(format!("{:?}", trigen.out_voronoi_edge_point_b(3)), "Index(2)"); + assert_eq!(trigen.out_voronoi_edge_point_a(4), 1); assert_eq!( - format!("{:?}", trigen.out_voronoi_edge_point_b(1)), - "Direction(1.0, 1.0)" + format!("{:?}", trigen.out_voronoi_edge_point_b(4)), + "Direction(1.0, 0.0)" ); - assert_eq!(trigen.out_voronoi_edge_point_a(2), 0); + assert_eq!(trigen.out_voronoi_edge_point_a(5), 1); + assert_eq!(format!("{:?}", trigen.out_voronoi_edge_point_b(5)), "Index(3)"); + assert_eq!(trigen.out_voronoi_edge_point_a(6), 2); assert_eq!( - format!("{:?}", trigen.out_voronoi_edge_point_b(2)), - "Direction(-1.0, 0.0)" + format!("{:?}", trigen.out_voronoi_edge_point_b(6)), + "Direction(0.0, -1.0)" + ); + assert_eq!(trigen.out_voronoi_edge_point_a(7), 3); + assert_eq!( + format!("{:?}", trigen.out_voronoi_edge_point_b(7)), + "Direction(0.0, 1.0)" ); Ok(()) } From e47417b523d6c271bf7de455280f8ff68bfec448 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 13:39:28 +1000 Subject: [PATCH 12/14] Use int instead of int32_t to see if it works on windows and macos --- c_code/interface_tetgen.cpp | 52 +++++++++++++++++----------------- c_code/interface_tetgen.h | 36 +++++++++++------------- c_code/interface_triangle.c | 56 ++++++++++++++++++------------------- c_code/interface_triangle.h | 48 +++++++++++++++---------------- 4 files changed, 95 insertions(+), 97 deletions(-) diff --git a/c_code/interface_tetgen.cpp b/c_code/interface_tetgen.cpp index cc97af5..4c200ba 100644 --- a/c_code/interface_tetgen.cpp +++ b/c_code/interface_tetgen.cpp @@ -18,7 +18,7 @@ void tet_drop_tetgen(struct ExtTetgen *tetgen) { delete tetgen; } -struct ExtTetgen *tet_new_tetgen(int32_t npoint, int32_t nfacet, int32_t const *facet_npoint, int32_t nregion, int32_t nhole) { +struct ExtTetgen *tet_new_tetgen(int npoint, int nfacet, int const *facet_npoint, int nregion, int nhole) { if (npoint < 4) { return NULL; } @@ -46,7 +46,7 @@ struct ExtTetgen *tet_new_tetgen(int32_t npoint, int32_t nfacet, int32_t const * } // point markers - tetgen->input.pointmarkerlist = new (std::nothrow) int32_t[npoint]; + tetgen->input.pointmarkerlist = new (std::nothrow) int[npoint]; if (tetgen->input.pointmarkerlist == NULL) { tet_drop_tetgen(tetgen); return NULL; @@ -60,9 +60,9 @@ struct ExtTetgen *tet_new_tetgen(int32_t npoint, int32_t nfacet, int32_t const * tet_drop_tetgen(tetgen); return NULL; } - tetgen->input.facetmarkerlist = new (std::nothrow) int32_t[nfacet]; - const int32_t NUM_POLY = 1; - for (int32_t index = 0; index < nfacet; index++) { + tetgen->input.facetmarkerlist = new (std::nothrow) int[nfacet]; + const int NUM_POLY = 1; + for (int index = 0; index < nfacet; index++) { // facet polygon tetgenio::facet *fac = &tetgen->input.facetlist[index]; fac->polygonlist = new (std::nothrow) tetgenio::polygon[NUM_POLY]; @@ -76,7 +76,7 @@ struct ExtTetgen *tet_new_tetgen(int32_t npoint, int32_t nfacet, int32_t const * // facet polygon vertices size_t nvertex = facet_npoint[index]; tetgenio::polygon *gon = &fac->polygonlist[0]; - gon->vertexlist = new (std::nothrow) int32_t[nvertex]; + gon->vertexlist = new (std::nothrow) int[nvertex]; if (gon->vertexlist == NULL) { tet_drop_tetgen(tetgen); return NULL; @@ -110,7 +110,7 @@ struct ExtTetgen *tet_new_tetgen(int32_t npoint, int32_t nfacet, int32_t const * return tetgen; } -int32_t tet_set_point(struct ExtTetgen *tetgen, int32_t index, int32_t marker, double x, double y, double z) { +int tet_set_point(struct ExtTetgen *tetgen, int index, int marker, double x, double y, double z) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -128,7 +128,7 @@ int32_t tet_set_point(struct ExtTetgen *tetgen, int32_t index, int32_t marker, d return TRITET_SUCCESS; } -int32_t tet_set_facet_point(struct ExtTetgen *tetgen, int32_t index, int32_t m, int32_t p) { +int tet_set_facet_point(struct ExtTetgen *tetgen, int index, int m, int p) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -159,7 +159,7 @@ int32_t tet_set_facet_point(struct ExtTetgen *tetgen, int32_t index, int32_t m, return TRITET_SUCCESS; } -int32_t tet_set_facet_marker(struct ExtTetgen *tetgen, int32_t index, int32_t marker) { +int tet_set_facet_marker(struct ExtTetgen *tetgen, int index, int marker) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -175,7 +175,7 @@ int32_t tet_set_facet_marker(struct ExtTetgen *tetgen, int32_t index, int32_t ma return TRITET_SUCCESS; } -int32_t tet_set_region(struct ExtTetgen *tetgen, int32_t index, int32_t attribute, double x, double y, double z, double max_volume) { +int tet_set_region(struct ExtTetgen *tetgen, int index, int attribute, double x, double y, double z, double max_volume) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -194,7 +194,7 @@ int32_t tet_set_region(struct ExtTetgen *tetgen, int32_t index, int32_t attribut return TRITET_SUCCESS; } -int32_t tet_set_hole(struct ExtTetgen *tetgen, int32_t index, double x, double y, double z) { +int tet_set_hole(struct ExtTetgen *tetgen, int index, double x, double y, double z) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -211,7 +211,7 @@ int32_t tet_set_hole(struct ExtTetgen *tetgen, int32_t index, double x, double y return TRITET_SUCCESS; } -int32_t tet_run_delaunay(struct ExtTetgen *tetgen, int32_t verbose) { +int tet_run_delaunay(struct ExtTetgen *tetgen, int verbose) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -229,7 +229,7 @@ int32_t tet_run_delaunay(struct ExtTetgen *tetgen, int32_t verbose) { } try { tetrahedralize(command, &tetgen->input, &tetgen->output, NULL, NULL); - } catch (int32_t status) { + } catch (int status) { printf("status = %d\n", status); // TODO } catch (...) { return 1; // TODO @@ -238,7 +238,7 @@ int32_t tet_run_delaunay(struct ExtTetgen *tetgen, int32_t verbose) { return TRITET_SUCCESS; } -int32_t tet_run_tetrahedralize(struct ExtTetgen *tetgen, int32_t verbose, int32_t o2, double global_max_volume, double global_min_angle) { +int tet_run_tetrahedralize(struct ExtTetgen *tetgen, int verbose, int o2, double global_max_volume, double global_min_angle) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -301,7 +301,7 @@ int32_t tet_run_tetrahedralize(struct ExtTetgen *tetgen, int32_t verbose, int32_ } if (global_max_volume > 0.0) { char buf[32]; - int32_t n = snprintf(buf, 32, "a%.15f", global_max_volume); + int n = snprintf(buf, 32, "a%.15f", global_max_volume); if (n >= 32) { return TRITET_ERROR_STRING_CONCAT; } @@ -309,7 +309,7 @@ int32_t tet_run_tetrahedralize(struct ExtTetgen *tetgen, int32_t verbose, int32_ } if (global_min_angle > 0.0) { char buf[32]; - int32_t n = snprintf(buf, 32, "q%.15f", global_min_angle); + int n = snprintf(buf, 32, "q%.15f", global_min_angle); if (n >= 32) { return TRITET_ERROR_STRING_CONCAT; } @@ -319,7 +319,7 @@ int32_t tet_run_tetrahedralize(struct ExtTetgen *tetgen, int32_t verbose, int32_ } try { tetrahedralize(command, &tetgen->input, &tetgen->output, NULL, NULL); - } catch (int32_t status) { + } catch (int status) { printf("status = %d\n", status); // TODO } catch (...) { return 1; // TODO @@ -328,28 +328,28 @@ int32_t tet_run_tetrahedralize(struct ExtTetgen *tetgen, int32_t verbose, int32_ return TRITET_SUCCESS; } -int32_t tet_out_npoint(struct ExtTetgen *tetgen) { +int tet_out_npoint(struct ExtTetgen *tetgen) { if (tetgen == NULL) { return 0; } return tetgen->output.numberofpoints; } -int32_t tet_out_ncell(struct ExtTetgen *tetgen) { +int tet_out_ncell(struct ExtTetgen *tetgen) { if (tetgen == NULL) { return 0; } return tetgen->output.numberoftetrahedra; } -int32_t tet_out_cell_npoint(struct ExtTetgen *tetgen) { +int tet_out_cell_npoint(struct ExtTetgen *tetgen) { if (tetgen == NULL) { return 0; } return tetgen->output.numberofcorners; } -double tet_out_point(struct ExtTetgen *tetgen, int32_t index, int32_t dim) { +double tet_out_point(struct ExtTetgen *tetgen, int index, int dim) { if (tetgen == NULL) { return 0.0; } @@ -360,7 +360,7 @@ double tet_out_point(struct ExtTetgen *tetgen, int32_t index, int32_t dim) { } } -int32_t tet_out_point_marker(struct ExtTetgen *tetgen, int32_t index) { +int tet_out_point_marker(struct ExtTetgen *tetgen, int index) { if (tetgen == NULL) { return 0; } @@ -371,7 +371,7 @@ int32_t tet_out_point_marker(struct ExtTetgen *tetgen, int32_t index) { } } -int32_t tet_out_cell_point(struct ExtTetgen *tetgen, int32_t index, int32_t corner) { +int tet_out_cell_point(struct ExtTetgen *tetgen, int index, int corner) { if (tetgen == NULL) { return 0; } @@ -382,7 +382,7 @@ int32_t tet_out_cell_point(struct ExtTetgen *tetgen, int32_t index, int32_t corn } } -int32_t tet_out_cell_attribute(struct ExtTetgen *tetgen, int32_t index) { +int tet_out_cell_attribute(struct ExtTetgen *tetgen, int index) { if (tetgen == NULL) { return 0; } @@ -393,14 +393,14 @@ int32_t tet_out_cell_attribute(struct ExtTetgen *tetgen, int32_t index) { } } -int32_t tet_out_n_marked_face(struct ExtTetgen *tetgen) { +int tet_out_n_marked_face(struct ExtTetgen *tetgen) { if (tetgen == NULL) { return 0; } return static_cast(tetgen->output.marked_faces.size()); } -void tet_out_marked_face(struct ExtTetgen *tetgen, int32_t index, int32_t *a, int32_t *b, int32_t *c, int32_t *marker, int32_t *cell) { +void tet_out_marked_face(struct ExtTetgen *tetgen, int index, int *a, int *b, int *c, int *marker, int *cell) { *a = 0; *b = 0; *c = 0; diff --git a/c_code/interface_tetgen.h b/c_code/interface_tetgen.h index 1266a5c..336e9cc 100644 --- a/c_code/interface_tetgen.h +++ b/c_code/interface_tetgen.h @@ -1,8 +1,6 @@ #ifndef INTERFACE_TETGEN_H #define INTERFACE_TETGEN_H -#include - #include "tetgen.h" struct ExtTetgen { @@ -10,40 +8,40 @@ struct ExtTetgen { struct tetgenio output; }; -struct ExtTetgen *tet_new_tetgen(int32_t npoint, int32_t nfacet, int32_t const *facet_npoint, int32_t nregion, int32_t nhole); +struct ExtTetgen *tet_new_tetgen(int npoint, int nfacet, int const *facet_npoint, int nregion, int nhole); void tet_drop_tetgen(struct ExtTetgen *tetgen); -int32_t tet_set_point(struct ExtTetgen *tetgen, int32_t index, int32_t marker, double x, double y, double z); +int tet_set_point(struct ExtTetgen *tetgen, int index, int marker, double x, double y, double z); -int32_t tet_set_facet_point(struct ExtTetgen *tetgen, int32_t index, int32_t m, int32_t p); +int tet_set_facet_point(struct ExtTetgen *tetgen, int index, int m, int p); -int32_t tet_set_facet_marker(struct ExtTetgen *tetgen, int32_t index, int32_t marker); +int tet_set_facet_marker(struct ExtTetgen *tetgen, int index, int marker); -int32_t tet_set_region(struct ExtTetgen *tetgen, int32_t index, int32_t attribute, double x, double y, double z, double max_volume); +int tet_set_region(struct ExtTetgen *tetgen, int index, int attribute, double x, double y, double z, double max_volume); -int32_t tet_set_hole(struct ExtTetgen *tetgen, int32_t index, double x, double y, double z); +int tet_set_hole(struct ExtTetgen *tetgen, int index, double x, double y, double z); -int32_t tet_run_delaunay(struct ExtTetgen *tetgen, int32_t verbose); +int tet_run_delaunay(struct ExtTetgen *tetgen, int verbose); -int32_t tet_run_tetrahedralize(struct ExtTetgen *tetgen, int32_t verbose, int32_t o2, double global_max_volume, double global_min_angle); +int tet_run_tetrahedralize(struct ExtTetgen *tetgen, int verbose, int o2, double global_max_volume, double global_min_angle); -int32_t tet_out_npoint(struct ExtTetgen *tetgen); +int tet_out_npoint(struct ExtTetgen *tetgen); -int32_t tet_out_ncell(struct ExtTetgen *tetgen); // a "cell" here is a "tetrahedron" +int tet_out_ncell(struct ExtTetgen *tetgen); // a "cell" here is a "tetrahedron" -int32_t tet_out_cell_npoint(struct ExtTetgen *tetgen); +int tet_out_cell_npoint(struct ExtTetgen *tetgen); -double tet_out_point(struct ExtTetgen *tetgen, int32_t index, int32_t dim); +double tet_out_point(struct ExtTetgen *tetgen, int index, int dim); -int32_t tet_out_point_marker(struct ExtTetgen *tetgen, int32_t index); +int tet_out_point_marker(struct ExtTetgen *tetgen, int index); -int32_t tet_out_cell_point(struct ExtTetgen *tetgen, int32_t index, int32_t corner); +int tet_out_cell_point(struct ExtTetgen *tetgen, int index, int corner); -int32_t tet_out_cell_attribute(struct ExtTetgen *tetgen, int32_t index); +int tet_out_cell_attribute(struct ExtTetgen *tetgen, int index); -int32_t tet_out_n_marked_face(struct ExtTetgen *tetgen); +int tet_out_n_marked_face(struct ExtTetgen *tetgen); -void tet_out_marked_face(struct ExtTetgen *tetgen, int32_t index, int32_t *a, int32_t *b, int32_t *c, int32_t *marker, int32_t *cell); +void tet_out_marked_face(struct ExtTetgen *tetgen, int index, int *a, int *b, int *c, int *marker, int *cell); #endif // INTERFACE_TETGEN_H \ No newline at end of file diff --git a/c_code/interface_triangle.c b/c_code/interface_triangle.c index 63618ad..cb0b0f6 100644 --- a/c_code/interface_triangle.c +++ b/c_code/interface_triangle.c @@ -111,7 +111,7 @@ void free_triangle_data(struct triangulateio *data) { zero_triangle_data(data); } -struct ExtTrigen *tri_new_trigen(int32_t npoint, int32_t nsegment, int32_t nregion, int32_t nhole) { +struct ExtTrigen *tri_new_trigen(int npoint, int nsegment, int nregion, int nhole) { if (npoint < 3) { return NULL; } @@ -134,7 +134,7 @@ struct ExtTrigen *tri_new_trigen(int32_t npoint, int32_t nsegment, int32_t nregi trigen->input.numberofpoints = npoint; // point markers - trigen->input.pointmarkerlist = (int32_t *)malloc(npoint * sizeof(int32_t)); + trigen->input.pointmarkerlist = (int *)malloc(npoint * sizeof(int)); if (trigen->input.pointmarkerlist == NULL) { free(trigen); return NULL; @@ -142,13 +142,13 @@ struct ExtTrigen *tri_new_trigen(int32_t npoint, int32_t nsegment, int32_t nregi // segments if (nsegment > 0) { - trigen->input.segmentlist = (int32_t *)malloc(nsegment * 2 * sizeof(int32_t)); + trigen->input.segmentlist = (int *)malloc(nsegment * 2 * sizeof(int)); if (trigen->input.segmentlist == NULL) { free_triangle_data(&trigen->input); free(trigen); return NULL; } - trigen->input.segmentmarkerlist = (int32_t *)malloc(nsegment * sizeof(int32_t)); + trigen->input.segmentmarkerlist = (int *)malloc(nsegment * sizeof(int)); if (trigen->input.segmentmarkerlist == NULL) { free_triangle_data(&trigen->input); free(trigen); @@ -192,7 +192,7 @@ void tri_drop_trigen(struct ExtTrigen *trigen) { free(trigen); } -int32_t tri_set_point(struct ExtTrigen *trigen, int32_t index, int32_t marker, double x, double y) { +int tri_set_point(struct ExtTrigen *trigen, int index, int marker, double x, double y) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -208,7 +208,7 @@ int32_t tri_set_point(struct ExtTrigen *trigen, int32_t index, int32_t marker, d return TRITET_SUCCESS; } -int32_t tri_set_segment(struct ExtTrigen *trigen, int32_t index, int32_t marker, int32_t a, int32_t b) { +int tri_set_segment(struct ExtTrigen *trigen, int index, int marker, int a, int b) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -227,7 +227,7 @@ int32_t tri_set_segment(struct ExtTrigen *trigen, int32_t index, int32_t marker, return TRITET_SUCCESS; } -int32_t tri_set_region(struct ExtTrigen *trigen, int32_t index, int32_t attribute, double x, double y, double max_area) { +int tri_set_region(struct ExtTrigen *trigen, int index, int attribute, double x, double y, double max_area) { // Shewchuk: If you are using the -A and -a switches simultaneously and wish to assign an attribute // to some region without imposing an area constraint, use a negative maximum area. if (trigen == NULL) { @@ -246,7 +246,7 @@ int32_t tri_set_region(struct ExtTrigen *trigen, int32_t index, int32_t attribut return TRITET_SUCCESS; } -int32_t tri_set_hole(struct ExtTrigen *trigen, int32_t index, double x, double y) { +int tri_set_hole(struct ExtTrigen *trigen, int index, double x, double y) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -261,7 +261,7 @@ int32_t tri_set_hole(struct ExtTrigen *trigen, int32_t index, double x, double y return TRITET_SUCCESS; } -int32_t tri_run_delaunay(struct ExtTrigen *trigen, int32_t verbose) { +int tri_run_delaunay(struct ExtTrigen *trigen, int verbose) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -291,7 +291,7 @@ int32_t tri_run_delaunay(struct ExtTrigen *trigen, int32_t verbose) { return TRITET_SUCCESS; } -int32_t tri_run_voronoi(struct ExtTrigen *trigen, int32_t verbose) { +int tri_run_voronoi(struct ExtTrigen *trigen, int verbose) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -322,7 +322,7 @@ int32_t tri_run_voronoi(struct ExtTrigen *trigen, int32_t verbose) { return TRITET_SUCCESS; } -int32_t tri_run_triangulate(struct ExtTrigen *trigen, int32_t verbose, int32_t quadratic, int32_t allow_new_points_on_bry, double global_max_area, double global_min_angle) { +int tri_run_triangulate(struct ExtTrigen *trigen, int verbose, int quadratic, int allow_new_points_on_bry, double global_max_area, double global_min_angle) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -355,7 +355,7 @@ int32_t tri_run_triangulate(struct ExtTrigen *trigen, int32_t verbose, int32_t q } if (global_max_area > 0.0) { char buf[32]; - int32_t n = snprintf(buf, 32, "a%.15f", global_max_area); + int n = snprintf(buf, 32, "a%.15f", global_max_area); if (n >= 32) { return TRITET_ERROR_STRING_CONCAT; } @@ -363,7 +363,7 @@ int32_t tri_run_triangulate(struct ExtTrigen *trigen, int32_t verbose, int32_t q } if (global_min_angle > 0.0) { char buf[32]; - int32_t n = snprintf(buf, 32, "q%.15f", global_min_angle); + int n = snprintf(buf, 32, "q%.15f", global_min_angle); if (n >= 32) { return TRITET_ERROR_STRING_CONCAT; } @@ -385,35 +385,35 @@ int32_t tri_run_triangulate(struct ExtTrigen *trigen, int32_t verbose, int32_t q return TRITET_SUCCESS; } -int32_t tri_out_npoint(struct ExtTrigen *trigen) { +int tri_out_npoint(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->output.numberofpoints; } -int32_t tri_out_nsegment(struct ExtTrigen *trigen) { +int tri_out_nsegment(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->output.numberofsegments; } -int32_t tri_out_ncell(struct ExtTrigen *trigen) { +int tri_out_ncell(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->output.numberoftriangles; } -int32_t tri_out_cell_npoint(struct ExtTrigen *trigen) { +int tri_out_cell_npoint(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->output.numberofcorners; } -double tri_out_point(struct ExtTrigen *trigen, int32_t index, int32_t dim) { +double tri_out_point(struct ExtTrigen *trigen, int index, int dim) { if (trigen == NULL) { return 0.0; } @@ -424,7 +424,7 @@ double tri_out_point(struct ExtTrigen *trigen, int32_t index, int32_t dim) { } } -int32_t tri_out_point_marker(struct ExtTrigen *trigen, int32_t index) { +int tri_out_point_marker(struct ExtTrigen *trigen, int index) { if (trigen == NULL) { return 0; } @@ -435,7 +435,7 @@ int32_t tri_out_point_marker(struct ExtTrigen *trigen, int32_t index) { } } -int32_t tri_out_segment_point(struct ExtTrigen *trigen, int32_t index, int32_t side) { +int tri_out_segment_point(struct ExtTrigen *trigen, int index, int side) { if (trigen == NULL) { return 0; } @@ -446,7 +446,7 @@ int32_t tri_out_segment_point(struct ExtTrigen *trigen, int32_t index, int32_t s } } -int32_t tri_out_segment_marker(struct ExtTrigen *trigen, int32_t index) { +int tri_out_segment_marker(struct ExtTrigen *trigen, int index) { if (trigen == NULL) { return 0; } @@ -457,7 +457,7 @@ int32_t tri_out_segment_marker(struct ExtTrigen *trigen, int32_t index) { } } -int32_t tri_out_cell_point(struct ExtTrigen *trigen, int32_t index, int32_t corner) { +int tri_out_cell_point(struct ExtTrigen *trigen, int index, int corner) { if (trigen == NULL) { return 0; } @@ -468,7 +468,7 @@ int32_t tri_out_cell_point(struct ExtTrigen *trigen, int32_t index, int32_t corn } } -int32_t tri_out_cell_attribute(struct ExtTrigen *trigen, int32_t index) { +int tri_out_cell_attribute(struct ExtTrigen *trigen, int index) { if (trigen == NULL) { return 0; } @@ -479,14 +479,14 @@ int32_t tri_out_cell_attribute(struct ExtTrigen *trigen, int32_t index) { } } -int32_t tri_out_voronoi_npoint(struct ExtTrigen *trigen) { +int tri_out_voronoi_npoint(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->voronoi.numberofpoints; } -int32_t tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t dim) { +int tri_out_voronoi_point(struct ExtTrigen *trigen, int index, int dim) { if (trigen == NULL) { return 0.0; } @@ -497,14 +497,14 @@ int32_t tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t d } } -int32_t tri_out_voronoi_nedge(struct ExtTrigen *trigen) { +int tri_out_voronoi_nedge(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->voronoi.numberofedges; } -int32_t tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int32_t index, int32_t side) { +int tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int index, int side) { if (trigen == NULL) { return 0; } @@ -515,7 +515,7 @@ int32_t tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int32_t index, int3 } } -double tri_out_voronoi_edge_point_b_direction(struct ExtTrigen *trigen, int32_t index, int32_t dim) { +double tri_out_voronoi_edge_point_b_direction(struct ExtTrigen *trigen, int index, int dim) { if (trigen == NULL) { return 0.0; } diff --git a/c_code/interface_triangle.h b/c_code/interface_triangle.h index 02a9eeb..4bbf2c1 100644 --- a/c_code/interface_triangle.h +++ b/c_code/interface_triangle.h @@ -5,7 +5,7 @@ #define REAL double #define ANSI_DECLARATORS -#define VOID int32_t +#define VOID int #include "triangle.h" #undef REAL #undef ANSI_DECLARATORS @@ -17,52 +17,52 @@ struct ExtTrigen { struct triangulateio voronoi; }; -struct ExtTrigen *tri_new_trigen(int32_t npoint, int32_t nsegment, int32_t nregion, int32_t nhole); +struct ExtTrigen *tri_new_trigen(int npoint, int nsegment, int nregion, int nhole); void tri_drop_trigen(struct ExtTrigen *trigen); -int32_t tri_set_point(struct ExtTrigen *trigen, int32_t index, int32_t marker, double x, double y); +int tri_set_point(struct ExtTrigen *trigen, int index, int marker, double x, double y); -int32_t tri_set_segment(struct ExtTrigen *trigen, int32_t index, int32_t marker, int32_t a, int32_t b); +int tri_set_segment(struct ExtTrigen *trigen, int index, int marker, int a, int b); -int32_t tri_set_region(struct ExtTrigen *trigen, int32_t index, int32_t attribute, double x, double y, double max_area); +int tri_set_region(struct ExtTrigen *trigen, int index, int attribute, double x, double y, double max_area); -int32_t tri_set_hole(struct ExtTrigen *trigen, int32_t index, double x, double y); +int tri_set_hole(struct ExtTrigen *trigen, int index, double x, double y); -int32_t tri_run_delaunay(struct ExtTrigen *trigen, int32_t verbose); +int tri_run_delaunay(struct ExtTrigen *trigen, int verbose); -int32_t tri_run_voronoi(struct ExtTrigen *trigen, int32_t verbose); +int tri_run_voronoi(struct ExtTrigen *trigen, int verbose); -int32_t tri_run_triangulate(struct ExtTrigen *trigen, int32_t verbose, int32_t quadratic, int32_t allow_new_points_on_bry, double global_max_area, double global_min_angle); +int tri_run_triangulate(struct ExtTrigen *trigen, int verbose, int quadratic, int allow_new_points_on_bry, double global_max_area, double global_min_angle); -int32_t tri_out_npoint(struct ExtTrigen *trigen); +int tri_out_npoint(struct ExtTrigen *trigen); -int32_t tri_out_nsegment(struct ExtTrigen *trigen); +int tri_out_nsegment(struct ExtTrigen *trigen); -int32_t tri_out_ncell(struct ExtTrigen *trigen); // a "cell" here is a "triangle" +int tri_out_ncell(struct ExtTrigen *trigen); // a "cell" here is a "triangle" -int32_t tri_out_cell_npoint(struct ExtTrigen *trigen); +int tri_out_cell_npoint(struct ExtTrigen *trigen); -double tri_out_point(struct ExtTrigen *trigen, int32_t index, int32_t dim); +double tri_out_point(struct ExtTrigen *trigen, int index, int dim); -int32_t tri_out_point_marker(struct ExtTrigen *trigen, int32_t index); +int tri_out_point_marker(struct ExtTrigen *trigen, int index); -int32_t tri_out_segment_point(struct ExtTrigen *trigen, int32_t index, int32_t side); +int tri_out_segment_point(struct ExtTrigen *trigen, int index, int side); -int32_t tri_out_segment_marker(struct ExtTrigen *trigen, int32_t index); +int tri_out_segment_marker(struct ExtTrigen *trigen, int index); -int32_t tri_out_cell_point(struct ExtTrigen *trigen, int32_t index, int32_t corner); +int tri_out_cell_point(struct ExtTrigen *trigen, int index, int corner); -int32_t tri_out_cell_attribute(struct ExtTrigen *trigen, int32_t index); +int tri_out_cell_attribute(struct ExtTrigen *trigen, int index); -int32_t tri_out_voronoi_npoint(struct ExtTrigen *trigen); +int tri_out_voronoi_npoint(struct ExtTrigen *trigen); -int32_t tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t dim); +int tri_out_voronoi_point(struct ExtTrigen *trigen, int index, int dim); -int32_t tri_out_voronoi_nedge(struct ExtTrigen *trigen); +int tri_out_voronoi_nedge(struct ExtTrigen *trigen); -int32_t tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int32_t index, int32_t side); +int tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int index, int side); -double tri_out_voronoi_edge_point_b_direction(struct ExtTrigen *trigen, int32_t index, int32_t dim); +double tri_out_voronoi_edge_point_b_direction(struct ExtTrigen *trigen, int index, int dim); #endif // INTERFACE_TRIANGLE_H From 596e417fe12fa75b954e824075d1696eaf423491 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 16:31:14 +1000 Subject: [PATCH 13/14] Revert "Use int instead of int32_t to see if it works on windows and macos" This reverts commit e47417b523d6c271bf7de455280f8ff68bfec448. --- c_code/interface_tetgen.cpp | 52 +++++++++++++++++----------------- c_code/interface_tetgen.h | 36 +++++++++++++----------- c_code/interface_triangle.c | 56 ++++++++++++++++++------------------- c_code/interface_triangle.h | 48 +++++++++++++++---------------- 4 files changed, 97 insertions(+), 95 deletions(-) diff --git a/c_code/interface_tetgen.cpp b/c_code/interface_tetgen.cpp index 4c200ba..cc97af5 100644 --- a/c_code/interface_tetgen.cpp +++ b/c_code/interface_tetgen.cpp @@ -18,7 +18,7 @@ void tet_drop_tetgen(struct ExtTetgen *tetgen) { delete tetgen; } -struct ExtTetgen *tet_new_tetgen(int npoint, int nfacet, int const *facet_npoint, int nregion, int nhole) { +struct ExtTetgen *tet_new_tetgen(int32_t npoint, int32_t nfacet, int32_t const *facet_npoint, int32_t nregion, int32_t nhole) { if (npoint < 4) { return NULL; } @@ -46,7 +46,7 @@ struct ExtTetgen *tet_new_tetgen(int npoint, int nfacet, int const *facet_npoint } // point markers - tetgen->input.pointmarkerlist = new (std::nothrow) int[npoint]; + tetgen->input.pointmarkerlist = new (std::nothrow) int32_t[npoint]; if (tetgen->input.pointmarkerlist == NULL) { tet_drop_tetgen(tetgen); return NULL; @@ -60,9 +60,9 @@ struct ExtTetgen *tet_new_tetgen(int npoint, int nfacet, int const *facet_npoint tet_drop_tetgen(tetgen); return NULL; } - tetgen->input.facetmarkerlist = new (std::nothrow) int[nfacet]; - const int NUM_POLY = 1; - for (int index = 0; index < nfacet; index++) { + tetgen->input.facetmarkerlist = new (std::nothrow) int32_t[nfacet]; + const int32_t NUM_POLY = 1; + for (int32_t index = 0; index < nfacet; index++) { // facet polygon tetgenio::facet *fac = &tetgen->input.facetlist[index]; fac->polygonlist = new (std::nothrow) tetgenio::polygon[NUM_POLY]; @@ -76,7 +76,7 @@ struct ExtTetgen *tet_new_tetgen(int npoint, int nfacet, int const *facet_npoint // facet polygon vertices size_t nvertex = facet_npoint[index]; tetgenio::polygon *gon = &fac->polygonlist[0]; - gon->vertexlist = new (std::nothrow) int[nvertex]; + gon->vertexlist = new (std::nothrow) int32_t[nvertex]; if (gon->vertexlist == NULL) { tet_drop_tetgen(tetgen); return NULL; @@ -110,7 +110,7 @@ struct ExtTetgen *tet_new_tetgen(int npoint, int nfacet, int const *facet_npoint return tetgen; } -int tet_set_point(struct ExtTetgen *tetgen, int index, int marker, double x, double y, double z) { +int32_t tet_set_point(struct ExtTetgen *tetgen, int32_t index, int32_t marker, double x, double y, double z) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -128,7 +128,7 @@ int tet_set_point(struct ExtTetgen *tetgen, int index, int marker, double x, dou return TRITET_SUCCESS; } -int tet_set_facet_point(struct ExtTetgen *tetgen, int index, int m, int p) { +int32_t tet_set_facet_point(struct ExtTetgen *tetgen, int32_t index, int32_t m, int32_t p) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -159,7 +159,7 @@ int tet_set_facet_point(struct ExtTetgen *tetgen, int index, int m, int p) { return TRITET_SUCCESS; } -int tet_set_facet_marker(struct ExtTetgen *tetgen, int index, int marker) { +int32_t tet_set_facet_marker(struct ExtTetgen *tetgen, int32_t index, int32_t marker) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -175,7 +175,7 @@ int tet_set_facet_marker(struct ExtTetgen *tetgen, int index, int marker) { return TRITET_SUCCESS; } -int tet_set_region(struct ExtTetgen *tetgen, int index, int attribute, double x, double y, double z, double max_volume) { +int32_t tet_set_region(struct ExtTetgen *tetgen, int32_t index, int32_t attribute, double x, double y, double z, double max_volume) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -194,7 +194,7 @@ int tet_set_region(struct ExtTetgen *tetgen, int index, int attribute, double x, return TRITET_SUCCESS; } -int tet_set_hole(struct ExtTetgen *tetgen, int index, double x, double y, double z) { +int32_t tet_set_hole(struct ExtTetgen *tetgen, int32_t index, double x, double y, double z) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -211,7 +211,7 @@ int tet_set_hole(struct ExtTetgen *tetgen, int index, double x, double y, double return TRITET_SUCCESS; } -int tet_run_delaunay(struct ExtTetgen *tetgen, int verbose) { +int32_t tet_run_delaunay(struct ExtTetgen *tetgen, int32_t verbose) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -229,7 +229,7 @@ int tet_run_delaunay(struct ExtTetgen *tetgen, int verbose) { } try { tetrahedralize(command, &tetgen->input, &tetgen->output, NULL, NULL); - } catch (int status) { + } catch (int32_t status) { printf("status = %d\n", status); // TODO } catch (...) { return 1; // TODO @@ -238,7 +238,7 @@ int tet_run_delaunay(struct ExtTetgen *tetgen, int verbose) { return TRITET_SUCCESS; } -int tet_run_tetrahedralize(struct ExtTetgen *tetgen, int verbose, int o2, double global_max_volume, double global_min_angle) { +int32_t tet_run_tetrahedralize(struct ExtTetgen *tetgen, int32_t verbose, int32_t o2, double global_max_volume, double global_min_angle) { if (tetgen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -301,7 +301,7 @@ int tet_run_tetrahedralize(struct ExtTetgen *tetgen, int verbose, int o2, double } if (global_max_volume > 0.0) { char buf[32]; - int n = snprintf(buf, 32, "a%.15f", global_max_volume); + int32_t n = snprintf(buf, 32, "a%.15f", global_max_volume); if (n >= 32) { return TRITET_ERROR_STRING_CONCAT; } @@ -309,7 +309,7 @@ int tet_run_tetrahedralize(struct ExtTetgen *tetgen, int verbose, int o2, double } if (global_min_angle > 0.0) { char buf[32]; - int n = snprintf(buf, 32, "q%.15f", global_min_angle); + int32_t n = snprintf(buf, 32, "q%.15f", global_min_angle); if (n >= 32) { return TRITET_ERROR_STRING_CONCAT; } @@ -319,7 +319,7 @@ int tet_run_tetrahedralize(struct ExtTetgen *tetgen, int verbose, int o2, double } try { tetrahedralize(command, &tetgen->input, &tetgen->output, NULL, NULL); - } catch (int status) { + } catch (int32_t status) { printf("status = %d\n", status); // TODO } catch (...) { return 1; // TODO @@ -328,28 +328,28 @@ int tet_run_tetrahedralize(struct ExtTetgen *tetgen, int verbose, int o2, double return TRITET_SUCCESS; } -int tet_out_npoint(struct ExtTetgen *tetgen) { +int32_t tet_out_npoint(struct ExtTetgen *tetgen) { if (tetgen == NULL) { return 0; } return tetgen->output.numberofpoints; } -int tet_out_ncell(struct ExtTetgen *tetgen) { +int32_t tet_out_ncell(struct ExtTetgen *tetgen) { if (tetgen == NULL) { return 0; } return tetgen->output.numberoftetrahedra; } -int tet_out_cell_npoint(struct ExtTetgen *tetgen) { +int32_t tet_out_cell_npoint(struct ExtTetgen *tetgen) { if (tetgen == NULL) { return 0; } return tetgen->output.numberofcorners; } -double tet_out_point(struct ExtTetgen *tetgen, int index, int dim) { +double tet_out_point(struct ExtTetgen *tetgen, int32_t index, int32_t dim) { if (tetgen == NULL) { return 0.0; } @@ -360,7 +360,7 @@ double tet_out_point(struct ExtTetgen *tetgen, int index, int dim) { } } -int tet_out_point_marker(struct ExtTetgen *tetgen, int index) { +int32_t tet_out_point_marker(struct ExtTetgen *tetgen, int32_t index) { if (tetgen == NULL) { return 0; } @@ -371,7 +371,7 @@ int tet_out_point_marker(struct ExtTetgen *tetgen, int index) { } } -int tet_out_cell_point(struct ExtTetgen *tetgen, int index, int corner) { +int32_t tet_out_cell_point(struct ExtTetgen *tetgen, int32_t index, int32_t corner) { if (tetgen == NULL) { return 0; } @@ -382,7 +382,7 @@ int tet_out_cell_point(struct ExtTetgen *tetgen, int index, int corner) { } } -int tet_out_cell_attribute(struct ExtTetgen *tetgen, int index) { +int32_t tet_out_cell_attribute(struct ExtTetgen *tetgen, int32_t index) { if (tetgen == NULL) { return 0; } @@ -393,14 +393,14 @@ int tet_out_cell_attribute(struct ExtTetgen *tetgen, int index) { } } -int tet_out_n_marked_face(struct ExtTetgen *tetgen) { +int32_t tet_out_n_marked_face(struct ExtTetgen *tetgen) { if (tetgen == NULL) { return 0; } return static_cast(tetgen->output.marked_faces.size()); } -void tet_out_marked_face(struct ExtTetgen *tetgen, int index, int *a, int *b, int *c, int *marker, int *cell) { +void tet_out_marked_face(struct ExtTetgen *tetgen, int32_t index, int32_t *a, int32_t *b, int32_t *c, int32_t *marker, int32_t *cell) { *a = 0; *b = 0; *c = 0; diff --git a/c_code/interface_tetgen.h b/c_code/interface_tetgen.h index 336e9cc..1266a5c 100644 --- a/c_code/interface_tetgen.h +++ b/c_code/interface_tetgen.h @@ -1,6 +1,8 @@ #ifndef INTERFACE_TETGEN_H #define INTERFACE_TETGEN_H +#include + #include "tetgen.h" struct ExtTetgen { @@ -8,40 +10,40 @@ struct ExtTetgen { struct tetgenio output; }; -struct ExtTetgen *tet_new_tetgen(int npoint, int nfacet, int const *facet_npoint, int nregion, int nhole); +struct ExtTetgen *tet_new_tetgen(int32_t npoint, int32_t nfacet, int32_t const *facet_npoint, int32_t nregion, int32_t nhole); void tet_drop_tetgen(struct ExtTetgen *tetgen); -int tet_set_point(struct ExtTetgen *tetgen, int index, int marker, double x, double y, double z); +int32_t tet_set_point(struct ExtTetgen *tetgen, int32_t index, int32_t marker, double x, double y, double z); -int tet_set_facet_point(struct ExtTetgen *tetgen, int index, int m, int p); +int32_t tet_set_facet_point(struct ExtTetgen *tetgen, int32_t index, int32_t m, int32_t p); -int tet_set_facet_marker(struct ExtTetgen *tetgen, int index, int marker); +int32_t tet_set_facet_marker(struct ExtTetgen *tetgen, int32_t index, int32_t marker); -int tet_set_region(struct ExtTetgen *tetgen, int index, int attribute, double x, double y, double z, double max_volume); +int32_t tet_set_region(struct ExtTetgen *tetgen, int32_t index, int32_t attribute, double x, double y, double z, double max_volume); -int tet_set_hole(struct ExtTetgen *tetgen, int index, double x, double y, double z); +int32_t tet_set_hole(struct ExtTetgen *tetgen, int32_t index, double x, double y, double z); -int tet_run_delaunay(struct ExtTetgen *tetgen, int verbose); +int32_t tet_run_delaunay(struct ExtTetgen *tetgen, int32_t verbose); -int tet_run_tetrahedralize(struct ExtTetgen *tetgen, int verbose, int o2, double global_max_volume, double global_min_angle); +int32_t tet_run_tetrahedralize(struct ExtTetgen *tetgen, int32_t verbose, int32_t o2, double global_max_volume, double global_min_angle); -int tet_out_npoint(struct ExtTetgen *tetgen); +int32_t tet_out_npoint(struct ExtTetgen *tetgen); -int tet_out_ncell(struct ExtTetgen *tetgen); // a "cell" here is a "tetrahedron" +int32_t tet_out_ncell(struct ExtTetgen *tetgen); // a "cell" here is a "tetrahedron" -int tet_out_cell_npoint(struct ExtTetgen *tetgen); +int32_t tet_out_cell_npoint(struct ExtTetgen *tetgen); -double tet_out_point(struct ExtTetgen *tetgen, int index, int dim); +double tet_out_point(struct ExtTetgen *tetgen, int32_t index, int32_t dim); -int tet_out_point_marker(struct ExtTetgen *tetgen, int index); +int32_t tet_out_point_marker(struct ExtTetgen *tetgen, int32_t index); -int tet_out_cell_point(struct ExtTetgen *tetgen, int index, int corner); +int32_t tet_out_cell_point(struct ExtTetgen *tetgen, int32_t index, int32_t corner); -int tet_out_cell_attribute(struct ExtTetgen *tetgen, int index); +int32_t tet_out_cell_attribute(struct ExtTetgen *tetgen, int32_t index); -int tet_out_n_marked_face(struct ExtTetgen *tetgen); +int32_t tet_out_n_marked_face(struct ExtTetgen *tetgen); -void tet_out_marked_face(struct ExtTetgen *tetgen, int index, int *a, int *b, int *c, int *marker, int *cell); +void tet_out_marked_face(struct ExtTetgen *tetgen, int32_t index, int32_t *a, int32_t *b, int32_t *c, int32_t *marker, int32_t *cell); #endif // INTERFACE_TETGEN_H \ No newline at end of file diff --git a/c_code/interface_triangle.c b/c_code/interface_triangle.c index cb0b0f6..63618ad 100644 --- a/c_code/interface_triangle.c +++ b/c_code/interface_triangle.c @@ -111,7 +111,7 @@ void free_triangle_data(struct triangulateio *data) { zero_triangle_data(data); } -struct ExtTrigen *tri_new_trigen(int npoint, int nsegment, int nregion, int nhole) { +struct ExtTrigen *tri_new_trigen(int32_t npoint, int32_t nsegment, int32_t nregion, int32_t nhole) { if (npoint < 3) { return NULL; } @@ -134,7 +134,7 @@ struct ExtTrigen *tri_new_trigen(int npoint, int nsegment, int nregion, int nhol trigen->input.numberofpoints = npoint; // point markers - trigen->input.pointmarkerlist = (int *)malloc(npoint * sizeof(int)); + trigen->input.pointmarkerlist = (int32_t *)malloc(npoint * sizeof(int32_t)); if (trigen->input.pointmarkerlist == NULL) { free(trigen); return NULL; @@ -142,13 +142,13 @@ struct ExtTrigen *tri_new_trigen(int npoint, int nsegment, int nregion, int nhol // segments if (nsegment > 0) { - trigen->input.segmentlist = (int *)malloc(nsegment * 2 * sizeof(int)); + trigen->input.segmentlist = (int32_t *)malloc(nsegment * 2 * sizeof(int32_t)); if (trigen->input.segmentlist == NULL) { free_triangle_data(&trigen->input); free(trigen); return NULL; } - trigen->input.segmentmarkerlist = (int *)malloc(nsegment * sizeof(int)); + trigen->input.segmentmarkerlist = (int32_t *)malloc(nsegment * sizeof(int32_t)); if (trigen->input.segmentmarkerlist == NULL) { free_triangle_data(&trigen->input); free(trigen); @@ -192,7 +192,7 @@ void tri_drop_trigen(struct ExtTrigen *trigen) { free(trigen); } -int tri_set_point(struct ExtTrigen *trigen, int index, int marker, double x, double y) { +int32_t tri_set_point(struct ExtTrigen *trigen, int32_t index, int32_t marker, double x, double y) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -208,7 +208,7 @@ int tri_set_point(struct ExtTrigen *trigen, int index, int marker, double x, dou return TRITET_SUCCESS; } -int tri_set_segment(struct ExtTrigen *trigen, int index, int marker, int a, int b) { +int32_t tri_set_segment(struct ExtTrigen *trigen, int32_t index, int32_t marker, int32_t a, int32_t b) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -227,7 +227,7 @@ int tri_set_segment(struct ExtTrigen *trigen, int index, int marker, int a, int return TRITET_SUCCESS; } -int tri_set_region(struct ExtTrigen *trigen, int index, int attribute, double x, double y, double max_area) { +int32_t tri_set_region(struct ExtTrigen *trigen, int32_t index, int32_t attribute, double x, double y, double max_area) { // Shewchuk: If you are using the -A and -a switches simultaneously and wish to assign an attribute // to some region without imposing an area constraint, use a negative maximum area. if (trigen == NULL) { @@ -246,7 +246,7 @@ int tri_set_region(struct ExtTrigen *trigen, int index, int attribute, double x, return TRITET_SUCCESS; } -int tri_set_hole(struct ExtTrigen *trigen, int index, double x, double y) { +int32_t tri_set_hole(struct ExtTrigen *trigen, int32_t index, double x, double y) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -261,7 +261,7 @@ int tri_set_hole(struct ExtTrigen *trigen, int index, double x, double y) { return TRITET_SUCCESS; } -int tri_run_delaunay(struct ExtTrigen *trigen, int verbose) { +int32_t tri_run_delaunay(struct ExtTrigen *trigen, int32_t verbose) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -291,7 +291,7 @@ int tri_run_delaunay(struct ExtTrigen *trigen, int verbose) { return TRITET_SUCCESS; } -int tri_run_voronoi(struct ExtTrigen *trigen, int verbose) { +int32_t tri_run_voronoi(struct ExtTrigen *trigen, int32_t verbose) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -322,7 +322,7 @@ int tri_run_voronoi(struct ExtTrigen *trigen, int verbose) { return TRITET_SUCCESS; } -int tri_run_triangulate(struct ExtTrigen *trigen, int verbose, int quadratic, int allow_new_points_on_bry, double global_max_area, double global_min_angle) { +int32_t tri_run_triangulate(struct ExtTrigen *trigen, int32_t verbose, int32_t quadratic, int32_t allow_new_points_on_bry, double global_max_area, double global_min_angle) { if (trigen == NULL) { return TRITET_ERROR_NULL_DATA; } @@ -355,7 +355,7 @@ int tri_run_triangulate(struct ExtTrigen *trigen, int verbose, int quadratic, in } if (global_max_area > 0.0) { char buf[32]; - int n = snprintf(buf, 32, "a%.15f", global_max_area); + int32_t n = snprintf(buf, 32, "a%.15f", global_max_area); if (n >= 32) { return TRITET_ERROR_STRING_CONCAT; } @@ -363,7 +363,7 @@ int tri_run_triangulate(struct ExtTrigen *trigen, int verbose, int quadratic, in } if (global_min_angle > 0.0) { char buf[32]; - int n = snprintf(buf, 32, "q%.15f", global_min_angle); + int32_t n = snprintf(buf, 32, "q%.15f", global_min_angle); if (n >= 32) { return TRITET_ERROR_STRING_CONCAT; } @@ -385,35 +385,35 @@ int tri_run_triangulate(struct ExtTrigen *trigen, int verbose, int quadratic, in return TRITET_SUCCESS; } -int tri_out_npoint(struct ExtTrigen *trigen) { +int32_t tri_out_npoint(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->output.numberofpoints; } -int tri_out_nsegment(struct ExtTrigen *trigen) { +int32_t tri_out_nsegment(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->output.numberofsegments; } -int tri_out_ncell(struct ExtTrigen *trigen) { +int32_t tri_out_ncell(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->output.numberoftriangles; } -int tri_out_cell_npoint(struct ExtTrigen *trigen) { +int32_t tri_out_cell_npoint(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->output.numberofcorners; } -double tri_out_point(struct ExtTrigen *trigen, int index, int dim) { +double tri_out_point(struct ExtTrigen *trigen, int32_t index, int32_t dim) { if (trigen == NULL) { return 0.0; } @@ -424,7 +424,7 @@ double tri_out_point(struct ExtTrigen *trigen, int index, int dim) { } } -int tri_out_point_marker(struct ExtTrigen *trigen, int index) { +int32_t tri_out_point_marker(struct ExtTrigen *trigen, int32_t index) { if (trigen == NULL) { return 0; } @@ -435,7 +435,7 @@ int tri_out_point_marker(struct ExtTrigen *trigen, int index) { } } -int tri_out_segment_point(struct ExtTrigen *trigen, int index, int side) { +int32_t tri_out_segment_point(struct ExtTrigen *trigen, int32_t index, int32_t side) { if (trigen == NULL) { return 0; } @@ -446,7 +446,7 @@ int tri_out_segment_point(struct ExtTrigen *trigen, int index, int side) { } } -int tri_out_segment_marker(struct ExtTrigen *trigen, int index) { +int32_t tri_out_segment_marker(struct ExtTrigen *trigen, int32_t index) { if (trigen == NULL) { return 0; } @@ -457,7 +457,7 @@ int tri_out_segment_marker(struct ExtTrigen *trigen, int index) { } } -int tri_out_cell_point(struct ExtTrigen *trigen, int index, int corner) { +int32_t tri_out_cell_point(struct ExtTrigen *trigen, int32_t index, int32_t corner) { if (trigen == NULL) { return 0; } @@ -468,7 +468,7 @@ int tri_out_cell_point(struct ExtTrigen *trigen, int index, int corner) { } } -int tri_out_cell_attribute(struct ExtTrigen *trigen, int index) { +int32_t tri_out_cell_attribute(struct ExtTrigen *trigen, int32_t index) { if (trigen == NULL) { return 0; } @@ -479,14 +479,14 @@ int tri_out_cell_attribute(struct ExtTrigen *trigen, int index) { } } -int tri_out_voronoi_npoint(struct ExtTrigen *trigen) { +int32_t tri_out_voronoi_npoint(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->voronoi.numberofpoints; } -int tri_out_voronoi_point(struct ExtTrigen *trigen, int index, int dim) { +int32_t tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t dim) { if (trigen == NULL) { return 0.0; } @@ -497,14 +497,14 @@ int tri_out_voronoi_point(struct ExtTrigen *trigen, int index, int dim) { } } -int tri_out_voronoi_nedge(struct ExtTrigen *trigen) { +int32_t tri_out_voronoi_nedge(struct ExtTrigen *trigen) { if (trigen == NULL) { return 0; } return trigen->voronoi.numberofedges; } -int tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int index, int side) { +int32_t tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int32_t index, int32_t side) { if (trigen == NULL) { return 0; } @@ -515,7 +515,7 @@ int tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int index, int side) { } } -double tri_out_voronoi_edge_point_b_direction(struct ExtTrigen *trigen, int index, int dim) { +double tri_out_voronoi_edge_point_b_direction(struct ExtTrigen *trigen, int32_t index, int32_t dim) { if (trigen == NULL) { return 0.0; } diff --git a/c_code/interface_triangle.h b/c_code/interface_triangle.h index 4bbf2c1..02a9eeb 100644 --- a/c_code/interface_triangle.h +++ b/c_code/interface_triangle.h @@ -5,7 +5,7 @@ #define REAL double #define ANSI_DECLARATORS -#define VOID int +#define VOID int32_t #include "triangle.h" #undef REAL #undef ANSI_DECLARATORS @@ -17,52 +17,52 @@ struct ExtTrigen { struct triangulateio voronoi; }; -struct ExtTrigen *tri_new_trigen(int npoint, int nsegment, int nregion, int nhole); +struct ExtTrigen *tri_new_trigen(int32_t npoint, int32_t nsegment, int32_t nregion, int32_t nhole); void tri_drop_trigen(struct ExtTrigen *trigen); -int tri_set_point(struct ExtTrigen *trigen, int index, int marker, double x, double y); +int32_t tri_set_point(struct ExtTrigen *trigen, int32_t index, int32_t marker, double x, double y); -int tri_set_segment(struct ExtTrigen *trigen, int index, int marker, int a, int b); +int32_t tri_set_segment(struct ExtTrigen *trigen, int32_t index, int32_t marker, int32_t a, int32_t b); -int tri_set_region(struct ExtTrigen *trigen, int index, int attribute, double x, double y, double max_area); +int32_t tri_set_region(struct ExtTrigen *trigen, int32_t index, int32_t attribute, double x, double y, double max_area); -int tri_set_hole(struct ExtTrigen *trigen, int index, double x, double y); +int32_t tri_set_hole(struct ExtTrigen *trigen, int32_t index, double x, double y); -int tri_run_delaunay(struct ExtTrigen *trigen, int verbose); +int32_t tri_run_delaunay(struct ExtTrigen *trigen, int32_t verbose); -int tri_run_voronoi(struct ExtTrigen *trigen, int verbose); +int32_t tri_run_voronoi(struct ExtTrigen *trigen, int32_t verbose); -int tri_run_triangulate(struct ExtTrigen *trigen, int verbose, int quadratic, int allow_new_points_on_bry, double global_max_area, double global_min_angle); +int32_t tri_run_triangulate(struct ExtTrigen *trigen, int32_t verbose, int32_t quadratic, int32_t allow_new_points_on_bry, double global_max_area, double global_min_angle); -int tri_out_npoint(struct ExtTrigen *trigen); +int32_t tri_out_npoint(struct ExtTrigen *trigen); -int tri_out_nsegment(struct ExtTrigen *trigen); +int32_t tri_out_nsegment(struct ExtTrigen *trigen); -int tri_out_ncell(struct ExtTrigen *trigen); // a "cell" here is a "triangle" +int32_t tri_out_ncell(struct ExtTrigen *trigen); // a "cell" here is a "triangle" -int tri_out_cell_npoint(struct ExtTrigen *trigen); +int32_t tri_out_cell_npoint(struct ExtTrigen *trigen); -double tri_out_point(struct ExtTrigen *trigen, int index, int dim); +double tri_out_point(struct ExtTrigen *trigen, int32_t index, int32_t dim); -int tri_out_point_marker(struct ExtTrigen *trigen, int index); +int32_t tri_out_point_marker(struct ExtTrigen *trigen, int32_t index); -int tri_out_segment_point(struct ExtTrigen *trigen, int index, int side); +int32_t tri_out_segment_point(struct ExtTrigen *trigen, int32_t index, int32_t side); -int tri_out_segment_marker(struct ExtTrigen *trigen, int index); +int32_t tri_out_segment_marker(struct ExtTrigen *trigen, int32_t index); -int tri_out_cell_point(struct ExtTrigen *trigen, int index, int corner); +int32_t tri_out_cell_point(struct ExtTrigen *trigen, int32_t index, int32_t corner); -int tri_out_cell_attribute(struct ExtTrigen *trigen, int index); +int32_t tri_out_cell_attribute(struct ExtTrigen *trigen, int32_t index); -int tri_out_voronoi_npoint(struct ExtTrigen *trigen); +int32_t tri_out_voronoi_npoint(struct ExtTrigen *trigen); -int tri_out_voronoi_point(struct ExtTrigen *trigen, int index, int dim); +int32_t tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t dim); -int tri_out_voronoi_nedge(struct ExtTrigen *trigen); +int32_t tri_out_voronoi_nedge(struct ExtTrigen *trigen); -int tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int index, int side); +int32_t tri_out_voronoi_edge_point(struct ExtTrigen *trigen, int32_t index, int32_t side); -double tri_out_voronoi_edge_point_b_direction(struct ExtTrigen *trigen, int index, int dim); +double tri_out_voronoi_edge_point_b_direction(struct ExtTrigen *trigen, int32_t index, int32_t dim); #endif // INTERFACE_TRIANGLE_H From 67cb704bb83aa05181fb5e3f60c7dad2380d3531 Mon Sep 17 00:00:00 2001 From: Dorival Pedroso Date: Tue, 10 Oct 2023 16:36:02 +1000 Subject: [PATCH 14/14] Fix bug: Voronoi C function returns double --- c_code/interface_triangle.c | 2 +- c_code/interface_triangle.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/c_code/interface_triangle.c b/c_code/interface_triangle.c index 63618ad..e25607d 100644 --- a/c_code/interface_triangle.c +++ b/c_code/interface_triangle.c @@ -486,7 +486,7 @@ int32_t tri_out_voronoi_npoint(struct ExtTrigen *trigen) { return trigen->voronoi.numberofpoints; } -int32_t tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t dim) { +double tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t dim) { if (trigen == NULL) { return 0.0; } diff --git a/c_code/interface_triangle.h b/c_code/interface_triangle.h index 02a9eeb..9613c2c 100644 --- a/c_code/interface_triangle.h +++ b/c_code/interface_triangle.h @@ -57,7 +57,7 @@ int32_t tri_out_cell_attribute(struct ExtTrigen *trigen, int32_t index); int32_t tri_out_voronoi_npoint(struct ExtTrigen *trigen); -int32_t tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t dim); +double tri_out_voronoi_point(struct ExtTrigen *trigen, int32_t index, int32_t dim); int32_t tri_out_voronoi_nedge(struct ExtTrigen *trigen);