jh_dempsey 发表于 2020-7-21 07:25:37

建议加快工会成千上万的固体

嗨,我已经写了一些代码,它复制了Civil 3D中的“从表面提取实体”工具。它获取一个表面,提取它的三角形,向下挤压这些三角形以形成一个3D实体,然后在3D实体上运行union命令以创建一个实体。
以上都可以工作,但是union命令需要很长时间才能运行。
我发现当我试图在一个大的表面上合并实体时,我的脚本需要运行600秒。
当我切换到将每个单独的三角形实体插入到一个块中时,运行时间减少到30-40秒,因此很明显union命令有巨大的时间开销,尤其是当一个曲面可能有数万个三角形时。
如果可以的话,我仍然想使用联合选项,主要是因为当我进入3D视图查看输出时,AutoCAD似乎很吃力。我在某处读到过,如果AutoCADs试图显示一个大的实体,而不是20,000个小的单个实体,它的性能会大大提高。目前,试图查看包含20,000多个单独实体的块使我的Civil 3D停止工作,而我已经有了一台相当不错的CAD spec机器。
有谁知道我可以用什么方法来加快联盟命令的速度吗?BREP工具能帮上忙吗?
是否可以从曲面训练创建一个AutoCAD曲面或某种网格,这样当我执行“挤出”命令时,我可以一次完成整个曲面(而不是单个三角形)?
欢迎任何想法!
**** Hidden Message *****

MickD 发表于 2020-7-21 18:11:02

Brep可能是一个解决方案,也许你可以将网格保存为面,以形成壳的一部分,你需要自己创建壳的其他面,并确保这些面在形成最终Brep之前正确相交。
例如,假设您希望将网格深度降低到一个固定的级别(看起来像一个3d地形图),您需要将网格最外侧的每个顶点投影到该级别以创建一个边,然后为这些新边形成的每个“面板”创建面,网格的边是从该级别的末端顶点投影的边和创建的边(希望这有意义)。
快速搜索了一下,找到了Kean的一篇帖子,可能会给你一些指导--> https://www . keanw . com/2011/03/generating-a-mesh-for-a-3d-solid-using-AutoCAD-brep-API-from-net . html
虽然我没有时间阅读它,但它听起来可能很有用。

MickD 发表于 2020-7-22 23:13:09


我有一些时间来思考这个问题。
您的意思是“当我切换到将每个单独的三角形实体插入到结果固体块中时”?
我在想,Union 方法可能不会一次针对多个实体进行优化,也就是说,它可能正在迭代每个联合迭代的相同原始实体列表或类似的非性能内容。
我会尝试从三角形集合中的第一个三角形创建初始实体,将其存储为“结果”实体,然后循环遍历集合的其余部分,将每个新的三角形实体添加(并集)到“结果”中。
我会尝试使用单个事务来完成所有工作,也可以使用一个主事务来“使用”/创建嵌套事务,以便在执行联合之前创建每个新实体。我有时发现,大量工作的单个事务并不总是更快.那是很久以前的事了,我不记得为什么现在虽然
hth
页: [1]
查看完整版本: 建议加快工会成千上万的固体