编程申请CAD中图层、实体隐现插件
zhangwei_ldlh
2009年03月31日 09:01:49
只看楼主

其实TSSD和天正建筑中都有这个功能,但做得不够完美,而且TSSD太贵,偶才刚大学毕业一年,买不起!图纸拿回家加班没得用 小弟想实现如下功能1、指定图层的隐现(仅此图层显示/仅此图层关闭)2、指定实体的隐现(仅此实体显示/仅此实体隐藏)3、隐藏/显示命令能自定义TSSD和天正建筑做的不好的地方:如果我原本有1、2、3、4、5......图层,其中2、4图层本身是隐藏的当我使用仅5图层显示(其他图层隐藏);再恢复其他图层显示后;原本隐藏的2、4图层也跟着显示出来了~~

其实TSSD和天正建筑中都有这个功能,但做得不够完美,而且TSSD太贵,偶才刚大学毕业一年,买不起!图纸拿回家加班没得用
小弟想实现如下功能
1、指定图层的隐现(仅此图层显示/仅此图层关闭)
2、指定实体的隐现(仅此实体显示/仅此实体隐藏)
3、隐藏/显示命令能自定义
TSSD和天正建筑做的不好的地方:
如果我原本有1、2、3、4、5......图层,其中2、4图层本身是隐藏的
当我使用仅5图层显示(其他图层隐藏);再恢复其他图层显示后;原本隐藏的2、4图层也跟着显示出来了~~
图层少,当然可以手工再关闭,但如果图层多,图层名字长,操作时间一长,就有可能忘记哪些图层原本是一直隐藏的!
如果哪位大大能开发出来,请问能否实现:
我使用仅5图层显示(其他图层隐藏);操作;关机睡觉,第二天开机再恢复其他图层显示后;原本一直隐藏的2、4图层也还是隐藏

小弟手里有
一个粗浅的隐藏显示图层的插件
zhangwei_ldlh
2009年03月31日 09:03:21
2楼
呵呵,先将我那个程序贴出【声明一下,这个是很久以前 朱子德无私编写的!】

(prin1 "图层开关操做程序:1是关闭所选实体所在的层;2是打开所有层命令;3是关闭除选择实体所在层以外的图层;4~7是图层的锁操作与1~3雷同,在Autocad环境下加载后即可用,也可以把程序加在acad2000.lisp~acad2006.lisp文件的结尾每次打开图形文件自动加载")
(princ " 图层操作程序由朱子德编写 All rights reserved 请打1,2,3,4,5,6 或7")

(defun c:1()
(while t
(prin1 "请选择要关闭层的实体")
(setq ss0 (ssget))
(setq yv (getvar "clayer"))
(setq ln (sslength ss0))
(setq n 0)
(repeat ln
(setq na (ssname ss0 n))
(setq ent (entget na))
(setq cen (assoc 8 ent))
(setq cenn (cdr cen))
(if (= cenn yv) (command "layer" "off" cenn "y" "")
(command "layer" "off" cenn "")
);if
(setq n (+ n 1))
);repeat
);while
)
(defun c:2()
(command "layer" "on" "*" "")
)


