中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

您当前所在位置: 行业锐评 > 查看内容

DIESEL入门

文章作者头像
发布:清雅轩 作者: webmaster来源: job.cartech8.com
PostTime:17-5-2008 21:54

以下为文章全文:(本站微信公共账号:cartech8)


汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师

DIESEL语言是一种处理字符串的语言。

由于MODEMACRO系统变量是字符串类型的系统变量,它的内容也就是AutoCAD图形屏幕的状态行中的显示内容,所以,通过DIESEL就可以控制状态行中信息的显示。

所有DIESEL的都是由组成的。DIESEL函数的一般调用格式如下所示:

$(function,argument1,argument2...)

函数和函数的变元都被放在圆括符中,函数名永远放在第一的位置上。这一点与AutoLISP是相同的。函数和变元之间,变元和变元之间都用逗号分隔,这一点与AutoLISP语言不同。然而,为了与AutoLISP相区别,DIESEL函数用$符号开头。

 

与DIESEL配合的系统变量:

有几个系统变量常与DIESEL配合,以下将列出代大家参考。

1.MODOMACRO系统变量:

它控制状态栏中显示的内容。

2.MACROTRACE系统变量:

它是DIESEL的调试工具。在隐含情况下,它的值设置为0(关)。如果将它设置成1(开),就会对所有进行求值,包括在中和状态栏中所的那些。

3.USERS1-USERS5系统变量:

这五个变量为字符串变量,可由用户随意定义其值。

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+

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)\\\\"

)

)

[文章纠错]

文章网友提供,仅供学习参考,版权为原作者所有,如侵犯到

你的权益请联系542334618@126.com,我们会及时处理。

会员评价:

0 发表评论

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 11-9-2025 15:13 , Processed in 0.303582 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.