明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 522|回复: 12

[提问] ssget函数应用问题

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式
本帖最后由 完美 于 2025-1-10 10:30 编辑


我使用下面代码进行一定范围内对象移动,但发现如果模型空间窗口范围没对着(0,0)(20,20)范围,导入lsp代码会提示“已成功加载 1.lsp。命令:未知命令“APPLOAD”。按 F1 查看帮助。”;
如果模型空间范围对着(0,0)(20,20)的一部分,则可见部分的对象会被移动,窗口范围外的没移动。
添加命令(print (sslength b))发现选择集数量与被移动的对象数量一致,是ssget只能选中窗口范围内的对象么,如果要实现选择窗口范围外某一范围对象,该怎么操作,或者有什么函数能实现类似功能?
另外,在使用ssget函数时我还发现选择集不会严格按照(0,0)(20,20)范围去选择,举个例子:如果窗口范围放大到(-1000,-1000)(1000,1000)范围,靠近(0,0)(20,20)范围但不在其中的部分对象也会被选中移动,是否有什么办法实现精确选择?
代码:

(setq b (ssget "_C" '(0 0) '(20 20)))
(command "move" b "" '(0 0) '(0 20))

关于我上面提到的第2点,补充几张图片,下面红色方框是设定的选择范围,长*宽为1.7*1,绿色线是用来测试实际选择范围的

把视口一直缩小到长为2000,而后运行ssget命令选择红色方框两个角点坐标范围

采用move命令高亮上一步选中的对象如下图:






本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 6 天前 | 显示全部楼层
本帖最后由 e2002 于 2025-1-9 10:53 编辑

ssget 的陷阱。
看来有必要说说这个。

上周我写一个函数时,也忘记这一点了,后来发现ssget的结果时对时不对...才想起这一点。

对于程序中的 ssget ,他是与屏幕显示区域相关的,实际上以往 AutoCAD内置命令中选择对象也是受限于屏幕显示区域的,在操作中pan或者zoom到其他区域,将导致原先选中的那些对象没有选中了。后来才有了改进,并提供了一个专门的系统变量控制:SELECTIONOFFSCREEN。

对于 AutoLISP代码中的 ssget ,目前应该还是受限于屏幕显示区域,当在程序中需要构建selectionset的时候,通常需要保证程序控制的对象在当前显示区域内。即使没有交互,例如用到了  “W”, “C”等,当提供的坐标点确定的范围不保证在当前显示区域内时,就会返回不是预期的那种结果,导致程序执行错误。

当前的解决方法是:
1、程序可以在相关处理之前,先 zoom Window到需要的范围,然后再开始处理 ssget。


2、SELECTIONOFFSCREEN设置为2,这个我还没测试过,大家可以试试?

回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
SELECTIONOFFSCREEN变量的说明、
这个没记错是2020版才有的变量、低版本用不了、
而且帮助文件中说明即使设置为2、也可能会出错

值    说明
0     屏幕外选择处于禁用状态
1     屏幕外选择处于启用状态,具有仅支持鼠标输入的限制。此外,在选择时“缩放/平移”会达到某些限制。
2     屏幕外选择处于启用状态,无限制
注: 将 SELECTIONOFFSCREEN 设置为 2 时,选择结果有可能不正确。这仅适用于实验目的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
xiaocainiao 发表于 2025-1-9 11:15
SELECTIONOFFSCREEN变量的说明、
这个没记错是2020版才有的变量、低版本用不了、
而且帮助文件中说明即使 ...

SELECTIONOFFSCREEN 设置确实可以用,就是担心说明中的“结果有可能不正确”,不知道程序什么时候就可能出问题,不太敢用
回复 支持 反对

使用道具 举报

 楼主| 发表于 6 天前 | 显示全部楼层
看到wangyonggao8大佬整理的帖子,能解决我上面提到的窗口范围外对象的选择问题,但暂时看不懂原理,附在下面:
http://bbs.mjtd.com/forum.php?mo ... amp;highlight=ssget

点评

Lee Mac 专门写了一篇详细的 ssget 说明文档,建议去看看并保存。  发表于 6 天前
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
还有的就是,要临时关闭对象捕捉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
e2002 发表于 2025-1-9 10:49
ssget 的陷阱。
看来有必要说说这个。

大神,你上面点评说“Lee Mac 专门写了一篇详细的 ssget 说明文档”,我没找到,能否给个链接
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
完美 发表于 2025-1-10 10:20
大神,你上面点评说“Lee Mac 专门写了一篇详细的 ssget 说明文档”,我没找到,能否给个链接

https://lee-mac.com/ssget.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
e2002 发表于 2025-1-10 10:58
https://lee-mac.com/ssget.html

非常感谢!!!!
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
建议制作四叉树,大不了自己制作缓存.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 20:07 , Processed in 0.292440 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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