CloudJack 发表于 2022-7-5 16:40:46

删除所有布局的对象

我想用Lisp程序来做例行公事。

 
从照片中,我想删除区域A和区域B中的对象,用于图形中的其他布局。
 
我有几十张画来做同样的事情。

CloudJack 发表于 2022-7-5 16:52:37

我在网上发现了一个Lisp程序的单词(不记得在哪里)
(defun C:F4 ( / current_layout doc plotabs plottablist len K ss2)
(setq current_layout (getvar "ctab"))
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for lay (vla-get-Layouts doc)
(setq plotabs (cons (vla-get-name lay) plotabs))
)
(setq plottablist (acad_strlsort plotabs))
(setq len (length plottablist))
(setvar "osmode" 0)
(setq K 0)
(repeat len
(setq name (nth K plottablist))
(if (and (/= name "Model") (/= name current_layout))
        (progn
        (setvar "ctab" name)
        (command "zoom" "E") ;put what you want to here as many lines as you want like (command "erase" "W" 0,0 50,35 "")
        (command "erase" "W" '(250 76) '(422 17) "")
        (command "erase" "W" '(666 70) '(686 60) "")
        ) ;end progn
) ; end if
(setq K (+ K 1))
(setq ss2 '())
) ; end repeat
(setvar "ctab" current_layout)
(princ)
);defun
 
我不想在擦除对象期间切换每个布局。
 
知道如何修改这个lisp吗?

BIGAL 发表于 2022-7-5 17:05:25

如果你想做100,那么使用脚本
 
打开dwg1(加载“F4.lsp”)F4关闭y
打开dwg2(加载“F4.lsp”)F4关闭y

CloudJack 发表于 2022-7-5 17:14:14

它适用于AutoCAD 2013。
 
但是,在AutoCAD 2015中,它将在命令F4后停止。
 
这是我的剧本:
打开dwg1(加载“F4.lsp”)F4 \u qsave \u close
打开dwg2(加载“F4.lsp”)F4 \u qsave \u close
.
.
.
打开dwg100(加载“F4.lsp”)F4 \u qsave \u close
 
我更新的lisp:
(vl-load-com)
(defun ss-union ( s1 s2 / si )
   (cond
       (   (null s1) s2)
       (   (null s2) s1)
       (   (< (sslength s1) (sslength s2))
         (repeat (setq si (sslength s1))
               (ssadd (ssname s1 (setq si (1- si))) s2)
         )
         s2
       )
       (   t
         (repeat (setq si (sslength s2))
               (ssadd (ssname s2 (setq si (1- si))) s1)
         )
         s1
       )
   )
)

(defun C:E1 ( / current_layout doc plotabs plottablist len K ss2 BBP ssg ss ssw1 ssw2)
; (setq current_layout (getvar "ctab"))
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for lay (vla-get-Layouts doc)
(setq plotabs (cons (vla-get-name lay) plotabs))
)
(setq plottablist (acad_strlsort plotabs))
(setq len (length plottablist))
; (setvar "osmode" 0)
(setq K 0)
(repeat len
(setq name (nth K plottablist))
(if (/= name "Model")
        (progn
                (setvar "ctab" name)
                (command "zoom" "E")
                (if (setq ssg (ssget "X" (list '(2 . "Drawing Frame") (cons 410 (getvar "ctab")))))
                        (progn
                                (setq BBP (cdr (assoc 10 (entget (ssname ssg 0)))))
                                (setq BBP (list (car BBP) (cadr BBP)))
                                (setq wp1 (list (+ (car BBP) 254) (+ (cadr BBP) 65)))
                                (setq wp2 (list (+ (car BBP) 420) (+ (cadr BBP) 20)))
                                (setq wp3 (list (+ (car BBP) 665) (+ (cadr BBP) 70)))
                                (setq wp4 (list (+ (car BBP) 684) (+ (cadr BBP) 62)))
                        )
                )
                ; (command "zoom" "E") ;put what you want to here as many lines as you want like (command "erase" "W" 0,0 50,35 "")
                (if (setq ssw1 (ssget "_W" wp1 wp2))
                        (setq ss (ss-union ss ssw1))
                )
                (if (setq ssw2 (ssget "_W" wp3 wp4))
                        (setq ss (ss-union ss ssw2))
                )
                (if ss
                        (progn
                                (command "_erase" ss "")
                                ; (command "pasteclip" '(0 0 0))
                        )
                )
        ) ;end progn
) ; end if
(setq K (+ K 1))
(setq ss2 '())
) ; end repeat
; (command "_qsave")
; (setvar "ctab" current_layout)
(princ)
);defun

BIGAL 发表于 2022-7-5 17:17:03

只是一个猜测(setq ss2’())它没有在任何地方使用。

Grrr 发表于 2022-7-5 17:24:58

Ronjonp在这里做了类似的事情,但它从每个布局中删除了窗口。
然而,cadplayer在那里发布了一个版本来修改选定的布局(使用LM的列表框),但您需要在那里注册。
 

; https://www.theswamp.org/index.php?topic=51868.msg569126#msg569126
(defun c:usewithcaution        (/ p1 p2 ss)
(vl-load-com)
(if (and (= 0 (getvar 'tilemode))
   (setq p1 (getpoint "\nSpecify first corner point: "))
   (setq p2 (getcorner p1 "\nSpecify other corner point: "))
)
(foreach tab (layoutlist)
   (setvar 'ctab tab)
   (and (= 1 (getvar 'cvport)) (vlax-invoke (vlax-get-acad-object) 'zoomwindow p1 p2))
   (if (setq ss (ssget "W" p1 p2 (list (cons 410 tab))))
   (mapcar 'entdel (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
   )
)
)
(princ)
)

BIGAL 发表于 2022-7-5 17:32:27

也可以在脚本中尝试(命令“F4”)或(c:F4)

CloudJack 发表于 2022-7-5 17:48:49

 
运行多个图形后,停止“恢复缓存的视口-重新生成布局”
 
脚本适用于2013年和2014年版本。所以,我并不是在试图解决2015年停止的原因。谢谢你,比格尔。
页: [1]
查看完整版本: 删除所有布局的对象