乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 79|回复: 0

[编程交流] 分享!Xrecord功能

[复制链接]

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 22:17:58 | 显示全部楼层 |阅读模式
以下代码源于XDCAD。ORG,作者是自由撰稿人
 
  1. ;;Set Xrecord
  2. ;;bbs.xdcad.org
  3. ;;Author:Free-Lancer
  4. (defun Obj:SetXrecord (obj name        values / _setxrecord xlst xrec dicts xd
  5.                       xt)
  6. (defun _setxrecord (obj lst)
  7.    (vla-setxrecorddata
  8.      obj
  9.      (list->vbarray (mapcar 'car lst) vlax-vbinteger)
  10.      (list->vbarray (mapcar 'cdr lst) vlax-vbvariant)      
  11.    )
  12. )
  13. (if (= (vla-get-objectname obj) "AcDbDictionary")
  14.    (progn
  15.      (vlax-for        d obj
  16.        (if (and (= (vla-get-objectname d) "AcDbXrecord")
  17.                 (= (strcase (vla-get-name d)) (strcase name))
  18.            )
  19.          (setq xrec d)
  20.        )
  21.      )
  22.      (if xrec
  23.        (progn
  24.          (vla-getxrecorddata xrec 'xt 'xd)
  25.          (if xt
  26.            (_setxrecord
  27.              xrec
  28.              (append
  29.                (mapcar        '(lambda (x y)
  30.                           (cons x y)
  31.                         )
  32.                        (safearray-value xt)
  33.                        (mapcar 'variant-value (safearray-value xd))
  34.                )
  35.                values
  36.              )
  37.            )
  38.            (_setxrecord xrec values)
  39.          )
  40.        )
  41.        (progn
  42.          (setq xrec (vla-addxrecord obj name))
  43.          (_setxrecord xrec values)
  44.        )
  45.      )
  46.    )
  47.    (if        (= (vla-get-hasExtensionDictionary obj) :vlax-true)
  48.      (progn
  49.        (setq dicts (vla-GetExtensionDictionary obj))
  50.        (vlax-for dict dicts
  51.          (if (and (= (vla-get-objectname dict) "AcDbXrecord")
  52.                   (= (strcase (vla-get-name dict)) (strcase name))
  53.              )
  54.            (setq xrec dict)
  55.          )
  56.        )
  57.        (if xrec
  58.          (progn
  59.            (vla-getxrecorddata xrec 'xt 'xd)
  60.            (_setxrecord
  61.              xrec
  62.              (append
  63.                (mapcar        '(lambda (x y)
  64.                           (cons x y)
  65.                         )
  66.                        (safearray-value xt)
  67.                        (mapcar 'variant-value (safearray-value xd))
  68.                )
  69.                values
  70.              )
  71.            )
  72.          )
  73.        )
  74.      )
  75.      (progn
  76.        (setq dict (vla-getextensiondictionary obj)
  77.              xrec (vla-addxrecord dict name)
  78.        )
  79.        (_setxrecord xrec values)
  80.      )
  81.    )
  82. )
  83. )

 
;;获取Xrecord
  1. ;; Get Xrecord
  2. ;;bbs.xdcad.org
  3. ;;Author:Free-Lancer
  4. (defun Obj:GetXrecord (obj name / e dicts xd xt lst _getxrecord)
  5. (defun _getxrecord (dc / xt xd)
  6.    (if        (= (vla-get-objectname dc) "AcDbXrecord")
  7.      (progn (vla-getxrecorddata dc 'xt 'xd)
  8.             (if (and xt xd)
  9.               (setq lst
  10.                      (cons
  11.                        (cons (vla-get-name dc)
  12.                              (mapcar
  13.                                '(lambda (x y) (cons x y))
  14.                                (safearray-value xt)
  15.                                (mapcar 'variant-value (safearray-value xd))
  16.                              )
  17.                        )
  18.                        lst
  19.                      )
  20.               )
  21.               (setq lst (cons (vla-get-name dc) lst))
  22.             )
  23.      )
  24.    )
  25. )
  26. (if (= (vla-get-objectname obj) "AcDbDictionary")
  27.    (vlax-for dict obj (_getxrecord dict))
  28.    (if        (= (vla-get-hasExtensionDictionary obj) :vlax-true)
  29.      (progn (setq dicts (vla-GetExtensionDictionary obj))
  30.             (vlax-for dict dicts (_getxrecord dict))
  31.      )
  32.    )
  33. )
  34. (if (= name "*")
  35.    lst
  36.    (vl-remove-if-not
  37.      '(lambda (x) (= (strcase (car x)) (strcase name)))
  38.      lst
  39.    )
  40. )
  41. )

 
;;删除Xrecord
  1. ;;bbs.xdcad.org
  2. ;;Author:Free-Lancer
  3. (defun obj:DeleteXrecord (obj name /)
  4. (if (= (vla-get-objectname obj) "AcDbDictionary")
  5.    (vlax-for d        obj
  6.      (if (= (vla-get-objectname d) "AcDbXrecord")
  7.        (if (= name "*")
  8.          (vla-delete d)
  9.        )
  10.        (if (= (strcase (vla-get-name d)) (strcase name))
  11.          (vla-delete d)
  12.        )
  13.      )
  14.    )
  15.    (if        (vla-get-hasextensiondictionary obj)
  16.      (vlax-for        d (vla-getextensiondictionary obj)
  17.        (if (= (vla-get-objectname d) "AcDbXrecord")
  18.          (if (= name "*")
  19.            (vla-delete d)
  20.          )
  21.          (if (= (strcase (vla-get-name d)) (strcase name))
  22.            (vla-delete d)
  23.          )
  24.        )
  25.      )
  26.    )
  27. )
  28. )

 
;;更换Xrecord
  1. ;;bbs.xdcad.org
  2. ;;Author:Free-Lancer
  3. (defun OBJ:ReplaceXrecord (obj name vars / oldvars lst tf)
  4. (if (setq lst (obj:getxrecord obj name))
  5.    (progn
  6.      (setq oldvars (mapcar 'car vars)
  7.            lst            (mapcar
  8.                      '(lambda (x / ll nx)
  9.                         (if (setq ll
  10.                                    (vl-member-if
  11.                                      '(lambda (a) (equal a x 1e-3))
  12.                                      oldvars
  13.                                    )
  14.                             )
  15.                           (progn
  16.                             (setq
  17.                               nx (cons (car x) (cadr (assoc (car ll) vars)))
  18.                               tf t
  19.                             )
  20.                             (setq vars (vl-remove (car ll) vars))
  21.                             nx
  22.                           )
  23.                           x
  24.                         )
  25.                       )
  26.                      lst
  27.                    )
  28.      )
  29.      (if tf
  30.        (obj:setxrecord obj name lst)
  31.      )
  32.      t
  33.    )
  34. )
  35. )

 
;;删除Xrecord
  1. ;;bbs.xdcad.org
  2. ;;Author:Free-Lancer
  3. (defun Obj:RemoveXrecord (obj name vars / lst)
  4. (if (setq lst (obj:getxrecord obj name))
  5.    (progn
  6.      (mapcar '(lambda (x / el)
  7.                 (if (setq el (vl-member-if
  8.                                '(lambda (a) (equal (cdr a) x 1e-3))
  9.                                lst
  10.                              )
  11.                     )
  12.                   (setq lst (vl-remove (car el) lst)
  13.                         tf  t
  14.                   )
  15.                 )
  16.               )
  17.              vars
  18.      )
  19.      (if tf
  20.        (obj:setxrecord obj name lst)
  21.      )
  22.      t
  23.    )
  24. )
  25. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-20 18:05 , Processed in 3.844628 second(s), 54 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表