找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 840|回复: 8

[精彩文萃] field Diesel表达式 Rtext 动态反应文字 之关系

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-10-21 15:30:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 /db_自贡黄明儒_ 于 2018-8-2 18:07 编辑

;;原文 http://jingyan.baidu.com/article/fec4bce22dd96bf2608d8b5a.html
CAD中有些文字需要随着图纸的当前条件的变化自动变化,例如保存日期、打印日期、打印比例等等。CAD早期版本只是在扩展工具中提供了动态反应文字(rtext)功能,动态反应文字可以用CAD的Diesel表达式来定义动态文字,也可以动态链接文本文档,文本文档被编辑后,图纸中的文字会自动更新。由于大多数设计人员对Diesel表达式不了解,因此这个功能会用的人不多,CAD高版本提供了字段(field)功能,这个功能预定义了一系列动态文字,设计人员只需在列表中选用即可,这样使用起来就简单多了。当然也支持高手们用Diesel表达式、LISP变量、系统变量来自定义动态文字。
一、字段(field)
1
字段不仅可以单独插入,也可以在单行文字、多行文字、属性文字的值中插入字段。单独插入字段的话,直接输入field命令,或者在菜单中选择:插入>字段;弹出对话框如下:
CAD中的动态文字:字段field和动态反应文字
2
如果只是要插入预设好的字段操作非常简单,直接在左侧列表中选择“字段名称”,在右侧列表中选择一个符合自己要求的“样例”,然后点“确定”按钮后在图面上确定位置即可。
3
由于预设的字段比较多,为了更快找到自己需要的字段,可以现在“字段类别”中选择需要的类别,例如在类别中选择“打印”或“日期和时间”,下面列出的名称就少多了,选起来会更方便。
4
如果要把字段插入普通的文字中间,在写单行文字和多行文字时右键,右键中都会有“插入字段”的功能。如果你的图框用的是属性块,也可以在定义属性文字时插入字段,“属性定义”对话框的属性值的后面有一个“插入字段”的按钮,点此按钮可以在属性中插入字段,如下图所示。
CAD中的动态文字:字段field和动态反应文字
5
在选择一个字段的时候就可以看到对话框下面会显示“字段表达式”,如果感兴趣,可以研究一下。不过我觉得目前预定义的字段对于大多数普通设计人员来说完全够用了。我对CAD编程方面也不太了解,无法给大家太多指导。后面从网上介绍动态反应文字的文章中Diesel表达式的文章中摘取两个例子,看看对大家有没有帮助。
END
二、动态反应文字(RTEXT)
1
动态反应文字可以说是字段的前身,AutoCAD和浩辰CAD都放在扩展工具中。
动态反应文字需要自己编写表达式,不如字段方便,但RTEXT还有一个字段没有的功能:链接文本文件。
END
1、链接文本文件
使用文件作为输入可以把大量规格化的文本保存在外部文件中,在图形中用RTEXT显示出来。例如如果多张同类图纸中会使用了相同的注解或说明文字,这些文字有时需要批量修改,就可以利用这个功能插入,只需修改文本文件,所有图纸中的内容都会自动修改。当然打开图纸时必须要能找到这个文本文件,如果要将图纸文件归档或发送给其他人,直接分解(x)成普通文字就好了。
例1:使用RTEXT显示文本文件内容
操作很简单,执行RTEXT命令后,选择RTEXT的“文件(F)”选项,弹出文件选择对话框,可选择一个文本文件。如下图:
CAD中的动态文字:字段field和动态反应文字
2、Diesel表达式
这里从别的文章中摘取两段用Diesel表达式定义的例子,让大家对Diesel表达式有所了解。
示例2:使用RTEXT显示文件位置
我们可以使用RTEXT来自动记录文件位置并在图中显示出来,无论你的文件在何处。使用RTEXT的Diesel选项,输入内容为$(getvar, "dwgprefix")$(getvar, "dwgname"),则在图中指定位置会显示如下文本:
CAD中的动态文字:字段field和动态反应文字
示例3:使用RTEXT显示日期、时间
选择RTEXT的Diesel选项,在弹出的表达式输入对话框中输入如下字符串:
$(edtime,$(getvar,date),DDD", "D MON YYYY)
在图中选择适当位置后,则在图中位置显示如下当前日期文本:
CAD中的动态文字:字段field和动态反应文字
5
通过这个可以看到,这个表达式跟字段对话框中显示的表达式是类似的,有了字段功能后,大家就可以不用在研究这个Diesel了。如果你对LISP编程有一点了解的话,这个Diesel表达式其实也非常简单。

