RSS
热门关键字:  plc  单片机设计  加工误差解决方法  电机  西门子PLC
当前位置 : 机电专业技术网>CAD/CAM>AutoCAD>列表

AutoCAD R12两个新增命令在编程中的应用

发布时间:2008-03-27 关键字: 编程 应用 命令 新增 两个 填充 花纹 图案 边界 区域

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

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册