中标准图纸图栏系统的开发_第1页
中标准图纸图栏系统的开发_第2页
中标准图纸图栏系统的开发_第3页
中标准图纸图栏系统的开发_第4页
中标准图纸图栏系统的开发_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AutoCAD图形中标准图纸图栏系统的开发摘要:本文要紧讲述了在AutoCAD中,通过对其进行二次开发而开发出的AutoCAD图形标准图纸图栏系统解决方案。随着计算机技术的进展,计算机操作系统差不多逐渐由DOS系统转向Windows系统,AutoCAD自从12版本开始,差不多有Windows的版本,直至14版本以后,差不多是完全的Windows版本。AutoCAD除了操作简便之外,它还能够让用户重新定义其界面以及建立自己的程序运行,国内各不同的电脑开发商也通过对AutoCAD的二次开发而开发出应用于不同领域的有用软件。自从AutoCAD R12版开始,AutoCAD引进了对话框技术DCL对话框

2、语言,它通过与AutoLISP语言相结合,能够编写出界面友好的有用程序。 本人所在公司旧版的图栏填写是基于AutoCAD R10版本而开发出来,操作过程是通过命令行提示,让用户依照提示,逐一输入相应的内容。这种方法程序编写简单,差不多的语句如下: (setq txmc(getstring 图形名称:) ;提示用户输入图形名称 (command text pt txmc) ;填写图形名称到图形中 采纳此种方法填写的图栏内容与图形中的其它文字一样,编辑时也是通过文字编辑进行操作,不太方便,在制图的过程中,图栏内容的编辑也占用了专门大部分的时刻。 一 总体方案: 图栏分为图样栏、标题栏、明细栏、附加

3、栏、更改表、签名表共六部分,标准图纸的图幅分为A0图、A1图、A2图、A3图、A4图共五种,因此系统应该能生成此五种图幅的图样栏以及相应的标题栏等。由于其它除图样栏外其它图栏内容差不多上依附于图样栏中,因此在更改图样栏的图幅时,其它图栏的相应位置会随着图样栏的改变而改变。由于该系统必须与旧版系统兼容(本公司的全部图纸都由旧版图栏生成,假如手工修改,所费时刻将无可可能),因此进入该系统后,系统必须自动地将旧版的图栏更改为新的图栏格式。 图栏的格式采纳在图块中增加属性,通过属性的方法显示图栏的文字内容。而图栏的填写是通过在插入图块的同时输入属性的内容。而图栏的编辑则通过对相应图块的属性进行提取而显

4、示于对话框中让用户进行修改。 图1为图样栏的工作流程图,图2为标题栏的工作流程图。 图 1 图样栏的工作流程图 图 2 标题栏的工作流程图 二 程序的设计 程序设计的重点要紧有以下几个方面:对话框的设计;如何样通过对话框的形式编辑图栏内容;如何样能将旧版的图栏转换为新版的图栏,以省去大量的手工转换工作;图样栏的大小如何样才能直接地显示在窗口的状态栏中;图样栏中设计单位名称的显示处理;图栏程序的调用。下面介绍各部分的具体设计。 1. 对话框的设计: AutoCAD软件包从AutoCAD R12以来最大的进步之一是它提供的新的可编程对话框(PDB)工具,使用DCL对话框语言再配以AutoLISP语

5、言,就能够设计出与AutoCAD软件包风格完全一致的应用程序。 通过DCL对话框语言,对图栏的各对话框进行设计,在设计过程中,要紧是考虑对话框界面的协调性及各控件安排的合理性。在图样栏的对话框中,使用选项按钮(radi0_button)选择标准图纸的图幅大小,使用弹出列表框(popup_list)列出预置的设计单位名称,而使用编辑框(edit_box)填写在单位列表框中没有列出的单位名称。 在标题栏中,使用编辑框填写名称、图号、材料、比例、重量、总页数、页码等,而使用选项按钮选择时期标记。 各种图栏的外观见图3所示。 图3 各种图栏的外观 全部的图栏对话框都分为填写功能和编辑功能两种,由于对话

6、框语言有类似于“类”的具有继承性的功能,通过将对话框的内容部分使用一个名称保存,然后在另外的对话框内引用保存过的对话框内容,如此就能够使用不同的标题显示同样外观的对话框内容(如“填写图样栏”和“编辑图样栏”)。 另外,由于图样栏差不多定义了图纸图幅的大小,因此标题栏等其它图栏也就不必提示用户选择图幅而自动找到填写的位置。因此在对话框中除图样栏外,其它图栏的对话框都不必出现“图纸大小”的选项按钮。 以下列出图样栏对话框的程序内容: /填写图样栏部分 ddtyl:dialog label=填写图样栏; drtyl; /编辑图样栏部分 dmtyl:dialog label=编辑图样栏; drtyl;

7、 /图样栏内容部分 drtyl:column boxed_size; :boxed_column :popup_list label=设计单位(&S):; key=sign_ro; :edit_box label=其它设计单位(&O):; key=other; edit_width = 20; allow_accept=true; ok_cancel; /图纸大小内容部分 boxed_size:boxed_radio_row label=图纸大小; :radio_button label=A&0; key=size_0; :radio_button label=A&1; key=size_1;

8、 :radio_button label=A&2; key=size_2; :radio_button label=A&3; key=size_3; :radio_button label=A&4; key=size_4; 设计了对话框以后,还必须通过AutoLISP语言来调用及驱动对话框。在显示图栏对话框前,必须初始化对话框中各项的值,关于没有相应内容的项目,使用默认值。而关于具有相关内容的项目,则显示其内容供用户修改。 通过对话框,使用图栏的修改更为直观方便,操作也更为简单。 2. 图栏内容的编辑设计: 旧版的图栏只有填写功能,无自动编辑功能,只能通过文本编辑功能对内容逐一进行编辑,而且关

9、于图样栏的大小无法编辑,只能删除旧图样栏再插入新图样栏,同时更换图样栏后标题栏等内容的位置无法与新图样栏对齐,只能靠手工进行调整。这些问题必须在程序中进行完善。 为了方便各种图栏的移动及图栏内容的提取,使用图块的属性保存各种图栏的内容。填写图栏时,是在插入图块的同时将图栏的文字内容作为图块的属性内容插入图形中,编辑图栏时,首先将相应图栏的图块的属性通过属性的提取而取出,并提供用户作修改,并将修改后的内容通过图块的属性更新而重新显示于图形中。图栏内容的移动确实是图块的移动。 关于图样栏,不同的图样栏的大小采纳不同名称的图块,在修改图样栏大小时,采纳的是通过程序的操纵,首先取出图块中设计单位的名称

10、,并显示于对话框中,然后删除该图块,然后再插入新的图块,并将设计单位的属性附于图块上,同时,过程操纵移动标题栏、附加栏、签名表等图栏到新的图样栏的相应位置上。如此实现了图样栏中图纸大小的编辑修改。 以下为图样栏编辑的程序设计内容,从中能够看到图样栏是如何样编辑的: (defun ty_modi() (setq head(entget(setq head_t(ssname sel_bt 0) ;取得图样栏图块的头部,其中sel_bt为图样栏图块 (setq he_zzdw(entget(entnext(cdr(car head) ;取得设计单位属性文本 (setq zzdw(getent he_

11、zzdw1) ;取得设计单位文本内容,getent为自定义函数 ;调用对话框并初始化、显示 (if (= aaa (getvar useri1);推断图幅是否改变 (progn ;假如没有改变 (setent zzdw he_zzdw 1) ;改变图块中设计单位 (entupd head_t) ;更新图块 ) (progn ;假如图幅改变了 (entdel head_t) ;删除原图样栏 (command purge b tkn n) ;清理相应的图块 (setq tkn(strcat B-GBA (itoa aaa) TY) ;组合出图样图块的名称 (command insert tkn n

12、on 0,0 zzdw) ;插入附有属性的图样图块 (modi_ipt B-BTL p2p p2) ;移动标题栏等到新的图样栏的相应位置 ) ) ) 3. 旧版图栏的转换: 程序只有保持向下的兼容性才能得以广泛的使用,关于图栏的填写程序,也应该保证能够专门好地兼容旧版的图栏,并能顺利地将旧版的图栏转换为新的图栏。 关于标题栏的转换,只需取得相应位置上的标题栏的内容,然后将原来的标题栏内容删除,再插入附有各属性内容的标题栏图块。 关于图样栏,除删除旧的图样栏图块,还必须将该图块通过清理命令将其清理掉,然后再插入新的格式的图样栏,通过如此就能够将图栏进行转换。 图样栏转换的程序如下: (setq

13、head(entget(setq head_t (ssname sel_bt 0) ;取得图块头部 ( if (getent head 66)1) ;查看图块是否为旧版图块 (progn ;旧版图样栏时 (princ n此图样栏为旧版本,将被更新为新版本。n) (setq zzdw(get_text c (list(+ b_x -1)(+ b_y 55) (list(+ b_x -49)(+ b_y 39) ;从旧图样栏中取得设计单位名称 (if (not zzdw) (setq zzdw ) ;如无单位名称,则为空字符串 ) (entdel gead_t) ;删除旧图样栏 (command

14、purge b gead_na n) ;清理旧图块 (command insert head_na non 0,0 zzdw);插入新版图样栏 ) ) 4. 状态栏中显示图样栏的图幅大小: 由于计算机显示的图形能够放大缩小,因此有些图幅容易造成混淆,如A2图和A3图幅,因此必须在一个显着的位置显示图幅的大小,使用户一目了然。 尽管通过调用图样栏(ddtyl)命令能够从对话框中显示当前的图幅大小,但这仲方法必须通过手工的操作才能实现。 假如将图幅的大小通过文本显示于图形中,就会使打印时将该文本也打印出来,同时该文本也只能通过缩放命令才能看到,操作上也不方便。 通过比较,将图样栏的图幅大小显示于状

15、态栏是取为直接的。 AutoCAD的状态栏显示于屏幕的下端,其中显示了当前坐标以及各种辅助工具的状态(如捕捉、正交、栅格、对象捕捉等)。同时由AutoCAD提供的系统变量MODEMACRO能够在状态栏中显示自定义内容,操纵着用户定义的状态栏。MODEMACRO变量的值不保存在图形文件中,也不保存在配置文件或其它文件中,因此设置该值只能在ACAD.LSP文件中用S:STARTUP函数加载。 由于图幅的大小只是使用不同名称的图块(有一定规律的名称),因此让系统变量MODEMACRO取得图样栏图块名称并提取图块大小是一个复杂过程,而且在每次的更换图幅大小时,都应重新初始化MODEMACRO的值,这种

16、方法是比较繁杂的。假如让MODEMACRO显示系统确实是的值,那幺在系统变量的值改变时,MODEMACRO则会自动刷新其值,而不必重新初始化。 在AutoCAD中,系统提供了多个可让用户定义值的变量(如useri1useri5、users1users5等),这些自定义的系统变量是保存在图形中,如此就能够利用这些系统变量保存图样栏的图幅大小,只是在更改图样栏的图幅大小的同时将自定义的系统变量设置为相应的图幅的值。在图样栏中,使用的是自定义系统变量useri1。 MODEMACRO系统变量的内容使用的是DIESEL语言。具体的程序内容如下: (defun S:STARTUP() (setvar m

17、odemacro A $(getvar, useri1)图) (princ) ) 如此就能够在状态栏的起始处显示“A0图”的字样,提示图幅大小。 5. 图样栏中设计单位名称列表的设计: 在图样栏中,必须指定设计单位,假如所设计的程序只供单一的单位使用,则能够将设计单位名称直接保存在图样图块中,但在程序设计过程中,为了能使该系统能应用于多个部门,甚至在设计过程中还未知的其它单位,必须采纳一种专门的方法取得设计单位的列表,以便在不必修改程序内容的情况下在多个部门及单位中应用。 在程序中,采纳的是将设计单位的列表保存为tyl.ini文件,该文件为文本文件,能够通过记事本等打开进行编辑,文件中每个单位

18、名称为一行。在程序运行过程中将tyl.ini文件中的各个单位名称显示于列表中供用户选择。由于AutoCAD的DCL对话框语言的功能不强(不如VB的对话框那样方便),在显示列表及填入图形中都必须分不对tyl.ini文件的内容进行引用。对话框在取得列表时不是取得列表中的内容。而是取得选择项在列表中的位置序号。如此,只能通过该序号重新搜索tyl.ini文件以取得相应序号的单位名称: ;显示于列表中 (setq des_list (read_des(findfile tyl.ini) (start_list sign_ro) (mapcar add_list des_list) (add_list 其

19、它设计单位.) (end_list) ;通过序号查找单位名称 (if (= des_num (read_num (findfile tyl.ini) (setq zzdw zzdw1) (setq zzdw (desi_nam des_num) ) 程序中,read_des()、read_num()、desi_nam()为自定义函数,功能如下: read_des():将指定的文件中每行文字的内容读出并保存于指定的变量中。 Read_num():返回指定文件的行数(由为设计单位列表的数量)。 Desi_nam():通过位置序号返回tyl.ini文件中相应序号的单位名称。 本系统除了提供预置的列表

20、框外,还提供一项“其它设计单位”以提供一些临时的设计单位填写,如此可在不修改tyl.ini文件的条件下填写临时的设计单位。在选择了列表中的最后一项“其它设计单位”时,对话框将提供一个文本编辑框供用户输入单位的名称。程序如下: (if (= des_num(read_num(findfile tyl.ini) ;推断是否选择了“其它设计单位” (progn ;假如选择了其它设计单位 (mode_tile other 0) ;使“其它设计单位”框有效 (mode_tile other 2) ;将光标移动到其它设计单位”框上 ) ;假如选择的不是其它设计单位 (mode_tile other 1)

21、;使“其它设计单位”框无效 ) 由于tyl.ini文件的设计单位的各个不同单位名称的排列有先后之分,在列表框的初始化中,系统总是默认第一个单位名称为设计单位,如此就必须通过程序及其它方法将设计单位定位在自己常用的单位名称上,或者讲希望系统能够将前一次所填写的设计单位作为下次填写的默认值。 在AutoCAD r13以后的版本中,用户可将自定义的参数保存于AutoCAD的系统配置文件中的AppData段中,以配置自己的界面的自定义参数。因此能够将前一次设计单位名称列表选择项的位置序号以及其它设计单位编辑框中的内容保存于该段中,以便在下次引用图样栏时对图样栏进行初始化。具体程序如下: ;取得设计单位

22、前次选择的位置序号。 (if (getcfg AppData/Tyl/Number) (setq des_num(atoi(getcfgAppData/Tyl/Number) (setq des_num 0) ) (set_tile sign_no (itoa des_num) ;取得其它单位的名称 (if (setq zzdw1 (getcfg AppData/Tyl/Other) (setq_tile other zzdw1) ) ;保存设计单位序号及其它单位名称 (setcfg AppData/Tyl/Number (itoa des_num) (if zzdw1 (setcfg App

23、Data/Tyl/Other zzdw1) ) 如此就能够不必考虑设计单位列表的排列问题,甚至关于设计单位不在列表中而使用其它框进行填写也不必每一次填写图样栏时都进行输入,系统能够取得上次保存的其它单位名称显示于其它框中。 关于设计单位名称列表的tyl.ini文件,在本系统中是通过在该系统的安装程序中生成。本系统设计完成后使用了InstallShield生成安装程序,因此能够通过安装程序的专用语言生成tyl.ini文件。在InstallShield生成的安装程序中有要求用户输入姓名及工作单位的向导对话框,如图5,如此就能够通过取得用户输入的工作单位并生成tyl.ini文件。该系统在不同的单位使

24、用时,由于在安装时所输入的单位名称为本单位名称,因此在填写图样栏时就能产生本单位名称的图样栏。 其程序如下(程序内容置于ProcessAfterDataMove()过程中): szFileName = FILE_TYL; if( FindFile ( TARGETDIR , szFileName , svResult ) 0 ) then SdShowMsg( MSG_CREATE_TYL , TRUE); Delay(2); if (CreateFile ( nvFileHandle , TARGETDIR , szFileName )0) then MessageBox(MSG_UNCREATE_TYL,INFORMATION); if(CopyFile(szFileName, szFileName)0) then MessageBox(MSG_UNCOPY_TYL,INFORMATION); endif; else if ( WriteLine ( nvFileHandle , svCompany)图栏(&T) ID_H10TYL 图样栏(&T) CCddtyl ID_H10BTL 标题栏(&A)CC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论