APP下载

利用改进扫描线法的面曝光快速成形的掩模图形

2014-06-27金矿矿胥光申王亚宁

西安工程大学学报 2014年6期
关键词:扫描线掩模边区

金矿矿,胥光申,王亚宁,罗 声,金 京

(西安工程大学 机电工程学院,陕西 西安 710048)

面曝光快速成形是近年迅速发展起来的一种用于制作小尺寸零件的光固化快速成形方法,其基本原理是由三维零件的CAD模型或STL模型切层后得到的具有零件截面特征的视图文件驱动动态视图发生器,在树脂液面上生成相应的掩模图形以选择性固化单层树脂,再移动升降台,逐层堆积形成整个实体零件[1].与激光扫描固化相比,面曝光固化具有制作时间短,系统成本低,工艺简单等优点,是快速成形技术重要的发展方向[1-2].

掩模图形的生成是面曝光快速成形的关键技术之一[2].目前,已有不少学者对生成掩模图的方法作了大量研究[3-4],研究内容主要集中在基于CAD模型直接生成掩模图形方面,但由于CAD系统之间往往存在兼容性问题,限制了这些方法的应用.STL文件格式作为一种三维数据格式具有格式简单、跨平台性良好等优点[5],已被作为快速成形领域的工业标准和最常用的数据文件格式而广泛应用[6].因此,研究基于STL模型生成掩模图形具有重要意义.

本文提出用扫描线算法生成基于STL模型的掩模图形,通过对该算法的改进,实现了直接利用边表扫描填充截面轮廓,得到了可适用于面曝光快速成形系统的掩模图形.

1 掩模图形生成机理

STL模型经切层后得到的是一组离散点,其对应坐标用直线段顺次连接,即形成由一系列简单多边形组成的截面轮廓环,离散点为相应的轮廓顶点,而由相邻的轮廓顶点组成的直线段为轮廓边[7].如图1所示,该截面上有2个轮廓环,编号分别为轮廓环1和轮廓环2.J,L,F和M为轮廓环2 的轮廓顶点,JL,LF,FM和MJ为轮廓环2 的轮廓边.

图1 截面轮廓环及其交点情况示意图

由切层得到的截面轮廓环是用顶点表示的,其围成的区域只存在需要曝光的实体区域(曝光域)和无需曝光的非实体区域(非曝光域)2种状态,如图1所示,轮廓环1和轮廓环2将所在区域分割为子区域a和b,其中子区域a为曝光域,而b为非曝光域.因此,只要将顶点表示的曝光域转换为一种颜色(白色)的点阵表示,而非曝光域(黑色)依旧用顶点表示,进而生成能反映零件截面特征的视图文件,再由该视图文件驱动动态视图发生器,在树脂液面上生成相应的掩模图像.

由以上分析可知,生成掩模图形是一个嵌套多边形的区域填充问题.在解决这一问题的各种方法中,扫描线法是最常用的效率较高的一种方法[6].在用该方法生成掩模图形时,用截面轮廓环外一条直线与其求交,所求交点序列的第1个点和第2个点之间一定是曝光域,而第2个点和第3个点之间一定是非曝光域,以此类推,可求得该条线上的曝光域与非曝光域.用一系列扫描线依次扫描截面轮廓,即可求得截面上的全部曝光域与非曝光域.该方法只需对一条直线进行分析,且无需判断截面的曝光域与非曝光域.

2 扫描线算法

扫描填充的关键是快速求取交点,尤其是奇点的处理.在使用传统扫描线算法时,需要先构建与维护边表和活动边表,对于一条扫描线,填充可分为求交、排序、配对和填色4个步骤,在已知前一条扫描线上交点序列的情况下,可充分利用边的连贯性快速获取下一条扫描线上的交点序列,也无需考虑斜率无穷大的情况[8].

