NoelStalker 发表于 2022-7-5 23:51:17

更改所有对象的命令

你好
 
我试图在ACAD中执行此命令,但运气不太好。当我手动输入命令时,这些命令可以工作,但当我使用LISP时,命令失败。在“all”命令后失败。
 
(定义c:cb0()
(命令“-refedit”pause“O”“A”“N”“CHPROP”“all”“LA”“0”“REFCLOSE”“”“”
)
 
诺埃尔跟踪者

Tharwat 发表于 2022-7-6 00:00:42

试试这个。。。
 

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

GP_ 发表于 2022-7-6 00:05:21

删除括号之间的空格。
 

(defun c:cb0 ()
   (command "-refedit" pause "O" "A" "N" "CHPROP" "all" "" "LA" "0" "" "REFCLOSE" "" "")
)

mostafa badran 发表于 2022-7-6 00:09:28

试试这个,

; 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

Lee Mac 发表于 2022-7-6 00:14:05

另一个简单的程序:
(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)
)

NoelStalker 发表于 2022-7-6 00:21:18

我试了一下我看到的第一个反应,效果很好。谢谢Tharwart!
 
@总成_
 
谢谢你的提示!

Tharwat 发表于 2022-7-6 00:26:05

 
随时欢迎你。

shailujp 发表于 2022-7-6 00:27:40

令人惊讶的是,上面的代码都不适合我。它说“错误:论点太多”。我的AutoCAD有什么问题?
还有一个额外的请求。。。所有图元的线型都可以是BYLAYER吗?

Tharwat 发表于 2022-7-6 00:35:13

 
您一定在上述例程中添加了任何代码?

shailujp 发表于 2022-7-6 00:39:33

什么都没有。。。我的AutoCAD设置一定有问题。有什么建议吗?
 
编辑:它开始工作了。。。我不确定发生了什么事。抱歉给你添麻烦了
页: [1] 2
查看完整版本: 更改所有对象的命令