自动出图之线投影

1. Introduction

当图纸还是零件加工制造的主要依据时,从三维模型自动生成图纸是三维设计软件必不可少的功能。目前的主流几何内核Parasolid, ACIS都提供根据三维模型生成二维消隐图纸的功能,开源内核OCCT中也提供了类似的功能TKHLR,包括离散消隐和精确消隐两种模式。如果要使消隐后的线是尽量简单和精确的,如得到的是直线、圆等便于对自动生成的图纸做一些后处理,如标注圆的半径等,需要使用精确消隐方式。不过OCCT中的HLR相当于一个毛坯房,要达到满意效果,还是需要精装修的,有的地方可能需要推倒重来。

前OCCT开发Sergey Slyadnev对OCCT和其它商业几何内核的HLR算法进行了比较,给出如下结论:

https://quaoar.su/files/papers/cascade/HLR_ComparativeStudy_2021-02-28.pdf

OCCT的HLR算法精度还可以,稳定性还不是很差,性能和内存消耗上表现很差terrible,说明OCCT的HLR算法还有很大改进空间。

HLR消隐算法原理并不复杂,就是判断线面之间的遮挡关系,在理解源码时也要紧紧抓住这个主要矛盾本文暂时撇开遮挡关系计算不谈,先看看线的精确投影效果,来对OCCT消隐算法进行拆解,借鉴学习。

2. Curve Projection

工程设计类软件在建立三维模型后,理想状态是一键生成所需的图纸,除了模型的消隐的线外,还应该有尺寸标注、件号标注等。

对于需要生成图纸的模型,首先要找出需要消隐的线。假设我们已经得到需要消隐的线,如下图所示中绿色的线:

对模型做一个俯视图,暂时不考虑线面遮挡处理直接对模型的线进行投影得到:

对投影的结果分析可以看到,当圆的法向与投影方向平行时,投影后仍然是圆,满足要求。当圆的法向与投影方向垂直时,要么没有结果,要么得到的是B样条曲线,与预期不符,希望是一条直线。如下图所示中的圆投影后,没有得到投影结果:

2022年给OCCT提交了一个BUG,就是关于圆的投影问题:https://tracker.dev.opencascade.org/view.php?id=33043 目前BUG还没有修复:

提议对于这种特殊情况,可以生成一条直线。MSV在回复中说这样改动会对已有算法造成影响,也没这么简单,还要考虑曲线参数的问题。这个BUG和HLR关系不大,但是问题有些类似。在一些常用投影方向上将这些线补上后,看着舒服多了:

3. Conclusion

对于HLR线投影得到精确结果,除了考虑线的投影矩阵变换外,还需要考虑线的二三维参数转换的问题。

OCCT的HLR算法算是有个基础功能,要用于实际的出图程序,需要在理解代码的基础上做一些改动,甚至可能需要完全重写。对于一些基本体的常用投影视图方向上做些特殊处理,会使得到的线更简单,避免大量B样条线与面的遮挡关系判断,提高性能。

© 版权声明
THE END
喜欢就支持一下吧
点赞8046 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容