wzg356 发表于 2025-2-25 15:15:33

自设ssget关键字提示函数356版--命令行/屏幕提示两个版本

本帖最后由 wzg356 于 2025-3-20 17:36 编辑

20250227 更---简版代码再优化简化
----------------------------------------------
完整的见下载文件
应用示例“ssgetpro应用示例刷文本.lsp”可与前几天发的版本http://bbs.mjtd.com/thread-192163-1-1.html对比体验不同
该函数功能已在我的快选/刷子4.5工具http://bbs.mjtd.com/thread-189250-1-1.html应用,本次整理精简贴出
之前在本站找到类似的,由于均有初次右键/回车/空格等的小bug,故发此贴

贴出2各版本--两种解决方案,好坏不论,重在交流,欢迎大家提议或改进贴出
============356版=函数名ssgetpro==功能更强================
;带关键字及提示的类ssget函数(ssgetpro sel fls msg)
;返回选择集或nil或自定义关键字

;参数msg--提示符 命令行及屏幕跟随显示
;为nil或""时执行默认提示,自设关键字时自己添加
;参数fls--过滤表
;参数del---关键字:
;1.可以是关键字"L" "X" "P" "A" "I"及":E"和":S"组合
;例(ssgetpro "x" nil nil)与(ssget "x" nil)一样

;2.可以是""或nil----执行ssget无关键字模式

;3.自设关键字 可不避ssget模式关键字 执行":S"模式
;例sel='((115 "S")(83 "S"))则调用":S"模式或输入S返回关键字S
;(115 "S")(83 "S")查grread键表写好表即可,可多组
;(setq msg "拾或框取对象或\n[设置..S/设置...W/.....]<>:")
;;(ssgetpro '((115 "S")(83 "S")(119 "W") (87 "W") (101 "E") (69 "E")) nil MSG)
;开始执行时输入sw e均有相应字符返回
;((97 "A")(65 "A")(98 "B") (66 "B")(99 "C") (67 "C")(100 "D") (68 "D") (104 "H") (72 "H"))
;以上提供一些键盘左侧键,其他的可自行查表使用

;4.可以是1个点
;如(ssgetpro (getpoint) nil nil)
;其意义是按已知点自动执行(ssget ":E:S"...)
;可能选中多个对象

=======简版函数名ssgetSEL=简单更符合使用习惯===========
带关键字及命令行提示的类ssget函数(ssgetSEL sel fls msg)
不详介绍了,文件里面有说明
-------------------------------------------------
;带关键字及命令行提示的ssget:s最简代码--中望无效
;(ssget:s "A B" '((0 . "text")) "拾取/框取对象或[设置A/设置B]<>:")
(defun ssget:s(sel fls msg / d p2)
      (initget (strcat sel ""))
      (setq p(entsel msg))
      (cond
                ((= "" p)nil)
                ((= 'str(type p))p)
                ((setq p(car p))(vl-cmdf "select" p "")(ssget "p" fls))
                ((setq p(cadr(grread t)) p2(getcorner p "\n指定对角点:"))
            (ssget "_C" p p2 fls)
      )
    )
)

wzg356 发表于 2025-2-27 20:22:40

本帖最后由 wzg356 于 2025-2-27 23:02 编辑

ssgetpro的3种主要的应用场景代码示例
运行:
(setqsel '((97 "A")(65 "A")(115 "S")(83 "S")) ;关键字A S --- 查grread简表设置
      fls nil ;过滤表
      msg "选取对象(功能A/功能S)<>:" ;提示      
)
继续分别运行以下为3 种场景示例代码即可理解区别---均为执行1次 如要循环加while就行
返回关键字/选择集/nil
1.实现关键字A S+:S模式---拾取/框选 区分正/反框选
(ssgetpro sel fls msg)
(while (ssgetpro sel fls msg)) ;循环示例,右键/回车/空格结束,以下2例类似

2.实现关键字A S+:E:S模式---拾取
(if(= 'str(type (setq p(grKwordP sel msg 2))))
        p(if p(ssgetpro p fls msg))
)
3.实现关键字A S+1次框选模式---区分正/反框选
(if(= 'str(type (setq p(grKwordP sel msg 2))))
        p(if p(ssgetpro (list p) fls msg))
)
总结:利用grKwordP函数,可实现关键字+任何ssget 方法的组合




hubeiwdlue 发表于 2025-2-25 22:40:21

wzg356 发表于 2025-2-25 21:57
没必要了吧
交互操作无非就是拾取 框选 ,1次还是多次,输出关键字的问题
自定义限1次选择或输出关键字 ...

比如:S单次框选关键字,又希望带自定义关键字做设置选项。
论坛上的这类函数,好像中望一直不支持,2025版没测试过。您的这个函数,在中望和acad是通用的,我本来还准备建议中望官方做一个带自定义关键字的ssget。现在没必要了。

hubeiwdlue 发表于 2025-2-25 15:54:25

谢谢大佬分享。

season_88 发表于 2025-2-25 18:04:03

谢谢分享。

muai2010 发表于 2025-2-25 18:04:47

本帖最后由 muai2010 于 2025-2-25 18:06 编辑

有点厉害,就是看不懂,如果能支持任何实体就好了

hubeiwdlue 发表于 2025-2-25 18:49:22

您好,请问可以关键字和自定义关键字一起使用吗?

hubeiwdlue 发表于 2025-2-25 19:57:45

这个函数太好用了。

wzg356 发表于 2025-2-25 21:52:58

muai2010 发表于 2025-2-25 18:04
有点厉害,就是看不懂,如果能支持任何实体就好了

说说什么实体不支持?

wzg356 发表于 2025-2-25 21:57:53

本帖最后由 wzg356 于 2025-2-25 22:00 编辑

hubeiwdlue 发表于 2025-2-25 18:49
您好,请问可以关键字和自定义关键字一起使用吗?
没必要了吧
交互操作无非就是拾取 框选 ,1次还是多次,输出关键字的问题
自定义限1次选择或输出关键字,多次则文字刷提供了循环案例
全限制拾取有entsel解决




wzg356 发表于 2025-2-25 22:11:29

贴出第二个版本,简单一些,基本功能也满足
页: [1] 2
查看完整版本: 自设ssget关键字提示函数356版--命令行/屏幕提示两个版本