您现在的位置:电火花成型机网选型指南线切割机上实现切割汉字的自动编程技术

线切割机上实现切割汉字的自动编程技术

2011年09月14日 10:13:01人气: 1051
  摘要:介绍了在线切割机上实现切割汉字的自动编程技术,将从字库中提取的字形轮廓经适当编辑处理后生成切割指令,可使线切割机增加切割汉字的功能。
  
  1引言
  
  随着现代计算机和控制技术的发展,人们为线切割机装备了基于PC机且功能愈来愈*的编程和控制系统,使线切割机的应用技术不断有新的发展。编程控制系统的发展是线切割加工技术发展的一个重要方面。对编程系统来讲,先是通过语言对待加工零件进行描述,然后转化为切割指令实现自动编程,后又把CAD技术引入编程中,从而实现了图形式输入方式,大大提高了编程效率和质量;在控制技术上,则从早期的开环控制过渡到了检测多个加工状态参数的自适应控制系统乃至模糊控制系统。
  
  但直到现在,线切割机的应用范围还主要限制在机械零部件及模具的加工上,在线切割机上实现切割汉字可以说是一个空白。针对我国的国情,实现对汉字的切割既有现实的市场需求,又有广阔的应用前景。
  
  在线切割机上进行加工,首先要通过编程系统将待加工零件转化为切割指令。为此要实现切割汉字的功能,也必须将要切割的汉字字形轮廓转化为切割指令。本文将从几个方面具体讲述在Windows操作系统的PC平台上,从TrueType字库中提取汉字字形轮廓,并将其转化为切割指令的自动编程技术。
  
  2字形轮廓的提取
  
  要实现切割汉字首先要获得汉字字形轮廓,这涉及到如何从字库中提取汉字字形轮廓的问题。汉字的字体根据其实现形式的不同可分为点阵字体、矢量字体及TrueType字体等几种。其中使用zui广泛的为TrueType字体,与其他字体相比,TrueType字体具有明显的优点:
  
  (1)它使用直线和曲线对字符进行描述,具有放大和缩小不变形的特点;
  
  (2)具有处理速度快及与设备无关的特点;
  
  (3)它是Windows系统所使用的zui广泛的字体,因而Windows提供了大量的API函数来支持和处理这种字体,利用这些函数可方便地对TrueType字符进行各种处理,如旋转、变形等。
  
  在TrueType字体中,字形轮廓是由一些直线和曲线的集合及一些对字体的描述信息所组成,这些直线和曲线定义了TrueType字体及符号的外形轮廓,而那些字体的描述信息则用来控制和调整直线的长度和曲线的形状,主要用来调整字形轮廓尺寸,使用这些描述信息可对TrueType字体或符号在保持其原始形状的情况下进行放大、缩小等处理。
  
  Windows提供了许多函数来处理TrueType字体,其中与提取字形轮廓有关的zui主要的函数为GetGlyphOutline,它可用来提取被选择到指令设备环境(如内存、显示设备等)的字符的轮廓或位图。在WindowsAPI中,GetGlyphOutline函数声明如下:
  
  DWORDGetGlyphOutiline(
  
  HDChdc,∥设备环境的句柄
  
  UINTuChar,∥所要查询的字符
  
  UINTuFormat,∥所要返回的数据类型
  
  LPGLYPHMETRICSlpgm,∥指向字符规格结构的地址
  
  DWORDcbBuffer,∥数据缓冲区的大小
  
  LPVOLDlpvBuffer,∥数据缓冲区的地址
  
  CONSTMAT2*lpmat2,∥变换矩阵结构的地址);
  
  其中的主要参数说明如下:
  
  uChar:所要查询的字符,对汉字来说是指汉字的编码,如:GB-2312和Unicode等编码。
  
  uFormat:函数所要提取的数据的格式,可取下面一些值:GGO_ITMAP、GGO_NATIVE、GGO_METRICS、GGO_GRAY2_BITMAP、GGO_GRAY4_BITMAP、GGO_GRAY8_BITMAP。
  
  对于提取字符的字形轮廓来说,由于只需得到字形轮廓的二值图象,不用得到灰度图象,因此uFormat参数可取两个值:GGO_BITMAP、GGO_NATIVE。如取GGO_BITMAP,函数将返回字符的字形轮廓位图;取GGO_NATIVE,函数将返回用来描述字符外形轮廓的曲线的点的数据,使用的单位是字体设计的单位,如uFormat参数取值为GGO_NATIVE,则任何lpmat2参数的变换矩阵将被忽略。由于可能需对提取出的字形轮廓作一定的变换处理(如:放大、缩小、旋转及改变纵、横比等),将参数uFormat的值设置为GGO_NATIVE。
  
  调用GetGlyphOutline,函数将返回一系列的折线和样条曲线,返回的折线和曲线的信息存储在一个TTPOLYGONHEADER结构及紧随其后的多个TTPOLYCURVE结构中,这些信息主要为描述折线和曲线所需的点的坐标,要描述字形轮廓须使用这些信息。上述两个结构中所有的点都以POINTFX结构形式返回,这些点描述的是位置而不是相对位置。要描绘一个TrueType字符的字形轮廓,须同时使用折线和曲线。TTPOLYGONHEADER结构中的pfxStart成员返回字形的封闭轮廓的起始点,也是封闭轮廓的终止点。
  
  下面对其中几个重要的数据结构作简要的说明。
  
  其中,TTPOLYGONHEADER结构一个TrueType字符的字形轮廓的起始点及该轮廓的类型(直线或曲线)。其定义为:
  
  typedefstruct_TTPOLYGONHEADER{//ttph
  
  DWORDcb;
  
  DWORDdwType;
  
  POINTFXPfxStart;
  
  }TTPOLYGONHEADER,FAR.LPTTPOLYGONHEADER;
  
  其中成员cb描述字形轮廓的TTPOLYGONHEADER结构和TTPOLYCURVE结构所需的字节数;dwType字符的轮廓类型;pfxStart轮廓的起始点。
  
  TTPOLYCURVE结构中包含了TrueType字符中有关字形轮廓曲线的信息。其定义为:
  
  typedefstructtagTTPOLYCURVE{//ttpc
  
  WORDWType;
  
  WORDCpfx;
  
  POINTFXapfx[1];
  
  }TTPOLYCURVE,FAR*LPTTPOLYCURVE;
  
  其中成员wTypeTTPOLYCURVE结构所描述的曲线类型,可有两个取值;TT_PRIM_LINE和TT_PRIM_OSPLINE,分别代表曲线是折线和B样条曲线;cpfx数组中POINTFX结构的数目;apfx一个确定折线或者B样条曲线的POINTFX结构类型的数组。
  
  POINTFX结构中包含用来描述TrueType字符字形轮廓的点的坐标,其定义为:
  
  typedefstructtagPOINTFX{//ptfx
  
  FIXEDX;
  
  FIXEDY;
  
  }POINTFX,
  
  其中X和Y分别代表点的横、纵坐标。
  
  在调用GetGlyphOutline函数得到描述字形轮廓的数据后,要将其描绘出来还需调用绘制直线和曲线的函数。一个TrueType字符由折线和二次样条曲线描绘而成,调用GetGlyphOutline函数返回了描绘这些折线和曲线所需的点的有关信息,这些信息存储在TTPOLYGONHEADER和TTPOLYCURVE结构中,根据其中的成员wType所的不同值,来调用WindowsAPI所提供的相关绘制折线和样条曲线的函数,即可绘制出字符的字形轮廓。在绘制时还可根据需要对字形轮廓进行各种处理,如放大、缩小、旋转及改变字符的纵横比等。图1显示了采用以上方法提取的“电”字的字形轮廓。
  

