以下代码源于XDCAD。ORG,作者是自由撰稿人
- ;;Set Xrecord
- ;;bbs.xdcad.org
- ;;Author:Free-Lancer
- (defun Obj:SetXrecord (obj name values / _setxrecord xlst xrec dicts xd
- xt)
- (defun _setxrecord (obj lst)
- (vla-setxrecorddata
- obj
- (list->vbarray (mapcar 'car lst) vlax-vbinteger)
- (list->vbarray (mapcar 'cdr lst) vlax-vbvariant)
- )
- )
- (if (= (vla-get-objectname obj) "AcDbDictionary")
- (progn
- (vlax-for d obj
- (if (and (= (vla-get-objectname d) "AcDbXrecord")
- (= (strcase (vla-get-name d)) (strcase name))
- )
- (setq xrec d)
- )
- )
- (if xrec
- (progn
- (vla-getxrecorddata xrec 'xt 'xd)
- (if xt
- (_setxrecord
- xrec
- (append
- (mapcar '(lambda (x y)
- (cons x y)
- )
- (safearray-value xt)
- (mapcar 'variant-value (safearray-value xd))
- )
- values
- )
- )
- (_setxrecord xrec values)
- )
- )
- (progn
- (setq xrec (vla-addxrecord obj name))
- (_setxrecord xrec values)
- )
- )
- )
- (if (= (vla-get-hasExtensionDictionary obj) :vlax-true)
- (progn
- (setq dicts (vla-GetExtensionDictionary obj))
- (vlax-for dict dicts
- (if (and (= (vla-get-objectname dict) "AcDbXrecord")
- (= (strcase (vla-get-name dict)) (strcase name))
- )
- (setq xrec dict)
- )
- )
- (if xrec
- (progn
- (vla-getxrecorddata xrec 'xt 'xd)
- (_setxrecord
- xrec
- (append
- (mapcar '(lambda (x y)
- (cons x y)
- )
- (safearray-value xt)
- (mapcar 'variant-value (safearray-value xd))
- )
- values
- )
- )
- )
- )
- )
- (progn
- (setq dict (vla-getextensiondictionary obj)
- xrec (vla-addxrecord dict name)
- )
- (_setxrecord xrec values)
- )
- )
- )
- )
;;获取Xrecord
|