标牌刻度值轮廓加粗绘制方法
技术领域
本发明涉及一种图形绘制方法,尤其涉及一种标牌刻度值轮廓加粗绘制方法,属于印刷技术领域。
背景技术
随着计算机在工厂的普及,越来越多的企业使用CAD软件进行绘图,在标牌厂的标牌制作工艺流程中,一般先用CAD绘图软件将需要制作的标牌图形在计算机中绘制好并保存,然后将标牌图形文件转换成和激光照排机兼容的文件格式输出到照排机,照排机打印出胶片后进行生产。标牌制造厂现有的绘图软件基于AutoCAD绘图软件,对标牌绘制方法做了一些改进,以输入标牌圆弧、刻度线、刻度值的各项参数的方法绘制标牌,提高了工作效率。制作标牌时在精确显示用户所需要的标牌样式的同时还需考虑到标牌的视觉效果,主要体现在标牌刻度值上,这里所说的刻度值主要指中文字、英文字、数字等,下文用文字统称。当然一个标牌中不仅仅是刻度值文字,还有不在标牌刻度上的其他辅助文字,分布在标牌周围,一般只要刻度值文字绘制成功,辅助文字的绘制也是同样的方法,并且更简单,不需考虑整体绘制和角度偏转的问题。Windows软件内所提供的字体以及另安装的其他字体在正常情况下在AutoCAD中都可以绘制出来,但是,有些标牌考虑视觉效果需要对刻度值文字进行加粗。在Word中字体设置中可以选择加粗,在AutoCAD中字体样式也可以设置加粗,如果上述两种方法选择加粗后刻度文字仍达不到标牌要求的视觉效果,就要对刻度值文字进行再加粗操作,标牌制作企业绘图员在进行该操作时必须先在其它专业软件中绘制出加粗的刻度值文字,再以图块的方式贴到AutoCAD系统中。如果标牌中有100个文字就要粘贴100次,这样工作人员在绘制的时候操作非常繁琐,粘贴后又必须手工调整刻度值的位置,手工操作使刻度值定位精确程度大大下降,所以绘制这类标牌时绘图员工作量非常大,工作效率很低。因此,研究一种标牌刻度值文字轮廓加粗的绘制方法,对减少绘图员工作量,提高工作效率,保证刻度值文字定位精度十分重要。
发明内容
本发明的目的在于提供一种标牌刻度值轮廓加粗绘制方法,减少绘图员工作量,提高工作效率,保证刻度值文字定位精度。
本发明的目的通过以下技术方案予以实现:
一种标牌刻度值轮廓加粗绘制方法,首先绘制标牌圆弧、标牌刻度线;其次确定标牌刻度值所在路径弧的圆心和半径、刻度值偏转角度、刻度值的文字样式、刻度值的字体高度、宽度因子、字符间距,然后根据上述参数分别计算得到刻度值的定位点Location(x,y)和刻度值旋转角度;定位点Location(x,y)通过以下方法获得:
根据刻度值路径弧的圆心、半径和每个刻度值的偏转角度分别计算得到刻度值的中心点A(x,y);
根据已设定的刻度值的字体参数用多行文字的方式在刻度值的中心点A(x,y)位置上逐一绘制刻度值,此时中心点A(x,y)位于绘制好的刻度值的左上角;
通过范围函数逐一得到绘制好的刻度值的范围边框,得到刻度值的高度值h和宽度值w,将中心点A(x,y)向-x轴方向移动宽度值w的二分之一,向y轴方向移动高度值h的二分之一,得到点B(x-w/2,y+h/2),将该点记为刻度值的定位点Location(x,y);
删除前述绘制好的刻度值对象。
然后进行以下步骤:
1)设置轮廓加粗的宽度值w1;
2)根据刻度值的文字样式中的字体,定位点Location(x,y),字体高度参数通过GetGlyphOutline方法,即取轮廓点方法遍历获得刻度值的轮廓点数组集;因任何的文字都是折线与曲线的组合,轮廓点有两种类型:折线与曲线,数组集内的所有点按类型绘制后就是文字的轮廓边框;
3)判断轮廓点数组集类型,折线数组进入步骤4),曲线数组进入步骤5);
4)遍历折线数组,该数组由2个点组成,绘制2点线段line对象并写入一个公用的ObjectIdCollection类中,折线线段宽度即为轮廓加粗宽度值w1,所有线段和曲线绘制完成后就是文字的轮廓线,轮廓线的宽度就是w1,w1的值确定了字体加粗的样式;
5)遍历曲线数组,该数组由4个点组成,绘制样条曲线spline并写入同一个公用的ObjectIdCollection类中,样条曲线宽度即为轮廓加粗宽度值w1,所有线段和曲线绘制完成后就是文字的轮廓线,轮廓线的宽度就是w1;
6)所有轮廓线绘制完成后根据不同的文字形成了多个任意多边形,多边形的集合就是文字的轮廓边框,此时文字是空心的,根据上面的ObjectIdCollection类进行多边形填充操作;
7)根据每个刻度值旋转角度参数将每个刻度值分别旋转相应的角度,刻度值绘制完成。
与现有技术相比,本发明的有益效果是:在绘制标牌刻度值时,需要在常规的AutoCAD软件字体之外更粗字体的情况下,能进行字体轮廓自动加粗,以满足标牌要求的视觉效果,并且减少了绘图员绘制时间,提高了工作效率,保证了刻度值文字定位的精度。
附图说明
图1是本发明的程序流程图;
图2是刻度值定位点确定方法流程图;
图3为未加粗的刻度值文字的轮廓线和字体;
图4为用本方法加粗的刻度值文字的轮廓线和字体;
图5是本实施例绘制好的标牌图形。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明。
如图1所示,进行标牌刻度值轮廓加粗的绘制,首先要绘制标牌圆弧、标牌刻度线;其次确定标牌刻度值所在路径弧的圆心和半径、刻度值偏转角度、刻度值的文字样式、刻度值的字体高度、宽度因子、字符间距,然后根据上述参数分别计算得到刻度值的定位点Location(x,y)和刻度值旋转角度。如图2所示,上述刻度值的定位点Location(x,y)通过以下方法获得:根据刻度值路径弧的圆心、半径和每个刻度值的偏转角度分别计算得到刻度值的中心点A(x,y);根据已设定的刻度值的字体参数用多行文字的方式在刻度值的中心点A(x,y)位置上逐一绘制刻度值,此时中心点A(x,y)位于绘制好的刻度值的左上角;通过范围函数逐一得到绘制好的刻度值的范围边框,得到刻度值的高度值h和宽度值w,将中心点A(x,y)向-x轴方向移动宽度值w的二分之一,向y轴方向移动高度值h的二分之一,得到点B(x-w/2,y+h/2),将该点记为刻度值的定位点Location(x,y);删除前述绘制好的刻度值对象。
如图1所示,刻度值的定位点Location(x,y)确定后进行以下步骤:
1)设置轮廓加粗的宽度值w1;
2)根据刻度值的文字样式中的字体,定位点Location(x,y),字体高度参数通过GetGlyphOutline方法,即取轮廓点方法遍历获得刻度值的轮廓点数组集;因任何的文字都是折线与曲线的组合,轮廓点有两种类型:折线与曲线,数组集内的所有点按类型绘制后就是文字的轮廓边框;
3)判断轮廓点数组集类型,折线数组进入步骤4),曲线数组进入步骤5);
4)遍历折线数组,该数组由2个点组成,绘制2点线段1ine对象并写入一个公用的ObjectIdCollection类中,折线线段宽度即为轮廓加粗宽度值w1,所有线段和曲线绘制完成后就是文字的轮廓线,轮廓线的宽度就是w1,w1的值确定了字体加粗的样式;
5)遍历曲线数组,该数组由4个点组成,绘制样条曲线spline并写入同一个公用的ObjectIdCollection类中,样条曲线宽度即为轮廓加粗宽度值w1,所有线段和曲线绘制完成后就是文字的轮廓线,轮廓线的宽度就是w1;
6)所有轮廓线绘制完成后根据不同的文字形成了多个任意多边形,多边形的集合就是文字的轮廓边框,此时文字是空心的,根据上面的ObjectIdCollection类进行多边形填充操作;
7)根据每个刻度值旋转角度参数将每个刻度值分别旋转相应的角度,刻度值绘制完成。
具体的,绘制一个刻度值轮廓加粗的标牌,参数如下,圆弧圆心坐标为(0,0),半径80mm,起始角度320度,终止角度220,刻度线圆心,刻度线半径、起终角度与圆弧一样,刻度线均分50格,长刻度均分5格,刻度值从左至右分别是零、一、二、三、四、五、六、七、八、九、十,用户给出每个中文刻度值的偏转角度,刻度值高度5mm,刻度值轮廓加粗0.3mm,刻度值所在路径弧的圆心为(0,0),半径为70mm。
根据上述参数,首先绘制圆弧,然后绘制刻度线,接着进行刻度值的绘制:
先输入标牌刻度值所在路径弧的圆心(0,0)和半径70mm;选择刻度值的文字样式,确定刻度值的字体高度、宽度因子、字符间距;选择刻度值的旋转方向,一般刻度值旋转方式有垂直、向圆心、反向圆心和自定义四种;逐一输入刻度值(零一二三四五六七八九十)和偏转角度;根据刻度值路径弧的圆心(0,0)、半径70mm和每个刻度值的偏转角度分别计算得到刻度值的中心定位点A(x,y),根据AutoCAD的绘制方法,AutoCAD绘制多行文字时不是以定位点作为中心进行绘制的,因而点A(x,y)是AutoCAD绘制的多行文字刻度值的左上角点,所以沿着圆弧逐一绘制的刻度值的位置会偏向一边,这个定位点后续要进行调整;根据刻度值的旋转方式(垂直、向圆心、反向圆心和自定义之一)和偏转角度分别计算出每个刻度值的旋转角度并保存,向圆心方式旋转角度是偏转角度减90度,反向圆心方式旋转角度是偏转角度加90度,垂直方式和自定义方式无须计算,垂直方式是90度,自定义角度既是旋转角度;根据前面的刻度值的字体参数(文字字体、字体高度、宽度因子、字符间距)用多行文字的方式以点A(x,y)定位逐一绘制刻度值;通过范围函数遍历逐一得到绘制好的刻度值对象的范围边框,即得到刻度值的高度值h和宽度值w,每个刻度值都不一样,所以刻度值对象的范围边框也不一样,刻度值的高度值h和宽度值w也不一样;将点A(x,y)向-x轴方向移动宽度值w的二分之一,向y轴方向移动高度值h的二分之一,得到点B(x-w/2,y+h/2),将该点记为刻度值的真正的定位点Location(x,y);删除前面绘制的刻度值对象,绘制这些对象的目的就是计算刻度值的定位点Location(x,y),以便于下面轮廓加粗刻度值的绘制,所有已绘制出来的刻度对象要删除掉;设置轮廓加粗的宽度值w1,w1取值0.3mm;根据刻度值的文字样式中的字体,定位点Location(x,y),字体高度参数通过GetGlyphOutline方法,即取轮廓点方法遍历获得刻度值的轮廓点数组集,数组集内的所有点如果按类型绘制后就是文字的轮廓边框,轮廓点有两种类型:折线(小线段)与曲线,因为任何的文字都是折线与曲线的组合;遍历折线数组,该数组由2个点组成,绘制2点线段line对象并写入一个公用的ObjectIdCollection对象集类中,线段宽度即为轮廓加粗宽度值w1,所有线段和曲线绘制完成后就是文字的轮廓线,轮廓线的宽度就是w1,w1的值确定了字体加粗的样式;遍历曲线数组,该数组由4个点组成,绘制样条曲线spline并写入同一个公用的ObjectIdCollection对象集类中,样条曲线宽度即为轮廓加粗宽度值w1,所有线段和曲线绘制完成后就是文字的轮廓线,轮廓线的宽度就是w1;所有轮廓线绘制完成后根据不同的文字就形成了多个任意多边形,多边形的集合就是文字的轮廓边框,此时文字是空心的,这里就看出w1的重要性了,w1的值决定了文字加粗的宽度大小,所以该方法可以实现文字的任意加粗,标牌内所有需要加粗的文字都可以用上述的方法实现;因为现在文字是空心的,所有还需根据上面的ObjectIdCollection对象集类进行多边形填充操作,该类中记录了文字的所有轮廓边框数据;最后根据上述计算出的每个刻度值旋转角度参数将每个刻度值分别旋转相应的角度,刻度值绘制完成。如图3所示为未加粗的刻度值文字的轮廓线和字体。如图4所示为用本方法加粗的刻度值文字的轮廓线和字体。如图5所示,是本实施例绘制好的标牌图形。
除上述实施例外,本发明还可以有其他实施方式,凡采用等同替换或等效变换形成的技术方案,均落在本发明要求的保护范围内。