图1“电”字的字形轮廓
  
  还有一个需解决的问题是如何获得汉字编码的问题。通常汉字是以字符串的形式输入计算机的,要调用GetGlyphOutline函数得到某一汉字的字形轮廓,还须得到该汉字的编码(一般指GB-2312编码,在WindowsNT和Windows2000下可使用Unicode编码),用来GetGlyphOutline函数中的uChar参数,这就需进行由字符串到汉字编码的转换。下面给出了用Delphi实现的由汉字字符串到汉字的GB-2312编码的转换函数,该函数的输入参数为字符串的形式的单个汉字,返回值为输入参数汉字的GB-2312编码。
  
  functionCodeConvert(s:string):interger;
  
  begin
  
  result:=ord(WORD(s[1]shl8)+WORD(s[2]));
  
  end;
  
  3字形轮廓二值图象的转化及其编辑处理
  
  由于受线切割机所能切割图形形状的限制,即在不重新穿丝的情况下,只能切割一笔画成的图形;加上汉字数量众多,字形千变万化,且大多数汉字都不能一笔写成,因此将汉字的字形轮廓提取出来后并不能直接用于切割,还需对其进行一定的编辑处理,使其符合线切割加工的需要,即把它变成能一笔写成的切割轨迹。且实际应用中,多数情况下可能不是切割单个汉字而需一次切割多个汉字,这也要进行编辑处理。而要进行编辑处理,首先要将图形转化为图象。还是以“电”字为例,在未经编辑处理时,在线切割机上只能切割出如图2所示的不完整字形,在经过适当的编辑处理后,线切割机就可加工出如图3所示的完整汉字的字形了。
  

