本帖最后由 Free-Lancer 于 2014-10-25 19:39 编辑
设置 XRecord 和 Xdata 类似
单元素的用点对表, 点形式用表 如 ((1 . "adafd") (10 1.0 0.0 0.0) ....)
 - ;|
- 设置 xrecord 追加型
- obj --- all drawing object or dictionary
- name --- string , key
- values --- data 表
- |;
- (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)
- )
- )
- )
- )
|