- UID
- 265177
- 积分
- 901
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-5-24
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
声明:自己用了很长时间。(谁用谁知道)
里面只有tcc是我自己写的。其它的不知道是哪位高手写的
[php]
(defun c:TC()
(alert
"\n 以下是图层操作命令:
\nTCC 选中设置为当前
\nTCS 孤立(LAYISO) TCR 当前(LAYCUR) TCH 匹配(LAYMCH)
\nTCF 关闭(LAYOFF) TCT 打开(LAYON) TCK 锁定(LAYLCK)
\nTCU 解锁(LAYULK) TCZ 冻结(LAYFRZ) TCW 解冻(LAYTHW)
")
)
(defun c:tcc(/ nn ss)
(setq cmd_orig (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq na (car (entsel "\n选择对象:")))
(setq data (entget na))
(setq faq1 (cdr (assoc 8 data)))
(setq faq2 (cdr (assoc 6 data)))
(if (= nil faq2)
(progn
(command "celtype" "bylayer")
)
(command "celtype" faq2)
)
(setq faq3 (cdr (assoc 62 data)))
(if (= nil faq3)
(progn
(command "cecolor" 256)
)
(setvar "cecolor" (itoa faq3))
)
(setvar "clayer" faq1)
(setvar "cmdecho" cmd_orig)
(prin1)
)
(Defun C:TCS (/ SS CNT LAY LAYLST VAL)
(setvar "cmdecho" 0) ; cmdecho = 0
(if (not (setq SS (ssget "i")))
(progn
(prompt "\nSelect object(s) on the layer(s) to be ISOLATED: ")
(setq SS (ssget))
)
)
(if SS
(progn
(setq CNT 0)
(while (setq LAY (ssname SS CNT))
(setq LAY (cdr (assoc 8 (entget LAY))))
(if (not (member LAY LAYLST))
(setq LAYLST (cons LAY LAYLST))
)
(setq CNT (1+ CNT))
)
(if (member (getvar "CLAYER") LAYLST)
(setq LAY (getvar "CLAYER"))
(setvar "CLAYER" (setq LAY (last LAYLST)))
)
(command "_.-LAYER" "_OFF" "*" "_Y")
(foreach VAL LAYLST (command "_ON" VAL))
(command "")
(if (= (length LAYLST) 1)
(prompt (strcat "\nLayer " (car LAYLST) " has been isolated."))
(prompt (strcat "\n" (itoa (length LAYLST)) " layers have been isolated. "
"Layer " LAY " is current."
)
)
)
)
)
(princ)
)
; -------------------- LAYER FREEZE FUNCTION ---------------------
; Freezes selected object's layer
; ----------------------------------------------------------------
(defun C:TCZ ()
(setvar "cmdecho" 0) ; cmdecho = 0
(layproc "frz")
(princ)
)
; ---------------------- LAYER OFF FUNCTION ----------------------
; Turns selected object's layer off
; ----------------------------------------------------------------
(defun C:TCF ()
(setvar "cmdecho" 0) ; cmdecho = 0
(layproc "off")
(princ)
)
; ------------- LAYER PROCESSOR FOR LAYOFF & LAYFRZ --------------
; Main program body for LAYOFF and LAYFRZ. Provides user with
; options for handling nested entities.
; ----------------------------------------------------------------
(defun LAYPROC ( TASK / NOEXIT OPT BLKLST CNT EN PMT ANS LAY NEST BLKLST)
(setvar "cmdecho" 0) ; cmdecho = 0
; -------------------- Variable initialization -------------------
(setq NOEXIT T)
(setq OPT (getcfg (strcat "AppData/AC_Bonus/Lay" TASK))) ; get default option setting
(if (not (or (null OPT) (= OPT ""))) (setq OPT (atoi OPT)))
(setq CNT 0) ; cycle counter
(while NOEXIT
(initget "Options Undo")
(if (= TASK "off")
(setq EN (nentsel "\nOptions/Undo/<Pick an object on the layer to be turned OFF>: "))
(setq EN (nentsel "\nOptions/Undo/<Pick an object on the layer to be FROZEN>: "))
)
; ------------------------- Set Options --------------------------
(While (= EN "Options")
(initget "No Block Entity")
(cond
((= OPT 1)
(setq PMT "\nBlock level nesting/Entity level nesting/<No nesting>: ")
)
((= OPT 2)
(setq PMT "\nBlock level nesting/No nesting/<Entity level nesting>: ")
)
(T
(setq PMT "\nEntity level nesting/No nesting/<Block level nesting>: ")
)
)
(setq ANS (getkword PMT))
(cond
((null ANS)
(if (or (null OPT) (= OPT ""))
(progn
(print ANS)
(setq OPT 3)
(setcfg (strcat "AppData/AC_Bonus/Lay" TASK) "3")
)
)
)
((= ANS "No")
(setq OPT 1)
(setcfg (strcat "AppData/AC_Bonus/Lay" TASK) "1")
)
((= ANS "Entity")
(setq OPT 2)
(setcfg (strcat "AppData/AC_Bonus/Lay" TASK) "2")
)
(T
(setq OPT 3)
(setcfg (strcat "AppData/AC_Bonus/Lay" TASK) "3")
)
)
(initget "Options")
(if (= TASK "off")
(setq EN (nentsel "\nOptions/Undo/<Pick an object on the layer to be turned OFF>: "))
(setq EN (nentsel "\nOptions/Undo/<Pick an object on the layer to be FROZEN>: "))
)
)
; ------------------------- Find Layer ---------------------------
(if (and EN (not (= EN "Undo")))
(progn
(setq BLKLST (last EN))
(setq NEST (length BLKLST))
(cond
; If the entity is not nested or if the option for entity
; level nesting is selected.
((or (= OPT 2) (< (length EN) 3))
(setq LAY (entget (car EN)))
)
; If no nesting is desired
((= OPT 1)
(setq LAY (entget (car (reverse BLKLST))))
)
; All other cases (default)
(T
(setq BLKLST (reverse BLKLST))
(while (and ; strip out xrefs
( > (length BLKLST) 0)
(assoc 1 (tblsearch "BLOCK" (cdr (assoc 2 (entget (car BLKLST))))))
);and
(setq BLKLST (cdr BLKLST))
)
(if ( > (length BLKLST) 0) ; if there is a block present
(setq LAY (entget (car BLKLST))) ; use block layer
(setq LAY (entget (car EN))) ; else use layer of nensel
)
)
)
; ------------------------ Process Layer -------------------------
(setq LAY (cdr (assoc 8 LAY)))
(if (= LAY (getvar "CLAYER"))
(if (= TASK "off")
(progn
(prompt (strcat "\nReally want layer " LAY " (the CURRENT layer) off? <N>: "))
(setq ANS (strcase (getstring)))
(if (not (or (= ANS "Y") (= ANS "YES")))
(setq LAY nil)
)
)
(progn
(prompt (strcat "\nCannot freeze layer " LAY". It is the CURRENT layer."))
(setq LAY nil)
)
)
(setq ANS nil)
)
(if LAY
(if (= TASK "off")
(progn
(if ANS
(command "_.-LAYER" "_OFF" LAY "_Yes" "")
(command "_.-LAYER" "_OFF" LAY "")
)
(prompt (strcat "\nLayer " LAY " has been turned off."))
(setq CNT (1+ CNT))
)
(progn
(command "_.-LAYER" "_FREEZE" LAY "")
(prompt (strcat "\nLayer " LAY " has been frozen."))
(setq CNT (1+ CNT))
)
)
)
)
; -------------- Nothing selected or Undo selected ---------------
(progn
(if (= EN "Undo")
(if (> CNT 0)
(progn
(command "_.u")
(setq CNT (1- CNT))
)
(prompt "\nEverything has been undone.")
)
(setq NOEXIT nil)
)
)
)
)
)
; --------------------- LAYER LOCK FUNCTION ----------------------
; Locks selected object's layer
; ----------------------------------------------------------------
(Defun C:TCK (/ LAY)
(setvar "cmdecho" 0) ; cmdecho = 0
(setq LAY (entsel "\nPick an object on the layer to be LOCKED: "))
(if LAY
(progn
(setq LAY (cdr (assoc 8 (entget (car LAY)))))
(Command "_.-LAYER" "_LOCK" LAY "")
(prompt (strcat "\nLayer " LAY " has been locked."))
)
)
(princ)
)
; -------------------- LAYER UNLOCK FUNCTION ---------------------
; Unlocks selected object's layer
; ----------------------------------------------------------------
(Defun C:TCU (/ LAY)
(setvar "cmdecho" 0) ; cmdecho = 0
(setq LAY (entsel "\nPick an object on the layer to be UNLOCKED: "))
(if LAY
(progn
(setq LAY (cdr (assoc 8 (entget (car LAY)))))
(Command "_.-LAYER" "_UNLOCK" LAY "")
(prompt (strcat "\nLayer " LAY " has been unlocked."))
)
)
(princ)
)
; ---------------------- LAYER ON FUNCTION -----------------------
; Turns all layers on
; ----------------------------------------------------------------
(Defun C:TCT ()
(setvar "cmdecho" 0) ; cmdecho = 0
(Command "_.-LAYER" "_ON" "*" "")
(prompt "\nAll layers have been turned on.")
(princ)
)
; --------------------- LAYER THAW FUNCTION ----------------------
; Thaws all layers
; ----------------------------------------------------------------
(Defun C:TCW ()
(setvar "cmdecho" 0) ; cmdecho = 0
(Command "_.-LAYER" "_THAW" "*" "")
(prompt "\nAll layers have been thawed.")
(princ)
)
; --------------------- LAYER MATCH FUNCTION ---------------------
; Changes the layer of selected object(s) to the layer of a
; selected destination object.
; ----------------------------------------------------------------
(Defun C:TCH (/ SS CNT LOOP LAY ANS)
(setvar "cmdecho" 0) ; cmdecho = 0
(if (not (setq SS (ssget "i")))
(progn
(prompt "\nSelect objects to be changed: ")
(setq SS (ssget))
)
)
(if SS
(progn
(setq CNT (sslength SS))
(princ (strcat "\n" (itoa CNT) " found.")) ; Report number of items found
(command "_.move" SS "") ; filter out objects on locked layers
(if (> (getvar "cmdactive") 0) ; if there are still objects left
(progn
(command "0,0" "0,0")
(setq SS (ssget "p")
CNT (- CNT (sslength SS)) ; count them
)
)
(setq SS nil) ; else abort operation
)
(if (> CNT 0) ; if items where filtered out
(if (= CNT 1)
(princ (strcat "\n" (itoa CNT) " was on a locked layer.")) ; report it.
(princ (strcat "\n" (itoa CNT) " were on a locked layer."))
)
)
)
)
(if SS
(progn
(initget "Type")
(setq LAY (entsel "\nType name/Select entity on destination layer: ")
LOOP T
)
(while LOOP
(cond
((not LAY)
(prompt "\nNothing selected.")
(prompt "\nUse current layer? <Y> ")
(setq ANS (strcase (getstring)))
(if (or (= ANS "") (= ANS "Y") (= ANS "YES"))
(setq LAY (getvar "clayer")
LOOP nil
)
)
)
((listp LAY)
(setq LOOP nil)
)
((= LAY "Type")
(setq LAY (getstring "\nEnter layer name: "))
(cond
((tblobjname "LAYER" LAY)
(setq LOOP nil)
)
((/= LAY "")
(prompt "\nLayer does not exist. Would you like to create it? <Y>: ")
(setq ANS (strcase (getstring)))
(if (or (= ANS "") (= ANS "Y") (= ANS "YES"))
(if
(entmake (list
'(0 . "LAYER")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbLayerTableRecord")
'(6 . "CONTINUOUS")
'(62 . 7)
'(70 . 0)
(cons 2 LAY)
)
)
(setq LOOP nil)
(prompt "\nInvalid Layer name.")
)
)
)
)
)
)
(if LOOP
(progn
(initget "Type")
(setq LAY (entsel "\nType name/Select entity on destination layer: "))
)
)
); while LOOP
(if (listp LAY)
(setq LAY (cdr (assoc 8 (entget (car LAY)))))
)
(command "_.change" SS "" "_p" "_la" LAY "")
(if (= (sslength SS) 1)
(prompt (strcat "\nOne object changed to layer " LAY ))
(prompt (strcat "\n" (itoa (sslength SS)) " objects changed to layer " LAY ))
)
(if (= LAY (getvar "clayer"))
(prompt " (the current layer).")
(prompt ".")
)
)
)
(princ)
)
; --------------- CHANGE TO CURRENT LAYER FUNCTION ---------------
; Changes the layer of selected object(s) to the current layer
; ----------------------------------------------------------------
(Defun C:TCR (/ SS CNT LAY)
(setvar "cmdecho" 0) ; cmdecho = 0
(if (not (setq SS (ssget "i")))
(progn
(prompt "\nSelect objects to be CHANGED to the current layer: ")
(setq SS (ssget))
)
)
(if SS
(progn
(setq CNT (sslength SS))
(princ (strcat "\n" (itoa CNT) " found.")) ; Report number of items found
(command "_.move" SS "") ; filter out objects on locked layers
(if (> (getvar "cmdactive") 0) ; if there are still objects left
(progn
(command "0,0" "0,0")
(setq SS (ssget "p")
CNT (- CNT (sslength SS)) ; count them
)
)
(setq SS nil) ; else abort operation
)
(if (> CNT 0) ; if items where filtered out
(if (= CNT 1)
(princ (strcat "\n" (itoa CNT) " was on a locked layer.")) ; report it.
(princ (strcat "\n" (itoa CNT) " were on a locked layer."))
)
)
)
)
(if SS
(progn
(setq LAY (getvar "CLAYER"))
(command "_.change" SS "" "_p" "_la" LAY "")
(if (= (sslength SS) 1)
(prompt (strcat "\nOne object changed to layer " LAY " (the current layer)."))
(prompt (strcat "\n" (itoa (sslength SS)) " objects changed to layer " LAY " (the current layer)."))
)
)
)
(princ)
)
[/php] |
|