图2未经编辑处理时线切割机所能加工的“电”字字形轮廓
  

图3编辑处理后线切割机所能加工的“电”字字形轮廓
  
  因为我们只需标识字形的边界轮廓,因此将其转化为二值图象即可。将字形轮廓转化为二值图象,也就是将其转化为一个用矩阵表示的象素点图象,矩阵中的每一位都是二进制数,当该位为1时表示字符的笔划经过此位,该位为0时表示字符的笔划不经过此位。因为只要分辨出某点为0还是1,因此每个点只要用一位二进制数表示即可,这样1个字节就可以表示8个象素点,但为方便叙述本文采用以1个字节表示1个点来进行说明。
  
  要将字形轮廓转化为二值图象,首先根据需要(如字体、尺寸大小、纵横比、是否旋转、变形等)在屏幕上绘制出所要切割字符的字形轮廓;然后对图形进行扫描,将有笔划通过的点(对应于与字符颜色相同象素的位)的值置为1,而其它的点则置为0,扫描完毕后便将字形轮廓转化为二值图象了。
  
  生成二值图象后还需对图象进行适当的修改,以满足线切割加工的需要。对图象进行编辑处理,可用一个小方块代替一个放大了的象素,通过建立网格编辑区,每一网格小方块都是一个放大了的象素,这样可对每个象素进行编辑处理,控制鼠标在相应的网格眼内填入字符或背景颜色,同时填入字符颜色所对应的位置为1,填入背景颜色所对应的位置为0。
  
  4切割指令的生成
  
  将汉字的字形轮廓转化为二值图象且编辑处理后,为生成切割指令须用直线或圆弧对其进行描述,由于汉字字形较适合用直线来对其进行描述,因此采用直线段来实现对汉字字形的描述。
  
  由于线切割机所能切割的图形具有一定的特殊性(即需能以一笔画完),因此只需采用某种算法对图进行一次遍历便可得到加工轨迹。
  
  要对图象进行遍历,首先需确定搜索策略。由于能被切割的图形具有特殊性,采用改进了的深度优先搜索方法来对图象进行遍历。主要思想为:先确定图象的起始点,然后沿逆时针方向在该点周围寻找下一点,找到后沿着这两点确定的方向继续搜索,直至将该方向上的点搜索完毕,然后回溯,以回溯得到的点为基础重复以上搜索,直至所有点都被搜索过,在搜索过程中将经过的点的值从1置为0,同时记录所经过的直线。
  
  下面介绍一下所要用到的主要数据结构。
  
  记录直线所用结构为TLineRecord,它用来记录每段直线的起点和终点坐标,其定义如下:
  
  TLineRecord=record
  
  StartPoint,EndPoint:TPoint;//直线起始点,终止点
  
  end;
  
  PLineRecord=^TLineRecord;
  
  其中StartPoint,EndPoint分别为直线的起点和终点。
  
  图象采用二维数组进行表示,首先按照行、列从小到大的顺序找到图象的起始点,然后再采用逆时针方向来搜索下一点。搜索方向的定义为:
  
  SearchDirection:array[0..7,0..1]ofinterger=((1,0),(1,-1),(0,-1),(-1,-1),(-1,0),(-1,1),(0,1),(1,1));
  
  遍历算法如下:
  
  (1)扫描图象寻找起始点,将其坐标记为(k,1);用FirstPointX、FirstPointY记录*点横、纵坐标的值;
  
  (2)初始化记录直线的指针,建立记录直线的链表;将起始点的k,1值作为直线起点和终点的横、纵坐标,将该直线加入到直线纪录的链表中去;
  
  (3)以*点为基准点沿逆时针方向寻找下一点,如果搜索到值为1的点则记搜索方向为i,该点的横、纵坐标记为(k,1),将记录直线的终点横、纵坐标设置为k,1;
  
  (4)置是否搜索完毕标志SearchCompleted为False;
  
  (5)如果SearchCompleted不为True则重复作6-13步;
  
  (6)置SearchCompleted为True;
  
  (7)置是否同一条线标志SameLine为True;
  
  (8)如果SameLine为True则重复作9-12步;
  
  (9)置SameLine为False;
  
  (10)沿i方向进行搜索,即k:=k+SearchDirection[i][0];1:=1+SearchDirection[i][1];
  
  (11)如果点(k,1)为1,则置SameLine为True;将直线的终点坐标设置为(k,1);将点(k,1)的值设置为0;
  
  (12)如果点(k,1)为0,则置SameLine为False;
  
  (13)以点(k,1)为基准点沿逆时针方向寻找下一点,如果搜索到值为1的点,则记搜索方向为i;在直线记录列表中增加一条新的直线,k,1值作为直线起点的横、纵坐标;将搜索到的点的横、纵坐标记为(k,1),将直线终点的横、纵坐标设置为(k,1);置Searhcompleted为False,置SameLine为True;将点(k,1)的值设置为0;
  
  (14)进行图形封闭化处理,在直线记录列表中增加一条直线,将k,1值作为直线起点的横、纵坐标,FirstPointX、FirstPointY作为直线终点的横、纵坐标值。
  
  这样当遍历完成后,遍历的轨迹就保存在直线记录列表中了,也就是说已实现将汉字的字形轮廓用直线段进行描述了。需指出的是,由于汉字字形本身或者编辑处理的原因,在进行图象遍历的过程中,可能存在一些不和谐的点,使遍历不能完成(如存在断点、尖点及多余点的情况),需在遍历之前运用图象处理的技术将这些点补足或者剔除掉,以使遍历能顺利完成,有关这方面的算法不再赘述。
  
  至此要实现切割汉字就只剩下如何生成切割指令的问题了。由于已将汉字的字形轮廓用直线进行描述,且这些直线还首尾相接组成一个封闭轮廓,要生成线切割机的切割指令,只需按切割指令的要求将这些直线进行转换即可。
  
  5结束语
  
  本文介绍了从汉字字库中提取字形轮廓,在进行编辑处理后将其转化为切割指令,从而在线切割机上实现切割汉字的自动编程技术。它可使线切割机简单方便地实现汉字的切割,还可对要切割的汉字进行各种处理。实践证明,采用这种方法能很好地满足需要,并且取得较好的效果。
