乐筑天下

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

[编程交流] 用于删除特定

[复制链接]

55

主题

293

帖子

239

银币

后起之秀

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

铜币
275
发表于 2022-7-6 10:07:24 | 显示全部楼层 |阅读模式
你好
 
哪些代码可以删除我可能包含在例程中的特定层名称?
 
非常感谢。
 
迈克尔
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:17:32 | 显示全部楼层
最简单的方法可能是使用VL,但为了避免错误,您必须首先确保该层没有以任何方式被引用。
 
此外,档案中还有:
 
http://www.cadtutor.net/forum/showthread.php?2022-删除层%28s%29
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:31:20 | 显示全部楼层
我不久前也写过这样的话:
 
  1. (defun c:test nil
  2. (LM:DeleteLayersIf "*")
  3. (princ)
  4. )
  5. ;;-----------------=={ Delete Layers If }==-------------------;;
  6. ;;                                                            ;;
  7. ;;  Deletes layers in a drawing if the layer name matches a   ;;
  8. ;;  wildcard string                                           ;;
  9. ;;------------------------------------------------------------;;
  10. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  11. ;;------------------------------------------------------------;;
  12. ;;  Arguments:                                                ;;
  13. ;;  wcstr - wildcard string to identify layers to delete      ;;
  14. ;;------------------------------------------------------------;;
  15. (defun LM:DeleteLayersIf ( wcstr / layers locked ss )
  16. ;; © Lee Mac 2010
  17. (setq layers
  18.    (vla-get-layers
  19.      (vla-get-ActiveDocument
  20.        (vlax-get-acad-object)
  21.      )
  22.    )
  23. )
  24. (foreach x (setq locked (LM:GetLocked layers))
  25.    (vla-put-lock x :vlax-false)
  26. )
  27. (setvar 'CLAYER "0")
  28. (if (setq ss (ssget "_X" (list (cons 8 wcstr))))
  29.    (
  30.      (lambda ( i / e )
  31.        (while (setq e (ssname ss (setq i (1+ i))))
  32.          (entdel e)
  33.        )
  34.      )
  35.      -1
  36.    )
  37. )
  38. (vlax-for l layers
  39.    (if (wcmatch (vla-get-name l) wcstr)
  40.      (LM:CatchApply vla-delete (list l))
  41.    )
  42. )
  43. (foreach x locked
  44.    (LM:CatchApply vla-put-lock (list x :vlax-true))
  45. )
  46. (princ)
  47. )
  48. ;;-----------------=={ Get Locked Layers }==------------------;;
  49. ;;                                                            ;;
  50. ;;  Returns a list of VLA Layer Objects locked within the     ;;
  51. ;;  current drawing                                           ;;
  52. ;;------------------------------------------------------------;;
  53. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  54. ;;------------------------------------------------------------;;
  55. ;;  Arguments:                                                ;;
  56. ;;  layers - the layers collection for the current drawing    ;;
  57. ;;------------------------------------------------------------;;
  58. ;;  Returns:  List of VLA Layer Objects, else nil             ;;
  59. ;;------------------------------------------------------------;;
  60. (defun LM:GetLocked ( layers )
  61. ;; © Lee Mac 2010
  62. (vlax-for l layers
  63.    (if (eq :vlax-true (vla-get-lock l))
  64.      (setq locked (cons l locked))
  65.    )
  66. )
  67. locked
  68. )
  69. ;;---------------------=={ Catch Apply }==--------------------;;
  70. ;;                                                            ;;
  71. ;;  Applies a function to a list of arguments and catches     ;;
  72. ;;  an exception.                                             ;;
  73. ;;------------------------------------------------------------;;
  74. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  75. ;;------------------------------------------------------------;;
  76. ;;  Arguments:                                                ;;
  77. ;;  foo  - function to be applied                             ;;
  78. ;;  args - list of arguments to be supplied to foo            ;;
  79. ;;------------------------------------------------------------;;
  80. ;;  Returns:  Result of applying foo, else nil if exception   ;;
  81. ;;------------------------------------------------------------;;
  82. (defun LM:CatchApply ( foo args / result )
  83. ;; © Lee Mac 2010
  84. (if
  85.    (not
  86.      (vl-catch-all-error-p
  87.        (setq result
  88.          (vl-catch-all-apply (function foo) args)
  89.        )
  90.      )
  91.    )
  92.    result
  93. )
  94. )
回复

使用道具 举报

55

主题

293

帖子

239

银币

后起之秀

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

铜币
275
发表于 2022-7-6 10:37:59 | 显示全部楼层
李的精彩套路。
 
非常感谢。
 
迈克尔
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:46:13 | 显示全部楼层
不客气,迈克尔
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:52:28 | 显示全部楼层
只是一个问题。。。如果这些层中的一个或多个层上的块中存在实体,会发生什么?
 
然后,为了使lisp尽可能简单,为什么不简单地使用LayDel命令呢?
回复

使用道具 举报

55

主题

293

帖子

239

银币

后起之秀

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

铜币
275
发表于 2022-7-6 11:03:14 | 显示全部楼层
 
关于区块内实体的问题很好,这就是我今天想要检查的,但我没有检查,因为我太忙了。
 
 
我没有使用命令调用,因为我不想在我的例程中的代码中添加命令调用,所以要用可能
单独使用Lisp代码会更强大、更好,对于我这个初学者来说,我希望熟悉Lisp而不是依赖它
的命令调用。
 
非常感谢irneb先生
 
迈克尔
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 11:13:26 | 显示全部楼层
没问题。。。我只是建议您在处理DWG中的所有块定义时要小心一点。修改动态块引用时生成的未命名块之类的内容可以(通常也会)与原始动态块定义解除链接。因此,诀窍是试着找出哪些块是不可触摸的。
 
尽管如此,获取块定义的常规ALisp方法(即使用tblsearch、tblobjname、tblnext等)仅给出DWG内的一些块定义。获取所有控件的另一种方法是单步执行ActiveX块集合。要了解VLisp的一些内容,请参阅Lee的有用帖子:http://www.cadtutor.net/forum/showthread.php?53374-xref clip boundry&p=361940&viewfull=1#post361940
 
基本上,当前图形(或者更确切地说是ActiveDocument)有一个称为块的特性。这是块定义的集合,它们还包括模型空间和所有图纸空间块。然后,每个块定义也是该定义内对象的集合。您可以使用vlax for函数快速轻松地逐步完成集合。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 21:07 , Processed in 0.633310 second(s), 68 queries .

© 2020-2025 乐筑天下

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