Autocad的DIESEL函数的具体介绍
DIESEL(Direct Interpretively EvaluatedString ExpressionLanguage)是指“直接解释求值的字符串表达式语言”。使用的DIESEL可以控制AutoCAD系统变量MODEMACRO的值,也可用来编写菜单宏,但只能用来处理字符串。
DIESEL的宏表达式格式如下:
$(字符串函数名,函数参数1,函数参数2…)
其中,根据函数的不同,函数参数的个数可以为零或者多个,但最多为9个。在宏表达式的不同元素之间,不可以有任何空格。所有的宏表达式都必须以“$”符号开头。
2 diesel函数格式

   
函数
   
   
说明/样例
   
  
+(加)
  
  
返回数字val1、val2、…、val9的和。
  
$(+,val1[,val2,…,val9])
  
如果当前厚度被设定为5,则以下DIESEL字符串返回15。
  
$(+,$(getvar,thickness),10)
  
  
-(减)
  
  
返回从数字val1中减去val2至val9的结果。
  
$(-,val1[,val2,…,val9])
  
  
*(乘)
  
  
返回数字val1、val2、…、val9的积。
  
$(*,val1[,val2,…,val9])
  
  
/(除)
  
  
返回数字val1除以val2、…、val9的结果。
  
$(/,val1[,val2,…,val9])
  
  
=(等于)
  
  
如果数字val1和val2相等,则字符串返回1;否则,返回0。
  
$(=,val1,val2)
  
  
<(小于)
  
  
如果数字val1小于val2,则字符串将返回1;否则,返回0。
  
$(<,val1,val2)
  
以下表达式用于获取HPANG的当前值;如果该值小于系统变量USERR1中存储的值,则将返回1。如果USERR1中存储的值为10.0且HPANG的当前设置为15.5,则以下字符串将返回0。
  
$(<,$(getvar,hpang),$(getvar,userr1))
  
  
>(大于)
  
  
如果数字val1大于val2,则字符串返回1;否则,返回0。
  
$(>,val1,val2)
  
  
!=(不等于)
  
  
如果数字val1和val2不相等,则字符串返回1;否则,返回0。
  
$(!=,val1,val2)
  
  
<=(小于或等于)
  
  
如果数字val1小于或等于val2,则字符串返回1;否则,返回0。
  
$(<=,val1,val2)
  
  
>=(大于或等于)
  
  
如果数字val1大于或等于val2,则字符串返回1;否则,返回0。
  
$(>=,val1,val2)
  
  
并且
  
  
返回整数val1到val9的按位逻辑与。
  
$(and,val1[,val2,…,val9])
  
  
angtos
  
  
按指定的格式和精度返回角度值。
  
$(angtos,value[,mode,precision])
  
按mode和precision指定的格式将给定的value作为角度值进行编辑,与类似的AutoLISP函数的定义一样。如果mode和precision被省略,则使用由UNITS命令选择的当前值。
  
注:AutoLISP在AutoCADLT中不可用。
  
可应用以下mode值:
  
·        0,表示度
  
·        1,表示度/分/秒
  
·        2,表示百分度
  
·        3,表示弧度
  
·        4,表示勘测单位
  
  
Edtime
  
  
返回基于指定图片的格式化的日期和时间。
  
$(edtime,time,picture)
  
编辑由time指定的Julian日期(例如,根据给定的picture从$(getvar,date)获取)。picture由被具体日期和时间代替的格式短语组成。不能解释为格式短语的字符被完整地复制到$(edtime)的结果中。格式短语的定义如下表所示。
  
