aws 发表于 2025-5-5 08:39:46

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 09:39:05

本帖最后由 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)
)

yshf 发表于 2025-5-6 09:20:13

(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)
)

aws 发表于 2025-5-6 20:17:04

yshf 发表于 2025-5-6 09:39
或者

感谢长老回复,不过我还是想了解那个vla-get-activeselectionset函数为什么不能和ssget进行配合?
我那个程序,有时候灵,有时候不灵,不太稳定,我很纳闷

yanshengjiang 发表于 2025-5-7 16:11:16

看来还是用wblock命令简洁啊
页: [1]
查看完整版本: vla选择集activeselectionset如何使用?