摘要:AutoCAD R12版新增加了BHATCH命令来补充和加强HATCH命令功能。
关键词:AutoCAD R12 命令 应用
AutoCAD中填充阴影线图案(PAT文件)是一项十分有用的功能,在各种图形中都可能用到。我们在开发工程地质CAD软件时,经常要在图面上的指定区域内填充岩性花纹图案,而且填充区域不规则。在AutoCAD低版本中,填充花纹命令仅有一条HATCH,使用HATCH时,需选择围成闭合区域的有关实体,若实体选择不全则会使填充出现混乱,特别是当填充区域由若干线、弧、园等实体交叉组合而成时,就要沿闭合区域的各点绘制一条PLINE线,然后以这条线作为填充边界线,在填充完成以后还要将这条线删除,比较麻烦。
AutoCAD R12版新增加了BHATCH命令来补充和加强HATCH命令功能。BHATCH命令以窗口交互方式执行,它将自动以多义线来定义边界,然后忽略全部或部份不是边界的区域,完成填充后自行删除多义线,还可以使边界内的图形和文字避开填充图案。简言之,填充时只需要用鼠标器点取闭合区域内一点就可完成填充。为了更方便地使用HATCH和BHATCH这两个命令,在R12版中还新增加了一条命令BPOLY。使用BPOLY可迅速生成一封闭曲线的边界,即通过点取封闭区域内任意一点形成本区域的边界线,根据返回的边界线可使用HATCH填充花纹图案,也可使用AREA来计算封闭区域的面积和周长。有关这两条命令的操作,可参阅AutoCAD R12的使用说明书,通过简单的练习就可以掌握。本文想就如何在AUTO LSP中调用这两个命令进行编程的问题做一简单介绍。
BHATCH和BPOLY命令不同于一般的AutoCAD命令,它们是用ADS应用程序开发的,如果想在图形编辑状态下或在AUTO LISP中使用这两个命令, 就要在AutoCAD初始化时加载名为ACADAPP的ADS程序,方法是在当前搜索路径上是否有ACAD.ADS文件,这是一个纯文本的ASCII码文件,在这个文件中如有一行为ACADAPP,那么在进入ACAD图形时自动加载ACADAPP,在AutoCAD的Command:提示符下调用AUTO LISP函数(ADS),将得到当前已加载的全部ADS应用程序的信息。如已加载ACADAPP,在“Command:”就可以使用BPOLY和BHATCH。
在AUTO LISP语言中,不能像调用一般命令那样用(COMMAND “命令”)来调用BPOLY和BHATCH,而是用(C:BPOLY 点)、(C:BHATCH 点)来调用,执行(C:BHATCH 点)之前要通过SETVAR对几个系统变量进行设置,HPANG是图案填充角度,HPNAME是图案填充名称,HPSCALE是图案填充比例系数。以下是一个简单的填充花纹图案的LISP程序:
程序1清单:
(setq yf$ (getstring (strcat "花纹代号: "))) ;输入花纹代号
(setq bl (getreal "n比例<1>:")) ;输入比例
(if (= bl nil) (setq bl 1.0)) ;比例约定值为1
(setq ang (getreal "n角度<0>:")) ;输入角度
(if (= ang nil) (setq ang 0.0)) ;角度约定值为0
(setq pt (getpoint "n选择区域内任意一点:")) ;输入区域内任意一点坐标
(setvar "hpang" ang) ;设置填充角度为ang
(setvar "hpscale" bl) ;设置填充比例为bl
(setvar "hpname" yf$) ;设置填充花纹为yf$
(while pt ;PT为真时执行循环体内程序,否则退出
(c:bhatch pt)
(setq pt (getpoint "n选择区域内任意一点:")) ;输入区域内任意一点坐标继续填充
);while pt
用程序1填充花纹时,选定点周围不能形成一个闭和区域时,除未填充外也不显示任何信息,因此需要增加一个判断,用程序2来实现。
程序2清单:
(setq yf$ (getstring (strcat "花纹代号: "))) ;输入花纹代号
(setq bl (getreal "n比例<1>:")) ;输入比例
(if (= bl nil) (setq bl 1.0)) ;比例约定值为1
(setq ang (getreal "n角度<0>:")) ;输入角度
(if (= ang nil) (setq ang 0.0)) ;角度约定值为0
(setq pt (getpoint "n选择区域内任意一点:")) ;输入区域内任意一点坐标
(while pt ;PT为真时执行循环体内程序,否则退出
(setq e (c:bpoly pt)) ;得到PT点所在的边界线,
(if e ;如边界线存在就填充,否则不填充
(progn
(command "hatch" yf$ bl ang e "") ;填充花纹
(command "erase" e "") ;删除边界线
(princ "n填充完毕") ;打印填充完毕
);progn
(princ "n边界线不存在,不能填充")
);if
(setq pt (getpoint "n选择区域内任意一点:")) ;输入区域内任意一点坐标继续填充
);while pt
为了更加方便实用,可以编制花纹图案的图标菜单,当提示输入花纹图案时,激活图标菜单。我们在实际运用时,从BPOLY返回的边界实体的各点坐标中计算出一个范围,该范围内的文本实体同时选中,使这些文本避开阴影线图案。
以上两个小程序所实现的功能与BPOLY和BHATCH相同,其实际意义不在于此,而是想通过以上介绍,能够将其应用到解决更为复杂的情况上,例如我们在地质CAD软件开发中,使用上述方法解决了复杂的不规则区域自动填充多种花纹图案的程序,编写了对花纹图案的编辑命令,即对已经绘制到图形中的花纹进行编辑修改(篇幅所限源程序不列出) 。这里仅简介使用方法,在运行本程序之前,所编辑花纹的区域已经存在。
在Command提示符下用LOAD 加载本程序,计算机提示:
I.选目标 T.改花纹代号 A.比例角度 C.改颜色 P.改边界 X.结束<X>:
选项I: 选定要编辑的花纹图案,只需用鼠标点取花纹图案上的一点即可;
选项T: 修改花纹图案的代号,输入新的花纹代号;
选项A: 修改花纹图案的比例角度,输入新的比例和角度;
选项C: 修改花纹图案的颜色,输入新的颜色号;
选项P: 是修改花纹图案的边界线,提示选择欲修改的边界线,然后是一个类似PEDIT的多义线顶点编辑命令,可将顶点位置移动或者删除,待新的边界线修改完成以后,图面上的花纹图案立即按新的边界更新。需注意的一点是在修改边界线之前选择花纹图案实体时,一定要使选择点位于新的边界线之内,否则图案将填充在新边界线之外。
以前绘制到图形中的花纹图案,如果发现代号、角度、比例、颜色、边界线等不满意时,就要将其删除再重新绘制,而且还不能保证重新绘制的花纹图案完全正确,使用本程序就可以随心所欲地非常方便地对花纹进行编辑修改,直到满意为止。
在绘制工程地质剖面图时,岩层产状在剖面拐点处的视倾角将发生变化,填充花纹时在拐点两侧应该使用不同的视倾角,而且在拐点处花纹应该连结正确。我们使用了以上两个命令编写了一个LISP程序,比较好的解决了这个问题,绘制的图形如上图所示。绘制褶皱构造的地质剖面图,也可使用本程序。