乐筑天下

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

[编程交流] Delete Layer and it´s contents

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:32:44 | 显示全部楼层
Coincidentally...
 
see here:
 
http://www.cadtutor.net/forum/showthread.php?t=33191
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:37:23 | 显示全部楼层
Hi,Lee~
 
Is this a subroutine ?
 
Would u please tell me how to run it directly?
 
Thanks ~
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:39:22 | 显示全部楼层
Hi Hunter,
 
Yes, it is a sub-function, and requires one argument - namely the layer name.
 
Something like this:
 
  1. (defun DeleteLayer  (Name / layCol dLay oVal) (vl-load-com) (if (and (/= Name "0")      (/= (strcase Name) (getvar "CLAYER")))    (progn      (setq layCol (vla-get-Layers             (vla-get-ActiveDocument           (vlax-get-acad-object))))      (if (vl-catch-all-error-p        (setq dLay    (vl-catch-all-apply 'vla-Item             (list layCol (strcat Name)))))    (princ "\nLayer does not exist! ")    (if (vl-catch-all-error-p          (vl-catch-all-apply 'vla-Delete (list dLay)))      (princ "\nCan't delete layer in use! ")      (setq oVal T))))    (princ "\nCan't delete active layer or layer "0"! ")) oVal)(defun c:test (/ lay) (setq lay (getstring "\nType Name of Layer...")) (DeleteLayer lay) (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:43:44 | 显示全部楼层
I suppose you could also include coding to delete everything on that layer before deleting the layer...
 
  1. (defun DeleteLayer  (Name / layCol dLay oVal) (vl-load-com) (if (and (/= Name "0")      (/= (strcase Name) (getvar "CLAYER")))    (progn      (setq layCol (vla-get-Layers             (vla-get-ActiveDocument           (vlax-get-acad-object))))      (if (vl-catch-all-error-p        (setq dLay    (vl-catch-all-apply 'vla-Item             (list layCol (strcat Name)))))    (princ "\nLayer does not exist! ")    (if (vl-catch-all-error-p          (vl-catch-all-apply 'vla-Delete (list dLay)))      (princ "\nCan't delete layer in use! ")      (setq oVal T))))    (princ "\nCan't delete active layer or layer "0"! ")) oVal)(defun c:test (/ lay ss) (setq lay (getstring "\nType Name of Layer...")) (setq ss (mapcar 'cadr (ssnamex (ssget "X" (list (cons 8 lay)))))) (mapcar 'entdel ss) (DeleteLayer lay) (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:46:10 | 显示全部楼层
Excuse my last post, doesn't allow for an empty selection set... may return error lseltp nil.
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:50:13 | 显示全部楼层
You could compress the code into this:
 
  1. (defun DeleteLayer  (Name / ss) (vl-load-com) (if (and (/= Name "0") (tblsearch "LAYER" Name)      (/= (strcase Name) (getvar "CLAYER")))   (progn   (if    (setq ss (ssget "X" (list (cons 8 lay))))     (mapcar 'entdel (mapcar 'cadr (ssnamex ss))))   (if    (vl-catch-all-error-p     (vl-catch-all-apply 'vla-Delete       (list (vlax-ename->vla-object (tblobjname "LAYER" Name)))))     (princ "\nError Deleting Layer")))   (princ "\nLayer not found or Current Layer or Layer "0"")))(defun c:test (/ lay) (setq lay (getstring "\nSpecify Layer to Delete...")) (DeleteLayer lay) (princ))
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:52:04 | 显示全部楼层
Hi, Lee:
Thanks for your kindly reply~
It's really appreciated!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:57:34 | 显示全部楼层
No Problems Hunter, did my last code function properly?
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:58:59 | 显示全部楼层
Yeah, it works fine~
 
And it would be perfect if there would be a dialogue box to selecte the layers:)
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:03:10 | 显示全部楼层
Haha, you love your Dialog Boxes
 
I could create one for it, but, tbh, isn't this the same as just going into the layer manager and deleting the layer from there?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 21:00 , Processed in 0.746211 second(s), 70 queries .

© 2020-2025 乐筑天下

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