ObjectARX(精选七篇)
ObjectARX 篇1
目前国际上著名的制图成图系统是AutoCAD,但AutoCAD的平台太大,无法满足行业中的具体需求,因此出现许多定制成图系统。在测绘行业中,定制成图系统也成为一种趋势。
1 系统规划
制定良好的系统架构是降低开发量的一个重点,经过考虑,该系统采用三层结构,其中业务层与数据处理是核心。业务层包括各种功能模块的实现,数据处理主要针对地形图元中各种属性数据的筛选处理及空间数据的转换处理。系统框架图如图1所示。
2 系统功能设计
测绘成图系统主要由系统环境设置模块,绘图模块,编辑模块,质量检查模块,数据转换模块,工程应用模块构成。功能模块图如图2所示。
1)系统环境设置模块。该模块的主要功能是对制图环境进行设置,包括图层、颜色、线型、参数等设置。
2)绘图模块。该模块包含了插入块的功能、几何图形绘制功能、图解功能。在插入块之前,需完成符号库的创建,符号库包含点、线、面符号,点符号在AutoCAD环境下创建,线符号和面符号的创建需要写形文件。在插入块时调用点符号库,在绘图区绘制相应的地物符号。几何图形绘制功能主要包含线,弧,圆,长方形的绘制,绘制线、弧时调用.lin文件,绘制圆、长方形等闭合区域后,需填充则调用.pat文件。图解功能包含量线、量点、跟踪、微导等,通过图解功能可节省制图时间。
3)编辑模块。该模块包含空间信息编辑功能和属性信息编辑功能。空间信息编辑主要是采集图元的高程,属性信息编辑主要是采集图元的独立属性。属性信息存储于图元的实体扩展数据(XDATA)链表中,而每个图元存储的属性信息控制在16K以内。
4)质量检查模块。该模块包含空间信息检查功能和属性信息检查功能。空间信息的检查主要是图形之间拓扑关系的检查,属性信息的检查主要是对图元扩展数据的检查。
5)数据转换功能。该模块包含数据导入功能和数据导出功能。数据导入功能主要是读取全站仪数据,数据导出功能包含坐标数据的格式转换和DWG格式与MIF/MID格式的转换,转换后的数据可以应用于GIS系统中。
6)工程应用模块。该模块包含了面积计算功能和部件信息采集功能。面积计算是根据规划计容率指标,统计用地范围内建筑面积。部件信息采集是“数字城管”的前期工作,采集城市部件的一般信息和独有信息,信息导出后应用于GIS系统中。
3 关键技术
在成图系统建设过程中涉及到的关键技术包括地物编码和符号库的开发设计,针对测绘行业的图解功能的研发,多源数据之间的转换技术。
地物编码是为识别点、线、面的位置和属性而设置的编码,它将全部实体按照预先拟定的分类系统,选择最适宜的量化方法,按实体的属性特征和集合坐标的数据结构记录在计算机的储存设备上。符号库的设计参考测绘行业的规范。图解功能需要根据外业测量习惯,内业作图习惯来设计制图步骤。数据间的转换是为后续GIS应用做准备。
4 结束语
目前,在测绘行业中采用成图系统进行数字制图已经逐渐普及开来了。由于成图系统在地理测绘中的各种应用都各有侧重,而本文只对成图系统的开发做了一个框架性的介绍,未深入到具体的技术处理,且该系统也有很多需要完善的地方,各种问题有待进一步的研究。
摘要:随着科技的发展,成图系统在测绘行业中的应用在逐渐普及。该文介绍了基于ObjectARX的成图系统的系统架构与功能设计。
关键词:成图系统,系统规划,功能设计
参考文献
[1]李世国.AutoCAD高级开发技术ARX编程及应用[M].北京:机械工业出版社,1999.
[2]余承飞,方勇.AutoCAD2000二次开发技术[M].北京:人民邮电出版社,1999.
ObjectARX 篇2
目前,国内结构设计CAD软件已不少,如中国建筑科学研究院的PKPM,它是商业化程度高的CAD系统,PK是框、排架CAD,PM是结构平面设计CAD。目前已发展成集建筑结构、水暖电及概预算功能于一体的CAD系统。与国外通用性的商业软件相比,它们是基于国内建筑规范和标准编制的,适用于中国大多数的工业和民用建筑设计需求。但对于地下人防工程结构设计的CAD软件并不多见,常见设计软件仅有理正的人防设计工具箱。人防结构设计软件的种类匮乏,品种单一,此方面具有很好的研究前景。在人防工程结构设计时,或套用一般建筑结构设计软件然后进行修正,或采用人工设计,这都不能高效、快捷地进行设计。
AutoCAD系列软件是国内普遍采用的建筑制图软件,它的二次开发平台ObjectARX是面向对象的设计、制图软件,并共享AutoCAD内核和数据。以它为基础架构的人防工程结构设计应用软件开发,一方面可以减少开发底层几何模块的工作,另一方面可以专注于对软件本身的开发和人机交互界面的设计。
1 ObjectARX技术
AutoCAD是一种开放体系结构的应用程序,用户和开发者可以利用多种方式定制适合工程需要的功能,有两种方式改变其工作方式:编程和定制。一般有很多用户通过创建宏定义等方式定制AutoCAD的快捷菜单,使他们的工作简便和更有效率。而编程则具有更大的灵活性、扩展性和针对性。
AutoCAD的可编程语言有AutoLISP、VisualLISP、VBA(Visual Basic for Application)和ObjectARX。AutoLISP是内嵌式高级编程语言,用于图形应用。VisualLISP是为增强AutoLISP、加速AutoLISP开发设计的软件,内嵌于AutoCAD,但它们不适于复杂计算,且程序复杂不易推广。鉴于此类工程结构软件设计需要输入大量参数,计算公式和标准,以及模型化设计,依结果绘制符合要求的图形,所以宜采用面向对象技术的开发语言和工具。由此选择了ObjectARX和MFC开发人防工程结构设计软件。
ObjectARX是ARX(AutoCAD Runtime Extension)的编程环境,含DLL(动态链接库),与AutoCAD运行在相同的地址空间上并直接操作AutoCAD的数据结构和代码,并可以直接访问AutoCAD的数据库结构、图像系统、AutoCAD的图像引擎以扩展AutoCAD类实时功能。它提供的C++程序库用于AutoCAD的应用程序开发,类和协议的扩充、创立和内置新命令。
MFC(Microsoft Foundation Class Library)是Windows环境下编程的传统窗口应用程序框架,包括对话框应用,文档、视图应用,DLL和数据库应用等,利用它可以十分方便的开发交互式的人机界面,建立人性的视窗操作界面。
基于ObjectARX的人防工程结构设计是结合VC++.NET2002的MFC共同完成。它具有以下功能和特征[1,2]:
(1)通用的AutoCAD数据库、实体结构和单独的通用几何类库。利用已有的AutoCAD数据库结构,实现数据间的实时传送和读取,方便对数据和实体的操作。并且它提供了简单的线性代数类以及二维、三维几何元素类,从而提供了几何体通用表示,主要供各模块中的对象使用。
(2)数据字典的使用。对于一个工程,不仅具有图形表示的专业对象,而且有大量的工程数据(即非图形数据)。AutoCAD专门有一个字典用于存储非图形数据,字典就是将一个字符串与一个对象响应的映射,该字符串称为关键字。一个字典的关键字必须唯一,字典的对象可以是任意类型的非图形对象,并且字典可以嵌套。
(3)对象的可扩展性。通过从已有类派生出新类,既可以继承已有类的功能,又可以加入特有的数据和方法。面向对象技术的优点在于:从已有类派生的类自己管理自己的数据,并负责对其存储和读取,对图形数据还要定义自身如何显示。ObjectARX支持自定义类的创建,使开发更具有灵活性。
(4)用MFC开发人性化的交互界面和多文档界面。使用ObjectARX,通过MFC不但可以开发视窗的交互系统界面,以方便工程人员进行设计,而且可以创建支持AutoCAD多文档界面的用户程序,并和其他应用程序正常通信。
(5)与其他程序设计环境通信。ObjectARX应用程序可以和其他程序接口通信,如VisualLISP、ActiveX和COM。通过将URL与实体相连接,或从万维网加载和存储图文件,可以和互联网通信。
2 人防工程结构设计软件研究
ObjectARX是结合MFC的AutoCAD面向对象开发平台,为人防工程面向对象结构设计提供了很好的设计工具,使其基于AutoCAD技术可以实现数据共享,既保持了相对的独立性,又和ObjectARX联系紧密,以方便随时扩展、更新。
2.1 人防工程结构设计流程
人防工程结构设计包括防空地下室主体结构、出入口部、孔口和防护设备。常用的结构构件设计[3]有:防护密闭门门框墙、扩散室、开敞式防倒塌棚架、通风采光窗井、叠合板、出入口。
结构设计过程(见图一)涉及面广泛,在输入总体参数后,除了需要按照《人民防空地下室设计规范》[4]要求进行各部分的核爆动荷载下的结构等效净荷载标准值计算,还需要以此为基础并按照《混凝土结构设计规范》[5]进行相应的结构配筋。此外,对于常用的人防工程结构构件如门框墙等还需要做进一步的设计,这是与一般建筑结构设计中只计算梁、板、柱等基本构件所不同的地方。
2.2 人防工程结构软件整体思路
按照结构设计流程划分不同设计子模块(见图二),在共享核心数据库的基础上,设置各类子模块接口,以保持核心数据库与子模块的相对独立性,并且可以实现子模块功能的实时扩展。
2.3 人防工程结构设计的MFC界面设计
由于结构设计软件需要用户输入初始参数,然后由软件进行数据处理。使用基于MFC的用户界面开发,一方面可以减少交互界面开发工作量,另一方面可以保持和AutoCAD内置命令的用户界面一致。并且,Object ARX也提供了Ad Ui类库和AUi类库[6]来完成基于MFC的界面开发。
AdUi类库是用来处理用户界面操作的MFC扩展动态链接库,经扩展的AdUi包含核心的功能性函数。AdUi类库具有AutoCAD的界面风格和行为。两个类库提供对话框类、控制条类、编辑控件类、组合框类、按钮类、选项标签对话框类以及对话框驻留类。
例如对人防结构设计的门框墙设计部分,由于门框墙计算中涉及到不同部位如门槛、上挡墙、边挡墙等,不同的部位尽管基本公式相同,但是具体到相应部位会存在一定差距,故统一输入数据后,需要对不同的部位进行荷载计算、受力计算、配筋计算以及施工图的绘制。
对于如图四所示的门框墙对话框,其对话框的类型定义如下:
3 结束语
本文提出了人防工程设计软件的结构部分的实现技术和思想,为人防工程设计软件的整体开发做了初步研究和尝试,人防工程结构设计软件只是人防工程设计软件的一个重要组成部分。由于人防工程设计原理与方法与普通的民用建筑有着较大区别,尤其在结构设计、采暖通风等方面更为突出,同时需要考虑平战结合的不同要求。所以人防工程设计软件在系统集成和整合方面有着特殊要求和设计,这需要作进一步的深入研究。
参考文献
[1]李士才,等.基于AutoCAD对象技术的钢结构CAD软件模型的研究[J].计算机辅助设计与图形学学报,1999,(3):214-217.
[2]齐志昌等.软件工程[M].北京:高等教育出版社,1997.
[3]中国建筑设计研所,解放军理工大学.2003全国民用建筑工程设计技术措施--防空地下室[M].北京:2003.
[4]国家人民防空办公室.人民防空地下室设计规范(2003版)[M].北京:2003.
[5]中华人民共和国建设部.混凝土结构设计规范(GB50010-2002,2002版).北京:中国建筑工业出版社,2002,4.
ObjectARX 篇3
ObjectARX[1]程序本质上是Windows动态链接库 (DLL) 程序, 这些库与AutoCAD在同一地址空间运行, 并能直接利用AutoCAD核心数据结构和代码, 使得二次开发者可充分利用AutoCAD的开发结构, 直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心, 能够在运行期间实时扩展AutoCAD的功能, 同时它也是一个可扩展的编程框架, 可以扩展AutoCAD的对象和协议。AutoCAD自身的许多模块均是用ObjectARX开发的, ObjectARX是AuotCAD最强大的定制开发工具。目前Objectarx的开发语言以C++为主, 而C#也可以进行AutoCAD二次开发[2]。C#的现代化设计能够消除很多常见的C++编程错误。例如:资源回收减轻了程序员内存管理的负担;C#中变量由环境自动初始化;变量的类型是安全的。而且开发出的界面与AutoCAD系统界面保持了良好的一致性[3]。
1 基于ObjectARX的AutoCAD二次开发的流程
进行AutoCAD二次项目开发不是在CAD中建个命令就可以, 需要建立菜单, 对话框[4], 动态链接库的自动调用[5], 对象参数的输入与读取等。开发流程如图1所示。
2 目前标牌曲线文字的绘制方式
随着计算机在工厂的普及, 越来越多的企业使用AutoCAD软件进行绘图[6], 在标牌厂的标牌制作工艺流程中, 一般先用CAD绘图软件将需要制作的标牌图形在计算机中绘制好并保存, 然后将标牌图形文件转换成和激光照排机兼容的文件格式输出到照排机, 照排机打印出胶片后进行生产。现有技术已对标牌绘制方法做了一些改进, 一般是基于AutoCAD绘图软件, 以输入标牌圆弧、刻度线、刻度值的各项参数的方法绘制标牌以及标牌中的说明文字, 在原有基础上提高了工作效率[7]。但标牌中存在一些说明文字是曲线文字, 要求沿着一定的圆弧显示, 曲线文字的字体高度有的要求统一, 有的要求从大到小或从小到大渐进式的变化。在AutoCAD软件中绘制高度渐进式变化的曲线文字时非常麻烦, 需要逐个字符一一绘制, 再手工逐一调整其位置。由于工作人员手工操作所以目前绘制标牌曲线文字的时候绘图员工作量很大, 工作效率不高。同时, 利用手工定位造成了曲线文字绘制位置的不精确, 标牌绘制制作的质量得不到保证。
3 标牌曲线文字绘制流程
如图2所示, 实现标牌曲线文字计算机绘图方法, 包括以下步骤:
(1) 确定并输入标牌曲线文字所在路径弧的圆心、半径、起始角度、终止角度;
(2) 选择曲线文字的文字样式, 输入文本字体起始高度h1、终止高度h2;
(3) 将要绘制的曲线文字内容置入字符串s中;
(4) 确定曲线文字的旋转方向, 从垂直、向圆心、反向圆心和自定义中选择一种;
(5) 通过Get函数循环得到字符串s的每一个字符并记录到一维数组S[n]中, n为一维数组的容量, 并得到数组长度length;
(6) 根据起始角度、终止角度、数组长度length分别计算得到数组中的每个字符的实际偏转角度angle;
(7) 根据起始字体高度h1、终止高度h2、数组长度length分别计算得到数组中的每个字符的实际高度h[i];
(8) 根据前面的旋转方向和偏转角度分别计算出每个字符S[i]的旋转角度并保存;
(9) 根据曲线文字的路径弧的圆心、半径和每个字符的偏转角度angle分别计算得到该字符实际定位点, 该定位点是每个字符的左上角点Point2d (x, y) ;
(10) 根据每个字符的高度h[i]、字体参数用多行文字的方式在字符定位点Point2d (x, y) 位置上逐一绘制数组S[n]的每个元素S[i];
(11) 根据每个字符的旋转角度参数将每个字符分别旋转相应的角度, 曲线文字绘制完成。
4 系统具体实施方法
标牌制作系统一般由绘图用计算机和激光照排机组成, 计算机与照排机互联进行通信, 计算机将绘制好的标牌图形文件转换成和激光照排机兼容的文件格式输出到照排机, 照排机打印出胶片后进行生产。本文利用ObjectARX 2008针对AutoCAD 2008进行二次开发, 通过参数化的方法[8], 解决了现有标牌绘制技术绘制字体高度不等的曲线文字需手工逐个操作、曲线文字定位不精确的技术问题, 减少了绘制时间, 提高了工作效率, 保证了标牌制作质量。
下面举例说明标牌曲线文字的绘制流程:
如图3所示, 本实施例要绘制的标牌曲线文字参数如下:曲线文字路径弧圆心坐标 (0, 0) , 半径50 mm, 起始角度220°, 终止角度320°, 文字内容“中国标牌制作专业企业”, 字体为仿宋体, 旋转方向为反向圆心, 文字高度从10~20 mm等差渐进变化。
本文为了能识别标牌中曲线文字的各项参数, 自动绘制出曲线文字的标牌, 利用ObjectARX 2008针对AutoCAD 2008进行二次开发, 改进了现有的标牌绘制方法具体步骤为:
(1) 确定并输入标牌曲线文字所在路径弧的圆心位置、半径、起始角度、终止角度, 具体为圆心坐标 (0, 0) , 半径50 mm, 起始角度220°, 终止角度320°;
(2) 选择曲线文字的文字样式为仿宋体, 输入文本字体起始高度h1=10 mm 、终止高度h2=20 mm;
(3) 将要绘制的曲线文字内容“中国标牌制作专业企业”置入字符串s中;
(4) 确定曲线文字的旋转方向, 从垂直、向圆心、反向圆心和自定义中选择一种, 本实施例为反向圆心;
(5) 通过Get函数循环得到字符串s的每一个字符并记录到一维数组S[n]中, n为一维数组的容量, 并得到数组长度length, 本实施例数组长度为10;
(6) 根据起始角度、终止角度、数组长度length分别计算得到数组中的每个字符的实际偏转角度angle, 相邻2个字符的偏转角度差值为: (终止角度-起始角度) / (数组长度-1) ;
(7) 根据起始字体高度10 mm、终止高度20 mm、数组长度10分别计算得到数组中的每个字符的实际高度h[i], 本实施例文字高度从10~20 mm等差渐进变化, 相邻的2个文字高度的差值为: (20-10) /9;
(8) 根据前面的旋转方向和偏转角度分别计算出每个字符S[i]的旋转角度并保存, 本实施例反向圆心方式的旋转角度是偏转角度加90°;
(9) 根据曲线文字的路径弧的圆心、半径和每个字符的偏转角度angle分别计算得到该字符实际定位点, 该定位点实际上是每个字符的左上角点Point2d (x, y) ;
(10) 根据每个字符的高度h[i]、字体参数用CAD中多行文字的方式在字符定位点Point2d (x, y) 位置上逐一绘制数组S[n]的每个元素S[i];
(11) 根据每个字符的旋转角度参数将每个字符分别旋转相应的角度, 曲线文字绘制完成。
接下来可以进行标牌其他部分的绘制, 再进行分色拼版, 制版流程完成后使用照排机打印出图进行印刷。
5 结 语
利用ObjectARX2008与VS2008中的C#的结合针对标牌行业进行标牌曲线文字的AutoCAD二次开发, 拓宽了AutoCAD二次开发的范围, 改进了AutoCAD中不能方便的绘制曲线文字, 解决了现有标牌绘制技术绘制字体高度不等的曲线文字需手工逐个操作、曲线文字定位不精确的技术问题, 减少了绘制时间, 提高了工作效率, 保证了标牌制作质量。
摘要:为了提高标牌行业的绘制标牌的工作效率, 操作流程的标准化, 研究标牌参数化绘制方法及技术, 结合ObjectARX2008与Visual Studio 2008中的C#进行了Auto CAD的二次开发, 详细阐述了标牌参数化绘图系统的结构、设计流程以及应用设计结果进行参数化绘图的过程, 使标牌企业绘制人员在绘制的过程中, 只需输入必要参数就可以由计算机自动生成所要绘制的曲线文字, 从而大大提高了工作效率并扩展了CAD二次开发的范围。
关键词:ObjectARX,AutoCAD二次开发,曲线文字,参数化
参考文献
[1]王大鹏, 张立文, 张国梁, 等.ObjectARX中结合MFC开发AutoCAD ARX应用程序[J].计算机辅助工程, 2001, 10 (4) :55-58.
[2]童时中, 李平.二次开发是CAD取得实效的关键环节[J].电子机械工程, 1999 (4) :64-68.
[3]赵雪.中文AutoCAD 2006标准教程[M].西安:西北工业大学出版社, 2005.
[4]杜立, 赵韩, 董玉德, 等.基于ObjectARX齿轮设计系统的开发与研究[J].机械设计与制造, 2008 (12) :75-77.
[5]孙江宏, 丁立伟, 米洁.AutoCAD ObjectARX开发工具及应用[M].北京:清华大学出版社, 1999.
[6]薛长健, 黄靖.AutoCAD 2000高级使用及开发[M].北京:人民邮电出版社, 2000.
[7]于萧榕.基于ObjectARX的标牌印刷分色拼版的研究[J].科学技术与工程, 2011 (2) :383-387.
ObjectARX 篇4
ObjectARX[1]程序本质上是Windows动态链接库(DLL)程序,这些库与AutoCAD在同一地址空间运行,并能直接利用AutoCAD核心数据结构和代码,使得二次开发者可充分利用AutoCAD的开发结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,能够在运行期间实时扩展AutoCAD的功能,同时它也是一个可扩展的编程框架,可以扩展AutoCAD的对象和协议。AutoCAD自身的许多模块均是用ObjectARX开发的,ObjectARX是AuotCAD最强大的定制开发工具。目前Objectarx的开发语言以C++为主,而C#也可以进行AutoCAD二次开发[2]。C#的现代化设计能够消除很多常见的C++编程错误。例如:(1)资源回收减轻了程序员内存管理的负担。(2)C#中变量由环境自动初始化。(3)变量的类型是安全的。而且开发出的界面与AutoCAD系统界面保持了良好的一致性[3]。
1基于ObjectARX的AutoCAD二次开发的流程
进行AutoCAD二次项目开发不是在CAD中建个命令就可以,需要建立菜单,对话框[4],动态链接库的自动调用[5],对象参数的输入与读取等。开发流程如图1。
2目前标牌印刷中分色拼版的应用
随着计算机在工厂的普及,越来越多的企业使用CAD软件进行绘图,在标牌厂的标牌制作工艺流程中,一般先用CAD绘图软件将需要制作的标牌图形在计算机中绘制好并保存,然后将标牌图形文件转换成和激光照排机兼容的文件格式输出到照排机,照排机打印出胶片后进行生产。在制胶片时,如果标牌的弧线和刻度分为多种颜色,需要将图形进行分色处理,按照颜色类别分别照排胶片,照排后几张胶片叠在一起看就是标牌整体的图形;如果一个印制版面可以布置多个标牌图形,那么将多个标牌图形拼在一个版面上可以提高效率、降低成本。目前,现有的标牌分色拼版技术由于标牌绘制工具的限制主要针对于位图的操作,先用一种软件进行分色,再用另一种软件进行拼版,操作的分离造成了工作效率的降低,而且拼版的软件中不能进行旋转后的拼版,以适应制版胶片的大小并节约空间,不能进行倒置后的拼版,不能根据用户需要修改拼版的纵向和横向距离,不能根据用户的要求加上拼版边框和边角线,不能根据用户的要求自动在拼版边框下加入说明文字,这些都要用户在拼版之后用图形软件手工加到拼版后的标牌图像中。而目前标牌绘制以参数化的方法绘制,利用AutoCAD软件,可以迅速提高工作效率,但对分色拼版来说,(1)如果沿用以前的软件要进行图像类型的转换;(2)并没有好的方法能迅速达到如上所述用户的要求,实现分色和拼版的功能,所以目前的技术在标牌分色拼版的时候增加了员工的工作量,无法提高工作效率。本系统开发的目的在于提供一种标牌印刷分色拼版的方法,解决现有技术标牌分色、拼版操作分离,分色需进行图形转换,拼版不能进行调节,不能增加边框、边角线和文字的技术问题。
3标牌新的分色拼版系统流程
如图2所示,实现标牌印刷分色拼版的方法,该方法包括下列步骤:
1)输入标牌的参数,确定标牌大小和制版大小;并判断标牌大小是否小于制版大小;
2)如果其判断结果为否,则重新调整标牌大小和制版大小并返回;
3)如果标牌大小在制版范围之内,则进行分色,分别针对青色、黄色、品红色、黑色遍历同组对象或选择对象设置到该图层;
4)根据制版范围和标牌高宽计算拼版后制版范围内所容纳的标牌数量,记录此计算出的数量会与下面的步骤进行对比,可得到最优的制版方式;
5)将标牌模拟旋转90度后计算拼版后制版范围内所能容纳的标牌数量,并与前面计算的数量比较给出是否需要旋转标牌的参考意见;根据给出的参考意见确定标牌是否旋转90度;
6)如需旋转则遍历标牌中对象进行90度旋转;若确定不旋转则直接进入下一步骤;
7)由系统询问用户拼版后的某些标牌行是否需要倒置;若需要倒置则设定拼版后的倒置行数;若不需要倒置则直接进入下一步骤;
8)设定拼版后标牌每行、每列之间的间距;
9)询问是否加拼版边框;若需要加边框则设定拼版的边框参数;若不需要加边框则直接进入下一步骤;
10)询问是否需要设定版面四周的边角线;若需要则设定边角线的类型、线型等参数;若不需要则直接进入下一步骤;
11)设定版面的说明文字;
12)以上均是标牌拼版前的准备,下面进行拼版的对象操作;
13)根据拼版的行列数和行列间距计算拼版后每个对象的所有位置,循环遍历标牌中的所有对象复制到指定位置;
14)根据倒置行数遍历需要倒置的标牌行中的所有对象并进行180度旋转;
15)加版面四周的边框线,边框线均以多段线的方法绘制,方便生成与编辑[6];
16)加版面四周的边角线;17)拼版完成。
4系统具体实施方法
标牌制作系统由绘图用计算机和激光照排机组成,计算机与照排机互联进行通讯,计算机将绘制好的标牌图形文件转换成和激光照排机兼容的文件格式输出到照排机,照排机打印出胶片后进行生产。本发明利用ObjectARX 2008针对AutoCAD 2008进行二次开发[7],通过参数化的方法[8],根据标牌的大小,标牌分色索引,制版胶片的大小,拼版选择设置,拼版倒置设置,拼版行列间隔,拼版边框的要求等,开发分色拼版的功能。
在上述过程中,首先由用户输入需要拼版的标牌的宽和高,根据照排机的种类输入胶片的尺寸。当标牌宽高比胶片的尺寸小很多,一张胶片可以放多个标牌图形时,就要进行拼版,将多个标牌图形拼在一个胶片上以避免胶片的浪费;如果标牌宽高与胶片的尺寸接近且略小于胶片的尺寸就不必拼版直接出图。由于标牌制作时,一道印刷工序只能印制一种颜色,因此对于有多种颜色的标牌,必须将标牌图形进行分色处理,分色就是将不同颜色的对象(如弧线、刻度)分别显示,进行拼版照排,照排后几张胶片叠在一起看就是标牌整体的图形。分色完成后进行拼版,当出现某些标牌的宽度很宽的情况,胶片的一行放一个还剩很多空,但一行放两个却放不下,同时这些标牌的高度并不高,这样拼版胶片的一侧浪费了很多,此时比较好的方法就是将标牌旋转90°,这样标牌的宽就变成了高,高度变成了宽度,胶片的一行就可以放几个标牌,因此标牌的旋转功能节约了胶片的空间,节约了成本。标牌需要倒置是由于制版结束后转入机械磨具冲压工序时,车间工作人员用双手将制版好的一整版标牌递入冲压机的时候,由于一整版标牌有多行,例如共有4行,工人将前3行递入冲压机没有什么问题,而第4行的标牌处于金属板的最下面,为了节约材料一般第4行的标牌距离边界的宽度很小,这时候双手向前递送的时候非常危险,因为冲压机距离工人手指太近,如果操作不当将会发生人身伤害事故。倒置功能可以将此例中第4行的标牌旋转180°,调个头印制在金属板子上,工作人员进行冲压的时候就可以将金属板调头冲压以解除双手的危险。倒置完成后输入拼版的行和列的间距,设定边框边角线,边角线区域是用于让工作人员的双手握持的部位。本方法还可以在版面上输入文字即制版说明等,可以保证制版流程的顺利进行。
4.1分色拼版界面
4.2标牌分色拼版示例
示例标牌图
正常情况下的拼版,三行三列,一行倒置,从图5中可以看出标牌中三种颜色在印刷时必须分别印刷,分别加到三个图层中,分色出来就有3个图,每个图中复制了3行3列包含原图共9个图,第三行图中位置旋转了180度实现了倒置。
5结语
利用ObjectARX 2008与VS2008中的C#的结合针对标牌行业进行分色拼版的AutoCAD二次开发,拓宽了AutoCAD二次开发的范围,分色即分别针对青色、黄色、品红色、黑色遍历同组对象或选择对象设置到该图层;计算拼版后制版范围内所容纳的标牌数量;将标牌模拟旋转90°后计算拼版后能容纳的标牌数量;确定标牌是否旋转90°;确定是否需要倒置;确定是否加拼版边框;确定是否需要设定版面四周的边角线;设定版面的说明文字;完成拼版现方法将分色和拼版合二为一,用户直接在AutoCAD中进行分色拼版,缩短了操作时间,提高了工作效率。并且分色操作不需要进行图形转换,拼版能进行位置角度调节,增加边框、边角线和说明文字,在标牌印刷企业中取得了有益的效果。
摘要:为了提高标牌行业的绘制标牌的工作效率,操作流程的标准化,研究标牌参数化绘制方法及技术,结合Object-ARX2008与Visual Studio 2008中的C#进行了AutoCAD的二次开发,详细阐述了标牌参数化分色拼版的过程,使标牌企业绘制人员在绘制的过程中,只需输入必要参数就可以由计算机自动分色拼版,从而大大提高了工作效率并扩展了CAD二次开发的范围。
关键词:ObjectARX,AutoCAD二次开发,分色,拼版,参数化
参考文献
[1]王大鹏,张立文,张国梁,等.ObjectARX中结合MFC开发Auto-CAD ARX应用程序.计算机辅助工程,2001;10(4):55—58
[2]童时中,李平.二次开发是CAD取得实效的关键环节.电子机械工程,1999;(4):64—68
[3]赵雪.中文AutoCAD 2006标准教程.西安:西北工业大学音像电子出版社,2005:3—10
[4]杜立,赵韩,董玉德,等.基于ObjectARX齿轮设计系统的开发与研究.机械设计与制造,2008;(12):75—77
[5]孙江宏,丁立伟,米洁.AutoCAD ObjectARX开发工具及应用.北京:清华大学出版社,1999
[6]吴红丹,梅树立,李丽,等.采用ObjectARX2006的多段线自动生成及编辑.工程图学学报,2007;(2):179—182
[7]杜刚,刘东学,张磊.基于ObjectARX的AutoCAD二次开发及应用实例.机械设计与制造,2004;(3):30—32
ObjectARX 篇5
AutoCAD是应用相当广泛的一种CAD软件, 广泛应用于测绘、规划、建筑设计、园林设计、机械设计等诸多领域。ObjectArx.net是Autodesk公司在AutoCAD软件平台上推出的一个软件开发包。ObjectArx.net应用程序就是一个动态链接库 (DLL) , 它与AutoCAD共享地址空间, 对AutoCAD进行直接函数调用, 能真正快速的访问AutoCAD图形数据库[1]。
AutoCAD为用户提供了有限的填充图案, 可往往不够用户的在区域填充方面的需求。虽系统支持用户阴影线图案设计, 把自定义的填充图案加入到系统填充图案文件或自己新建的填充图案文件中, 填充图案文件是一个扩展名为.pat的ASCII文本数据文件, 其填充图案的定义格式及规则都是比较复杂的, 这对于一般用户而言是比较难的。再有AutoCAD填充图案文件中只允许简单线型的定义, 这对于一些带有圆弧和复杂线性的填充图案, 只能把圆弧和复杂线型分为很多段短线段来近似代替, 这更增加阴影线图案设计的复杂度, 而一些不能用线近似代替的就无法实现[1]。本文主要介绍利用自定义的块作为填充图案对封闭区域进行填充的方法。
1算法分析
在AutoCAD中图案填充的方法是, 先自己设计好阴影线图案, 加入到填充图案文件中, 然后进行填充[2]。本方法是用户先把填充的图案定义为块对象, 再根据填充规则, 把定义的块作为填充图案进行区域填充, 这样就避免了复杂的阴影线填充图案的设计, 而AutoCAD中定义块是非常简单方便的。用块区域填充其实就是按填充规则将定义好的块对象依次插入到填充区域中, 而该算法主要要解决的问题是块对象插入点的位置的确定, 其中用到了判断点与多边形位置关系的射线法[3]。
基本思路:先根据封闭区域的边界多变形的坐标, 找到该填充区域的最小外接矩形, 根据填充的密度, 在外接矩形中确定好插入点的初始点集, 利用射线法在初始点集中去掉一些不在封闭区域中的点, 根据筛选后的点依次插入块对象, 然后利用ObjectArx.net中选择集方法, 删除与填充区域边界相交的块对象并编组即可[4]。
2程序实现
2.1插入点坐标位置的确定
(1) 根据封闭区域各顶点的坐标, 获得该封闭区域的最小外接矩形的左小角坐标 (Xmin, Ymin) 和右上角坐标 (Xmax, Ymax) [4]。
(2) 获得初始插入点集。本文方法是分两步求得, 第一步以外接矩形左下角坐标 (Xmin+with, Ymin+h) (其中with为左右间隔, h为上下间隔) 为基点, 分别以两倍with和两倍h为步长求得一部分初始插入点;第二步是以外接矩形左下角坐标 (Xmin+2*with, Ymin+2h) (其中with为左右间隔, h为上下间隔) 为基点, 分别以两倍with和两倍h为步长求得剩下的初始插入点。
获得初始插入点集:
当with=5, h=5时, 第一步后获的点集如图1, 第二步后获得的点集如图2。
(3) 利用射线法, 在初始插入点集中找到不在填充区域中的点并删除掉。对于与填充区域边界 (多边形) 在同一平面的任意点, 可以利用射线法判断点与填充区域的关系。假设P (P为P1, P2, P3中任意一点) 点为初始插入点, 以P点为起点, 水平方向向左作一条射线K, 由于多边形是有界限的, 射线必穿过多边形, 沿着射线左端无穷远处移动, 当过与多边形得第一个交点后, 进入了多边形里面, 当过了第二个交点后, 离开了多边形, ……, 从而可以看出当射线K与多边形的交点数为奇数的时候, P点是在多边形里面的, 当交点数为偶数的时候P点是在多边形外。
但是有些特殊情况是要特殊考虑的, 如图3 (a) , 这种情况射线K与多边形的交点数只能计算为一个;图3 (b) , 射线K与多边形的交点就不能计算为一个交点;如图3 (c) 和图3 (d) , 这种情况是射线K与多边形的某条边重合了, 这条边就应该不计。
判断点是否在多边形中:
以P为端点, 向左做一条射线K, count=0
2.2 自定义好块
根据插入点集的点坐标依次插入块对象, 如图四, 并将新插入的块的ObjectID保存在数组origIDs中。
2.3 删除与边界相交的块对象
插入块对象后, 虽然块的插入点都在填充区域内, 但有可能有些块与区域边界相交, 如图4, 这种块对象需删除掉。本文利用ObjectArx.net中选择集的方法 (SelectWindowPolygon) 得到全部在该封闭区域中的对象, 并将对象ObjectID保存到数组selectIDs, 然后插入的块对象 (origIDs) 与选择的对象 (selectIDs) 求差集, 得到的差集即为不在该区域内的对象, 删除掉。如图5。
2.4 编组
为了整个区域中的对象便于整体选择, 把插入的块对象编组。
3 应用实例
在某矿山“矿山自动化平面成图系统”项目中成功地运用了用块进行区域填充方法。该系统以AutoCAD2007为图形编辑平台, 系统中为了实现面状符号 (封闭区域) 的自动填充, 用ObjectArx.net+C# 对AutoCAD2007二次开发, 运用上述方法实现了面状符号的自动填充。系统中区域填充图案可以是用户自定义的任意块对象, AutoCAD中块的定义简单方便, 这就不需繁琐的阴影线填充图案设计, 能大大提高效率。由于填充图案可以是任意定义的块, 这对于一些在AutoCAD填充图案文件中很难构造的填充图案, 用块作为填充图案即可以实现[5]。如图6所示。
4 结束语
该方法实现了在AutoCAD中用块进行区域填充, 解决了一些AutoCAD本身图案填充在区域填充方面的弊端, 并能简捷、方便、快速的实现区域的自动填充, 原理简单、通用性强, 具有很强的现实意义。
摘要:针对AutoCAD用户在区域填充方面遇到的问题, 通过对AutoCAD图案填充功能的研究, 提出了一种用自定义块进行封闭区域填充的方法并运用C#+ObjectArx.net在AutoCAD 2007中实现了该算法。
关键词:AutoCAD,块,图案填充,区域填充,ObjectArx.net
参考文献
[1]李世国.Auto CAD高级开发技术ARX编程及应用.北京:机械工业出版社, 1999
[2]张正峰, 马少飞, 李玮.新的种子点区域填充算法.计算机工程与应用, 2009; (06) :205—206
[3]陈宇拓, 池诗伟.AutoCAD2004及二次开发技术.长沙:中南大学出版社, 2005:47—50
[4]王琪, 王丽萍, 陈凯迪.一种简单的图案填充算法.微计算机信息, 2005; (09) :121—122
ObjectARX 篇6
Object ARX是Autodesk公司推出的针对AutoCAD的开发工具,ObjectARX编程环境是一个面向对象的C++环境,在利用ObjectARX对AutoCAD进行二次开发的过程中,经常会要求用户输入许多参数或计算一些数据,那么这么多数据如何进行管理,对用户来说是非常复杂和繁琐的,因此对开发者来说帮助用户来管理这些数据是非常必要的。由于ObjectARX应用程序就是一个动态链接库D L L(扩展名为arx),而非一般可执行程序(扩展名.exe),其访问数据库的方法具有一定的特殊性。这里我们就以凸轮机构CAD系统为例来介绍如何利用ADO技术在ObjectARX程序中来访问和管理数据库。
2 在ObjectARX中使用ADO访问数据库的方法
A D O,即A c t i v e X数据对象A D O(Active X Data Object),是高层数据库访问技术,是为OLE DB而设计的高层数据API,它简化了OLE DB,是一个便于使用应用程序层接口,具有易于使用、速度快、效率高等优点。这里我们选用Microsoft Access2003数据库软件的mdb数据库作为凸轮设计参数和凸轮轮廓坐标信息的数据库。在ObjectARX中使用ADO数据库的基本方法是:
(1).初始化COM库,引入ADO类型库
首先要在DllMain()函数中添加COM库初始化代码:
(2).用Connection对象连接数据库
首先,要声明一个指向Connection类对象的指针,可以使我们在ARX应用程序中使用这个指针,来访问数据库。由于在本软件中使用了MFC,所以可以每个自定义对话框类中添加public成员变量:
_ConnectionPtr pConn;
这根指针所指向的对象类型就是_Connection对象,对象名后的后缀Ptr表示该对象为智能型指针对象。在本软件程序中,一般是在对话框类的初始化函数中建立ADO数据库连接,比如在对心直动尖端推杆盘形凸轮类中,数据库连接的代码如下:
(3).利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录进行查询、处理。
在本软件中,主要利用了Recordset对象的Open方法打开一个指向各个数据表的记录集的指针。在使用ADO时,几乎所有数据的操作都可以使用Recordset对象完成。Recordset对象由(行记录集)和fields(列字段集)组成。为了取得结果记录集,我们定义一个指向Recordset对象的指针:
以下是软件中读取一个记录集的例子,它将从数据库打开推程参数表,其部分源代码如下:
4.关闭记录集与连接
记录集或连接都可以用各自的Close接口函数来关闭:
3 凸轮机构CAD系统数据库管理模块的实现
在数据库管理模块中,主要实现了对凸轮设计中输入对话框中的参数以及由这些参数计算出的轮廓数据的进行查询、保存、提取、删除功能。图1为本系统的数据流程图。如图2在参数输入对话框中的右侧有一组数据库操作的控件:查询、保存、提取、删除四个按钮,通过编写程序实现各按钮的消息处理函数。例如,当按“查询”按钮时,则弹出一个窗口,在这个窗口中可以查看各种类型和编号的凸轮的各项参数;当用户在凸轮编号编辑框中输入凸轮编号时,按“提取”按钮,便可将该凸轮编号在推程所对此的所有参数从数据库中提取到该对话框相应的编辑控件中;经过修改后,按“保存”按钮,则将更新过的参数保存到数据库中;按“删除”按钮,则将该凸轮编号对应的各项参数记录从数据库中删除。
4 结束语
在利用ObjectARX进行二次开发的过程中,如果能充分运用数据库技术来管理设计参数,可以将用户从繁琐的参数输入以及参数计算中解脱出来,减轻了用户的负担,提高了工作效率。
摘要:本文介绍了利用ADO技术在ObjectARX程序中访问外部数据库的方法,并以VC++6.0为开发环境,Access2003为数据库,详细介绍如何运用ADO技术实现数据管理功能。
关键词:ADO,数据库,ObjectARX
参考文献
[1]余承飞,方勇.AutoCAD2000二次开发技术(ObjectARX)[M].北京:人展邮电出版社.1999.
[2]江雪松等。AutoCAD2000二次开发指南[M].北京:国防大学出版社.2000
ObjectARX 篇7
关键词:Delaunay,三角网,约束线段,三维可视化,边界处理
本文根据露天矿矿坑的数据特点, 采用约束数据域的Delaunay三角剖分建立露天矿矿坑的三维模型。
本文的算法是基于已存在的三角网实现的, 该三角网称为初始三角剖分网, 初始三角剖分网利用Delaunay三角剖分算法的Lawson[1]逐点插入算法实现。在初始三角剖分网中包含有带约束关系的散点, 但不含约束线段关系。下面以台阶线为例, 讨论在三角剖分网中插入约束线段的算法。
设已存在的DT剖分的三角形集为
(1) Q是一简单多边形, 且CiCj为Q的一条对角线, 从而CiCj把Q分成QL和QR两部分, 且QL和QR也为简单多边形。
(2) 可分别对QL和QR进行三角剖分。
(3) 对于Vk∈Q, 若Vk为到CiCj的最近点, 且 (Vk≠Ci, Vk≠Cj) , 则一定有 , ViVk∈Q, VkCj∈Q
根据上述性质, 对CiCj两侧的多边形QL和QR分别进行Delaunay三角剖分, 即可把约束线段CiCj嵌入三角网中。以图3-4所示为例, 约束线段为CiCj, 影响域
2 露天矿山三维可视化模型边界处理
在露天矿开采过程中, 有些地方由于开采成本的原因, 开采到一定位置就不适用露天开采, 那么所到达的位置就是露天矿的开采边界, 在三角剖分之后, 我们要对露天边界内外分别显示, 或者说想分别显示露天矿的可采与不可采区域, 就涉及程序如何判断露天矿边界内与边界外, 以及边界上的三角剖分出来的三角形如何处理的问题, 那么如何判断某个三角形在边界内、外还是恰好在边界上呢?下面我们就讨论一下如何确定边界内外三角形。
(一) 三角网边界内外三角形判断
一个三角形有三个顶点, 要想判断某个三角形与边界的关系只需要判断三角形的三个顶点与边界的位置关系, 主要有以下几种位置关系:
(1) 三个顶点都在边界外部, 说明三角形在边界外部。
(2) 三个顶点都在边界内部, 说明三角形在边界内部。
(3) 有一个或者两个顶点在内部, 说明三角形与边界相交。
三角形与边界的位置关系已经转化为点与多边形的位置关系问题。假设三角形的每个顶点为q, 露天矿边界为多边形P, 我们现在判断点q是否在多边形P内[19]。
设简单多边形P的顶点序列为p1, p2, … pn, 求解问题一种方法是过点q作水平射线l, 如果l与P的边界不相交, 则q在P的内部。否则, l和P的边界相交, 计数交点数并依据交点数的奇偶性可以判定点q是否在P的内部, 具体地说, 交点数为奇 (偶) 数时, 点q在P的内 (外) 部。由于这里的多边形不一定是凸的, 所以上述的判断方法对某些特殊是不适合的, 要注意区分这些特殊情况, 这些情况如图2所示。
图2中 (a) 是正常情况, 有一个交点。 (b) 有三个交点。这两种情况均表明点在多边形内部。 (c) 应该看成有一个交点。 (d) 看成没有交点。 (e) 和 (f) 有多个交点。我们想办法把这些情况区分开, 为此引入两个函数intersect (l1, l2) 和online (l, p) 。仅当l1和l2相交而且不交在端点上时, intersect (l1, l2) 才为真。当p在l上时online (l, p) 才为真。如果p[i]和p[i+2]在l的两侧, 则是图2 (c) 的情况。如果p[i]和p[i+2]在l的同侧, 则是图2 (d) 的情况。如果p[i]和p[i+3]在l的两侧 (或同侧) , 则是图2 (e) 或者 (f) 的情况。
(二) 三角网边界处理
通过以上的方法可以判断出三角形与边界的位置关系, 那么对于与多边形相交的三角形在边界处, 我们做以下处理:
首先求出交点的坐标, 然后对三角形进行打散重组
相交点确定如图3所示:AB的参数方程
x (t1) =xa+ (xb-xa) t1 0≤t1≤1
y (t1) =ya+ (yb-ya) t1
CD的参数方程
x (t2) =xc+ (xd-xc) t2 0≤t2≤1
y (t2) =yc+ (yd-yc) t2
求两条线段的交点令
x (t1) =x (t2) y (t1) =y (t2)
有:xa+ (xb-xa) t1=xc+ (xd-xc) t2
ya+ (yb-ya) t1=yc+ (yd-yc) t2
令xb-xa=x1, xd-xc=x2 , yb-ya=y1 ,
yd-yc=y2
有:xa+x1t1=xc+x2t2
ya+y1t1=yc+y2t2
如果x1y2≠x2y1那么
如果0≤t1≤1 且0≤t2≤1 两线段相交, 交点坐标为
x=xa+ (xb-xa) t1 y=ya+ (yb-ya) t1
通过以上求交点的方法, 已经找出了交点的坐标, 然后对原有三角形进行打散, 被打散的三角形被分成了一个四边形与一个三角形, 对于三角形我们不做处理, 对于四边形, 我们通过比较四边形对角线的长度, 取对角线短的进行连接, 避免狭长三角形的产生。
3 三维可视化模型建立与显示
本文通过VC6.0编程实现对矿坑数据三角剖分, 通过ObjectARX与AUTOCAD接口, 利用AUTOCAD的渲染功能, 实现三维可视化显示。
经过处理渲染得到图4、图5
4 结 语
本文紧紧围绕三维矿山模型的建立和可视化这一主题, 用地质界面模型和矿坑地表面模型组合成三维矿山模型, 以魏家峁露天煤矿为应用实例, 开发了通用性较好、功能较完善的三维矿床模型可视化系统, 在实际应用中取得了很好的效果。
参考文献
[1]Lawson C.L.Software for C surface interpolationMath-ematical Software III[M].NewYork:Academic Press, 1977.
[2]Floriai L.D.An On-line Algorithmfor Constrained Delaunay Triangulation[J].CAGIP:Graphical Models and Image Processing, 1992, 54 (3) :290-300.
[3]王志宏, 陈应显.露天矿三维可视化矿床地质模型的建立[J].辽宁工程技术大学学报, 2004年第2期.
[4]陈应显.露天矿床三维建模技术及可视化研究[D].阜新:辽宁工程技术大学, 2002.
[5]邓曙光, 等.约束数据域Delaunay算法详述及进展[J].沈阳航空工业学院学报, 2005, 22 (5) :79~81.