wzg356 发表于 2023-12-22 13:03:41

my快速选择4.0 +自设容差选择函数 fas插件(20240117更)

本帖最后由 wzg356 于 2024-1-17 23:55 编辑

20240118修 -qs 命令实数属性实现面板容差设置,前几天优化代码漏了的qs运算符使用恢复
                     以前下载的4.0已成绝版了
20240110更-出错处理金钟罩加固-无害运行帮助补容差选择表达式例句
4.5版+特性刷,样样可刷,已另发贴http://bbs.mjtd.com/thread-189250-1-1.html

应当发在插件板块的,调不过去了,功能介绍见http://bbs.mjtd.com/forum.php?mo ... 73&page=1#pid888512
有编程基础的可参考该源码改造。与3.0版风格也类似,无样本/多样本模式与3.0版一样,图片就不发了

1.起动命令myQSELECT或qs-单/多/无样本自动3模式
简版命令myQSSELECT或qss--仅单样本模式--简单到底,速度快(20231227)
默认勾选:图元类型/图层+1/(样式+长度+块名+半径+图案名)
20231228消除取得nil块名出错-估计是外部参照缺失, 消除重选按钮出现提示的闪烁

2. 实数特性编辑框可设容差
属性弹出框置顶项==样本属性原值
如功能区出现“︾”按钮,则尚有“扩展数据(已除系统的)、带关联词典或其他属性(主要是标注类)可选”
带*的属性为天正自设,且天正实体的貌似不通有线型比例-锁死禁√(20231026)

3.ssgetplus函数介绍--( 我其他帖子也有介绍)
格式(ssgetplus关键字过滤表提示符) ---返回设夹取的选择集或nil
本工具命令行回显的选择函数ssgetplus的表达式--可修改复制执行
选择过程中亮显已选中,不显夹点(20231227)

1)过滤表:支持组码与特性混写
组码规则同ssget,特性表规则参考本程序返回示例
特性比较符:
/= = :字符串采用(not(wcmatch a b)) 其他采用(not(equal a b fuz))
> >= < <=:不分类型均为(比较符 a b)
equal的容差 当数值绝对值>=10000.0时 取1e-3 其余不分类型取1e-5
;运算符改为数字字符即为自设容差值,例:
(ssgetplus "" (list '(0 . "LWPOLYLINE")(cons "5.0" '(LENGTH . 525.0))) nil)
;选长度为520.0~530.0的多线段
;如"5.0"改为 "="或"/="则容差默认值1e-5(绝对值大于10000时取1e-3)

2)关键字支持:空串/:E/:S/:E:S/X/I/P/A等及无点表模式的F/CP/WP
空串时与SELECT操作类似--空取后即执行框取-区别正反,首次空取可切换F/CP/WP
关键字F/CP/WP(栏选/圈围/圈交)点取第一点前支持3项切换或选线取坐标实现

3)提示符:屏幕和命令行显示,为nil则取默认,仅开始前有屏幕提示--效率问题
其他的自己去体验了




wzg356 发表于 2023-12-29 16:02:50

本帖最后由 wzg356 于 2023-12-29 16:53 编辑

ZJKUSO 发表于 2023-12-29 15:48
我一般搭配这2个功能一起用,90%场景都能应付,qs/CF/dss快速选择,极端情况还是需要小菜选择易


...
块名 图层名等转义可用这个函数transsfilter
http://bbs.mjtd.com/thread-189098-1-1.html?_dsign=bba55d1e
我3.0版里面也有

选择工具默认勾选块名-直接用不也可?

第一个也可这样简写


