flytoday
发表于 2014-3-30 11:37:42
楼主你还初学胡扯蛋………哥不会就说不会……虚伪滴过份……你别回老子的贴
llsheng_73
发表于 2014-3-30 15:55:42
(defun c:tt(/ stb makedcl layonoff lst- dcl lys lysoff lys on ctl a)
(Defun STB(TAB / snl sll)
(SetQ snl '()sll (TblNext TAB T))
(While (SetQ snl (Cons (Cdr (Assoc 2 sll)) snl)sll (TblNext TAB nil)))
(vl-sort (vl-remove'nil snl)'<))
(defun makedcl(str_lst / dclfile fileID dclHandle)
(setqdclfile(vl-filename-mktemp nil nil ".dcl")fileID(open dclfile "w"))
(cond((= (type str_lst) 'str)(write-line str_lst fileID))
((= (type str_lst) 'list)(foreach n str_lst (write-line n fileID))))
(close fileID)
(setq dclHandle(load_dialog dclfile))
(vl-file-delete dclfile)
dclHandle)
(defun layonoff(la onoff / co)
(setq la(entget(TBLOBJNAME"layer" la))co(assoc 62 la))
(entmod(subst(cons 62(if onoff(abs(cdr co))(- 0(abs(cdr co)))))co la)))
(defun getvalue()
(foreach x(read(strcat"("(get_tile"on")")"))(layonoff(nth x lysoff)t))
(foreach x(read(strcat"("(get_tile"off")")"))(layonoff(nth x lyson)nil)))
(defun lst-(lst lst1)
(foreach x lst1(setq lst(vl-remove x lst)))lst)
(setqlys(stb"LAYER")ctl 3)
(while(> ctl 0)
(setq lysoff(vl-remove'nil(mapcar'(lambda(x)(if(<(cdr(assoc 62(tblsearch"layer"x)))0)x))lys))
lyson(LST- lys lysoff)
dcl(makedcl(list"LAYLIST:dialog{ label=\"~开关图层~\";:boxed_column{:row{"
(strcat":list_box{label=\"可关闭图层\";key=\"off\";fixed_width=8;height="
(itoa(+(max(length lysoff)(length lyson))2))";multiple_select = true;}")
":list_box{label=\"可打开图层\";key=\"on\";fixed_width=8;height=1;multiple_select = true;}}"
":row{:button{key=\"GO\";label=\"执行\";}:button{key=\"ESC\";label=\"退出\";is_cancel=true;}}}}")))
(new_dialog "LAYLIST" dcl)
(start_list"on")(mapcar 'add_list lysoff)(end_list)
(start_list"off")(mapcar 'add_list lyson)(end_list)
(action_tile "GO""(getvalue)(done_dialog 1)")
(action_tile"ESC""(done_dialog 0)")
(setq ctl(start_dialog))
(unload_dialog dcl)))
纯属好玩,没多大实际上用处, 我自己这么觉得
品茗新秀
发表于 2014-3-30 18:16:01
llsheng_73 发表于 2014-3-30 15:55 static/image/common/back.gif
纯属好玩,没多大实际上用处, 我自己这么觉得
如果能通过选关闭中的图元来打开才好,因为通过众多图层名,一般难确定需打开哪个图层
Andyhon
发表于 2014-3-30 19:15:53
...通过选关闭中的图元来打开才好...
可見乎!?
品茗新秀
发表于 2014-3-30 22:21:20
Andyhon 发表于 2014-3-30 19:15 static/image/common/back.gif
...通过选关闭中的图元来打开才好...
可見乎!?
我以前曾看到过,执行程序,被关闭的图元显示,选择要打的图元,则该图元的图层被打开,和其它原打开的图层一起显示,目前网上多数程序是通过图层名来选择打开,对于实际运用,不是十分方便。
品茗新秀
发表于 2014-3-30 22:25:15
这个程序的思路可能应该是打开所有关闭图层,然后点选打开的关闭图层,则其它未被选择打开的关闭图层关闭。
llsheng_73
发表于 2014-3-30 23:19:56
品茗新秀 发表于 2014-3-30 22:25 static/image/common/back.gif
这个程序的思路可能应该是打开所有关闭图层,然后点选打开的关闭图层,则其它未被选择打开的关闭图层关闭。
这样倒也还可行得通
llsheng_73
发表于 2014-3-30 23:22:22
本帖最后由 llsheng_73 于 2014-3-30 23:23 编辑
也可以改下,先打开所有图层,选择一堆图元后恢复图层。再列出哪些图层本来是关闭的,哪些本来是开着的,根据需要进行开头选择,没选到图元的图层不列出来,空了我再弄下玩玩
香田里浪人
发表于 2014-3-31 06:08:13
论坛里搜索一下就有,何必再编程?
q3_2006
发表于 2014-3-31 06:45:44
关闭图层是没法点取的,输入图层名是可以的...
(defun c:tt (/ la)
(setq la (getstring "\n输入要打开的图层名:"))
(vl-cmdf "-layer" "on" la "" "")
)