本帖最后由 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))
|