问题标签 [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 投票
3 回答
2089 浏览

opengl - 为复杂的 3D 网格动态生成三角形列表

在我的应用程序中,我拥有从用户输入中获取的复杂 3D 实体(例如Cylinder Block )的形状和尺寸。我需要为它构造顶点和索引缓冲区。

由于尺寸取自用户输入,我无法使用 Blender 或 3D Max 手动创建我的模型。动态生成这种网格的教科书方法是什么?

我正在寻找可以在给定顶点、边和孔的情况下生成三角形的东西。类似TetGen的东西,尽管 TetGen 无法排除落在实体/网格内部的三角形。

0 投票
1 回答
876 浏览

c++ - LNK 2028 - 2019 / 托管和非托管 C++ ?(对比 2008 年)

我正在尝试将一个开源库链接到我的一个项目。该库是非托管的(名为 Tetgen),我的项目是托管 C++。

我的项目可以识别标题并可以使用其中定义的功能。但是每次它想要访问.cpp中定义的某些方法时,我都会收到2028错误:

错误 LNK2028:未解析的令牌 (0A000E20) “public: void __thiscall tetgenio::save_nodes(char const *)” (?save_nodes@tetgenio@@$$FQAEXPBD@Z) 在函数“public: virtual bool __thiscall ForwardModelingPlugin::CustomMeshVol3D: :tesselate(void)" (?tesselate@CustomMeshVol3D@ForwardModelingPlugin@@$$FUAE_NXZ)

我试图创建一个测试功能:

...和另一个 Testbis 函数,在标题中定义。Testbis 有效,Test 给出 2028 错误。

我比较了我的项目的 .obj 和创建的 .lib,对于 lib 有:

但在 .obj 中是:

看来他们是不一样的。

一切都是用 /clr 编译的。我已经尝试创建一个 .lib 和一个 .dll,无论哪种方式都具有相同的结果。

0 投票
2 回答
1535 浏览

visual-studio - 在一个项目中使用 /clr 和 noclr 库

我在一个项目中遇到了一些问题。我需要使用两个库,但一个需要用/clr开关编译,因为另一个不能用这个开关编译。

有没有办法在一个项目中同时使用这两个库?目前它是用它编译的/clr,我得到了与noclr库的链接错误。

如果没有解决方案,我仍然可以noclr在批处理模式下启动库,但我想避免它......

我的项目在托管 C++ 中,库tetgen - 需要 /clr - 在本机C++ 中,如果没有 /clr 开关就无法编译,因为我收到了这个错误

错误 C3381:“tetgenio”:程序集访问说明符仅在使用 /clr 选项编译的代码中可用

另一个库三角形在 C 中。我在 Visual Studio 2008 上,该项目以 32 位编译。

0 投票
1 回答
674 浏览

3d - 如何将 TetGen 用于这个简单的 3D 几何图形

以下是定义我的简单 3D 几何的要点。

现在我们准备面和顶点

然后,我们在文档中描述的同一行中使用 TetGen,这是最简单的带有盒子的示例。

我们可以看到没有生成网格,也TetGenGetPoints无法重新调整顶点。结果非常令人失望。

在此处输入图像描述

为什么会发生这种奇怪的事情。TetGen 文档也不令人满意。

0 投票
2 回答
541 浏览

compiler-errors - tetgen tetcall 编译错误

我想使用 Tetgen 通过四面体化计算给定点集的体积。我已经在代码中看到了这样做的一个片段,可能只需要一些调整。

我遇到的问题是让 tetcall(tetgen 的测试程序)开始运行。如果我想编译它(在 Linux 终端中使用 g++ -o test tetcall.cxx -L./ -ltet )。我得到:

test.cpp:183:24:警告:不推荐从字符串常量到“char*”的转换 [-Wwrite-strings] test.cpp:184:23:警告:不推荐从字符串常量到“char*”的转换 [-Wwrite-字符串] test.cpp:190:30: 错误:无法将参数 '1' 的 'tetgenio::polygon*' 转换为 'tetgenbehavior*' 到 'void tetrahedralize(tetgenbehavior*, tetgenio*, tetgenio*, tetgenio*, tetgenio* )' test.cpp:193:26: 警告:不推荐从字符串常量转换为 'char*' [-Wwrite-strings] test.cpp:194:29: 警告:不推荐从字符串常量转换为 'char*' [- Wwrite-strings] test.cpp:195:26: 警告:不推荐从字符串常量到 'char*' 的转换 [-Wwrite-strings]

在命令中是否包含 -L./ -ltet 似乎与错误无关。

我认为那些警告不是这样的问题。我不明白第 190 行 tetcall.cxx 调用函数 tetrahedralize 的错误:

不起作用,我没有更改任何内容,并从站点 [http://tetgen.berlios.de/][1] 获得了$ make tetlib所有内容a) 在同一张地图中。我认为编译器想要连接的函数,以及它可能向南的地方,在 tetgen.cxx 第 34498 行

我查看了标题中的 tetgenbehavior 类,但我无法真正弄清楚变量 tetgenbehavior *b 是什么或如何找出它的类型。我看到一些我认为是开关的 char 成员。我做错了什么,错误的原因是什么?

0 投票
1 回答
489 浏览

c++ - Code::Blocks “编译开关”在哪里?

我在这里有一个术语问题,如果你能提供帮助,那就太好了,我不确定这意味着什么。

tetgen 网站上,在 Windows 上编译tetgen 库的说明如下:

要创建库,请执行以下最少步骤:

  • 创建一个名为library.
  • 将所有源文件添加到此项目中。
  • 添加符号TETLIBRARY以编译开关。
  • 构建项目。

我不明白这个说法:

添加符号TETLIBRARY以编译开关。

您能否告诉我该怎么做,以及“编译开关”指的是什么?

0 投票
1 回答
290 浏览

python - python 2.7 - 使用新的“顺序”约束重新排序列表的输出

我知道一些 c++ 的基础知识,但我是 python 的初学者。

我有一段工作代码(见下文),我想添加一个约束来格式化其输出,但我不知道该怎么做......

让我先解释一下程序的作用:

我有一个包含颜色列表的输入文件colors.csv,一种颜色一行:颜色由它们的名称和色度坐标 X、Y 和 Z 定义,它看起来像这样:

给定包含在另一个输入文件中的任何 XYZ 坐标列表,targets.csv程序将在输出文件中给我一个解决方案列表output.txt

该解决方案是通过首先用 tetgen 对点云进行三角剖分,然后是四面体中点的重心坐标来计算的,(但在这里解释一切并不重要......)

解决方案具有以下形式:

总是只有 4 个名称和相关的密度。

例如,它看起来像这样:

我现在想做什么?

出于实际原因,我希望我的输出遵循一定的顺序。我想要一个“优先级列表”来控制name, density输出的顺序。

我的实际程序以我不理解的顺序输出颜色名称,但无论如何我需要这些颜色名称按特定顺序排列,例如PINK应该始终是第一个PINKwA第二个等。

代替:

我想;

因为我的优先级列表说:

我怎样才能简单地将这个函数添加到下面的代码中?任何的想法?

编辑的代码(作品...):

0 投票
1 回答
145 浏览

c++ - 修改 TetGen 的默认行为

我正在编写一些代码,利用TetGen 库来查找一组点的凸包。但是,默认情况下

生成凸包3D Delaunay 四面体。我倾向于相信只有凸包是可能的,因为 Mathematica 有一个 Tetgen 的工作实现和一个相应的函数TetGenConvexHull[],但是在浏览了tetgen.cxx源代码和文档之后,我似乎无法找出如何.

如何修改 TetGen 的默认行为以仅获取凸包?

0 投票
1 回答
205 浏览

python - 诊断和提高计算速度

我有一个导入模块的脚本,geometry这个模块将我的脚本减慢到一个极端的水平。我的脚本生成一个位图,1600 万像素需要 100 多个小时

这里有问题的模块:

这是 cProfile 在我使用上述函数的脚本上提供的统计信息,显然这就是花费时间的地方:

所以这是我的问题:

numpy在这里处理重心坐标的计算似乎很慢,这样做值得c++吗?或者有没有办法以另一种方式(在python中)优化它?

0 投票
1 回答
1744 浏览

c++-cli - 为原生 C++ 代码创建 C++/CLI Wrapper

我目前需要为本地 C++ 库 (TetGen) 编写 C++/CLI 包装器,以便以后在 C# 项目中使用。我已经阅读了很多关于如何做到这一点的文章,但对我的链接器错误感到茫然。一个叫做“Sam Agten”的小伙子也试图做到这一点,正如他在他的博客中所说的那样,这使我看到了一个关于 C++ 互操作的系列(第 1部分、第 2部分、第 3部分、第 4部分、第 5 部分),其中第 3 部分应该是解释如何做我完成的事情。

因为 Sam 想将 TetGen 与 Unity 集成,所以他最后不得不求助于 C-Style-Wrappers。现在,如果我没有完全弄错的话,我已经尝试在以前的相关项目中使用 C-Style-Wrappers。

因为我打包的 TetGen 必须在 Windows Server(我认为是 2008 年)上运行,所以我的第一个问题是: C++/CLI-Wrapper 将在服务器环境中工作吗?

我根据前面提到的第 3 部分开始编写一个非常简单的包装器,但失败得很惨。无论如何,我试图沿着思路创建一个简单的包装库,我想与你分享。我首先创建了一个 C# 项目,它最终应该使用我的包装库,并首先从 C++ 项目“SimpleAdd”的“Win32”子部分添加一个新项目。

在项目设置中,我确保它编译为静态库 (*.lib),并且没有使用 CLR 支持。从预处理器定义中,我假设 lib 是针对 x86 系统的:“WIN32”。一切都保留在标准值上。如果我右键单击 => 构建,它将成功构建一个名为“SimpleAdd.lib”的库。

我通过其他帖子指出的一件事:如果我在 DependencyWalker 中打开库,我会收到一条错误消息:“未找到 DOS 或 PE 签名。此文件不是有效的 32 位或 64 位 Windows 模块”,即有点令人沮丧。我必须做什么才能使 DependencyWalker 停止显示此错误,因为我认为这个 32/64 问题可能暗示解决方案。

无论如何,我有我的库,现在我想把它包起来。因此,我使用 C++ 分支的 CLR-ClassLibrary-template 在我的解决方案中创建了一个名为“AddWrapper”的新项目。

由于两个 C++ 项目都位于同一层次结构的不同文件夹中,因此我指定了头文件的相对路径。在项目设置中,我现在拥有配置标准.dll/clr -switch。在我的 VC++ 文件夹中,我添加了整个灵魂的调试目录的路径,因为这是编译引用的库的位置。在“附加依赖项”下的链接器设置中,我添加了名称:“SimpleAdd.lib”。

但是,当我想构建包装器时,会出现问题,或者说是其中的 5 个问题:

Fehler 3 错误 LNK2028: Nicht aufgel÷stes Token (0A00000B) ""public: __thiscall SimpleAdd::SimpleAdd(void)" (??0SimpleAdd@@$$FQAE@XZ)", auf das in Funktion ""public: __clrcall AddWrapper ::ManagedSimpleAdd::ManagedSimpleAdd(void)" (??0ManagedSimpleAdd@AddWrapper@@$$FQ$AAM@XZ)" 版本。%path%\AddWrapper\AddWrapper.obj AddWrapper Fehler 4 错误 LNK2028: Nicht aufgel÷stes 令牌 (0A00000C) ""public: __thiscall SimpleAdd::~SimpleAdd(void)" (??1SimpleAdd@@$$FQAE@XZ)" , auf das in Funktion ""public: void * __thiscall SimpleAdd::scalar deleting destructor'(unsigned int)" (??_GSimpleAdd@@$$FQAEPAXI@Z)" verwiesen wird. %path%\AddWrapper\AddWrapper.obj AddWrapper Fehler 5 error LNK2019: Verweis auf nicht aufgel÷stes externes Symbol ""public: __thiscall SimpleAdd::SimpleAdd(void)" (??0SimpleAdd@@$$FQAE@XZ)" in Funktion ""public: __clrcall AddWrapper::ManagedSimpleAdd::ManagedSimpleAdd(void)" (??0ManagedSimpleAdd@AddWrapper@@$$FQ$AAM@XZ)". %path%\AddWrapper\AddWrapper.obj AddWrapper Fehler 6 error LNK2019: Verweis auf nicht aufgel÷stes externes Symbol ""public: __thiscall SimpleAdd::~SimpleAdd(void)" (??1SimpleAdd@@$$FQAE@XZ)" in Funktion ""public: void * __thiscall SimpleAdd::标量删除析构函数'(unsigned int)" (??_GSimpleAdd@@$$FQAEPAXI@Z)"。%path%\AddWrapper\AddWrapper.obj AddWrapper Fehler 7 错误 LNK1120: 4 nicht aufgel÷ste Externe %path%\Debug\AddWrapper。

现在,这些错误的原因可能是什么?是 lib 的平台迷惑性吗?我是否错过了指定其他内容?