2

我被要求解决在尝试将绘图导出到 PDF3D 时出现的用 Visual C++ 编写的 CAD 应用程序的内存使用问题。

导出特征对于简单模型或仅复杂模型的一部分表现良好,但对于整个复杂模型则不然。

我们正在使用 U3D sourceforge 项目来创建 U3D 对象;在我们将其插入 PDF 之后。有问题的是对象创建部分。

U3D sourceforge 项目是一个用 C++ 构建的库,也可以在 C++ 中使用,自 2007 年以来就已经死了,文档很差,它的示例集合还远远不够!在项目的 TODO 列表中也声明它有内存问题!

所以我被要求从两个方面来解决这个问题:

  1. 对 U3D 代码进行维护。

  2. 更改应用程序与 U3D 库交互的方式。

他们还说边 2. 最好,因为它在我们的控制之下。

在尝试解决问题时,我得到了两个结论:

  1. 我强烈怀疑 U3D 方法 EncodeX 是造成内存误用的原因。

  2. 对于应用程序与库的交互方式(更改压缩参数、标志等),我尝试了很多小事情的改变,每次结果都是内存过度分配。

所以问题是:继续使用这个库值得吗?它的代码阅读起来并不愉快……或者出于相同目的查看其他库可能是个好主意?我没有探索它们,但我正在认真考虑切换到 VCGlib 或 libharu ......如果你知道这很好,请提出其他建议。

其他选择是:使用 Visual Technologies PDF3D 导出​​器,它的成本不可接受,或者开发我自己的 U3D 导出​​器实现,它的缺点是 U3D 功能集非常有限,而且它可以nt 为预期的最后期限做好准备。因此,将这些选项视为禁止。

我真的需要帮助来决定什么是最好的。

在此先感谢,塞尔吉奥

4

2 回答 2

2

一些评论:VCGlib - 不相关,MeshLab 依赖 VCGlib 来实现核心功能,但使用 U3D 导出​​命令行工具将文本格式转换为 U3D,并且该工具来自 sf U3D lib。libharu - 可以将 3D 模型嵌入到其 PDF 输出中,而不是创建模型(U3D 或 PRC 文件)。

另一种选择是输出另一种 Adob​​e 3D PDF 格式 PRC。Acrobat SDK 有伪代码形式的格式描述。基于此,PRC 输出在 Asymptote 工具中实现。如果您有兴趣,请在 sourceforge 上找到它并在 Asymptote 论坛上提问。

于 2011-02-16T16:39:37.877 回答
1

经过一些绝望和睡不好的夜晚,试图发现内存泄漏或其他一些内存问题,我们得出了最实用的解决方案:

仅提取加载文件所需的代码部分并将其作为 U3D 导出​​到小程序并让主 CAD 应用程序调用它。尽管它不是最优雅的解决方案,但它确实运行良好 - 即使接近 2 GB 障碍,任何进程都没有达到内存使用率。

我希望我早点被授权以这种方式解决问题。我提出了一些其他的建议,例如:

  • 迁移到 64 位

  • 使用现代 Windows 版本支持的选项将每个进程的内存限制扩展到 2 GB 以上

这两种解决方案都不可接受,因为需要强制一些客户重新安装已经运行的硬件或软件。

于 2011-02-26T17:46:31.853 回答