DIESEL入门
以下为文章全文:(本站微信公共账号: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条 发表评论