明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 250|回复: 1

[源码] entget无法读取外部dwg的图元扩展数据的替代方法

[复制链接]
发表于 2024-7-9 22:13 | 显示全部楼层 |阅读模式
本帖最后由 dcl1214 于 2024-7-10 10:18 编辑

有时需要读取外部dwg图纸的扩展,entget无法读取,但是,vla方法是支持的(感谢高老师指点),代码如下:
  1. (defun $kuo-zhan-du-qu-vla$ (object   lst      /        a
  2.                              app      types    v        values
  3.                              values-variant    vs        vss
  4.                              xtype    xvalue
  5.                             )
  6.        ;vla方法读取扩展数据【这个函数主要是用来解决dbx读取外部dwg的时候,entget无法读取扩展数据的问题】
  7.   (setq        xtype nil
  8.         xvalue nil
  9.         vss nil
  10.         app nil
  11.         vs nil
  12.   )
  13.   (cond        ((= (type object) 'vla-object) t)
  14.         ((= (type object) 'ename)
  15.          (setq object (vlax-ename->vla-object object))
  16.         )
  17.         (t (setq object nil))
  18.   )
  19.   (and object
  20.        (progn
  21.          (vl-catch-all-apply
  22.            'vla-getxdata
  23.            (list object "" 'xtype 'xvalue)
  24.          )
  25.          (and xtype
  26.               xvalue
  27.               (progn
  28.                 (setq types (vl-catch-all-apply
  29.                               'vlax-safearray->list
  30.                               (list xtype)
  31.                             )
  32.                 )
  33.                 (setq object nil)
  34.                 (setq values-variant
  35.                        (vl-catch-all-apply
  36.                          'vlax-safearray->list
  37.                          (list xvalue)
  38.                        )
  39.                 )
  40.               )
  41.          )
  42.          (if (vl-catch-all-error-p values-variant)
  43.            (setq values-variant nil)
  44.          )
  45.          (setq values (mapcar 'vlax-variant-value values-variant))         
  46.          (while        (and (setq a (car types))
  47.                      (setq v (car values))
  48.                 )
  49.            (or app (setq app v))
  50.            (and        (not (= a 1001))
  51.                 (progn
  52.                   (and (not (= a 1002))
  53.                        (setq vs (cons (cons a v) vs))
  54.                   )
  55.                 )
  56.            )
  57.            (and        (= (cadr types) 1001)
  58.                 (progn
  59.                   (setq vss (cons (cons app (reverse vs)) vss))
  60.                   (setq vs nil)
  61.                   (setq app nil)
  62.                 )
  63.            )
  64.            (setq types (cdr types))
  65.            (setq values (cdr values))
  66.          )
  67.          (setq vss (cons (cons app (reverse vs)) vss))
  68.          (setq vss (reverse vss))
  69.          (setq vs nil)
  70.        )
  71.   )
  72.   vss
  73. )


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-7-10 09:32 | 显示全部楼层
高老师肯定是桌子公司的卧底
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-7-13 04:19 , Processed in 0.423392 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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