无名块改为有名块,手中的老出错
www.dimcax.com
;;;将块变为无名块
(defun c:e ( / entnam);!!!块改无名块
(if (setq entnam (car (ko-entsel "\n请选择块:" '((0 . "insert")) (list "\n必须是块,重选."))))
(blk-rename entnam "*u")
(princ "\n你没有选择物体!")
)
(princ)
)
(defun blk-rename (anonblkref bname / doc blks objs idx namedblkdef anonblkde)
(vl-load-com)
(if (= bname "*u")
(vla-put-name (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) anonblkref) bname)
(progn
(setq anonblkref (vlax-ename->vla-object anonblkref))
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq blks (vla-get-blocks doc))
(setq anonblkdef (vla-item blks (vla-get-name anonblkref)))
(setq namedblkdef (vla-add blks (vlax-3d-point '(0 0 0)) bname))
(setq objs (vlax-make-safearray
vlax-vbobject
(cons 0 (1- (vla-get-count anonblkdef)))
)
)
(setq idx 0)
(vlax-for obj anonblkdef
(vlax-safearray-put-element objs idx obj)
(setq idx (1+ idx))
)
(vla-copyobjects doc objs namedblkdef)
(vla-put-origin namedblkdef (vla-get-origin anonblkdef))
(vla-put-name anonblkref bname)
)
)
)
caoyin版主,上面的组合后,怎么你的改无名块会出错啊,,谢谢
d
请选择块:此类型的 lisp 值不能强制转换成 variant: <图元名: 7ec1d8c0>
d
程序是不能这样拼的,建议你读懂程序再拼接
红色部分是有名块的块名(字符串),
(setq anonblkref (vlax-ename->vla-object anonblkref))
块名怎么能这样转换呢
(vla-put-name
(vla-item
(vla-get-blocks (vla-get-activedocument(vlax-get-acad-object)))
"blockname")
"*u")
d
我没有了啦回去再看看,谢谢
d
解决,其实是自己昨天太忙了,所以注意到ko->entsel返回的是图元名
d