乐筑天下

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

[综合讨论] 用于解冻冻结的按钮宏

[复制链接]

16

主题

119

帖子

109

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
82
发表于 2022-7-7 00:42:22 | 显示全部楼层
啊!很抱歉我对没有正确阅读这条线索感到内疚。
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-7 00:43:32 | 显示全部楼层
-我一直用这个按钮。解冻所有层。
回复

使用道具 举报

YZ

27

主题

232

帖子

205

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-7 00:48:49 | 显示全部楼层
谢谢你的意见,达加德和马尼拉沃尔夫。
 
作为一个小规模的例子,我附上了我的图层属性管理器的图片。
 
010422wpkl3w5kkkzw4hbb.png
 
我试图实现的是一个按钮宏,它将删除所有冻结的层以及层上的对象。
 
目前,我使用以下步骤缓慢完成这一切:
 
1、锁定所有层的按钮:
  1. ^C^C_layer LO * ^C^C

 
2.然后解冻并解锁冻结的层(在图层属性管理器GUI中),然后选择模型中的所有对象,然后删除。
 
3、点击按钮解锁所有层:
  1. ^C^C_layer U * ^C^C

 
我希望简化第二步。但这通常是macro功能结束的地方,需要开始使用LISP,所以我不抱太大希望。
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-7 00:53:46 | 显示全部楼层
你试过分层行走吗?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-7 00:54:25 | 显示全部楼层
 
