我有一个lisp,我正在尝试改进,它使用polar(基于用户选择的点)计算两个点,然后使用ssget选择一个对象,在两个点之间使用窗口选择。
问题是,当用户选择点时,如果要选择的对象不在屏幕上,则进行选择的ssget失败。
下面是我的问题的一个可运行的示例:
- (defun c:sother (/ a b c ent)
- (setq b (polar (setq a (getpoint)) 0 5))
- (setq c (polar b (dtr 315) 1))
- (setq ent (entget (ssname (ssget "_W" b c) 0)))
- ;do something with ent
- )
- (defun dtr
- (x)
- (* PI (/ x 180.0))
- )
用户首先选择一个点,然后程序在图形中的预期位置选择一个对象(程序没有创建对象)。
可以通过在大约(5.3448,-0.344)处绘制一个小圆来演示该问题,运行该程序并选择(0,0)作为点。如果选择初始点时圆在屏幕上可见,entget将返回实体信息。否则,它将失败。
我是否可以设置一个系统变量或类似的变量来解决这个问题(简单的解决方案)?或者我应该尝试通过查询数据库来选择对象(我认为有点复杂)。 |