摘 要 本文给出了AutoCAD平台下条形码的生成方法和算法流程,解决了对AutoCAD文档进行唯一标识和计算机识别的问题,并开发了相应的系统控件。关键词 AutoCAD 控件 条形码 VB一、引言条形码技术最早出现在上世纪40年代,但直到70年代左右它才得到实际应用,而随着现代电子技术和信息技术的发展,条形码技术已经被世界上的国家和地区普遍使用,并逐步渗透到多个技术领域。条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码)、Codabar码(库德巴码)、Code25码(标准25码)、ITF25码(交叉25码)、Matrix25码(矩阵25码)、UPC-A码、UPC-E码、EAN-13码(EAN-13国际商品条码)、EAN-8码(EAN-8国际商品条码)、中国邮政码(矩阵25码的一种变体)、Code-B码、MSI码、Code11码、Code93码、ISBN码、ISSN码、Code128码(Code128码,包括EAN128码)、Code39EMS(EMS专用的39码)等一维条码和PDF417等二维条码。目前,国际上广泛采用的条形码种类有EAN、UPC码(商品条码,用于在世界范围内唯一标识一种商品。我们在超市中畛<木褪荅AN和UPC条码)、Code39码(可表示数字和字母,在管理领域应用最广)、ITF25码(在物流管理中应用较多)、Codebar码(多用于医疗、图书领域)、Code93码、Code128码等。其中,EAN码是当今世界上广为使用的商品条码,已成为电子数据交换(EDI)的基础;UPC码主要为美国和加拿大使用;Code39码因其可采用数字与字母共同组成的方式而在行业内部管理上被广泛使用;Codebar码则主要应用于血库、图书馆和照相馆的业务流程中。本文所述的条形码控件目前只用于生成EAN-13码,因为它能很好的被所有条形码扫描器兼容。
论文检测天使-免费论文相似性查重http://www.jiancetianshi.com
二、控件算法与设计2.1设计需求:2004年2月我们有一套软件系统开发任务,系统中要求能够对每张设计图纸(由AutoCAD绘制)发放唯一的图号,并能在日后对已发放图号的图纸进行审核和管理。为了能够唯一标识图纸,同时满足方便电脑识别的要求,我们决定采用条形码技术。EAN-13码是我国目前用得极为普遍的条码种类,其码位数量符合我公司目前图纸编号位数,并能完整记录我公司特殊的连图号信息;同时又由于其对打印质量要求不是很苛刻,现有打印设备即能满足使用,最终在系统中采用了EAN-13码。2.2控件的算法实现:AUTOCAD是一个专业工程图绘制软件,其文件格式是目前工业电子文档的事实标准,但在其内部并没有集成条形码生成功能,只能采用二次开发的方式来实现条形码的生成及绘制。我们所做的就是把生成EAN-13码的算法逻辑和AutoCAD绘制条形码的过程封装在一个外部函数库(Barcode.dll)中,并将其分发给程序开发人员,使他们只需调用这个函数就能在AutoCAD中绘制条形码,而不再需要考虑具体的条码生成和绘制细节。 图1论文检测天使-免费论文检测软件http://www.jiancetianshi.com
第一步,掌握EAN-13码的编码规则。EAN-13被称为标准版的EAN条码,其结构如图1所示,从左到右各部分依次为:左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符、终止符、右侧空白区。表1是各部分的信息,其中模块数据值“1”表示黑条;“0”表示白空。表1
结构名称 | 所占模块数 | 模块数据值 |
左侧空白区 | 9 | 无 |
起始符 | 3 | 恒为“101” |
左侧数据符 | 42(6位数值,图中的“2~7”) | 通过A方法或B方法计算 |
中间分隔符 | 5 | 恒为“01010” |
右侧数据符 | 35(5位数值,图中的“89012”) | 通过C方法计算 |
校验符 | 7(1位数值,图中的最后一位“8”) | 后面有详细说明 |
终止符 | 3 | 恒为“101” |
右侧空白区 | 9 | 无 |
第一位“1”)。其余每位有效数据(共11位,左侧数据符中有6位,右侧数据符中有5位)各占7个模块。表2是前置字符与“A”“B”方法(左侧数据符中每位数据值的计算方法)的对照表2
前置字符 | 每位数据值对应的计算方法 | |||||
论文检测天使-免费论文检测软件http://www.jiancetianshi.com 第一位 | 第二位 | 第三位 | 第四位 | 第五位 | 第六位 | |
0 | A | A | A | A | A | A |
1 | A | A | B | A | B | B |
2 | A | A | B | B | A | B |
3 | A | A | B | B | B | A |
4 | A | B | A | A | B | B |
5 | A | B | B | A | A | B |
6 | (中国)A | B | B | B | A | A |
7 | A | B | A | B | A | B |
8 | A | B | A | B | B | A |
9 | A | B | B | A | B | A |
第一位数值(“2”)应通过“A”方法来计算…第五位数值(“6”)应通过“B”方法来计算…表3是不同的数值经“A”、“B”、“C”三种方法计算出来的结果,其中“1”表示黑条;“0”表示白空。例如:左侧数据符中 论文检测天使-免费论文检测软件http://www.jiancetianshi.com
第一位数值(“2”)通过“A”方法计算出来的结果为:“0010011”;右侧数据符中第三位数值(“0”)通过“C”方法计算出来的结果为:“1110010”。下面是计算校验位(符)模块数据值的步骤:①把12位有效数据值所有偶数位的数字代码求和赋值a。②将①中的a乘以3赋值a。③把12位有效数据值所有奇数位的数字代码求和赋值b。④将a和b相加赋值c。⑤取c的个位数d。
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
数值 | A方法 | B方法 | C方法 |
0 | 0001101 | 0100111 | 1110010 |
1 | 0011001 | 0110011 | 1100110 |
2 | 0010011 | 0011011 | 1101100 |
3 | 0111101 | 0100001 | 1000010 |
4 | 0100011 | 0011101 | 1011100 |
5 | 0110001 | 0111001 | 1001110 |
6 | 0101111 | 0000101 | 1010000 |
7 | 0111011 | 0010001 | 1000100 |
8 | 0110111 | 0001001 | 1001000 |
9 | 0001011 | 0010111 | 1110100 |
论文检测天使-免费论文相似性查重http://www.jiancetianshi.com
二、三步,我们已经达到了绘制条形码的最基本的要求,程序员可以输入一个条形码码值作为函数Drawbar code的参数,并调用这个函数来绘制对应的条形码。但这还不够,我们应考虑以指定的位置、比例、角度和颜色绘制条形码的功能。为此给函数Drawbar code添加参数如下:draw Scale,获取比例值、PTX,获取起始位置的横坐标、PTY, 获取起始位置的纵坐标、nPI(可选参数),获取旋转角度、Show Value ,获取是否要绘制条形码码值的信息、bColor,获取颜色等。三、设计过程中的关键问题:1、微软公司在其office系列中包含有一个简单条形码控件:Microsoft Access Barcode Control9.0(以下称为:MSBCODE9),只要安装了微软的Access2000(Office2000 套件之一,其它版本不一定包含该控件)系统就会注册该控件。该控件支持11种条形码格式,只需把条形码码值赋给其“Value”属性,该控件即可显示相应的条形码。我们最初有过这样的思路:获取用户给出的条形码码值后,先用MSBCODE9得到相应条形码图形,然后在AutoCAD中处理条形码图形。但MSBCODE9不具备类似图片控件的属性,无法简单地把条形码图形拷贝出来,因此只能使用API函数BitBlt(该函数对指定的源设备环境区域中的像素进行位块转换,以传送到目标设备环境)来拷贝MSBCODE9中的条形码图形,不过经过考虑我们放弃了这种思路。首先,按上述思路产生的图形属于位图而不是矢量图,图形中的黑条和白空尺寸不严格,从而绘制出的条形码无法识别。其次,向AutoCAD中粘贴图形时,AutoCAD提供两种方式,一种需要关联到图形文件,这肯定是不可取的;另一种是以OLE对象来处理图形,但用这种方式无法对粘贴上去的图形再进行尺寸调整和角度旋转。基于以上考虑,我们采用在CAD中直接绘制条码,设计一个DRAWCODE函数,根据条码生成函数输出的“0”、“1”字符串,依次在CAD绘出PLINE实体。
2、 任意角度的绘制条形码。要求条形码按一定角度绘制,需要把构成条形码的所有多段线和文字(码值)对象都按一定角度倾斜绘出。图2是表示条形码 图2不旋转(旋转角度=0)时的样子,注意,坐标原点不是AutoCAD中坐标系的(0,0)点,而是用户给函数Drawbar code的起始位置参数(PTX,PTY),表示条形码应该从什么地方开始绘制,函数Drawbar code的参数已在前面介绍过。图2中箭头所指处为文字“1”的起始位置M(a,b),下面我们以该点为例说明如何处理旋转时的位置变化。如图3所示,M点就是图2中的M点,为了方便说明,对其位置进行了放大。条形码以插入点O点(PTX,PTY)为圆心,逆时钟旋转一定角度后,M点的位置变为:M’(a’,b’),求出M’点的位置是解决这个问题的关键。设旋转角度α,即∠BOP = α,从M’点向OP引垂线,垂足为:D,从M’点向坐标轴线垂线,垂足分别为:B和C,从D点向横坐标引垂线,垂足为:A,DA与CM’垂直相交于点E。因M’点由M点旋转而来,所以DM’ = b, OD = a。容易求出∠ADM’ = ∠AOD =α,因此AB = EM’ = DM’ * Sinα = bSinα;OA = OD * Cosα = aCosα,OB = aCosα + bSinα。用类似的方法可以求出:OC = aSinα – bCosα。而线段OB和OC的长度刚好是M’点的坐标值a’和b’。这样,我们就得到了条形码中任一点M(a,b)以插入点为圆心,旋转某一角度α后,该点相对于插入点的新的位置M’(a’,b’)的计算公式:图3 M’点在AutoCAD中的具体位置为:M’(PTX + aCosα + bSinα,PTY + aSinα – bCosα)。计算出M’点的位置后,实现绘制任意旋转角度的条形码的功能就不再困难。四、结束语:使用条形码绘制控件后,程序开发人员在AutoCAD中绘制条形码变得非常简单,只需确定条形码码值、插入位置、图形比例和旋转角度等基本信息,剩下的工作全部由控件来完成。该条形码控件目前在我企业的《图号自动生成及管理系统》项目中运行良好,取得较好的效果,达到预期目的。参考文献1. 湘电股份信息中心《图号自动生成及图号管理系统科研任务书》2004.022. AUTOCAD R2000 使用手册之VBA开发部分3. 《计算机软件工程规范国家标准汇编》 中国标准出版社 1998.034. 《新编 Windows API 参考大全》 电子工业出版社 2000.03
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
相关文章:
魏建国:中国的经济支撑了整个人民币的发展 未来升值还04-26
伯南克的宏观经济学04-26
当代宏观经济学需要一个全新的分析框架04-26
有关经济管理学院毕业论文04-26
中学地理教学在城市大发展中的小作用04-26
公布初步调查结果:《写真地理》超业务范围发表学术论文04-26
道歉了还嘴硬:“长这么大从来没说过假话”04-26
安全生产无小事!企业开展生产应急救援演练04-26
京东物流与中远海运物流共建智能仓储系统04-26