AutoLisp从入门到放弃(十五)

本文详细介绍了AutoLisp中扩展数据的操作,包括注册应用程序名(regapp)、判断应用程序名(snvalid)以及添加和查看扩展数据的函数和代码示例。通过这些操作,可以在AutoCAD图形中管理和使用扩展对象数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章讲解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)
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值