您现在的位置: 首 页 > 教程文档 > cad教程 > DIESEL入门

    DIESEL入门


作者:网友 日期:2007-05-03
[ 1 ] [ 2 ] 上一页    

 

4.MENUECHO系统变量:

 

它是另一个有用的DIESEL调试工具。若将它设置为8,AutoCAD显示所有菜单宏中DIESEL表达式的输入和输出。

 

在菜单文件中使用DIESEL表达式:

 

您可以在菜单文件中实现DIESEL字符串表达式,并用它们作为生成宏的补充工具。这些表达式所返回的字符串值,可以作为AutoCAD命令、AutoLISP和ADS例程以及其它菜单宏的响应。它们也可以将字符串值返回到菜单本身,从而改变菜单的外观或一个菜单标示的内容。

 

用在一个菜单项中的一个DIESEL表达式必须跟在$section=submenu格式之后,这里的段名(section)是M,而submenu是您想要的DIESEL表达式。一般来说,AutoLISP实现一个菜单项可能比较容易,但也并非总是如此。

 

下面给出两个产生相同结果的菜单项实例,其中一个用DIESEL实现,另一个用AutoLISP实现。

 

使用DIESEL表达式实现的这个菜单项如下:

 

[图纸空间/模型空间]^C^C^P$M=S(if ,$(getvar,cvport),1),mspace,pspace)

 

使用AutoLISP表达式实现的这个菜单项如下:

 

[图纸空间/模型空间]^C^C^P(if (=(getvar "cvport") 1)(command"mspace")+

 

(command "pspace"))(princ)

 

两个菜单项都为在模型空间与图纸空间之间切换提供了一种方法如果TILEMODE设置为0的话),但DIESEL表达式更短,而且其求值是透明的,且不需要调用AutoLISP的pronc函数。如果在这两种情况下都把专用字符^P省略(^P控制MENUECHO变量的打开和),DIESEL表达式公显示所发出的命令,而AutoLISP表达式则显示事先代码。

 

由于由DIESEL表达式所返回的是一个文本字符串值,所以它能用来响应AutoLISP的getxxx函数调用的请求。这就使得菜单项可以根据现行图形的条件进行求值,并返回一个值AutoLISP例程。

 

DIESEL表达式还能返回一个字符串值给下拉式菜单项的标示(labels),这样您就能使一个菜单项标志变成灰色或者改变菜单项的显示方式。为了在一个下拉式菜单标示中使用一个DIESEL表达式,您必须确保该菜单项标志的第一个字符为文本字符。

 

在下面的实例中,我们假设现行图层名设置成了BASE,并将下面的表达式用作菜单文件中一个***popn段中的一个菜单项标示:

 

[ $ (eval,"当前图层:"$(getvar,clayer))]

 

运行后,在该菜单项标示中就会显示:“当前图层:BASE”,无论何时现行图层被改变时,它的内容都会被自动更新。

 

您也可以用这种方法交互式地改变显示在下拉式菜单中的文本。您可能将要选择的文本用AutoLISP例程写入到系统变量USERS1-USERS5中,再用一个菜单标示中的一个DIESEL宏检索相应系统变量中的值。

 

下面的实例中,使用相同的DIESEL表达式作为菜单项标示和菜单项的一部分,它提供了一种将现行日期和时间录入到图形中去的现实方法。

 

[$(edtime,$(getvar,date),DDD","D MON YYYY}}^C^Ctext+

 

\$M=$(edtime,$(getvar,date),DDD","D MON YYYY);

 

另外,使用DIESEL宏还能实现使菜单项变灰或对一个下拉式菜单项作标示。当某个命令处理激活状态时,下面的DIESEL宏使下拉式菜单中的ERASE命令变灰显示(一个菜单项变灰时,说明此时本菜单项不可选择)。

 

[$ (if ,$(getvar,cmdactive),~)ERASE]erase

 

使用类似的方法可以在一个下拉式菜单项里面放置一个标记(mark),或者交互式地改变标记所使用的字符。

 

在AutoLISP中使用DIESEL表达式:

 

通过调用menucmd函数,您可以在AutoLISP例程中DIESEL表达式。其格式类似于在菜单文件中DIESEL。

 

下面的代码片段将变量ctime设置成现行时间:

 

(setq c_time (menucmd "M = $(edtime,$(getvar,data),HH:MM a/p)"))

 

使用DIESEL定义状态栏:

 

使用AutoLISP语言可以实现对MODEMACRO变量的定义。下面给出的程序代码可以模拟AutoCAD的现行内部状态行。

 

 

(defun C:ACADMODE()

 

 

(setvar"modemacro"

 

(strcat

 

"图层 $(substr,$(getvar,clayer),1,8)"

 

"$ (if,$(getvar,orthomode),正交)"

 

"$ (if,$(getvar,snapmode), 捕捉)"

 

")"

 

)

 

)

 

)


 

您可以将这个程序保存在一个名为ACADMODE。LSP文件中。然后加载并执行它,这时就可产生一个不同的状态行。然而,这并不是使用这一特性的最有用的应用方式,它仅提供了一个实例。加载并这个程序后,也许您并没有感觉到有什么不同,但如果您将图层改为L时,您就会知道MODEMACRO正在起作用。

 

您可以将该程序定义在ACAD.LSP文件中并定义成S::STARTUP()函数,这样在每次启动都可以启用自己定义的状态栏。

 

 

(defun s::startup()

 

(setvar "modemacro"

(strcat

"A$(getvar,useri1)图"

",字型:$(getvar,textstyle)"

",标注:$(getvar,dimstyle)"

)

)

 

)




[ 1 ] [ 2 ] 上一页    
1)本站所有资源需要用迅雷下载,请确保您已经安装迅雷软件,下载迅雷  2)资源如需解压密码,密码为:www.coolsc.com 或者www.sooogl.com

设为首页    |    加入收藏    |    广告服务    |    联系我们    |    网站地图    |    网站搜索
百度大联盟认证绿色会员
QQ交流群:1792001(已满) 17383087(已满) 29910201(已满) 53365200 13287661 58115297
酷素材----为您搜集最有效的设计类素材 ©版权所有
本站所有资源,都来自互联网。如有版权问题请联系我们删除!本站资源用于学习交流,请勿用于商业。 !
诚邀友情链接,联系qinzhen_jeh#tom.com(把#替换成@)