只是为了好玩,这是我能做的最好的这么快-我可能需要修改再生步骤-但试一试:
 
  1. (defun c:LAYSWAP  (/ *error* _swapVal _layswap)
  2. (vl-load-com)
  3. (princ "\rLAYSWAP ")
  4. (defun *error*  (msg)
  5.    (if acDoc
  6.      (vla-endundomark acDoc))
  7.    (cond ((not msg))                                                   ; Normal exit
  8.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  9.          ((princ (strcat "\n** Error: " msg " ** "))))                 ; Fatal error, display it
  10.    (princ))
  11. (defun _swapVal  (val)
  12.    (if (= :vlax-true val)
  13.      :vlax-false
  14.      :vlax-true))
  15. (defun _layswap  (oLayer lst)
  16.    (foreach item  lst
  17.      (eval item)))
  18. ((lambda (acDoc cLayer / mode)
  19.     (initget "ALL FREEZE ON LOCK PLOT")
  20.     (if (or (setq mode
  21.                    (getkword
  22.                      "\nSpecify mode [All/Freeze/On/Lock/Plot] <Freeze>: "))
  23.             (not mode))
  24.       (progn
  25.         (vla-startundomark acDoc)
  26.         (vlax-for oLayer  (vla-get-layers acDoc)
  27.           (if (/= (vla-get-name oLayer) cLayer)
  28.             (cond
  29.               ((or (= nil mode) (= "FREEZE" mode))
  30.                (_layswap
  31.                  oLayer
  32.                  (list '(vla-put-freeze
  33.                          oLayer
  34.                          (_swapVal (vla-get-freeze oLayer))))))
  35.               ((= "ALL" mode)
  36.                (_layswap
  37.                  oLayer
  38.                  (list '(vla-put-freeze
  39.                          oLayer
  40.                          (_swapVal (vla-get-freeze oLayer)))
  41.                        '(vla-put-layeron
  42.                          oLayer
  43.                          (_swapVal (vla-get-layeron oLayer)))
  44.                        '(vla-put-lock
  45.                          oLayer
  46.                          (_swapVal (vla-get-lock oLayer)))
  47.                        '(vla-put-plottable
  48.                          oLayer
  49.                          (_swapVal (vla-get-plottable oLayer))))))
  50.               ((= "ON" mode)
  51.                (_layswap
  52.                  oLayer
  53.                  (list '(vla-put-layeron
  54.                          oLayer
  55.                          (_swapVal (vla-get-layeron oLayer))))))
  56.               ((= "LOCK" mode)
  57.                (_layswap
  58.                  oLayer
  59.                  (list '(vla-put-lock
  60.                          oLayer
  61.                          (_swapVal (vla-get-lock oLayer))))))
  62.               ((= "PLOT" mode)
  63.                (_layswap
  64.                  oLayer
  65.                  (list '(vla-put-plottable
  66.                          oLayer
  67.                          (_swapVal (vla-get-plottable oLayer)))))))))
  68.         ;;(vla-regen acDoc acAllViewports)
  69.         (vl-cmdf "._regenall")
  70.         ))
  71.     (*error* nil))
  72.    (vla-get-activedocument (vlax-get-acad-object))
  73.    (getvar 'clayer)))

 
再次执行同一选项的LAYSWAP将“撤消”初始选项。
 
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-7 00:59:25 | 显示全部楼层
 
 
无“全部”(首选项):
  1. (defun c:LayTog (/ *error* lst option)
  2. (defun *error* (msg)
  3.    (and *AcadDoc* (vla-endundomark *AcadDoc*))
  4.    (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
  5.      (princ (strcat "\nError: " msg))
  6.    )
  7. )
  8. (vla-startundomark
  9.    (cond (*AcadDoc*)
  10.          ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  11.    )
  12. )
  13. (initget "Freeze Lock On Plot")
  14. (if (setq option
  15.             (cdr
  16.               (assoc
  17.                 (getkword "\nSpecify toggle option: [Freeze/Lock/On/Plot]: ")
  18.                 (setq lst '(("Freeze" . freeze) ("Lock" . lock) ("On" . layeron) ("Plot" . plottable)))
  19.               )
  20.             )
  21.      )
  22.    (progn (vlax-for layer (vla-get-layers *AcadDoc*)
  23.             (vl-catch-all-apply 'vlax-put (list layer option (~ (vlax-get layer option))))
  24.           )
  25.           (vla-regen *AcadDoc* acActiveViewport)
  26.    )
  27. )
  28. (*error* nil)
  29. (princ)
  30. )

 
“全部”:
  1. (defun c:LayTog2 (/ *error* lst option)
  2. (defun *error* (msg)
  3.    (and *AcadDoc* (vla-endundomark *AcadDoc*))
  4.    (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
  5.      (princ (strcat "\nError: " msg))
  6.    )
  7. )
  8. (vla-startundomark
  9.    (cond (*AcadDoc*)
  10.          ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object))))
  11.    )
  12. )
  13. (initget "All Freeze Lock On Plot")
  14. (if (setq option
  15.             (cdr
  16.               (assoc
  17.                 (getkword "\nSpecify toggle option: [All/Freeze/Lock/On/Plot]: ")
  18.                 (setq lst '(("All" . "All")
  19.                             ("Freeze" . freeze)
  20.                             ("Lock" . lock)
  21.                             ("On" . layeron)
  22.                             ("Plot" . plottable)
  23.                            )
  24.                 )
  25.               )
  26.             )
  27.      )
  28.    (progn (cond ((eq option "All")
  29.                  (setq lst (mapcar 'cdr (cdr lst)))
  30.                  (vlax-for layer (vla-get-layers *AcadDoc*)
  31.                    (foreach opt lst
  32.                      (vl-catch-all-apply 'vlax-put (list layer opt (~ (vlax-get layer opt))))
  33.                    )
  34.                  )
  35.                 )
  36.                 ((vlax-for layer (vla-get-layers *AcadDoc*)
  37.                    (vl-catch-all-apply 'vlax-put (list layer option (~ (vlax-get layer option))))
  38.                  )
  39.                 )
  40.           )
  41.           (vla-regen *AcadDoc* acActiveViewport)
  42.    )
  43. )
  44. (*error* nil)
  45. (princ)
  46. )
回复

使用道具 举报

YZ

27

主题

232

帖子

205

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-7 01:01:40 | 显示全部楼层
谢谢
我在其他方面使用LAYWALK,但在这种情况下它不会切换冻结层。
 
还有RenderMan和alanjt,非常感谢您的投入。在我工作的地方,我们仍然只有LT,所以我无法实施这些。非常抱歉。
 
你怎么这么快就把它们组合起来了?你有使用的代码生成器吗?
回复

使用道具 举报

YZ

27

主题

232

帖子

205

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-7 01:05:05 | 显示全部楼层
好吧,我想我可能简化了逻辑:
 
我想自动(宏、脚本或DIESEL)锁定所有冻结层的过程。我不知道该怎么做。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 22:32 , Processed in 0.345631 second(s), 68 queries .

© 2020-2025 乐筑天下

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