从Visual C ++导出U3D / PDF3D

时间:2011-01-13 02:45:22

标签: visual-c++ pdf memory u3d

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

导出功能对于简单模型或仅复杂模型的某些部分表现良好,但不适用于整个复杂模型。

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

U3D sourceforge项目是一个用C ++构建的库,用于C ++,自2007年以来已经死了,文档很差,其样本集合远远不够!在项目的TODO列表中还说明它有内存问题!

所以我被要求双方解决这个问题:

  1. 维护U3D代码。

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

  3. 他们还说第2方是可取的,因为它在我们的控制之下。

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

    1. 我强烈怀疑U3D方法EncodeX是造成记忆错误的原因。

    2. 我尝试了很多关于apllication与lib交互的方式的更改(更改压缩参数,标志等)以及每次结果都是内存过度分配。

    3. 所以问题是:继续使用这个库是否值得?阅读它的代码并不是一种乐趣......或者为了同样的目的看一下其他库可能是一个好主意? 我没有探索它们,但我正在认真考虑切换到VCGlib或libharu ......如果你知道这很好,请提出别的建议。

      其他替代方案将是:使用具有不可接受成本的Visual Technologies PDF3D导出器,或者开发我自己的U3D导出器实现,这将导致U3D功能非常有限,并且它无法为预期的截止日期做好准备。 所以选择这些选项是禁止的。

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

      提前致谢, 塞尔吉奥

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

我希望我早些时候被授权以这种方式解决问题。我提出了一些其他的东西:

  • 迁移到64位

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

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