Marckie 发表于 2019-3-11 18:28:15

【源码】贱人工具箱按层选择、按层全选优化

本帖最后由 Marckie 于 2019-3-18 10:52 编辑

由于贱人工具箱里的按层选择和按层全选一次只能对单一图层操作,一直以来,我用的都很蛋疼,因此做了一些小优化,可以对多图层进行按层选择和按层全选,希望大家用的开心。{:1_1:}

欢迎前来交流!
==================================================
2019-3-18
已修复会出现函数错误提示的bug

wzg356 发表于 2020-9-11 09:07:49

合并成一个命令,不增加动作,两个功能不变

;按层选择
(DEFUN C:CXX(/ Faith-lst->string lay_sslay_list en lay_name en_list en_type n ss1)
        ;子程序1:将图层名称转化为以逗号分隔的列表
        (defun Faith-lst->string (lst / str1)
                (setq str1 "")
                (mapcar (function (lambda (x)(setq str1 (strcat str1 "," x))))        lst)
                (setq str1 (substr str1 2))
                (if (/= "" str1)        str1)
        )
        ;*************************
        (princ "\n 请选择对象,这一步用来确定你需要选择的图层:")
        (setq lay_ss (ssget))
        (IF lay_ss
                (PROGN
                        (repeat (setq n (sslength lay_ss))
                                (setq en (ssname lay_ss (setq n (1- n)))
                                        en_list (entget en)
                                        en_type (cdr (assoc 0 en_list))
                                )
                                (setq lay_name (cdr (assoc 8 en_list)))
                                (if (not (member lay_name lay_list))
                                        (setq lay_list (cons lay_name lay_list))
                                )
                        )
                        (setq lay_name (Faith-lst->string lay_list)
                                lay_list nil
                        )
                        (princ "\n 现在只会选择属于以下图层的对象了:")
                        (princ (strcat lay_name))
                        (princ "\n 范围框选或右键全选:")
                        (setvar "nomutt" 1)
                        (if        (= (setq ss1 (ssget (list (cons 8 lay_name)))) nil)
                                (setq ss1 (ssget "X" (list (cons 8 lay_name))))
                        )
                        (setvar "nomutt" 0)
                        (sssetfirst nil ss1);让已知选择集处于选中状态
                )
        )
        (princ)
)
(princ "\n功能:按层选择(可多图层),命令:CXX。")

Marckie 发表于 2019-3-18 21:13:43

本帖最后由 Marckie 于 2019-3-18 21:20 编辑

tryhi 发表于 2019-3-18 11:27
当图层名包含特殊字符时,比如逗号、星号、井号等,将无法选择,提个建议,对图层名称进行预处理,将特殊字 ...
我测试了一下,英文逗号无法命名图层,中文逗号可以正常使用,星号等各种键盘上的符号都无法参与命名图层,也就不存在无法使用的情况,现在只剩下井号(#)、波浪号(~)和英文状态下的左中括号([)使用时会出现问题。

主要是以下两点:
1、以波浪号(~)参与命名图层时,如果不把波浪号(~)放在名称最前面,使用时不会出现问题,比如图层命名为“0~”,但是如果不把波浪号(~)放在名称最前面,比如图层命名为“~0”,则会选择所有非0图层,这跟ssget的用法有关,我不知道该如何解决。

2、以井号(#)或左中括号([)参与命名图层时,只要图层中出现井号(#)或左中括号([),使用时都会出现问题,比如图层命名为“#0”、“0#”、“[0”、“0[”时,会出现选择不上的情况,我也不知道该如何解决。

以上两个问题能否请大师教导一下该如何解决:lol

love1030312 发表于 2019-3-12 08:25:14

个人觉得优化后确实方便

yoyoho 发表于 2019-3-12 13:37:16

谢谢! Marckie 分享程序!!!!!

海盗曹 发表于 2019-3-13 00:42:05

多谢分享啊

夺天工 发表于 2019-3-13 15:14:49

ps122hb 发表于 2019-3-14 08:22:06

谢谢分享,下载了

czb203 发表于 2019-3-15 14:55:53

非常感谢大师出手

尚坤1984 发表于 2019-3-16 11:39:21

太棒了 搜噶

疯球 发表于 2019-3-16 18:32:44

非常感谢大师出手

pengfei2010 发表于 2019-3-17 09:00:05

感谢楼主分享
页: [1] 2 3 4 5 6
查看完整版本: 【源码】贱人工具箱按层选择、按层全选优化