十五年专注于
液压缸筒生产

全国咨询热线:
400-086-9833

   热门关键词修理 加工 活塞杆 缸筒 不锈钢

无标题文档

天圆液压产品中心

当前位置:主页 > 行业资讯 >

AutoCAD图形中绗磨管标准图纸图栏系统的开发(2)

时间:2016-11-13 09:00来源:天圆网站 作者:admin 点击:
(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

(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_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 "non" "0,0" "" "" "" zzdw)
;插入附有属性的图样图块
(modi_ipt "B-BTL" p2p p2)
………… ;移动标题栏等到新的图样栏的相应位置
)
)
)

3. 旧版图栏的转换:

程序只有保持向下的兼容性才能得以广泛的使用,对于图栏的填写程序,也应该保证能够很好地兼容旧版的图栏,并能顺利地将旧版的图栏转换为新的图栏。

对于标题栏的转换,只需取得相应位置上的标题栏的内容,然后将原来的标题栏内容删除,再插入附有各属性内容的标题栏图块。

对于图样栏,除删除旧的图样栏图块,还必须将该图块通过清理命令将其清理掉,然后再插入新的格式的图样栏,通过这样就可以将图栏进行转换。

图样栏转换的程序如下:

(setq 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 "purge" "b" gead_na "n") ;清理旧图块
(command "insert" head_na "non" "0,0" "" "" "" zzdw);插入新版图样栏
)
)

4. 状态栏中显示图样栏的图幅大小:

由于计算机显示的图形可以放大缩小,所以有些图幅容易造成混淆,如A2图和A3图幅,所以必须在一个显著的位置显示图幅的大小,使用户一目了然。

虽然通过调用图样栏(ddtyl)命令可以从对话框中显示当前的图幅大小,但这仲方法必须通过手工的操作才能实现。

如果将图幅的大小通过文本显示于图形中,就会使打印时将该文本也打印出来,同时该文本也只能通过缩放命令才能看到,操作上也不方便。

通过比较,将图样栏的图幅大小显示于状态栏是取为直接的。

AutoCAD的状态栏显示于屏幕的下端,其中显示了当前坐标以及各种辅助工具的状态(如捕捉、正交、栅格、对象捕捉等)。同时由AutoCAD提供的系统变量MODEMACRO可以在状态栏中显示自定义内容,控制着用户定义的状态栏。MODEMACRO变量的值不保存在图形文件中,也不保存在配置文件或其它文件中,所以设置该值只能在ACAD.LSP文件中用S::STARTUP函数加载。

由于图幅的大小只是使用不同名称的图块(有一定规律的名称),所以让系统变量MODEMACRO取得图样栏图块名称并提取图块大小是一个复杂过程,而且在每次的更换图幅大小时,都应重新初始化MODEMACRO的值,这种方法是比较繁杂的。如果让MODEMACRO显示系统就是的值,那么在系统变量的值改变时,MODEMACRO则会自动刷新其值,而不必重新初始化。

在AutoCAD中,系统提供了多个可让用户定义值的变量(如useri1~useri5、users1~users5等),这些自定义的系统变量是保存在图形中,这样就可以利用这些系统变量保存图样栏的图幅大小,只是在更改图样栏的图幅大小的同时将自定义的系统变量设置为相应的图幅的值。在图样栏中,使用的是自定义系统变量useri1。

MODEMACRO系统变量的内容使用的是DIESEL语言。具体的程序内容如下:

(defun S::STARTUP()
(setvar "modemacro" "A $(getvar, useri1)图")
(princ)
)

这样就可以在状态栏的起始处显示“A0图”的字样,提示图幅大小。

5. 图样栏中设计单位名称列表的设计:

在图样栏中,必须指定设计单位,如果所设计的程序只供单一的单位使用,则可以将设计单位名称直接保存在图样图块中,但在程序设计过程中,为了能使该系统能应用于多个部门,甚至在设计过程中还未知的其他单位,必须采用一种特殊的方法取得设计单位的列表,以便在不必修改程序内容的情况下在多个部门及单位中应用。

在程序中,采用的是将设计单位的列表保存为tyl.ini文件,该文件为文本文件,可以通过记事本等打开进行编辑,文件中每个单位名称为一行。在程序运行过程中将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 "其他设计单位...")
(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文件中相应序号的单位名称。

本系统除了提供预置的列表框外,还提供一项“其他设计单位”以提供一些临时的设计单位填写,这样可在不修改tyl.ini文件的条件下填写临时的设计单位。在选择了列表中的最后一项“其他设计单位”时,对话框将提供一个文本编辑框供用户输入单位的名称。程序如下:

(责任编辑:admin)
分享按钮
------分隔线----------------------------