乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 100|回复: 8

[编程交流] 以编程方式选择关闭

[复制链接]

7

主题

18

帖子

11

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 06:48:43 | 显示全部楼层 |阅读模式
我有一个lisp,我正在尝试改进,它使用polar(基于用户选择的点)计算两个点,然后使用ssget选择一个对象,在两个点之间使用窗口选择。
 
问题是,当用户选择点时,如果要选择的对象不在屏幕上,则进行选择的ssget失败。
 
下面是我的问题的一个可运行的示例:
 
  1. (defun c:sother (/ a b c ent)
  2. (setq b (polar (setq a (getpoint)) 0 5))
  3. (setq c (polar b (dtr 315) 1))
  4. (setq ent (entget (ssname (ssget "_W" b c) 0)))
  5. ;do something with ent
  6. )
  7. (defun dtr
  8. (x)
  9.    (* PI (/ x 180.0))
  10. )

 
用户首先选择一个点,然后程序在图形中的预期位置选择一个对象(程序没有创建对象)。
 
可以通过在大约(5.3448,-0.344)处绘制一个小圆来演示该问题,运行该程序并选择(0,0)作为点。如果选择初始点时圆在屏幕上可见,entget将返回实体信息。否则,它将失败。
 
我是否可以设置一个系统变量或类似的变量来解决这个问题(简单的解决方案)?或者我应该尝试通过查询数据库来选择对象(我认为有点复杂)。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:02:51 | 显示全部楼层
你还没有发布你的代码,所以我可能会错过一些信息。。。为什么不直接将名称传递给选择集?
 
  1. (defun _Select (ss)
  2. ;; Example:
  3. ;; (_Select (ssadd (car (entsel))))
  4. (sssetfirst nil ss)
  5. )

 
下面是一个快速示例:
 
  1. (defun c:FOO (/ eName ss)
  2. (if (and (setq eName (car (entsel "\nSelect an entity: ")))
  3.           (setq ss (ssadd eName))
  4.      )
  5.    (_Select ss)
  6. )
  7. (princ)
  8. )
回复

使用道具 举报

7

主题

18

帖子

11

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 07:06:37 | 显示全部楼层
对不起,我已经用更详细的解释更新了最初的帖子。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:12:46 | 显示全部楼层
我想你没有理解我的建议。。。不要使用窗口选择来创建选择集。相反,根据一些独特的识别标准(如图层、对象类型、XRecord等)将实体添加到选择集中。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:19:32 | 显示全部楼层
要选择在选择时可能不在屏幕上的对象,一种解决方案是在评估ssget表达式之前临时缩放到选择区域,例如:
或者,使用Visual LISP:
然而,正如BlackBox上面所建议的那样,一种更可靠、更优雅的方法是直接从图形数据库中检索实体(ssget“X”模式),该方法基于其他独特特征,例如实体类型、图层、线型等,甚至使用独特的几何特性(例如圆心或半径,如果它确实是您试图选择的圆)。
回复

使用道具 举报

7

主题

18

帖子

11

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 07:31:12 | 显示全部楼层
谢谢你们,我想我只需要编写一个函数来使用(ssget“_X”)查找实体以及相对于选定点的位置。很高兴知道“_X”模式适用于屏幕外对象。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:36:25 | 显示全部楼层
X是搜索整个dwg不确定您将如何使用它?我同意李做一个临时缩放,我遇到了这个问题之前,做其他事情,如多次圆角一次必须能够看到所有的线,它的工作。
回复

使用道具 举报

7

主题

18

帖子

11

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 07:45:18 | 显示全部楼层
 
我知道我要找的实体是文本,所以我可以通过DTEXT和MTEXT进行过滤,并获得其中一个,在由两点定义的矩形内有一个插入点。我的AutoLisp有点生锈了,我很确定这是可能的。
 
虽然暂时的变焦很诱人,因为李很友善地把它写了出来
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:50:40 | 显示全部楼层
您的ssget可以有多个过滤器,如(2。“Text,mtext”)与WP连接
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 15:14 , Processed in 0.746630 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表