找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1235|回复: 5

[原创] 高速读取属性块的数据,还有比这更快的吗?

[复制链接]
发表于 2021-7-5 22:58:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. (defun $get-b-vs-p1-p2$  (PT1   PT3   km-str   lst   /
  2.        acadobj datavalue   doc   ents
  3.        gpcode   p1   p2   ss
  4.       )
  5.   ;高速读取图纸属性块数据
  6.   ;专门为dcjx写的提速函数,用于快速读取图纸中的属性块数据20210705
  7.   (AND
  8.     PT1
  9.     PT3
  10.     (vla-ZoomWindow
  11.       (vlax-get-acad-object)
  12.       (vlax-3d-point PT1)
  13.       (vlax-3d-point PT3)
  14.     )
  15.   )
  16.   (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  17.   (vl-Catch-All-Apply
  18.     'vla-delete
  19.     (LIST (vl-Catch-All-Apply
  20.       'vla-item
  21.       (list (vla-get-SelectionSets doc) "SSET")
  22.     )
  23.     )
  24.   )
  25.   (setq acadObj (vlax-get-acad-object))
  26.   (setq doc (vla-get-ActiveDocument acadObj))
  27.   (setq SS (vla-Add (vla-get-SelectionSets doc) "SSET"))
  28.   (SETQ P1 (vl-Catch-All-Apply 'vlax-3d-point (list PT1)))
  29.   (SETQ P2 (vl-Catch-All-Apply 'vlax-3d-point (list PT3)))
  30.   (vl-catch-all-apply 'vla-Clear (list SS))
  31.   (setq gpCode (vlax-make-safearray vlax-vbInteger '(0 . 0)))
  32.   (vl-Catch-All-Apply
  33.     'vlax-safearray-put-element
  34.     (list gpCode 0 0)
  35.   )
  36.   (setq dataValue (vlax-make-safearray vlax-vbVariant '(0 . 0)))
  37.   (vl-Catch-All-Apply
  38.     'vlax-safearray-put-element
  39.     (list dataValue 0 "INSERT")
  40.   )
  41.   (vl-Catch-All-Apply
  42.     'vla-Select
  43.     (list
  44.       SS acSelectionSetCrossing  P1 P2 gpCode dataValue)
  45.   )
  46.   (if (vl-catch-all-error-p ss)
  47.     (progn (vl-catch-all-apply 'vla-Clear (list SS))
  48.      (setq ss nil)
  49.     )
  50.   )
  51.   (SETQ vss NIL)
  52.   (if ss
  53.     (vlax-for obj ss
  54.       (setq km nil)
  55.       (setq arr nil)
  56.       (setq tbl nil)
  57.       (setq jb nil)
  58.       (setq p nil)
  59.       (setq vs nil)
  60.       (setq km (vl-catch-all-apply
  61.      'vla-get-effectivename
  62.      (list obj)
  63.          )
  64.       )
  65.       (AND (vl-catch-all-error-p KM)
  66.      (setq KM (vl-catch-all-apply 'vla-get-name (list obj)))
  67.       )
  68.       (if
  69.   (or (not km-str)
  70.       (and km km-str (wcmatch km (strcat "[," km-str ",]")))
  71.   )
  72.    (AND
  73.      (setq arr
  74.       (vl-catch-all-apply
  75.         'vlax-variant-value
  76.         (list (vla-GetAttributes obj))
  77.       )
  78.      )
  79.      (not (vl-catch-all-error-p arr))
  80.      (setq tbl (vl-catch-all-apply
  81.            'vlax-safearray->list
  82.            (list arr)
  83.          )
  84.      )
  85.      (not (vl-catch-all-error-p tbl))
  86.      (setq jb (vla-get-handle obj))
  87.      (setq p (vl-catch-all-apply
  88.          'vlax-safearray->list
  89.          (list (vlax-variant-value
  90.            (vla-get-insertionpoint
  91.              obj
  92.            )
  93.          )
  94.          )
  95.        )
  96.      )
  97.      (setq
  98.        vs  (mapcar
  99.       (function
  100.         (lambda (x / v tag t-v)
  101.           (setq v (vla-get-textstring x))
  102.           (if (wcmatch v "`  *")
  103.       (setq v (vl-string-left-trim "  " v))
  104.           )      ;前面有tab空格  
  105.           (if (wcmatch v "` *")
  106.       (setq v (vl-string-left-trim " " v))
  107.           )      ;前面有空格  
  108.           (if (wcmatch v "*`  ")
  109.       (setq v (vl-string-right-trim "  " v))
  110.           )
  111.           ;尾巴上有tab空格  
  112.           (if (wcmatch v "*` ")
  113.       (setq v (vl-string-right-trim " " v))
  114.           )      ;后面有空格  
  115.           (if (or (= v "") (= v " ") (= v "  "))
  116.       nil
  117.       (progn (setq tag (vla-get-tagstring x))
  118.              (if (= tag "选项_001")
  119.          (setq tag "选项")
  120.              )
  121.              (setq t-v (cons tag v))
  122.       )
  123.           )
  124.           t-v
  125.         )
  126.       )
  127.       tbl
  128.     )
  129.      )     
  130.      (setq vs (vl-remove nil vs))
  131.      (setq vs (cons (cons "句柄" jb) vs))
  132.      (setq vs (cons (cons "Ha-Dl" jb) vs))
  133.      (setq vs (cons (cons "插入点Y" (rtos (CADR P) 2 2)) vs))
  134.      (setq vs (cons (cons "插入点X" (rtos (CAR P) 2 2)) vs))
  135.      (setq vs (cons (cons "插入点" p) vs))
  136.      (setq vs (cons (cons "块名" km) vs))
  137.      (setq vs (vl-remove nil vs))
  138.      (set 'vss (cons vs vss))
  139.    )
  140.       )
  141.     )
  142.   )
  143.   (vl-catch-all-apply 'vla-Clear (list SS))
  144.   vss
  145. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2021-7-5 23:33:54 | 显示全部楼层
参数 lst 没有用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

发表于 2021-7-7 08:01:15 | 显示全部楼层
做一个热心并受欢迎的人
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 756个

财富等级: 财运亨通

发表于 2021-7-7 10:25:09 | 显示全部楼层
感谢分享源码,先收藏
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

发表于 2021-7-8 01:54:03 | 显示全部楼层
感谢分享源码,收藏学习一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

发表于 2022-7-13 14:01:52 | 显示全部楼层
用api函数直接就读取了,非常便捷快速的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 08:57 , Processed in 0.203570 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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