STL模型切层后的截面轮廓环往往是多层嵌套的,而且每一个轮廓环又由大量轮廓边(微直线段)组成[7],填充过程如果还是通过同时维护边表与活动边表(况且两张表的部分数据是重复的)来实现,内存开销会很大,扫描速度也会受到影响.为此,可将这些轮廓边分为三类:活动边、已经处理的边和尚未处理的边.活动边是与当前扫描线有交点的边,已经处理的边是与当前扫描线已无交点的边,尚未处理的边是还未和当前扫描线相交,正在等待扫描处理的边.相应的,可将边表分为三个区间:活动边区间、已经处理的边区间和尚未处理的边区间.活动边区间用以存放活动边,已经处理的边区间用以存放已经处理的边,而尚未处理的边区间用以存放尚未处理的边.对扫描线算法的数据结构进行相应的改进,以实现直接借助边表快速求取交点和合理填充截面轮廓.下面详细描述这一改进算法的实现过程.

2.1 数据结构定义

首先,为了高效获取轮廓边的所有属性,构建一个表示边属性信息的数据结构EDGE,利用C++语言定义如下:

typedef struct tag-EDGE

{

double xi;//在活动边区间中表示边与当前扫描线交点的X坐标,在已经处理的边区间中表示边的下端点的X坐标,尚未处理的边区间中表示边的上端点的X坐标

double InverseSlope;//边所在直线斜率的倒数

intyMax;//边上端点的Y坐标(较大值)

intyMin;//边下端点的Y坐标(较小值)

}EDGE;

这与计算机图形学中的扫描线算法相比,多了一个yMin数据成员.在扫描过程中,用来判断轮廓边是否将退出活动边区间.

其次,为了方便动态划分边表的3个区间,定义first“指针”和last“指针”.first“指针”之前为已经处理的边区间;last“指针”之后为尚未处理的边区间;二者之间为活动边区间.将边表、first“指针”和last“指针”作为三个成员构建一个边表的数据结构NEWEDGESTABLE,利用C++语言定义如下:

typedef struct tagSP-EDGES-TABLE

{

CArray*slEdges;//

int first;//用以指示活动边区间的起始位置,初始化为0

int last;//用以指示活动边区间的终止位置,初始化为0

}NEWEDGESTABLE;

在扫描填充之前,边表内全是尚未处理的边,first“指针”和last“指针”都初始化为0,二者同时指示边表首节点;在扫描过程中,first“指针”和last“指针”随着扫描线的变化而不断动态指示当前扫描线的活动边区间;在扫描填充完成后,边表内全是已经处理的边,first“指针”和last“指针”同时指示边表尾节点.

2.2 构建边表

STL模型经切层处理后的数据存储结构为:每一个轮廓环对应一个CArray类数组,CArray类数组的节点存放其对应轮廓环的顶点坐标;每1层轮廓环对应1个CObArray类数组,CObArray类数组的节点存放该层轮廓中与每一个轮廓环对应的CArray类数组.基于以上数据结构,通过调用CObArray类数组和CArray类数组构建边表.

图2是程序中构建边表的框图.相邻的j和(j+1)节点数据确定1条轮廓边,将该边的信息由顶点表示转换成EDGE结构表示,并将EDGE结构作为1个节点存放到CArray类数组中去.水平边与扫描线平行,不参与求交运算,可以将其忽略,则CArray类数组的节点个数等于非水平边的边数.以结构形式存放所有非水平边的CArray类数组即为边表.

图2 构建边表

2.3 截面轮廓扫描填充

图3为程序中生成能反映零件截面特征的视图文件的框图.直接借助边表实现扫描填充截面轮廓的过程为:在处理当前扫描线yScan时,首先从尚未处理的边区间中检索出所有满足条件yMax=yScan的边,移动last“指针”,让其成为活动边;然后从活动边区间中检索出所有满足条件yMin=yScan的边,移动first“指针”,让其成为已处理的边;first和last“指针”移动之后,由二者指示的活动边区间内的所有边必满足条件yMin

图3 生成截面视图

2.4 奇点分析

扫描线自上而下以一个像素的间隔依次扫描,必经过每一个轮廓顶点.奇点是指当扫描线刚好通过轮廓顶点时所产生的交点,在扫描过程中,能碰到的奇点只有二重点.对于一般情况,当扫描线过轮廓边的中间时,不会产生二重点,但当扫描线刚好过轮廓顶点时,必然与2条轮廓边交于同一个点,此时会产生1个二重点,导致交点个数可能出现奇数,如图1所示,扫描线3上的点E和F都为二重点,总交点个数实际上为5,为了使每一条扫描线上参与排序的交点个数始终为偶数,需要进行奇点处理.奇点分为以下2种情况.

