乐筑天下

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

[编程交流] 帮助:Lisp隔离一组

[复制链接]

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 22:43:18 | 显示全部楼层
 
如果你在我的第一篇文章中提到“……(通过添加到lisp)”,我实际上是指寻找一个独立的lisp,在那里我可以输入该lisp;预定义的图层名,用于在运行lisp时隔离这些图层。
 
我希望这更清楚。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 22:47:26 | 显示全部楼层
看一看
 
  1. (defun c:Test ( / lays l c n e)
  2. ;;    Tharwat 17.Nov.2014            ;;
  3. ;; --------------------------        ;;
  4. ;; Isolate a specifc list of         ;;
  5. ;; Layer names .                ;;
  6. [color=red]  (setq lays '("Layer1" "Layer2" "Layer3")) ;; < Change this list of layer names to meet your needs .[/color]
  7. (while (setq l (tblnext "LAYER" (not l)))
  8.    (setq c (cdr (assoc 62
  9.                        (setq e
  10.                               (entget (tblobjname "LAYER" (setq n (cdr (assoc 2 l)))))
  11.                        )
  12.                 )
  13.            )
  14.    )
  15.    (if (member n lays)
  16.      (if (minusp c)
  17.        (entmod (subst (cons 62 (abs c)) (assoc 62 e) e))
  18.      )
  19.      (if (not (minusp c))
  20.        (entmod (subst (cons 62 (- c)) (assoc 62 e) e))
  21.      )
  22.    )
  23. )
  24. (princ)
  25. )
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 22:50:44 | 显示全部楼层
 
它成功了。它确实隔离了所需的层。但是unisolate命令在“隔离”之前不会恢复原始分层设置?
 
它可以包含在你写的lisp中吗?
 
抱歉没有说清楚。
 
基本上我需要隔离一个预定义的层,在我修改了图纸后,我希望他们回到图纸“隔离”之前的状态
 
我没有提到Earler,因为我认为Unisolite命令会起作用。
 
谢谢
回复

使用道具 举报

YZ

27

主题

232

帖子

205

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-5 22:55:04 | 显示全部楼层
有一个名为LAYERP的命令
 
它将恢复以前的图层设置。
 
我总是返回到所有层打开,但如果你有更复杂的设置,并想返回到一些被打开和一些被关闭,然后尝试LAYERP。
 
在宏开始时将变量“Expert”设置为3将阻止AutoCAD询问您是否确实要关闭当前图层。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 22:57:54 | 显示全部楼层
 
你可以找这样的东西吗?
 
注意:不要忘记根据您的图层名更改图层名列表。
 
  1. (defun c:[color=red]Test-1[/color] (/ l n lst)
  2. (setq *Lays_Status1* nil
  3.        *Lays_Status2* nil
  4.        l              '([color=magenta]"Layer1" "Layer3" "Layer5"[/color])
  5. )
  6. (vlax-for x (vla-get-layers
  7.                (vla-get-activedocument (vlax-get-acad-object))
  8.              )
  9.    (if (member (setq n (vla-get-name x)) l)
  10.      (progn
  11.        (setq *Lays_Status1*
  12.               (cons (list n (vla-get-layeron x))
  13.                     *Lays_Status1*
  14.               )
  15.        )
  16.        (vla-put-layeron x :vlax-true)
  17.      )
  18.      (progn
  19.        (setq *Lays_Status2*
  20.               (cons (list n (vla-get-layeron x))
  21.                     *Lays_Status2*
  22.               )
  23.        )
  24.        (vla-put-layeron x :vlax-false)
  25.      )
  26.    )
  27. )
  28. (princ)
  29. )
  30. ;;                                             ;;
  31. (defun c:[color=blue]Test-2[/color] (/ l n as)
  32. (setq l '([color=magenta]"Layer1" "Layer3" "Layer5"[/color]))
  33. (if (and *Lays_Status1* *Lays_Status2*)
  34.    (vlax-for x (vla-get-layers
  35.                  (vla-get-activedocument (vlax-get-acad-object))
  36.                )
  37.      (cond ((setq as (assoc (setq n (vla-get-name x)) *Lays_Status1*))
  38.             (vla-put-layeron x (cadr as))
  39.            )
  40.            ((setq as (assoc (setq n (vla-get-name x)) *Lays_Status2*))
  41.             (vla-put-layeron x (cadr as))
  42.            )
  43.      )
  44.    )
  45. )
  46. (setq *Lays_Status1* nil
  47.        *Lays_Status2* nil
  48. )
  49. (princ)
  50. )(vl-load-com)
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 22:59:03 | 显示全部楼层
 
凉的这或多或少解决了我的问题。我将为LAYERP制作另一个宏&我应该很好。万岁!!
 
顺便说一句,我检查了我的专家设置,它是0。但它仍然没有问我。
 
谢谢兄弟。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:01:28 | 显示全部楼层
 
假设您使用的是标准版本的AutoCAD,其中LAYISO命令可用,请尝试以下操作:
  1. (defun c:mylayiso ( / lay sel )
  2.    (setq lay "layer1,layer2,layer3")
  3.    (if (setq sel (ssget "_X" (list (cons 8 lay) (if (= 1 (getvar 'cvport)) (cons 410 (getvar 'ctab)) '(410 . "Model")))))
  4.        (command "_.layiso" sel "")
  5.    )
  6.    (princ)
  7. )

然后,可以使用LAYUNISO命令来隔离层。
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 23:06:47 | 显示全部楼层
 
谢谢塔瓦。它成功了。这将非常有用。
 
谢谢李。它也起作用。
 
我也很喜欢你的&如果你能在纸空间(布局选项卡)中使用它,那就更好了。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:07:44 | 显示全部楼层
 
对你很好-不客气。
回复

使用道具 举报

48

主题

304

帖子

256

银币

后起之秀

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

铜币
240
发表于 2022-7-5 23:10:59 | 显示全部楼层
我喜欢再次打开这个线程,因为我经常发现,我遇到的层不是固定的层名称,而是共享相同名称但略有不同的层。
那么有没有可能合并一个通配符名称,例如*rev*
 
谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:25 , Processed in 0.635382 second(s), 70 queries .

© 2020-2025 乐筑天下

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