本章讲解AutoLisp中的扩展数据相关的操作。
一、注册应用程序名(regapp)
1、函数说明
函数 | 函数说明 |
---|---|
(regapp application) | 为当前 AutoCAD 图形注册一个应用名,为使用扩展对象数据作准备。 |
如果已经注册了一个同名的应用名,该函数返回nil,否则它返回应用名。
如果注册成功,该应用名会被加入到APPID符号表中,该表保留了该图形中所有使用扩展数据的应用名。
2、代码示例
(regapp "xdata") ;; 注册一个名为xdata的应用程序
二、判断应用程序名(snvalid)
1、函数说明
函数 | 函数说明 |
---|---|
(snvalid sym_name [flag]) | 检查组成符号表名的各字符的有效性。 |
snvalid函数检查系统变量EXTNAMES以确定用于活动图形的规则。如果extnames的值为 0,snvalid 使用 AutoCAD 2000
以前版本的符号命名规则。如果extnames的值为 1(缺省值),snvalid使用AutoCAD引入的扩展的符号命名规则。无论 extnames的设置如何,均不允许使用下列命名方式:
- 控制字符和图形字符
- 空字符串
- 用竖杠作为名称的第一个或最后一个字符。
如果extnames的值为 1,AutoLISP对符号表名称的长度不作限制。
2、参数说明
sym_name:字符串,指定符号表的名称。符号表名必须仅由字母、数值字符和美元符 ($)、下划线 (_) 和连字符 (-) 等特殊字符组成。空字符串是无效符号名。
flag
整数,指定 sym_name.中是否可以包含竖线 (|),它可以是:
0 在 sym_name 中不能包含竖线。(缺省值)
1 在 sym_name 中可以包含竖线(但不能是第一个或最后一个字符)
3、返回值
如果 sym_name 是有效的符号表名称,则返回 T,否则返回 nil。
如果 extnames 的值为 1,则除控制字符、图形字符和下表中列出的字符外,可以使用其他任意字符:
符号表名称中不能使用的字符 | |
---|---|
< > | 小于号和大于号 |
/ \ | 斜杠和反斜杠 |
" | 引号 |
: | 分号 |
? | 问号 |
* | 星号 |
| | 竖杠 |
, | 逗点 |
= | 等号 |
` | 后引号 |
; | 分号 (ASCII 59) |
符号表名中可以包含空格。
如果 extnames 的值为 0,符号表名中可以包含大写或小写字母字符(如 A-Z)、数字字符 (0-9)、美元符 ($)、下划线 (_) 和连字符 (-)。
三、添加扩展数据
添加扩展数据的实质其实就是向当前实体的属性列表中新增新的列表项,我们直接通过代码示例来介绍。
;;; 写扩展数据
(defun c:AddXdata()
(setq #ssName (ssget))
(setq #strExtData (getstring "\nPlease Input Xdata Info:"))
(setq #iIndex 0)
(if (and (/= #ssName nil) (/= #strExtData ""))
(progn
(setq #nLength (sslength #ssName))
(repeat #nLength
(setq #eName (ssname #ssName #iIndex))
(setq #iIndex (+ #iIndex 1))
(setq #eData (entget #eName))
(setq #lsList (list -3 (list "NEWDATA" (cons 1000 #strExtData))))
(regapp "NEWDATA")
(setq #extData #lsList)
(setq #eNameNew (list (car #eData) #extData))
(entmod #eNameNew)
(setq #strExtData "")
);end repeat
);end progn
);end if
(princ)
)
四、查看扩展数据
;;; 读扩展数据
(defun c:ReadXdata()
(setq #strExtData (cdr (cadr (cadr (assoc '-3 (entget (car (entsel)) '("NEWDATA")))))))
(alert #strExtData)
(princ)
)