(and(setq e(ssget ":E:S" '((0 . "INSERT,mtext,text"))))
      (setq e(ssname e 0)
                es(entget e)               
                e12(assoc 1 es)
                e12(if e12      (list '(0 . "*text") e12)
                        (list (assoc 0 es) (cons 2(transsfilter(cdr(assoc 2 es)))))
                        );组码表要加图元类型 比如填充图案名也有2码有1码的也不只文字            
                ss(ssget "x" e12)
      )
      (sssetfirst nil ss)
      (princ(strcat "\n选中"(itoa(sslength ss))"个"))
)


ZJKUSO 发表于 2023-12-29 15:48:56

本帖最后由 ZJKUSO 于 2023-12-29 15:56 编辑



我一般搭配这2个功能一起用,90%场景都能应付,qs/CF/dss快速选择,极端情况还是需要小菜选择易


;;重复内容选中(文字或者块),CF******************************************************************************

(defun C:CF( / POINT_ENT SS_K SS_WZ name_k_ori name_k )                                        ;重复内容选中
      (setq POINT_ENT (entget (car (entsel "请选择待匹配的文字或块:"))))
      (prompt "\n")
      (cond
                ((= (cdr (assoc 0 POINT_ENT)) "TEXT") ;单行文字
                        (if (setq SS_WZ (ssget "_X" (list (cons 1 (cdr (assoc 1 POINT_ENT))))))
                              (progn
                                        (prompt (strcat "相同文字数量:" (rtos (sslength SS_WZ) 2 0)))
                                        (sssetfirst nil SS_WZ)
                              )
                              (prompt "未选中任何图元!")
                        )
                )
                ((= (cdr (assoc 0 POINT_ENT)) "MTEXT") ;多行文字
                        (if (setq SS_WZ (ssget "_X" (list (cons 1 (cdr (assoc 1 POINT_ENT))))))
                              (progn
                                        (prompt (strcat "相同文字数量:" (rtos (sslength SS_WZ) 2 0)))
                                        (sssetfirst nil SS_WZ)
                              )
                              (prompt "未选中任何图元!")
                        )
                )               
                ((= (cdr (assoc 0 POINT_ENT)) "INSERT")      ;块
                        ;(vlax-dump-object (vlax-ename->vla-object (cdar POINT_ENT)))
                        (setq name_k_ori (cdr (assoc 2 POINT_ENT)))
                        (setq name_k (vl-string-subst "`@" "@" name_k_ori))
                        (setq name_k (vl-string-subst "`#" "#" name_k))
                        (setq name_k (vl-string-subst "`." "." name_k))
                        (setq name_k (vl-string-subst "`~" "~" name_k))
                        (setq name_k (vl-string-subst "`*" "*" name_k))
                        (if (setq SS_K (ssget "_X" (list (cons 2 name_k))))
                              (progn
                                        (prompt (strcat "相同块数量:" (rtos (sslength SS_K) 2 0) "                        图块名:" (vla-get-EffectiveName (vlax-ename->vla-object (cdar POINT_ENT)))))
                                        (sssetfirst SS_K SS_K)
                              )
                              (prompt "未选中任何图元!")
                        )
                )
                ;添加对天正图元的支持
                (T (prompt "暂未对该对象提供支持!"))
      )
)

;;图层多选过滤,dss******************************************************************************

(defun c:dss (/ en i lystr ss1 ss2)
      (prompt "\n选择源对象<右键结束>:")
(setq ss1 (ssget) i 0 lystr (cdr (assoc 8 (entget (ssname ss1 0)))))
      (repeat (1- (sslength ss1))
                (setq en (ssname ss1 (setq i (1+ i))))
                (setq lystr (strcat lystr "," (cdr (assoc 8 (entget en)))))
      )
      (prompt "\n选择目标对象[区域框选/点选] 或 [全选(右键/空格)]:")
      (setq ss2 (ssget (list (cons 8 lystr))))(if (not ss2) (setq ss2 (ssget "x" (list (cons 8 lystr)))))
(sssetfirst nil ss2)
(princ)
)

lxl217114 发表于 2023-12-22 13:17:29

又一大型过滤选择插件上线,感谢分享。

magicheno 发表于 2023-12-22 14:05:06

感谢大佬分享

lzspain 发表于 2023-12-22 14:12:46

感谢分享,目前在用常青藤的快速选择

清水白粥 发表于 2023-12-22 14:48:42


感谢分享
感谢分享
感谢分享

paulpipi 发表于 2023-12-22 15:01:00

感谢分享,试用一下

zm880928 发表于 2023-12-22 15:03:12

选择样本后,能不能默认空格框选啊,这样可以少少点击一次按钮,上一个版本就是这样的,很好用的

wangsr 发表于 2023-12-22 15:03:42

太好了谢谢分享

wzg356 发表于 2023-12-22 15:05:31

zm880928 发表于 2023-12-22 15:03
选择样本后,能不能默认空格框选啊,这样可以少少点击一次按钮,上一个版本就是这样的,很好用的

可以的,,,,,

panliang9 发表于 2023-12-22 15:17:32

谢谢楼主分享!
页: [1] 2 3 4 5 6 7
查看完整版本: my快速选择4.0 +自设容差选择函数 fas插件(20240117更)