
- ;;说明:添加扩展数据
- ;;参数:e:可以为图元名也可以为有效的图元数据(entget en)
- ;;参数:xdatas:'(("south" "3000" "1112")("south1" "4000" "1112"))
- ;;返回:图元数据
- (defun lea-xadat-put (e xdatas / ty app)
- (setq ty (type e)
- app (mapcar 'car xdatas);每一个
- )
- ; (vl-every 'regapp app);every需要所有项都是真,碰到nil就结束了 ,碰到已注册的就结束了
- (foreach x app
- (if (= (tblsearch "appid" x) nil)
- (regapp x);已注册的就不用注册了
- )
- )
- (if (member ty '(ENAME list))
- (entmod (append
- (if (= ty 'ENAME)(entget e) e)
- (list (cons -3
- (mapcar ' (lambda (x) (cons (car x)
- (mapcar '(lambda (x)
- (cons
- (cond
- ((= (type x) 'str) 1000);字符串
- ((= (type x) 'real) 1040);实数
- (t 1070)
- )
- x
- )
- )
- (cdr x)
- )
- )
- )
- xdatas
- )
- )
- )
- )
- )
-
- )
- )
- ;;说明:获取扩展数据
- ;;参数:en:图元名
- ;;返回:扩展数据列表(("south" "4000" "1112") ("south1" "4000" "11342"))
- (defun lea-xadat-get (en / lst)
- (if (and (= (type en) 'ename)
- (setq lst (cdr (assoc -3 (entget en '("*")))));(("south" (1000 . "4000") (1000 . "1112")) ("south1" (1000 . "4000") (1000 . "11342")))
- )
- (progn
- (mapcar '(lambda (x)
- (mapcar '(lambda (x)
- (if (= (type x) 'list) (cdr x) x)
- )
- x
- )
- )
- lst
- )
- )
- )
- )
网友答: 请问可以用于哪方面的应用?网友答:
lxl304712346 发表于 2025-9-23 16:45
请问可以用于哪方面的应用?
可以将数据保存到图元里网友答:
lxl304712346 发表于 2025-9-23 16:45
请问可以用于哪方面的应用?
可以把数据存储里边,然后在用的时候提取出来,但是这个属性CAD绘图界面是不显示的,和字典的一样的。如果扩展数据多了,DWG文件会很大。网友答: 图元的分解和合并好像会影响扩展数据的跟随,不知道有什么好的解决方案吗网友答: 感谢大佬分享网友答: 本帖最后由 llsheng_73 于 2025-9-24 19:15 编辑

- (defun getxdata(e app n / b);|app为已注册应用名,""返回图元对象的所有应用名下的数据 ,n指定返回几项,可用于强行对齐字段,nil按实际项数返回|;
- (if(and(or(=(type e)'vla-object)(setq e(vlax-ename->vla-object e)))
- (not(VL-CATCH-ALL-ERROR-P(VL-CATCH-ALL-APPLY(function vla-getxdata)(list e app'b'b))))b)
- (mapcar(function vlax-variant-value)(vlax-safearray->list b))
- (progn(while(<(length b)n)(setq b(cons""b)))(cons app b))))
- (defun addxdatas(e doc app / apps xtype xapp);|doc,图元对象e所在文档对象,方便跨图操作或对DBX的图元对象进行处理,app(("app1" "value1""value2""value3")("app2")("app3" "a3v1""a3v2""a3v3""a3v4"))应用名后为该应用后要加入的数据,无数据的情况下去掉该应用的数据如("app2")|;
- (setq apps(vlax-get-property doc 'RegisteredApplications))
- (mapcar(function(lambda(x)(vlax-invoke-method apps 'add(car x))t))app)
- (or(=(type e)'vla-object)(setq e(vlax-ename->vla-object e)))
- (setq xtype(vlax-safearray-fill(vlax-make-safearray 2'(0 . 0))'(1001))xapp(vlax-make-safearray 12'(0 . 0)))
- (vl-some(function(lambda(a / xtype n)
- (setq n(length a)xtype(cons 1001(mapcar(function(lambda(x)(cond((=(setq x(type x))'str)1000)((= x'int)1071)((= x'real)1040))))(cdr a))))
- (vlax-invoke-method e(function setxdata)(vlax-safearray-fill(vlax-make-safearray 2(cons 1 n))xtype)
- (vlax-safearray-fill(vlax-make-safearray 12(cons 1 n))a))))app))