明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1525|回复: 14

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

[复制链接]
发表于 2025-2-25 15:15:33 | 显示全部楼层 |阅读模式
本帖最后由 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)
;开始执行时输入s  w 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)
        )
    )
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1明经币 +1 收起 理由
hubeiwdlue + 1 太给力了。

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

 楼主| 发表于 2025-2-27 20:22:40 | 显示全部楼层
本帖最后由 wzg356 于 2025-2-27 23:02 编辑

ssgetpro的3种主要的应用场景代码示例
运行:
(setq  sel '((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 方法的组合




评分

参与人数 1明经币 +1 收起 理由
hubeiwdlue + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

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

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

使用道具 举报

发表于 2025-2-25 15:54:25 | 显示全部楼层
谢谢大佬分享。
回复 支持 反对

使用道具 举报

发表于 2025-2-25 18:04:47 | 显示全部楼层
本帖最后由 muai2010 于 2025-2-25 18:06 编辑

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

使用道具 举报

发表于 2025-2-25 18:49:22 | 显示全部楼层
您好,请问可以关键字和自定义关键字一起使用吗?
回复 支持 反对

使用道具 举报

发表于 2025-2-25 19:57:45 | 显示全部楼层
这个函数太好用了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-25 21:52:58 | 显示全部楼层
muai2010 发表于 2025-2-25 18:04
有点厉害,就是看不懂,如果能支持任何实体就好了

说说什么实体不支持?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-25 21:57:53 | 显示全部楼层
本帖最后由 wzg356 于 2025-2-25 22:00 编辑
hubeiwdlue 发表于 2025-2-25 18:49
您好,请问可以关键字和自定义关键字一起使用吗?

没必要了吧
交互操作无非就是拾取 框选 ,1次还是多次,输出关键字的问题
自定义限1次选择或输出关键字,多次则文字刷提供了循环案例
全限制拾取有entsel解决




回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-25 22:11:29 | 显示全部楼层
贴出第二个版本,简单一些,基本功能也满足
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-4-2 18:41 , Processed in 0.187982 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表