(Ⅰ) 如图1所示,在极大值顶点(如点J)处,2条轮廓边位于扫描线下侧,同时满足条件yMax=yScan而成为活动边,产生的1个二重点可以像其他交点一样参与排序;在极小值顶点(如点F)处,2条轮廓边位于扫描线上侧,同时满足条件yMin=yScan而成为已处理的边,产生的1个二重点不参与排序.

(Ⅱ) 如图1所示,在非极值顶点(如点E)处,2条轮廓边分处扫描线上下两侧,同时与扫描线相交产生1个二重点,但此时位于上侧的边(如边EN)满足条件yMin=yScan而成为已处理的边,而位于下侧的边(如边ER)满足条件yMax=yScan而成为活动边,因此,只有位于扫描线下侧的轮廓边产生的1个交点参与排序,这与扫描线过轮廓边的中间时产生1个交点的情况类似.

综上所述,对于每一条扫描线,让所有满足条件yMax=yScan的边进入活动边区间,满足条件yMin=yScan的边退出活动边区间,即可保证参与排序的交点个数始终为偶数.如图1所示,在扫描线1上,点H和K各算作1个交点,点I算作0个交点,点J算作2个交点,因此扫描线1上参与排序的交点数实际上为4,满足偶数条件.

3 应用实例

在VC++6.0环境下通过编程实现了掩模图形的生成.图4(a)为用SolidWorks设计的实体模型,该模型长20mm,宽20mm,高4mm;图4(b)为STL模型切层后的第20层轮廓环,切层时设置层厚0.1mm,总层数40层;图4(c)为用改进的扫描线算法生成的第20层掩模图形(其曝光域为白色,非曝光域为黑色);图4(d)为利用改进的扫描线算法生成的掩模在面曝光快速成形系统中制作出的模型实体.

(a) 三维模型 (b) 截面轮廓环 (c) 掩模图形 (d) 模型实体图4 实例

4 结 论

(1) 改进的扫描线算法可实现对多层嵌套的复杂截面轮廓的合理填充,生成的掩模可满足面曝光快速成形系统的需求.

(2) 对轮廓边进行分类,相应的把边表分成3个区间,只需在活动边区间中对截面轮廓进行扫描填充,避免了传统算法建立和维护活动边表的做法,进一步简化了扫描线算法的实现过程.

(3) 采用的数据结构类型能够实现直接在边表中扫描填充截面轮廓,也能针对一般的奇点进行很方便的处理.

参考文献:

[1] 胥光申.用于高精度小尺寸零件制作的光固化快速成型技术的现状与发展[J].机械科学与技术,2004,23(10):1223-1225.

[2] 王伊卿,贾志洋,赵万华,等.面曝光快速成形关键技术及研究现状[J].机械设计与研究,2009,25(2):96-100.

[3] 张建平,胥光申,金京,等.基于SolidWorks的CAD模型直接切层研究[J].西安工程大学学报,2010,24(4):525-529.

[4] 景天佑,胥光申,马训鸣,等.基于Pro/ENGINEER的CAD模型直接切层[J].西安工程大学学报,2012,26(1):87-90.

[5] 朱虎,杨忠凤,张伟.STL文件的应用与研究进展[J].机床与液压,2009,37(6):186-189.

[6] TAYLOR J B,CORMIER D R,JOSHI S, et al.Contoured edge slice generation in rapid prototyping via 5-axis machining[J].Robotics and Computer-Integrated Manufacturing,2001,17(1/2):13-18.

[7] 潘海鹏.快速成型制造中分层处理技术的研究[D].南昌:南昌大学,2007:4-5.

[8] 孙家广.计算机图形学[M].3版.北京:清华大学出版社,1998:56-62.

猜你喜欢

扫描线掩模边区
细粒度图像分类的通道自适应判别性学习方法
一种基于线扫描的受损一维条形码识别方法
基于直写技术的微纳掩模制作技术研究进展*
基于扫描线模型的机载激光点云滤波算法
掩模图像生成时阈值取值的合理性探讨
扫描线点云数据的曲面重构技术研究
一种新型鱼眼图像轮廓提取算法
三角形网格规则点的多进制细分算法
战斗在皖浙赣边区的刘毓标
《中共闽浙赣边区史》出版发行