问题标签 [tetgen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
852 浏览

3d - 从 3D Delaunay Tessallation 构造 3D Voronoi 图

我正在尝试将 3D Delaunay Tessallation(使用TetGen生成)转换为 Voronoi 图。我知道 TetGen 可以创建 Voronoi 图,但由于不寻常的边界条件,我需要自己执行转换。

我完全被这里的二元性难住了。我有四个中的两个:

  1. 每个 Delaunay 顶点对应一个 Voronoi 单元(单元的中心在顶点处)。
  2. 每个 Delaunay 四面体对应一个 Voronoi 顶点(四面体的中心在顶点处)。

我知道每个 Delaunay 面对应一个 Voronoi 边,并且我有面顶点,但是如何从中获取 Voronoi 边呢?

此外,每个 Delaunay 边对应于一个 Voronoi 面,但同样 - 我如何找到对应于边的面?

0 投票
1 回答
1417 浏览

python - 使用 tetgen 或三角形(或 meshpy)创建一个空心圆顶

我正在使用 tetgen 尝试创建一个空心圆顶。我正在使用三角形,然后只是对一个圆进行三角剖分并根据等式 z = sqrt(abs(r^2 - x^2 - y^2)) 提高 z 值,但我在边缘附近的拉伸非常糟糕。

所以我想只生成这个圆顶的一堆点,然后在不填充的情况下对其进行网格划分。Tetgen 基本上是通过提供 .node 和 .faces 文件来为我做这件事,但问题是我仍然处于底部我不知道如何摆脱它。我对 tetgen 和 meshpy 还很陌生,所以如果有人能给我一个工作流程,我将不胜感激。答案实际上可能非常简单。

例如,我可以使用一个简单的函数在圆底周围创建点:

然后我使用以下函数在圆顶上生成随机点:

然后我只是从 .node 文件中获取标题并运行 tetgen 以获取 .face 文件。这种方法的唯一问题是当我需要它成为一个开放的圆顶时,底部就在那里。

我更愿意使用meshpy,但是生成这些点然后像这样将其输入meshpy不会返回任何东西......

print np.array(mesh.facets) 和 print np.array(mesh.points) 现在只是空数组。

有没有人对如何使用 meshpy 而不设置所有方面有任何想法,或者像命令行 tetgen 那样使用这种构建方法来构建方面?这并没有真正解决我的问题,即圆顶底部没有打开,但我一直在努力解决这个问题。任何帮助将不胜感激。谢谢!

0 投票
1 回答
830 浏览

c++ - 在 C++ 中使用 TetGen 加载网格文件

我想在 C++ 中使用 TetGen 库加载网格文件,但我不知道正确的过程或在我的代码中激活哪些开关以显示受约束的 Delaunay网格。

我尝试了一些具有默认行为的恐龙网格(来自 rocq.inria.fr)的基本加载:

形状应该是这样的:

在此处输入图像描述

使用TetView时,它可以完美运行。但是使用我的代码,我得到了以下结果:

恐龙网格结果

我尝试激活 Delaunay 约束的分段线性复形 (plc)属性:

我只从网格中得到了几个部分:

恐龙网的更多部分

也许还有更多部分,但我不知道如何获得它们。

0 投票
1 回答
238 浏览

c++ - Tetgen:从给定的曲面三角形开始,在不改变曲面连通性的情况下创建新网格

我正在使用 tetgen,但我遇到了麻烦。我想创建一个网格,从给定的表面三角形开始。我不想更改给定的三角形。特别是,我正在研究这样一个领域:有一个带有内部孔的外部立方体盒子(也是一个盒子)。我拥有的三角形是内表面和外表面的三角形。我想在两个表面之间建立网格。不幸的是,我没有成功。

我使用的输入是这种类型:

  • 节点数,3、0、1(没有区域,但有标记)

- 节点列表

  • 刻面数,1(标记)

- 方面的列表

  • 1个(1个孔)

- 孔的坐标

  • 0(无地区)

刻面列表是内部和外部表面的三角形列表。我已经考虑过这种领域最简单的网格。而且我确信我给 tetgen 的输入是“正确的”。我已经在 matlab 上显示它,它与我想要的一致。可能我想要的不是 tetgen 想要的……然而 tetgen 发现了不相交的相交三角形。他们共享一个方面,但我认为方面可以共享方面!还是我错了?或者也许是某些三角形共面的事实?从概念上讲,我认为我的输入有问题,但我不明白是什么。

当我调用 tetgen 时,我使用“-Y”开关以避免表面发生变化。我已经分别或一起尝试了 -p 和 -q 开关。但总是发生同样的错误。有人可以帮我吗?

非常感谢。

0 投票
0 回答
143 浏览

c++ - C语言中的泰根

我目前正在使用 Tetgen 生成 Delaunay 三角剖分,但由于我必须使用 C 编程语言而不是 C++,有没有办法可以从 C 调用 Tetgen?

先感谢您

0 投票
2 回答
291 浏览

c++ - 如何在不使用“tetgen.exe”的情况下直接使用“tetgen.h”和生成网格的函数?

我们的团队正在开展一个项目,在该项目中我们使用 tetgen 文件生成 3D 网格,现在我们正在使用您的tetgen.exe文件来获取结果。

现在我们要做的是使用 directtetgen.h和函数来生成网格而不使用tetgen.exe.

0 投票
1 回答
836 浏览

3d - 如何将 .stl 导入 tetgen?

我试图让 tetgen 提供我的 stl 模型的 Delaunay 四面体化,但总是在相交方面出现一些错误。

该模型是人类心脏的 ascii .stl 模型,从计算机断层扫描数据中获得(如果需要,可以提供链接)。首先,我使用具有 100 个局部性和 1.00 个容差值的自适应渲染在 CTAn 软件中构建它,而不是使用 MeshFix 修复它。MeshFix 输出 .off 或二进制 .stl 文件。

如果我尝试将 .off 模型导入 tetgen,我总是会收到此错误

读取文件 off.off 中第 2 行标题的语法错误。

我无法直接将.stl文件导入tetgen,因为它不支持二进制.stl,所以我先使用MeshLab转换为acsii.stl,然后将结果导入tetgen。

但在这种情况下,我有另一个错误

找到两个几乎自相交的刻面

它建议我降低二面角公差。我这样做只是为了得到下一条消息:

找到两个完全自相交的刻面

它建议我使用 -d 前缀来检测所有这些方面。我这样做并收到下一条消息:

没有面相交

现在我很困惑,因为它给出了特殊的命题。

如果这里有人熟悉tetgen,请告诉我,如何将我的模型导入tetgen?我尝试了一些修复工具和不同的前缀,但到目前为止没有任何效果。

如果有人有 tetgen 社区的链接,我也将不胜感激,因为我没有找到任何东西,虽然试过了。

0 投票
1 回答
51 浏览

c++ - Ubuntu - tar.gz 下载错误,因为网站更改了他们的地址

我正在尝试编译在终端中调用FW4SPL的C++ 框架的依赖项。cmake通过输入命令make -j4,它将自动下载、构建和安装每个依赖项。

但是在编译过程中出现了错误。

我认为原因是因为链接http://www.tetgen.org/1.5/src/tetgen1.5.0.tar.gz不再存在,公司tetgen将其网站地址更改为https://launchpad.net/ubuntu/+archive/primary/+files/tetgen_1.5.0.orig.tar.gz

我可以手动打开这个tar.gz文件,但问题是我不知道应该在哪个目录中打开它,因为该make -j4命令应该为我自动完成。该tar.gz文件应该存在的目录可以在任何地方!

任何帮助,将不胜感激。

0 投票
1 回答
120 浏览

c++ - 为什么将指针从 double*** 转换为 double** 导致写访问冲突?

我必须集成来自 tetgen(网格生成器)的代码,这显然是经常使用的。但是,我必须使用旧版本(1.4.3 而不是 1.5),这给了我一个“写访问冲突”。相关功能在这里:

'dummytetbase' 和 'dummytet' 都是双***指针,四面体是双**指针。

示例值为:

'tetwords' 是:12。

'(无符号长)四面体->对齐字节':8。

'tetwords*sizeof( tetrahedron) + tetrahedrons->alignbytes' 是:104。

'(alignptr % (unsigned long)tetrahedrons->alignbytes)' 是:0。

代码编译得很好,但是当应该完成从“dummytet”到“dummytet [0]”的指针转换时,我得到了这个“写访问冲突”。

因此, dummytet 获得了 dummytetbase + 8 的地址。而且 dummytet[x] 获得了所有相同的地址,但这会导致写入冲突。

知道为什么会这样吗?谢谢!

0 投票
1 回答
396 浏览

mesh - 如何从 .mesh 格式转换为 .nodes、.ele 和 .face 格式?

我有一个 .mesh 格式的 3d 网格,可以通过 medit 可视化程序读取。但是,我需要将其转换为 .nodes、.ele 和 .face 格式,即 tetgen(3d Delaunay 四面体程序)的输出格式。进行这种格式转换的最佳方法是什么?是否有免费程序可用于进行此转换?