(defun c:3()
(prin1 "请选择不关闭层的实体")
(setq ss0 (ssget))
(command "layer" "off" "*" "y" "")
(setq ln (sslength ss0))
(setq n 0)
(repeat ln
(setq na (ssname ss0 n))
(setq ent (entget na))
(setq cen (assoc 8 ent))
(setq cenn (cdr cen))
(command "layer" "on" cenn "")
(setq n (+ n 1))

);repeat
)
(defun c:4()
(while t
(prin1 "请选择要上琐层的实体")
(setq ss0 (ssget))
(setq ln (sslength ss0))
(setq n 0)
(repeat ln
(setq na (ssname ss0 n))
(setq ent (entget na))
(setq cen (assoc 8 ent))
(setq cenn (cdr cen))
(command "layer" "lock" cenn "")
(setq n (+ n 1))

);repeat
)
)
(defun c:5()
(while t

(prin1 "请选择要解琐层的实体")
(setq ss0 (ssget))
(setq ln (sslength ss0))
(setq n 0)
(repeat ln
(setq na (ssname ss0 n))
(setq ent (entget na))
(setq cen (assoc 8 ent))
(setq cenn (cdr cen))
(command "layer" "unlock" cenn "")
(setq n (+ n 1))

);repeat
)
)
(defun c:6()
(prin1 "请选择不上锁层的实体")
(setq ss0 (ssget))
(command "layer" "lock" "*" "")
(setq ln (sslength ss0))
(setq n 0)
(repeat ln
(setq na (ssname ss0 n))
(setq ent (entget na))
(setq cen (assoc 8 ent))
(setq cenn (cdr cen))
(command "layer" "unlock" cenn "" )
(setq n (+ n 1))
);repeat
)
(defun c:7 ()
(command "layer" "unlock" "*" "")
)
(defun c:qt()

(setq qt (getstring"在文字前增加新的字串"))
(princ "选择要替代的字串")
(while t
(setq ss1 (ssget (list (cons 0 "TEXT")) ))

(setq ln (sslength ss1))
(setq n 0)
(repeat ln
(setq na (ssname ss1 n))
(setq ent (entget na))
(setq oldt1 (assoc 1 ent))
(setq oldt (cdr oldt1))
(setq newt (strcat qt oldt))
(setq newt1 (cons 1 newt))
(setq ent (subst newt1 oldt1 ent))
(entmod ent)
(setq n (+ n 1))
);repeat

);while
)
(defun c:ht()

(setq ht (getstring"在文字后增加新的字串"))
(princ "选择要替代的字串")
(while t
(setq ss1 (ssget (list (cons 0 "TEXT")) ))

(setq ln (sslength ss1))
(setq n 0)
(repeat ln
(setq na (ssname ss1 n))
(setq ent (entget na))
(setq oldt1 (assoc 1 ent))
(setq oldt (cdr oldt1))
(setq newt (strcat oldt ht))
(setq newt1 (cons 1 newt))
(setq ent (subst newt1 oldt1 ent))
(entmod ent)
(setq n (+ n 1))
);repeat

);while
)
(defun chgterr (s)
(if (/= s "Function cancelled") ; If an error (such as CTRL-C) occurs
(princ (strcat "\nError: " s)) ; while this command is active...
)
(setq p nil) ; Free selection set
(setq *error* olderr) ; Restore old *error* handler
(princ)
)
(defun C:CHT(/ p l n e os as ns st s nsl osl sl si chf chm olderr)
(setq olderr *error* ; Initialize variables
*error* chgterr
chm 0)
(setq p (ssget)) ; Select objects
(if p
(progn ; If any objects selected
(while (< 0 (setq osl (strlen (setq os (getstring t "查找字串: "))))) ;while1 begain
(setq nsl (strlen (setq ns (getstring t "替换字串: "))))
(setq l 0 n (sslength p))
(while (< l n) ; For each selected object... while2 begain
(if (= "TEXT" ; Look for TEXT entity type (group 0)
(cdr (assoc 0 (setq e (entget (ssname p l))))))
(progn
(setq chf nil si 1)
(setq s (cdr (setq as (assoc 1 e))))
(while (= osl (setq sl (strlen
(setq st (substr s si osl)))))
(if (= st os)
(progn
(setq s (strcat (substr s 1 (1- si)) ns
(substr s (+ si osl))))
(setq chf t) ; Found old string
(setq si (+ si nsl))
)
(setq si (1+ si))
)
)
(if chf (progn ; Substitute new string for old
(setq e (subst (cons 1 s) as e))
(entmod e) ; Modify the TEXT entity
(setq chm (1+ chm))
))
)
)
(setq l (1+ l))
) ;while2 end
(princ (strcat "共找到字串'" os "'" (rtos chm 2 0) "次\n")) ; Print total lines changed
(setq chm 0)
) ;while1 end
) ;progn end
) ;if end
(terpri)
(setq *error* olderr) ; Restore old *error* handler
(princ "查找完成......")
(princ)
) ;defun end
回复
twtthduu
2017年04月08日 12:28:38
3楼
说什么也得回复一下,对我来说正好有用,太感谢了!十分的感谢!
回复

相关推荐

APP内打开