Compare commits
21 Commits
v1.5.1
...
7dc62b107a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7dc62b107a | ||
|
|
0b93af8772 | ||
|
|
ce723c99f5 | ||
|
|
61383e616e | ||
|
|
49d04852f4 | ||
|
|
939f253212 | ||
|
|
0e60cee0e4 | ||
|
|
19c62144b1 | ||
|
|
fe8b4a850a | ||
|
|
c4d0885bae | ||
|
|
894bf6f1f0 | ||
|
|
99bdc3352e | ||
|
|
de574f0c50 | ||
|
|
f4ac74fe5f | ||
|
|
a47324183d | ||
|
|
6bbb6e1b15 | ||
|
|
f2b3fd216a | ||
|
|
38047844c1 | ||
|
|
95546ba14c | ||
|
|
535f9c41f4 | ||
|
|
70f58eb910 |
22
.github/issue_template.md
vendored
Normal file
22
.github/issue_template.md
vendored
Normal 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
12
.github/pull_request_template.md
vendored
Normal 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.
|
||||||
20
CHANGELOG.md
20
CHANGELOG.md
@@ -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
56
CONTRIBUTING.md
Normal 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.
|
||||||
|
|
||||||
20
LICENSE
20
LICENSE
@@ -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
|
||||||
|
|||||||
25
README
25
README
@@ -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
35
README.md
Normal 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
0
example.poly
Normal file → Executable 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,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
14343
tetgen.cxx
14343
tetgen.cxx
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user