乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 80|回复: 16

[编程交流] 基于块隔离层

[复制链接]

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 08:10:01 | 显示全部楼层 |阅读模式
有没有人有lisp可以隔离或关闭所有绘制了某个名称块的图层?除非它是当前层。
 
例如,我有多个层,层上有一个名为“PartTag”的块。我想用一个单一的点击关闭(或冻结)所有层在这个块驻留。
 
谢谢任何能帮上忙的人
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:13:57 | 显示全部楼层
尝试以下操作:
 
  1. (defun c:TurnOffBlockLayers ( / en in la ls ss )
  2.    (while
  3.        (progn (setvar 'ERRNO 0) (setq en (car (entsel "\nSelect Block: ")))
  4.            (cond
  5.                (   (= 7 (getvar 'ERRNO))
  6.                    (princ "\nMissed, try again.")
  7.                )
  8.                (   (eq 'ENAME (type en))
  9.                    (if (not (eq "INSERT" (cdr (assoc 0 (entget en)))))
  10.                        (princ "\nObject is not a Block.")
  11.                    )
  12.                )
  13.            )
  14.        )
  15.    )
  16.    (if en
  17.        (progn
  18.            (setq ss
  19.                (ssget "_X"
  20.                    (list
  21.                       '(0 . "INSERT")
  22.                        (assoc 2 (entget en))
  23.                        (cons 410
  24.                            (if (= 1 (getvar 'CVPORT))
  25.                                (getvar 'CTAB)
  26.                                "Model"
  27.                            )
  28.                        )
  29.                    )
  30.                )
  31.            )
  32.            (repeat (setq in (sslength ss))
  33.                (setq la (cdr (assoc 8 (entget (ssname ss (setq in (1- in)))))))
  34.                (if (not (member la ls))
  35.                    (setq ls (cons la ls))
  36.                )
  37.            )
  38.            (foreach la ls
  39.                (setq la (entget (tblobjname "LAYER" la)))
  40.                (entmod
  41.                    (subst
  42.                        (cons 62 (- (abs (cdr (assoc 62 la)))))
  43.                        (assoc 62 la)
  44.                        la
  45.                    )
  46.                )
  47.            )
  48.        )
  49.    )
  50.    (princ)
  51. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:18:24 | 显示全部楼层
或者更野蛮一点:
 
 
  1. [b][color=BLACK]([/color][/b]defun c:offins [b][color=FUCHSIA]([/color][/b]/ ss is en ln ll[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not ss[b][color=MAROON])[/color][/b]
  3.             [b][color=MAROON]([/color][/b]/= [b][color=GREEN]([/color][/b]sslength ss[b][color=GREEN])[/color][/b] 1[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.         [b][color=NAVY]([/color][/b]princ [color=#2f4f4f]"\nSelect INSERT:   "[/color][b][color=NAVY])[/color][/b]
  5.         [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  6. [b][color=FUCHSIA]([/color][/b]setq is [b][color=NAVY]([/color][/b]ssget [color=#2f4f4f]"X"[/color] [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"INSERT"[/color][b][color=GREEN])[/color][/b]
  7.                            [b][color=GREEN]([/color][/b]assoc 2 [b][color=BLUE]([/color][/b]entget [b][color=RED]([/color][/b]ssname ss 0[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  8. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq en [b][color=MAROON]([/color][/b]ssname is 0[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  9.         [b][color=NAVY]([/color][/b]setq ln [b][color=MAROON]([/color][/b]cdr [b][color=GREEN]([/color][/b]assoc 8 [b][color=BLUE]([/color][/b]entget en[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  10.         [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]/= ln [b][color=GREEN]([/color][/b]getvar [color=#2f4f4f]"CLAYER"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  11.              [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]member ln ll[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  12.              [b][color=MAROON]([/color][/b]setq ll [b][color=GREEN]([/color][/b]cons ln ll[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  13.         [b][color=NAVY]([/color][/b]ssdel en is[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  14.   [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.LAYER"[/color][b][color=FUCHSIA])[/color][/b]
  15.   [b][color=FUCHSIA]([/color][/b]foreach l ll
  16.     [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_Off"[/color] l[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  17.   [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]""[/color][b][color=FUCHSIA])[/color][/b]
  18.   [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

-大卫
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:23:56 | 显示全部楼层
 
诡异的
 
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:25:10 | 显示全部楼层
你死定了!
 
格罗奥安恩
回复

使用道具 举报

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 08:32:23 | 显示全部楼层
李和大卫,
 
非常感谢这两个版本回答了我的请求。
 
为我节省了更多的时间,所以我真的很感激。
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:35:02 | 显示全部楼层
非常欢迎你,马尼拉·沃尔夫
回复

使用道具 举报

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 08:39:16 | 显示全部楼层
大家好,
 
我经常使用这些LISP,但偶然遇到AutoCAD异常。
我在toolbutton宏中调用David的“Offins”lisp,在选择块以使块图层成为当前图层后,使用AutoCAD的select previous功能选择lisp。这确实有效,除非我在绘图中有数百个块。AutoCAD抛出了以下语句:-
 
选择对象:p
1067已找到
选择对象:
用户输入太长。
 
我的目标是单击一个块,使选定块所在的层位于当前层上,然后关闭该块所在的所有其他层,但保持当前层处于打开状态。
 
我怀疑AutoCAD对上一个命令可以调用的对象数量的限制是硬固定的,那么有没有一种方法可以简单地调整lisp以执行我想要的操作?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 08:41:28 | 显示全部楼层
 
您是否在offins命令中传递“P”?
回复

使用道具 举报

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-6 08:46:58 | 显示全部楼层
 
你好,PBe,
 
我在调用offins命令后调用“P”。这是我的宏:-(哈哈哈-别笑。它几乎成功了)。
 
  1. ^C^C_e;all;;oops;_atttaglay p;;-layer u *;;_layon;(setq ss1 (ssget));\;_ai_molc;!ss1;E !ss1;;oops;_offins p;;_laylock;p;;-layer LO 0;;

 
“p”不适用于TurnOffBlockLayers lisp。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 09:03 , Processed in 1.991729 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表