vla选择集activeselectionset如何使用?
;为什么这个vla-get-activeselectionset有时候会失灵?例如:原因:Automation 错误。未提供说明。
Automation 错误。 调用方法 AddItems (接口 IAcadSelectionSet) 失败
(defun c:dc(/ doc objss ss)
(vl-load-com)
(if(setq ss(ssget))
(progn
(setq doc(vla-get-ActiveDocument(vlax-get-acad-object)))
(setq objss(vla-get-activeselectionset doc))
(vla-wblock doc "D:/Temp.dwg" objss)
(print "文件导出成功!")
)
)
(princ)
)
本帖最后由 yshf 于 2025-5-6 10:02 编辑
或者
<div class="blockcode"><blockquote>(defun c:dca(/ ssa doc setss ents objss ssetObj)
(vl-load-com)
(if (setq ssa (ssget))
(progn
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq setss (vla-get-SelectionSets doc))
(setq ents (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssa))))
(setq objss (vlax-make-safearray vlax-vbObject (cons 0 (1- (length ents)))))
(vlax-safearray-fill objss (mapcar 'vlax-ename->vla-object ents))
(if (vl-catch-all-error-p (setq ssetObj (vl-catch-all-apply 'vla-Add (list setss "WBLOCKSET"))))
(vla-Delete (vla-item setss "WBLOCKSET"))
)
(setq ssetObj (vla-Add setss "WBLOCKSET"))
(vla-AddItems ssetObj objss)
(vla-wblock doc "D:\\Temp.dwg" ssetObj)
(vla-Delete ssetObj)
(print "文件导出成功!")
)
)
(princ)
)
(defun c:dc(/ ssa doc ssetObj objss ni)
(vl-load-com)
(if (setq ssa (ssget))
(progn
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq ssetObj (vla-Add (vla-get-SelectionSets doc) "WBLOCKSET"))
(setq objss (vlax-make-safearray vlax-vbObject (cons 0 (1- (sslength ssa)))))
(repeat (setq ni (sslength ssa))
(setq ni (1- ni))
(vlax-safearray-put-element objss ni (vlax-ename->vla-object (ssname ssa ni)))
)
(vla-AddItems ssetObj objss)
(vla-wblock doc "D:\\Temp.dwg" ssetObj)
(vla-Delete ssetObj)
(print "文件导出成功!")
)
)
(princ)
) yshf 发表于 2025-5-6 09:39
或者
感谢长老回复,不过我还是想了解那个vla-get-activeselectionset函数为什么不能和ssget进行配合?
我那个程序,有时候灵,有时候不灵,不太稳定,我很纳闷 看来还是用wblock命令简洁啊
页:
[1]