找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 628|回复: 8

[求助]:申请编程:冻结选定层以外的所有层!

[复制链接]
发表于 2006-6-8 12:43:13 | 显示全部楼层 |阅读模式

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

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

×
请高手帮忙,我经常想把某一个层以外的层都冻结,只剩下我选的层,方便画图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-6-8 18:31:25 | 显示全部楼层
  1. [FONT=courier new];;;*图层隔离
  2. (defun c:test (/ s1)
  3.   (WHILE (NOT (setq s1 (car (entsel "\n选择层物体: ")))))
  4.   (command "layer" "s" (cdr(assoc  8(entget s1))) "f" "*" "")
  5. )
  6. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-9 00:03:17 | 显示全部楼层
楼上的程序有几个不完美的地方
1、不能先选后执行命令(我更希望如此)
2、不能多选(就是说无法冻结所选几个图层以外的图层)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-9 00:15:22 | 显示全部楼层

Re: [求助]:申请编程:冻结选定层以外的所有层!

最初由 tchthong 发布
[B]请高手帮忙,我经常想把某一个层以外的层都冻结,只剩下我选的层,方便画图 [/B]

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

使用道具 举报

 楼主| 发表于 2006-6-9 11:30:50 | 显示全部楼层
不好意思,应该是“某些层”

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2006-6-13 16:56:52 | 显示全部楼层
满足楼主的要求,程序有二,如下:

  1. (defun c:ea ()                                ;仅显示所选多个图层(也可一个)
  2.   (prompt "\n请选择要保留的图层,要显示所有图层请直接按右键:")
  3.   (setq ss (ssget))
  4.   (if (/= ss nil)
  5.     (progn
  6.       (setq num (sslength ss))
  7.       (setq n 0)
  8.       (command "layer" "off" "*" "y" on "" "")
  9.       (repeat num
  10.         (setq entlist (entget (ssname ss n)))
  11.         (setq lname (cdr (assoc 8 entlist)))
  12.         (command "layer" "on" lname "")
  13.         (setq n (+ n 1))
  14.       )
  15.       (prompt (itoa num))
  16.     )
  17.     (command "layer" "on" "*" "")
  18.   )
  19. )


  20. (defun c:sd ();锁定所选多个图层(也可一个)以外的图层
  21.   (vl-load-com)
  22.   (setq acadObject (vlax-get-acad-object))
  23.   (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  24.   (setq LayersObj (vla-get-layers acadDocument))

  25.   (defun js (key)                        ;key为true则锁定所有图层,否则解锁所有图层
  26.     (vl-load-com)
  27.     (setq acadObject (vlax-get-acad-object))
  28.     (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  29.     (setq LayersObj (vla-get-layers acadDocument))
  30.     (setq n (vla-get-count layersobj))        ;图层的数量
  31.     (if        (= key 1)
  32.       (progn
  33.         (setq i 0)
  34.         (repeat        n
  35.           (setq layvla (vla-item LayersObj i))
  36.           (vla-put-lock layvla :vlax-true)
  37.           (setq i (+ i 1))
  38.         )
  39.       )
  40.       (progn
  41.         (setq i 0)
  42.         (repeat        n
  43.           (setq layvla (vla-item LayersObj i))
  44.           (vla-put-lock layvla :vlax-false)
  45.           (setq i (+ i 1))
  46.         )
  47.       )
  48.     )
  49.   )
  50.   (prompt "\n请选取不要锁定的实体,要全部解锁请直接按右键: ")
  51.   (setq layselect (ssget))
  52.   (if (/= layselect nil)                ;如果选中了对象
  53.     (progn
  54.       (setq num (sslength layselect))        ;选择集的数量
  55.       (js 1)                                ;锁定所有图层
  56.       (setq i 0)
  57.       (repeat num
  58.         (setq layent (ssname layselect i))
  59.         (setq layentvla (vlax-ename->vla-object layent))
  60.         (setq laystr (vla-get-layer layentvla))
  61.         (setq layvla (vla-item LayersObj laystr))
  62.         (setq laylock (vla-get-lock layvla))
  63.         (if (= laylock :vlax-true)
  64.           (progn
  65.             (vla-put-lock layvla :vlax-false)
  66.             (princ (strcat "\n" laystr " 层已解锁"))
  67.           )
  68.         )
  69.         (setq i (+ i 1))
  70.       )
  71.     )
  72.     (js 2)                                ;解锁所有图层
  73.   )
  74.   (princ)
  75. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-15 00:05:00 | 显示全部楼层
  1. [FONT=courier new](defun c:test (/ s1)
  2.   (cmdla0)
  3.   (setq layerlst '())
  4.   (WHILE (setq s1 (car (entsel "\n选择层物体: ")))
  5.     (setq la (xyp-get-dxf 8 s1))
  6.     (if        (not (member la layerlst))
  7.       (setq layerlst (cons la layerlst)
  8.       )
  9.     )
  10.   )
  11.   (command "layer" "s" "0" "")
  12.   (foreach la layerlst
  13.     (command "layer" "f" la "")
  14.   )
  15.   (cmdla1)
  16. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 11:04 , Processed in 0.380367 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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