找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: andyhua5240

[求助] [求助]:为什么我想锁定选择对象的图层,而不行呀?

[复制链接]
发表于 2007-6-24 00:10:32 | 显示全部楼层
既然用命令干嘛还那么麻烦?
(command "layer" "lo" "" )
一句就行了
如果不用命令那又另外说。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-24 12:16:26 | 显示全部楼层
花了一个晚上在网上找的程序。
但是如果需要选择锁定的图层太多的话,程序会提示,用户输入太长。如何可以避免这个情况的出现?
谢谢!

命令: ss
*** 锁定选择对象的图层 ***
选择对象: 指定对角点: 找到 30247 个,339 个编组

选择对象:  LAYER
当前图层:  PUB_DIM
输入选项
[?/生成(M)/设定(S)/新建(N)/开(ON)/关(OFF)/颜色(C)/线型(L)/线宽(LW)/材质(MAT)/打印(P)/冻结(F)/解冻(T)/锁
定(LO)/解锁(U)/状态(A)]: LO
输入要锁定的图层名列表或 <选择对象>:
PUB_DIM,WLL1,PUB_DIM,WLL1,WALL,WALL,WALL,WALL,WALL,OTHER,WLL1,WINDOW,WINDOW,WIND
OW,WINDOW,WINDOW,WLL1,WINDOW,WINDOW,WINDOW,WINDOW,PUB_DIM,PUB_DIM,PUB_DIM,PUB_DI
M,PUB_DIM,COLUMN,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WLL1,WLL1,COLUMN,WIND
OW,WINDOW,WINDOW,WLL1,WLL1,WLL1,WLL1,WLL1,WLL1,WLL1,WALL,WALL,BALCONY,BALCONY,BA
LCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BA
LCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BA
LCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BA
LCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BA
LCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,WLL1,WALL,WINDOW,WINDOW,WINDOW,WIN
DOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW
,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WI
NDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDO
W,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WALL,WALL,WINDOW,WINDOW,WINDOW,WINDOW,WALL,
WALL,WINDOW,WALL,WINDOW,WALL,WALL,WALL,WINDOW,BALCONY,BALCONY,BALCONY,BALCONY,BA
LCONY,WLL1,WLL1,WLL1,WLL1,WLL1,WLL1,WALL,WLL1,WLL1,DOTE,WINDOW,BALCONY,DOTE,DOTE
,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE
,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE
,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,DOTE,WALL,WALL,BALCONY,WLL1,WALL,BALCONY,BAL
CONY,BALCONY,WALL,WALL,WALL,WALL,WINDOW,WALL,WALL,WALL,WLL1,BALCONY,WALL,BALCONY
,WINDOW,WALL,WALL,BALCONY,WALL,WALL,WINDOW,WINDOW,WALL,WALL,WALL,WINDOW,WALL,BAL
CONY,WALL,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,
WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WINDOW,WALL,BALCO
NY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCO
NY,BALCONY,BALCONY,BALCONY,BALCONY,WALL,WALL,WALL,WALL,BALCONY,BALCONY,BALCONY,B
ALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,B
ALCONY,BALCONY,BALCONY,BALCONY,BALCONY,BALCONY,B
用户输入太长。输入选项
[?/生成(M)/设定(S)/新建(N)/开(ON)/关(OFF)/颜色(C)/线型(L)/线宽(LW)/材质(MAT)/打印(P)/冻结(F)/解冻(T)/锁
定(LO)/解锁(U)/状态(A)]:
命令:



  1.   [FONT=courier new]
  2.                                           ;;;利用layer命令中的lo选项
  3. (defun C:SS (/ ES EN EL A)
  4.        (princ "\n*** 锁定选择对象的图层 ***")
  5.        (setq cm (getvar "cmdecho"))
  6.        (setq *error* cd_err)
  7.        (setvar "cmdecho" 0)
  8.        (setq ES (ssget) A 0 EN "" EL nil FL nil)
  9.        (while (/= EN nil)
  10.        (setq EN (ssname ES A) EL (cons EN EL) A (1+ A)))
  11.        (setq EL (cdr EL) FL (cdr (assoc ' 8 (entget (car EL)))) EL (cdr EL))
  12.        (repeat (- A 2)
  13.        (setq EN (cdr (assoc ' 8 (entget (car EL))))
  14.        FL (strcat EN "," FL) EL (cdr EL)) )
  15.        (command "LAYER" "LO" (eval FL) "")
  16.        (setvar "cmdecho" cm)
  17. (princ)
  18. )

  19.                                           ;;;利用layer命令中的u选项

  20. (defun C:AA(/ ES EN EL A)
  21.        (princ "\n*** 解锁选择对象的图层 ***")
  22.        (setq cm (getvar "cmdecho"))
  23.        (setq *error* cd_err)
  24.        (setvar "cmdecho" 0)
  25.        (setq ES (ssget) A 0 EN "" EL nil FL nil)
  26.        (while (/= EN nil)
  27.        (setq EN (ssname ES A) EL (cons EN EL) A (1+ A)))
  28.        (setq EL (cdr EL) FL (cdr (assoc ' 8 (entget (car EL)))) EL (cdr EL))
  29.        (repeat (- A 2)
  30.        (setq EN (cdr (assoc ' 8 (entget (car EL))))
  31.        FL (strcat EN "," FL) EL (cdr EL)) )
  32.        (command "LAYER" "U" (eval FL) "")
  33.        (setvar "cmdecho" cm)
  34. (princ)
  35. )

  36. (defun cd_err (s)
  37.   (setvar "cmdecho" cm)
  38.   (command "_.undo" "_e")
  39. )

  40.   [/FONT]




后来又看了看命令行的输入,发现有很多图层名是重复的,如wall。如何让程序可以自动的过滤出已经输入过的图层名呢?这样的话,应该就不会存在用户输入过长的问题?因为一个DWG中不可能会有那么多完全不同名的图层?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-24 23:18:08 | 显示全部楼层
(defun c:ss(/ ss cm)
(princ "\n*** 锁定选择对象的图层 ***")(setq cm (getvar "cmdecho"))
   
(setvar "cmdecho" 0)(princ "\nSelect Objects: ")
(setq ss (rm-lst (#ss2lst (ssget)))) (foreach ls ss (command "LAYER" "LO" ls "") )

(setvar "cmdecho" cm)(princ))

(defun #ss2lst (s / n ls) ;;;转换选择集为表
(if s (repeat (setq n (sslength s))(setq ls (cons
(cdr (assoc ' 8 (entget  (ssname s (setq n (1- n))))))  ls)))))

(defun rm-lst (ptlst);去掉 表中重复项
(setq ptlst-new '())  (while (setq pt1 (car ptlst))(setq ptlst-new (cons pt1 ptlst-new) ptlst (vl-remove pt1 ptlst)) )
(setq ptlst-new (reverse ptlst-new))   ptlst-new )

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

使用道具 举报

发表于 2007-6-27 22:22:15 | 显示全部楼层
(defun c:llk (/ es en el a fl)
(setvar "cmdecho" 0)
(princ "\n锁定选择对象所在图层.")
(setq es (ssget))
(if es (progn
(setq a 0 en "" el nil fl nil)
(while (/= en nil)
(setq en (ssname es a) el (cons en el) a (1+ a)))
(setq el (cdr el) fl (cdr (assoc ' 8 (entget (car el)))) el (cdr el))
(repeat (- a 2)
(setq en (cdr (assoc ' 8 (entget (car el))))
  fl (strcat en "," fl) el (cdr el)) )
(command "layer" "lo" (eval fl) "")
));if es
(setvar "cmdecho" 1)
(princ))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-7-15 16:08:20 | 显示全部楼层
[php]
;| lol = 锁定选集图层 ---by lxx.2007.7
|;
(defun c:lol (/ SSS)
  (setq sss (ssget))
  (vla-eval (vlax-get-acad-object)
              (strcat "Sendkeys " (vl-prin1-to-string"-Layer~lo~~!sss~~~"))
    )
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 08:52 , Processed in 0.366011 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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