更改所有对象的命令
你好我试图在ACAD中执行此命令,但运气不太好。当我手动输入命令时,这些命令可以工作,但当我使用LISP时,命令失败。在“all”命令后失败。
(定义c:cb0()
(命令“-refedit”pause“O”“A”“N”“CHPROP”“all”“LA”“0”“REFCLOSE”“”“”
)
诺埃尔跟踪者 试试这个。。。
(defun c:Test (/ ss i e l n)
;; Tharwat 11.Dec.2013 ;;
(or doc (setq doc (vla-get-activedocument (vlax-get-acad-object))))
(if (setq ss (ssget "_:L" '((0 . "INSERT"))))
(progn
(vla-StartUndoMark doc)
(repeat (setq i (sslength ss))
(setq e (entget (ssname ss (setq i (1- i)))))
(if (not (member (setq n (cdr (assoc 2 e))) l))
(progn
(setq l (cons n l))
(vlax-for x (vla-item (vla-get-blocks doc) n)
(if (/= (vla-get-layer x) "0")
(vla-put-layer x "0")
)
)
)
)
)
(vla-EndUndoMark doc)
(vla-regen doc AcAllViewports)
)
)
(princ)
)
(vl-load-com) 删除括号之间的空格。
(defun c:cb0 ()
(command "-refedit" pause "O" "A" "N" "CHPROP" "all" "" "LA" "0" "" "REFCLOSE" "" "")
)
试试这个,
; Load function, then enter FIXBLOCK to redefine selected blocks
;so that all entities are on layer '0'.
;
(defun c:FIX (/ ss cnt b donelist bredef)
(defun bredef (b / e el)
(setq e (tblobjname "BLOCK" b))
(while e
(setq el (entget e))
(setq el (subst '(8 . "0") (assoc 8 el) el))
(setq el (if (assoc 62 el) (subst '(62 . 0) (assoc 62 el) el) (append el '((62 . 0)))))
(entmake el)
(setq e (entnext e))
)
(if (/= "ENDBLK" (cdr (assoc 0 el))) (entmake '((0 . "ENDBLK") (8 . "0") (62 . 0))))
)
(if (> (logand (cdr (assoc 70 (tblsearch "layer" "0"))) 1) 0)
(princ "\nLayer 0 must be thawed before running FIXBLOCK!\n")
(if (setq ss (ssget '((0 . "INSERT"))))
(progn
(setq cnt (sslength ss))
(while (>= (setq cnt (1- cnt)) 0)
(if (not (member (setq b(cdr (assoc 2 (entget (ssname ss cnt))))) donelist))
(progn
(bredef b)
(setq donelist (cons b donelist))
)
)
)
(princ (strcat "\n" (itoa (sslength ss)) " blocks redefined\n"))
)
(princ "\nNo blocks selected!\n")
)
)
(princ)
)
;End-of-file 另一个简单的程序:
(defun c:b20 ( / e i l n s x )
(if (setq s (ssget '((0 . "INSERT"))))
(repeat (setq i (sslength s))
(if (not (member (setq n (cdr (assoc 2 (entget (ssname s (setq i (1- i))))))) l))
(progn
(setq l (cons n l)
e (tblobjname "block" n)
)
(while (setq e (entnext e))
(setq x (entget e))
(entmod (subst '(8 . "0") (assoc 8 x) x))
)
)
)
)
)
(command "_.regen")
(princ)
) 我试了一下我看到的第一个反应,效果很好。谢谢Tharwart!
@总成_
谢谢你的提示!
随时欢迎你。 令人惊讶的是,上面的代码都不适合我。它说“错误:论点太多”。我的AutoCAD有什么问题?
还有一个额外的请求。。。所有图元的线型都可以是BYLAYER吗?
您一定在上述例程中添加了任何代码? 什么都没有。。。我的AutoCAD设置一定有问题。有什么建议吗?
编辑:它开始工作了。。。我不确定发生了什么事。抱歉给你添麻烦了
页:
[1]
2