laurell 发表于 2022-7-6 07:46:03

AutoLISP删除图层

你好
 
我是AutoLISP的新手,需要编写一个程序来删除文件中的所有层,但这些层除外:夹具形状、检查通道、拱门墙内部(构造)、拱门墙内部、拱门墙外部。到目前为止,我得到了一条错误消息:“错误:输入列表格式错误”
 
 
谢谢你!

BlackBox 发表于 2022-7-6 08:00:47

欢迎来到CADTutor,劳雷尔!
 
您已经考虑过PURGE和LAYDEL命令了吗?
 
至于删除层,你发布的代码有几个错误(没什么大不了的),但我更感兴趣的是了解更多关于你到底想做什么的信息?您的代码删除了所有层上的实体,除了您希望保留的实体,而不是这些实体所在的层。
 
需要更多信息。

Lee Mac 发表于 2022-7-6 08:09:27

以下是一个快速参考,提供了一些常见错误消息的简要说明,以帮助您诊断问题:
 
http://lee-mac.com/errormessages.html

MSasu 发表于 2022-7-6 08:16:56

第一篇文章的代码平衡了偏执,你同时编辑了吗?然而,这一行有一个语法错误-点前面必须有一个空格:
(-4. "NOT>")
 
还有其他以“拱门墙”开头的层吗?如果不是,您可以将筛选器编写为:
(8 . "Fixture-Shapes,CHECKLANE,Arch-Wall-*")

laurell 发表于 2022-7-6 08:26:17

 
谢谢大家的帮助!
 
伦德曼,
我正在尝试从中删除所有不需要的信息。我收到的DWG文件,这样当我导出到时,它们不会使我的计算机陷入困境。PDF并在Illustrator中编辑。我知道我真正需要的唯一信息是在指定的层上。理想情况下,我想删除所有其他层和他们的艺术品。
 
非常感谢。

pBe 发表于 2022-7-6 08:38:12

 
1+吹扫和铺设
 
 
欢迎来到CADTutor,劳雷尔!
 
使用erase命令对您没有任何好处。如果要删除的图层上的布局(而非模型)或块内有实体
 
_Laydel将删除这些实体和层本身,而不考虑空间,唯一需要做的是确保其解锁,而不是当前层。
 
此代码将删除除列表中的层之外的所有层

(defun c:demo(/ aDoc name)
   (setvar 'Clayer "0")
   (repeat 4
         (vla-purgeall
               (setq aDoc (vla-get-ActiveDocument
                                  (vlax-get-acad-object)))))
   (vlax-for
            itm
               (vla-get-layers aDoc)
         (if (and
                     (not (wcmatch
                              (setq name (vla-get-name itm))
                              "*|*"))
                     (not (eq name "0"))
                     (not (member name
                                  '("thislayer1"
                                    "thislayer2"
                                    "thislayer3"))))
               (progn
                     (vla-put-lock itm :vlax-false)
                     (vl-cmdf "_.-laydel" "_N" name "" "_Y"))
               )
         )
   (repeat 4 (vla-purgeall aDoc))
   (princ)
   )

 
现在,如果您只想删除列表中的内容
更换此线路
(not (member name   '("thislayer1" "thislayer2" "thislayer3")))
用这个
5
 
HTH公司

laurell 发表于 2022-7-6 08:48:18

pBe,
 
这真是太棒了!非常感谢。
页: [1]
查看完整版本: AutoLISP删除图层