标签词:线切割机,自动编程技术
版权与免责声明:

1、凡本网注明"来源:机床商务网"的所有作品,版权均属于机床商务网,转载请必须注明机床商务网,https://www.jc35.com。违反者本网将追究相关法律责任。

2、企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。

3、本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。

4、如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

产品推荐更多+
  • 数控电火花成形机DR400S

    数控电火花成形机DR400S
    一款床身铸件结构T形牛头相结合、油槽加工液自动升降、机床外观专业设计、结构紧凑稳定、独立操作控制台、外型时尚的高精密数控电火花成形机床,配置windows操作系统和多种铜电极、石墨电极专家放电回路。此系列机床包括DR400S一种规格型号。

    型号:DMSPK-DR400S
    面议
  • 数控电火花成形机DR1800HR

    数控电火花成形机DR1800HR是一款床身铸件结构为双牛头式、电源控制柜与床身一体装配、整机全新设计且结构稳定的数控电火花成形机床,配置windows操作系统、手轮手控盒和铜、石墨电极加工数据库,适用于大型工件双头同时加工,外型新颖,占地面积小。此系列机床包括DR1400HR、DR1800HR两种规格型号。

    型号:DMSPK-DR1800HR
    面议
  • 数控电火花成型机DR1400HR

    数控电火花成型机DR1400HR是一款床身铸件结构为双牛头式、电源控制柜与床身一体装配、整机全新设计且结构稳定的数控电火花成形机床,配置windows操作系统、手轮手控盒和铜、石墨电极加工数据库,适用于大型工件双头同时加工,外型新颖,占地面积小。此系列机床包括DR1400HR、DR1800HR两种规格型号。

    型号:DMSPK-DR1400HR
    面议
  • 数控电火花成型机DR350H

    数控电火花成型机DR350H是一款床身铸件为T形结构、机床外观专业设计、独立操作控制台、外型时尚的高精密数控电火花成型机床,配置windows操作系统和多种铜电极、石墨电极专家放电回路。此系列机床包括DR350H、DR400H、DR450H、DR500H四种规格型号。

    型号:DMSPK-DR350H
    面议
  • 数控电火花成形机DM45A

    数控电火花成形机DM45A是一款床身铸件为C形结构、油槽油箱不断优化、20多年的传统数控镜面电火花成形机床,配置DOS操作系统和多种铜电极、石墨电极专用放电回路,具有很高性价比,客户应用广泛。此系列机床包括DM30A、DM40A、DM45A三种规格型号。

    型号:DMSPK-DM45A
    面议
  • 数控电火花成形机DM40A

    数控电火花成形机DM40A是一款床身铸件为C形结构、油槽油箱不断优化、20多年的传统数控镜面电火花成形机床,配置DOS操作系统和多种铜电极、石墨电极专用放电回路,具有很高性价比,客户应用广泛。此系列机床包括DM30A、DM40A、DM45A三种规格型号。

    型号:DMSPK-DM40A
    面议