例如,假定日期为1998年9月5日星期六,时间为4:53:17.506,则edtime的相应格式短语和输出样例如下所示:
  
·        D-5
  
·        DD-05
  
·        DDD-Sat
  
·        DDDD-Saturday
  
·        M-9
  
·        MO-09
  
·        MON-Sep
  
·        MONTH-September
  
·        YY-98
  
·        YYYY-1998
  
·        H-4
  
·        HH-04
  
·        MM-53
  
·        SS-17
  
·        MSEC-506
  
·        AM/PM-AM
  
·        am/pm-am
  
·        A/P-A
  
·        a/p-a
  
如上表所示,应该输入完整的AM/PM短语。如果仅使用AM,则A将按字面复制而M将返回当前月份。
  
如果图片中出现任何AM/PM短语,则H和HH短语将按12小时国内时钟(12:00-12:591:00-11:59)编辑时间,而不是按24小时时钟(00:00-23:59)编辑时间。
  
下面的样例使用上表中的日期和时间。请注意,由于逗号被读为参数分隔符,因此必须将它括在引号中。
  
$(edtime,$(getvar,date),DDD","DDMONYYYY-H:MMam/pm)
  
该表达式返回以下结果:
  
Sat,5Sep1998-4:53am
  
如果time为0,则使用执行最外层宏时的时间和日期。这避免了对$(getvar,date)的冗长而费时的多次调用,并保证所有由多个$(edtime)宏组成的字符串都使用相同的时间。
  
  
eq
  
  
如果字符串val1和val2相同,则字符串返回1;否则,返回0。
  
$(eq,val1,val2)
  
以下表达式用于获取当前图层的名称;如果该名称与USERS1(USERS1-5)系统变量中存储的字符串值相匹配,则将返回1。假设字符串“PART12”存储在USERS1中,并且当前图层相同。
  
注:USERS1-5系统变量在AutoCADLT中不可用。
  
$(eq,$(getvar,users1),$(getvar,clayer))
  
该表达式返回以下结果:
  
1
  
  
Eval
  
  
将字符串str传给DIESEL计算器,并返回计算结果。
  
$(eval,str)
  
  
fix
  
  
通过舍弃小数部分,将实数数字值截断为整数。
  
$(fix,value)
  
  
Getenv
  
  
返回环境变量varname的值。
  
$(getenv,varname)
  
如果未定义具有该名称的变量,则返回空字符串。
  
  
Getvar
  
  
返回具有给定varname的系统变量的值。
  
$(getvar,varname)
  
  
if
  
  
根据条件计算表达式。
  
$(if,expr,dotrue[,dofalse])
  
如果expr为非零,则进行计算并返回dotrue。否则,进行计算并返回dofalse。请注意,不计算expr未选择的分支。
  
  
索引颜色
  
  
返回以逗号分隔的字符串中的指定成员。
  
$(index,which,string)
  
假定string参数包含一个或多个由宏参数分隔符字符(逗号)分隔的值。which参数选择这些值中的一个值进行提取,第一项编号为0。此函数通常用于从$(getvar)返回的点坐标中提取X、Y或Z坐标值。
  
使用此函数,应用程序可从USERS1-5系统变量中检索存储为以逗号分隔的字符串的值。
  
注:USERS1-5系统变量在AutoCADLT中不可用。
  
  
nth
  
  
计算并返回由which选定的参数。
  
$(nth,which,arg0[,arg1,…,arg7])
  
如果which为0,则nth返回arg0,依此类推。请注意,$(nth)和$(index)之间的区别;$(nth)将一系列参数中的一个返回给函数,而$(index)从作为单个参数传递的以逗号分隔的字符串中提取值。不计算which未选择的参数。
  
  
  
  
返回整数val1到val9的按位逻辑或。
  
$(or,val1[,val2,…,val9])
  
  
Rtos
  
  
按指定的格式和精度返回实数值。
  
