21 Commits
v1.5.1 ... main

Author SHA1 Message Date
Jürgen Fuhrmann
7dc62b107a Merge pull request 'jf/cla+templates' (#6) from jf/cla+templates into main
Reviewed-on: https://codeberg.org/TetGen/TetGen/pulls/6
2025-07-29 18:21:14 +02:00
Jürgen Fuhrmann
0b93af8772 Update Contributor License Agreement for dual AGPLv3/MIT licensing
With a little help of copilot/claude sonnet 4.

- Add explicit CLA agreement checkbox to PR template
- Update README with commercial licensing information and future CLA revision notice
- Enable dual licensing strategy while maintaining contributor-friendly approach
- Use license grants instead of copyright assignment for practical implementation
2025-07-29 18:13:19 +02:00
Jürgen Fuhrmann
ce723c99f5 Merge branch 'main' into jf/cla+templates 2025-07-29 17:12:06 +02:00
Jürgen Fuhrmann
61383e616e Merge pull request 'Synchronize remark on future versions of tetgen with the WIAS website' (#5) from jf/update-README03 into main
Reviewed-on: https://codeberg.org/TetGen/TetGen/pulls/5
2025-07-29 17:10:06 +02:00
Jürgen Fuhrmann
49d04852f4 localize license link 2025-07-23 18:24:56 +02:00
Jürgen Fuhrmann
939f253212 try to fix link in readme 2025-07-23 18:22:30 +02:00
Jürgen Fuhrmann
0e60cee0e4 update CLA after Discussion with T.K. 2025-07-23 18:20:26 +02:00
Jürgen Fuhrmann
19c62144b1 move templates to .github 2025-07-23 12:18:19 +02:00
Jürgen Fuhrmann
fe8b4a850a first draft of cla + issue/pr templates 2025-07-23 12:17:31 +02:00
Jürgen Fuhrmann
c4d0885bae Synchronize remark on future versions of tetgen with the WIAS website 2025-07-22 17:37:18 +02:00
sihang0592
894bf6f1f0 Merge pull request 'Update README: mention "headed by Hang Si" + WIAS collaboration' (#4) from jf/update-README02 into main
Reviewed-on: https://codeberg.org/TetGen/TetGen/pulls/4
2025-07-16 11:41:43 +02:00
Jürgen Fuhrmann
99bdc3352e Update README: mention "headed by Hang Si" + WIAS collaboration 2025-07-16 11:26:43 +02:00
Jürgen Fuhrmann
de574f0c50 Merge pull request 'Reflect move to codeberg in readme' (#2) from doc/codebergmirror into main
Reviewed-on: https://codeberg.org/TetGen/TetGen/pulls/2
2025-07-11 22:42:08 +02:00
Jürgen Fuhrmann
f4ac74fe5f fix release urls 2025-07-11 22:40:08 +02:00
Jürgen Fuhrmann
a47324183d Reflect move to codeberg in readme 2025-07-11 22:34:40 +02:00
Jürgen Fuhrmann
6bbb6e1b15 Merge pull request #1 from TetGen/jf/update-README
update README.
2025-05-29 15:08:38 +02:00
Jürgen Fuhrmann
f2b3fd216a Update README text:
instead of writing "uncertain" -> details will be announced later.
2025-05-29 15:05:28 +02:00
Jürgen Fuhrmann
38047844c1 update wording in README 2025-05-16 10:51:40 +02:00
Jürgen Fuhrmann
95546ba14c update README. license 2025-05-16 00:35:19 +02:00
Hang Si
535f9c41f4 Update changelog for v1.6.0 2025-05-15 22:37:16 +02:00
Hang Si
70f58eb910 TetGen v1.6.0
- Version obtained from www.wias-berlin.de / tetgen.org
2025-05-15 22:35:38 +02:00
12 changed files with 12131 additions and 7801 deletions

22
.github/issue_template.md vendored Normal file
View File

@@ -0,0 +1,22 @@
Thank you very much for your interest in TetGen! Reporting your issue helps to improve the code.
### Legal
By opening this issue, you agree to the terms of the Contributor License Agreement (CLA) stated in [CONTRIBUTING.md](https://codeberg.org/TetGen/TetGen/src/branch/main/CONTRIBUTING.md).
### Kind of issue (bug, feature request...):
### Issue description:
### Expected behavior:
### Observed behavior:
### Environment:
- TeGen version:
- OS (e.g. MacOS 14):
- Architecture (e.g. x64, aarch64):
- Compiler vendor + version:
### Minimum working example:
Please attach input data which allow to reproduce the problem.

12
.github/pull_request_template.md vendored Normal file
View File

@@ -0,0 +1,12 @@
Thank you very much for helping to improve TetGen!
### Legal:
By opening this pull request, you agree to the terms of the Contributor License Agreement (CLA) stated in [CONTRIBUTING.md](https://codeberg.org/TetGen/TetGen/src/branch/main/CONTRIBUTING.md).
- [ ] I have read and agree to the Contributor License Agreement in CONTRIBUTING.md
### Pull request description:
### Test data:
Please provide input data which help to test the feature implemented in the pull request.

View File

@@ -1,4 +1,24 @@
# TetGen: Release Notes # TetGen: Release Notes
## Version 1.6.0 (August 31, 2020)
- Improved the speed of the Bowyer-Watson point insertion algorithm
for creating Delaunay tetrahedralization.
- Improved the robustness of the boundary recovery algorithm (-p -Y
options) for creating constrained tetrahedralizations. Now the
default algorithm for the \`\`-p\" option (boundary recobvery) is
the constrained tetrahedralization algorithm. It is robust and it
uses less Steiner points than the constrained Delaunay
tetrahedralization (CDT) algorothm uses. The option to use the CDT
algorithm is \`\`-p -D\".
- A new implementation of the constrained Delaunay refinement
algorithm (-q option). It uses new Steiner points insertion schemes
to remove badly-shaped elements.
- Implemented a new set of mesh smoothing and mesh improvement
operations (-O -o) for optimizing the quality of the meshes. The
overall mesh quality has been improved.
- (Change of the -d option) To detect self-intersection in the input
surface mesh is now directly done in the constrained
tetrahedralization algorithm (the -p option).
## Version 1.5.0 (November 4, 2013) ## Version 1.5.0 (November 4, 2013)

56
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,56 @@
# Contributor License Agreement (CLA)
A "Contributor" is any person or entity that intentionally submits copyrighted material to the project,
including but not limited to code, documentation, or other material, via a pull request, issue, or other means.
By submitting a contribution Contributor agrees to the following terms:
## Dual AGPLv3/MIT License Grant
Contributor agrees that their contribution is provided under the GNU Affero General Public License v3 (AGPLv3) reproduced
in the file [LICENSE](LICENSE) or any later version and, in addition, grants the contribution under the MIT License terms below:
```text
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
## Annotating contributions to source code
### Trivial changes
Trivial changes (e.g., 1-2 line fixes or typo fixes) inherit the AGPLv3 license of the project and without further annotation are also licensed under MIT as specified above.
### Functions and nontrivial snippets of code
Functions and nontrivial snippets of code by default inherit the AGPLv3 license of the project and are also licensed under MIT as specified above. They shall be marked in a PR with an SPDX header as in this example:
```
# SPDX-License-Identifier: AGPL-3.0-or-later OR MIT
# Copyright (c) [Year] [Contributor Name]
void frobnicate(int ntet)
{
...
}
```
## Representations and Warranties
Contributor represents that:
- They are legally entitled to grant the above licenses;
- Their contributions are original works and do not violate third-party rights;
- They are not required to grant licenses under third-party terms (e.g., employer agreements).
## No Obligation
The Project is under no obligation to accept or use any contribution.

22
LICENSE
View File

@@ -1,23 +1,3 @@
TetGen License
--------------
TetGen is distributed under a dual licensing scheme. You can
redistribute it and/or modify it under the terms of the GNU Affero
General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later
version. A copy of the GNU Affero General Public License is reproduced
below.
If the terms and conditions of the AGPL v.3. would prevent you from
using TetGen, please consider the option to obtain a commercial
license for a fee. These licenses are offered by the Weierstrass
Institute for Applied Analysis and Stochastics (WIAS). As a rule,
licenses are provided "as-is", unlimited in time for a one time
fee. Please send corresponding requests to:
tetgen@wias-berlin.de. Please do not forget to include some
description of your company and the realm of its activities.
=====================================================================
GNU AFFERO GENERAL PUBLIC LICENSE GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007 Version 3, 19 November 2007
@@ -663,4 +643,4 @@ the specific requirements.
You should also get your employer (if you work as a programmer) or You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow necessary. For more information on this, and how to apply and follow
the GNU AGPL, see <http://www.gnu.org/licenses/>. the GNU AGPL, see <http://www.gnu.org/licenses/>.

25
README
View File

@@ -1,25 +0,0 @@
This is TetGen version 1.5.1 (released on August, 2018)
Please see the documentation of TetGen for compiling and using TetGen.
It is available at the following link:
http://www.tetgen.org
For more information on this product, contact :
Hang Si
Research Group of Numerical Mathematics and Scientific Computing
Weierstrass Institute for Applied Analysis and Stochastics
Mohrenstr. 39
10117 Berlin, Germany
Phone: +49 (0) 30-20372-446 Fax: +49 (0) 30-2044975
EMail: <si@wias-berlin.de>
Web Site: http://www.wias-berlin.de/~si
------------------- IMPORTANCE NOTICE -----------------------------
BEFORE INTALLING OR USING TetGen(R) READ the
GENERAL LICENSE TERMS AND CONDITIONS
-------------------------------------------------------------------

35
README.md Normal file
View File

@@ -0,0 +1,35 @@
TetGen
======
TetGen is a program to generate tetrahedral meshes of any 3D polyhedral domains. TetGen generates exact constrained Delaunay tetrahedralizations, boundary conforming Delaunay meshes, and Voronoi partitions.
TetGen versions up to v1.6.0 have been developed headed by [Hang Si](https://github.com/sihang0592) during his affiliation with [Weierstrass Institute for Applied Analysis and Stochastics, (WIAS) Berlin](https://www.wias-berlin.de/software/tetgen).
The primary development repository is [https://codeberg.org/TetGen/TetGen](https://codeberg.org/TetGen/TetGen). Please
open any issues in this repository. The github repository [https://github.com/TetGen/Tetgen](https://github.com/TetGen/Tetgen)
is a mirror of the codeberg repository.
This repository provides the source code of the most recent versions of TetGen.
The following releases are provided:
- [v1.4.3, 2011](https://codeberg.org/TetGen/TetGen/archive/v1.4.3.tar.gz): [MIT license with noncommercial clause](https://raw.githubusercontent.com/TetGen/TetGen/refs/tags/v1.4.3/LICENSE).
- [v1.5.0, 2013](https://codeberg.org/TetGen/TetGen/archive/v1.5.0.tar.gz): [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.html).
- [v1.5.1, 2018](https://codeberg.org/TetGen/TetGen/archive/v1.5.1.tar.gz): [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.html), recommended as most stable version.
- [v1.6.0, 2020](https://codeberg.org/TetGen/TetGen/archive/v1.6.0.tar.gz): [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.html), most recent version with some rough edges.
It is planned to resume active development of TetGen in cooperation between the main developer Hang Si and the Weierstrass Institute. Future versions of TetGen will be published via this repository.
## Documentation
- Manuals are available in https://codeberg.org/TetGen/Manuals.
- A technical paper about TetGen is available at [Hang Si, "TetGen, a Delaunay-Based Quality Tetrahedral Mesh Generator". ACM Trans. on Mathematical Software. 41 (2), 2015](http://doi.acm.org/10.1145/2629697)
## Commercial licensing
TetGen versions developed at WIAS are distributed under a dual licensing scheme. As an alternative to the use of TetGen under the AGPLv3 license, consider the option to obtain a commercial license for a fee. These licenses are offered by the Weierstrass Institute for Applied Analysis and Stochastics (WIAS). As a rule, licenses are provided "as-is", unlimited in time for a one time fee. Please send corresponding requests to: `tetgen at wias-berlin.de`. Please do not forget to include some description of your company and the realm of its activities.
Details about the extension of this dual licensing scheme for future versions of TetGen will be announced in due time.
## Contributing
By submitting a contribution (including but not limited to code, documentation, or other materials) via a pull request, issue, or other means, a contributor agrees to the terms of the contributor license agreement stated in [CONTRIBUTING.md](CONTRIBUTING.md). It is planned to revise this agreement, once the extension of the dual licensing scheme has been set up.

0
example.poly Normal file → Executable file
View File

0
makefile Normal file → Executable file
View File

View File

@@ -399,7 +399,7 @@ static REAL ispstaticfilter;
// http://www.math.utah.edu/~beebe/software/ieee/ // http://www.math.utah.edu/~beebe/software/ieee/
// The original program was "fpinfo2.c". // The original program was "fpinfo2.c".
double fppow2(int n) static double fppow2(int n)
{ {
double x, power; double x, power;
x = (n < 0) ? ((double)1.0/(double)2.0) : (double)2.0; x = (n < 0) ? ((double)1.0/(double)2.0) : (double)2.0;
@@ -412,12 +412,12 @@ double fppow2(int n)
#ifdef SINGLE #ifdef SINGLE
float fstore(float x) static float fstore(float x)
{ {
return (x); return (x);
} }
int test_float(int verbose) static int test_float(int verbose)
{ {
float x; float x;
int pass = 1; int pass = 1;
@@ -467,12 +467,12 @@ int test_float(int verbose)
# else # else
double dstore(double x) static double dstore(double x)
{ {
return (x); return (x);
} }
int test_double(int verbose) static int test_double(int verbose)
{ {
double x; double x;
int pass = 1; int pass = 1;
@@ -881,7 +881,7 @@ int expansion_sum_zeroelim2(int elen, REAL *e, int flen, REAL *f, REAL *h)
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
int fast_expansion_sum(int elen, REAL *e, int flen, REAL *f, REAL *h) static int fast_expansion_sum(int elen, REAL *e, int flen, REAL *f, REAL *h)
/* h cannot be e or f. */ /* h cannot be e or f. */
{ {
REAL Q; REAL Q;
@@ -953,7 +953,7 @@ int fast_expansion_sum(int elen, REAL *e, int flen, REAL *f, REAL *h)
/* properties. */ /* properties. */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
static
int fast_expansion_sum_zeroelim(int elen, REAL *e, int flen, REAL *f, REAL *h) int fast_expansion_sum_zeroelim(int elen, REAL *e, int flen, REAL *f, REAL *h)
/* h cannot be e or f. */ /* h cannot be e or f. */
{ {
@@ -1165,7 +1165,7 @@ int linear_expansion_sum_zeroelim(int elen, REAL *e, int flen, REAL *f,
/* will h.) */ /* will h.) */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
static
int scale_expansion(int elen, REAL *e, REAL b, REAL *h) int scale_expansion(int elen, REAL *e, REAL b, REAL *h)
/* e and h cannot be the same. */ /* e and h cannot be the same. */
{ {
@@ -1211,7 +1211,7 @@ int scale_expansion(int elen, REAL *e, REAL b, REAL *h)
/* will h.) */ /* will h.) */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
static
int scale_expansion_zeroelim(int elen, REAL *e, REAL b, REAL *h) int scale_expansion_zeroelim(int elen, REAL *e, REAL b, REAL *h)
/* e and h cannot be the same. */ /* e and h cannot be the same. */
{ {
@@ -1263,7 +1263,7 @@ int scale_expansion_zeroelim(int elen, REAL *e, REAL b, REAL *h)
/* nonadjacent expansion. */ /* nonadjacent expansion. */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
static
int compress(int elen, REAL *e, REAL *h) int compress(int elen, REAL *e, REAL *h)
/* e and h may be the same. */ /* e and h may be the same. */
{ {
@@ -1306,7 +1306,7 @@ int compress(int elen, REAL *e, REAL *h)
/* See either version of my paper for details. */ /* See either version of my paper for details. */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
static
REAL estimate(int elen, REAL *e) REAL estimate(int elen, REAL *e)
{ {
REAL Q; REAL Q;
@@ -1344,7 +1344,7 @@ REAL estimate(int elen, REAL *e)
/* nearly so. */ /* nearly so. */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
static
REAL orient2dfast(REAL *pa, REAL *pb, REAL *pc) REAL orient2dfast(REAL *pa, REAL *pb, REAL *pc)
{ {
REAL acx, bcx, acy, bcy; REAL acx, bcx, acy, bcy;
@@ -1356,6 +1356,7 @@ REAL orient2dfast(REAL *pa, REAL *pb, REAL *pc)
return acx * bcy - acy * bcx; return acx * bcy - acy * bcx;
} }
//static
REAL orient2dexact(REAL *pa, REAL *pb, REAL *pc) REAL orient2dexact(REAL *pa, REAL *pb, REAL *pc)
{ {
INEXACT REAL axby1, axcy1, bxcy1, bxay1, cxay1, cxby1; INEXACT REAL axby1, axcy1, bxcy1, bxay1, cxay1, cxby1;
@@ -4181,7 +4182,7 @@ REAL insphere(REAL *pa, REAL *pb, REAL *pc, REAL *pd, REAL *pe)
/* See my Robust Predicates paper for details. */ /* See my Robust Predicates paper for details. */
/* */ /* */
/*****************************************************************************/ /*****************************************************************************/
//static
REAL orient4dexact(REAL* pa, REAL* pb, REAL* pc, REAL* pd, REAL* pe, REAL orient4dexact(REAL* pa, REAL* pb, REAL* pc, REAL* pd, REAL* pe,
REAL aheight, REAL bheight, REAL cheight, REAL dheight, REAL aheight, REAL bheight, REAL cheight, REAL dheight,
REAL eheight) REAL eheight)
@@ -4397,6 +4398,7 @@ REAL orient4dexact(REAL* pa, REAL* pb, REAL* pc, REAL* pd, REAL* pe,
return deter[deterlen - 1]; return deter[deterlen - 1];
} }
static
REAL orient4dadapt(REAL* pa, REAL* pb, REAL* pc, REAL* pd, REAL* pe, REAL orient4dadapt(REAL* pa, REAL* pb, REAL* pc, REAL* pd, REAL* pe,
REAL aheight, REAL bheight, REAL cheight, REAL dheight, REAL aheight, REAL bheight, REAL cheight, REAL dheight,
REAL eheight, REAL permanent) REAL eheight, REAL permanent)
@@ -4700,3 +4702,9 @@ REAL orient4d(REAL* pa, REAL* pb, REAL* pc, REAL* pd, REAL* pe,
//==============================================================================

17955
tetgen.cxx

File diff suppressed because it is too large Load Diff

1751
tetgen.h

File diff suppressed because it is too large Load Diff