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
工程设计类软件在建立三维模型后,理想状态是一键生成所需的图纸,除了模型的消隐的线外,还应该有尺寸标注、件号标注等。
对于需要生成图纸的模型,首先要找出需要消隐的线。假设我们已经得到需要消隐的线,如下图所示中绿色的线:
对模型做一个俯视图,暂时不考虑线面遮挡处理直接对模型的线进行投影得到:
2022年给OCCT提交了一个BUG,就是关于圆的投影问题:https://tracker.dev.opencascade.org/view.php?id=33043 目前BUG还没有修复:
提议对于这种特殊情况,可以生成一条直线。MSV在回复中说这样改动会对已有算法造成影响,也没这么简单,还要考虑曲线参数的问题。这个BUG和HLR关系不大,但是问题有些类似。在一些常用投影方向上将这些线补上后,看着舒服多了:
3. Conclusion
对于HLR线投影得到精确结果,除了考虑线的投影矩阵变换外,还需要考虑线的二三维参数转换的问题。
OCCT的HLR算法算是有个基础功能,要用于实际的出图程序,需要在理解代码的基础上做一些改动,甚至可能需要完全重写。对于一些基本体的常用投影视图方向上做些特殊处理,会使得到的线更简单,避免大量B样条线与面的遮挡关系判断,提高性能。
暂无评论内容