$(rtos,value[,mode,precision])
  
将给定的值作为实数进行编辑,按照下面两个变量指定的格式:mode和precision。如果省略mode和precision,则使用由UNITS命令选择的当前值。
  
  
strlen
  
  
返回string的字符长度。
  
$(strlen,string)
  
  
Substr
  
  
返回string的子串,该子串从字符start开始,长度为length。
  
$(substr,string,start[,length])
  
字符串中的字符从1开始编号。如果省略length,则返回所有剩余字符串。
  
  
  
  
返回string按当前地区的规则转换为大写的结果。
  
$(upper,string)
  
  
xor
  
  
返回整数val1到val9的按位逻辑异或。
  
$(xor,val1[,val2,…,val9])
  

注:该函数根据参数“mode”和“precision”指定的格式,给定的参数“value”作为角度值进行编辑,如果参数“mode”和“precision”被省略,则使用由“unites”命令指定的当前值。参数“mode”的取值及其含义见表3。
3 “mode”的取值及其含义
  
Mode值
  
字符串格式
0
1
度/分/秒
2
百分度
3
弧度
4
勘测单位
注:该函数返回基于指定图片的格式化的日期和时间。
插入日期的重点介绍                        
选择RTEXT的Diesel选项,在弹出的表达式输入对话框中输入如下字符串:
$(edtime,$(getvar,date),DDD","DMONYYYY)
在图中选择适当位置后,则在图中位置显示如下当前日期文本:

                               
登录/注册后可看大图
其中,“time”参数为给定的AutoCAD日期,通常使用函数“$(getvar,date)”来获取;
“picture”参数由日期和时间的特定表示法替代的格式短语组成。格式短语的定义如表1所示。所有不能解释为格式短语的字符将被完整地复制到函数返回结果中。
1 “edtime”函数格式短语定义
  
  
格式
输出示例
格式
输出示例
Day
D
9
H
5
DD
09
HH
05
DDD
Tue
MM
47
DDDD
Tuesday
SS
17
Month
^M
6
MSEC
506
MO
06
AM/PM
AM
MON
Jun
am/pm
pm
MONTH
June
A/P
P
Year
YY
01
a/p
p
YYYY
2001



举例:
  
  
代码
显示效果
插入当前日期
$(edtime,$(getvar,date),D.MO.YYYY)

                               
登录/注册后可看大图
比当前日期多3天
$(+,$(edtime,$(getvar,date),D),3).$(edtime,$(getvar,date),MO).$(edtime,$(getvar,date),YYYY)

                               
登录/注册后可看大图
插入当前日期和时间
$(edtime,$(getvar,date),DDD","DDMONYYYY-H:MMam/pm)
  
注意“picture”参数中逗号必须放在引号中,否则它将被当作参数分隔符。

评分

参与人数 2D豆 +10 收起 理由
Lisphk + 5 很给力!经验;技术要点;资料分享奖!
sh_h + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 774个

财富等级: 财运亨通

发表于 2017-10-21 16:00:12 | 显示全部楼层
不错不错,谢谢黄总分享!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5601个

财富等级: 富甲天下

发表于 2017-10-21 17:32:55 | 显示全部楼层
跟着黄大师又学到新知识
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5601个

财富等级: 富甲天下

发表于 2017-10-23 15:06:44 | 显示全部楼层
这个好是好,但不能应用于块中,且该块还不能双击编辑。

点评

怎么会呢?  发表于 2017-10-23 16:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 37个

财富等级: 招财进宝

发表于 2017-10-23 17:20:42 | 显示全部楼层
感谢楼主分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5601个

财富等级: 富甲天下

发表于 2017-10-23 17:31:03 | 显示全部楼层
查着原因了,要运行一下“Rtext”命令,按“Esc”退出后就可以了。
请问,是哪个插件没有加载引起的呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2017-10-24 00:00:55 | 显示全部楼层
谢谢分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2020-9-11 22:07:33 | 显示全部楼层
谢谢分享,好多东西
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 20:11 , Processed in 0.398224 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表