从视觉C ++导出U3D/PDF3D
-
10-10-2019 - |
题
我被要求解决在试图将图形导出到PDF3D时发生的CAD应用程序的内存使用问题。
导出功能对于简单模型或仅仅是复杂模型的一部分,但对于整个复杂模型的表现都很好。
我们正在使用U3D SourceForge项目来创建U3D对象;将其插入PDF之后。它是创建有问题的对象。
U3D SourceForge项目是一个内置的C ++库,用于C ++,自2007年以来已经死亡,文档较差,其样品的收藏远非足够!在项目列表中,还指出它有内存问题!
因此,我被要求双方攻击问题:
维护U3D代码。
更改应用程序与U3D库交互的方式。
他们还说了侧面2.优先,因为它在我们的控制之下。
试图解决问题时,我得到了两个结论:
我强烈怀疑U3D方法Encodex负责记忆误用。
我尝试了许多小事的变化,以与LIB(更改压缩参数,标志等)相互作用的方式,每次结果都是内存过度分配。
所以问题是:继续使用此库值得吗?它的代码不喜欢阅读...或者可能是一个好主意,最好以相同的目的查看其他Libs?我没有探索它们,但是我正在认真考虑改用Vcglib或Libharu ...如果您知道这很好,请提出其他建议。
其他替代方法是:使用视觉技术PDF3D出口商,其成本不可接受,或者开发我自己对U3D出口商的实施,这将使U3D的Funcionlationality非常有限,并且可以'' NT准备预期的截止日期。因此,以禁止的方式采取这些选择。
我真的需要帮助来决定什么是最好的。
预先感谢Sérgio
解决方案 2
经过一些绝望和糟糕的夜晚,试图发现记忆泄漏或其他记忆问题,我们得出了最实用的解决方案:
仅提取加载文件并将其作为U3D导出到小程序中所需的代码部分,然后使主CAD应用程序调用它。即使它不是最优雅的解决方案,它确实可以很好地工作 - 甚至连2 GB障碍物都无法达到记忆使用情况。
我希望我已被授权以这种方式解决问题。我提出了其他一些事情,例如:
迁移到64位
使用现代Windows版本支持将每个进程的内存限制扩展到2 GB的选项
这两种解决方案都无法接受,因为需要强迫某些客户重新安装已经运行的硬件或软件。
其他提示
一些注释:VCGLIB-无关,Meshlab依靠VCGLIB用于核心函数,但是对于U3D导出命令行工具,使用了从文本格式转换为U3D,并且该工具来自SF U3D lib。 libharu-可以将3D模型嵌入其PDF输出中,而不是创建模型(U3D或PRC文件)。
另一个选择是超出其他Adobe 3D PDF格式,PRC。 Acrobat SDK具有伪代码形式的格式描述。基于PRC输出是在渐近工具中实现的。如果您有兴趣,请在SourceForge上找到它,并在Asymptote论坛上提出问题。