找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2696|回复: 36

[LISP程序]:几个常用层处理实用程序

[复制链接]
发表于 2003-7-17 16:41:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. ;;;**************************************************************************
  2. ;;;1.删除某个层
  3. (defun c:hqddellayer ()
  4.   (vl-load-com)
  5.   (setq acadObject (vlax-get-acad-object))
  6.   (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  7.   (setq LayersObj  (vla-get-layers acadDocument ))
  8.   (setq actlaystr (vla-get-name (vla-get-activeLayer acadDocument)))
  9.   (setq k T)
  10.   (while k
  11.       (setq layname (getstring "\n请输入要删除的层名<退出>: "))
  12.       (if (/= layname "")
  13.           (progn            
  14.              (setq vlalay  (vl-catch-all-apply 'vla-item (list LayersObj layname)))
  15.              (if (vl-catch-all-error-p vlalay);;判断层是否存在
  16.                  (prompt (strcat "\n" layname " 层不存在,请重新输入."))
  17.                  (progn
  18.                     (if (and (/= layname actlaystr) (/= layname "0"))
  19.                         (progn
  20.                            (if (ssget "X" (list (cons 8 layname)))
  21.                                (princ "\n图层中含有实体,不能删除!")
  22.                                (progn
  23.                                   (vla-delete vlalay)
  24.                                   (princ (strcat "\n已成功删除" layname "层!"))
  25.                                )
  26.                            )
  27.                         )
  28.                         (princ "\n不能当删除前层和 0 层!")
  29.                     )   
  30.                 )
  31.             )     
  32.          )
  33.          (setq k nil)
  34.      )
  35.   )
  36.   (princ)
  37. )
  38. ;;;**************************************************************************
  39. ;;;2.关闭选取实体所在层
  40. (defun c:hqdsellayoff ()
  41.   (vl-load-com)
  42.   (setq acadObject (vlax-get-acad-object))
  43.   (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  44.   (setq LayersObj  (vla-get-layers acadDocument ))
  45.   (setq k T)
  46.   (while k
  47.          (setq  layent  (entsel "\n请选取要关闭层中的一个实体<退出>: "))
  48.          (if layent
  49.                 (progn
  50.                       (setq  layent  (car   layent))
  51.                       (setq  layentvla  (vlax-ename->vla-object  layent))
  52.                       (setq laystr (vla-get-layer  layentvla))
  53.                       (vla-put-layeron (vla-item LayersObj  laystr) :vlax-False)            
  54.                )
  55.                (setq k nil)
  56.            )
  57.   )
  58.   (princ)
  59. )
  60. ;;;**************************************************************************
  61. ;;;3.打开所有层
  62. (defun c:hqdalllayon ()
  63.   (vl-load-com)
  64.   (setq acadObject (vlax-get-acad-object))
  65.   (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  66.   (setq LayersObj  (vla-get-layers acadDocument ))
  67.   (vlax-for lay LayersObj
  68.          ; (setq layvla (vla-item LayersObj (vla-get-name lay)))
  69.         ; (vla-put-layeron  layvla  :vlax-True)
  70.          (vla-put-layeron  lay  :vlax-True)
  71.   )
  72.   (princ)
  73. )

  74. ;;;**************************************************************************
  75. ;;;4.冻结选取实体所在层
  76. (defun c:hqdsellayfreeze ()
  77.   (vl-load-com)
  78.   (setq acadObject (vlax-get-acad-object))
  79.   (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  80.   (setq LayersObj  (vla-get-layers acadDocument ))
  81.   (setq k T)
  82.   (while k
  83.             (setq  layent  (entsel "\n请选取要冻结层中的一个实体<退出>: "))
  84.             (if   layent
  85.                 (progn
  86.                       (setq  layent  (car   layent))
  87.                       (setq  layentvla  (vlax-ename->vla-object  layent))
  88.                       (setq laystr (vla-get-layer  layentvla))
  89.                       (setq actlaystr (vla-get-name (vla-get-activeLayer acadDocument)))
  90.                       (if ( /=   laystr  actlaystr)
  91.                           (vla-put-freeze (vla-item LayersObj  laystr) :vlax-True)
  92.                           (princ "\n不能冻结当前层!")
  93.                      )         
  94.                )
  95.                (setq k nil)
  96.            )
  97.   )
  98.   (princ)
  99. )
  100. ;;;**************************************************************************
  101. ;;;5.解冻所有层
  102. (defun c:hqdallfreeze ()
  103.    (vl-load-com)
  104.   (setq acadObject (vlax-get-acad-object))
  105.   (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  106.   (setq LayersObj  (vla-get-layers acadDocument ))
  107.   (setq actlaystr (vla-get-name (vla-get-activeLayer acadDocument)))
  108.   (vlax-for lay LayersObj
  109.              (if ( /=   (vla-get-name lay)  actlaystr)
  110.                  (vla-put-freeze  lay :vlax-false)
  111.             )
  112.   )
  113. (vla-regen acadDocument acAllViewPorts)
  114.   (princ)
  115. )
  116. ;;;**************************************************************************
  117. ;;;6.锁定或解锁选取实体所在层
  118. (defun c:hqdsellaylock ()
  119.   (vl-load-com)
  120.   (setq acadObject (vlax-get-acad-object))
  121.   (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  122.   (setq LayersObj  (vla-get-layers acadDocument ))
  123.   (setq k T)
  124.   (while k
  125.             (setq  layent  (entsel "\n请选取要锁定或解锁层中的一个实体<退出>: "))
  126.             (if   layent
  127.                 (progn
  128.                       (setq  layent  (car   layent))
  129.                       (setq  layentvla  (vlax-ename->vla-object  layent))
  130.                       (setq laystr (vla-get-layer  layentvla))
  131.                       (setq layvla (vla-item LayersObj  laystr))
  132.                       (setq laylock (vla-get-lock  layvla))
  133.                       (if (=  laylock :vlax-false)
  134.                           (progn
  135.                                 (vla-put-lock  layvla  :vlax-True)
  136.                                 (princ (strcat "\n" laystr  " 层已锁"))
  137.                          )
  138.                         ( progn
  139.                               (vla-put-lock  layvla  :vlax-false)
  140.                                (princ (strcat "\n"  laystr  " 层已解锁"))
  141.                        )
  142.                      )         
  143.                )
  144.                (setq k nil)
  145.            )
  146.   )
  147.   (princ)
  148. )
  149. ;;;**************************************************************************
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1915个

财富等级: 堆金积玉

发表于 2003-7-17 18:20:36 | 显示全部楼层
再来一个关闭除所选实体所在层以外的所有层,怎么样?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-18 23:24:51 | 显示全部楼层
你们的想法很有用,但是在R14的BOUNS里面全都有啊。还可以定义快捷键的,用起来十分方便的,不用编这几个LISP了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-7-19 15:31:33 | 显示全部楼层
最初由 zhang8755 发布
[B]再来一个关闭除所选实体所在层以外的所有层,怎么样? [/B]


  1. (defun c:lnn(/ q)
  2. (setq q(car(entsel "pick:")))
  3. (setq q(cdr(assoc 8(entget q))))
  4. (setvar "CLAYER" q)
  5. (command "-layer" "off" "*"  "n" "")
  6. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-19 17:35:49 | 显示全部楼层
太谢谢,最近我正为这个发愁呢!
现在终于可以解决了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-27 08:46:19 | 显示全部楼层
哈哈,又是关于ActiveX的,谢谢各位了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-4 15:04:10 | 显示全部楼层
express中的工具
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-4 15:53:03 | 显示全部楼层
大侠们能不能整理一下呀,我只会下载附件呀!
谢谢了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-5 20:16:18 | 显示全部楼层
想锁定除所选实体所在层以外的所有层,怎么编?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-7 12:32:49 | 显示全部楼层
最初由 andyhua5240 发布
[B]大侠们能不能整理一下呀,我只会下载附件呀!
谢谢了。 [/B]


那你怎么用LISP啊
复制代码,保存到记事本中,将其存为 xxx.lsp 即可!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-7 20:33:14 | 显示全部楼层
8楼的 看附件里有所有的程序!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-17 00:12:18 | 显示全部楼层
如果选中的图元包含在块中,并且图元跟块不在一个层,就只能对块所在图层进行操作。

可不可以对块中的图元也进行操作呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-17 13:21:49 | 显示全部楼层
回9楼的朋友
(defun c:Lpk( / ent lname)
  (setvar "cmdecho" 0)
  (setq ent (entsel "\nPick an entity on the target layer: "))
  (if ent (progn
    (setq ent (entget (car ent)))
    (setq lname (cdr (assoc 8 ent)))
    (setvar "clayer" lname)
  )) ;if ent
  (command "layer" "lock" "*" "" "" "n" "")
  (command "layer" "unlock" lname "")
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-17 15:33:42 | 显示全部楼层
thanks
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-17 21:53:11 | 显示全部楼层
各位请看我的删除图层的原码程序。比楼主的要简单太多了。而且R14可用。
请查看我的贴子。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-9 17:22 , Processed in 0.438061 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表