通过entsel获取点
大家好,可以将(entsel)用作(getpoint)吗。我的目标是选择一个块并得到它的插入点,如果它为零或我点击一个空白区域,它将只得到我点击并错过的点。非常感谢。 使用entsel选择对象,(cdr(assoc 10(entget object));
如果您希望在“错过”时提示继续
(if (not (while
(progn (setvar 'errno 0) (setq en (car (entsel)))
(cond
( (= 7 (getvar 'errno))
(princ "\nMissed, try again.")
)
( (eq 'ename (type en))
(if (not (eq (cdr (assoc 0 (entget en))) "INSERT"))
(princ "\nInvalid Object Selected.")
)
)
)
)
)
)
(cdr (assoc 10 (entget en))))
Lee Mac等人 谢谢Pbe,但这不是我的目标。如果我错过了,那么我只需要知道我点击的地方。
它要么得到一个块的插入点,要么得到我单击时错过的点。
为了完整性起见,获取Entsel返回的列表中的第二项是选择点,这与块的插入点不同。可以很容易地评估一个块是否由Entsel返回,如果是,则返回插入点,如果不是,则返回选择点。 也许是这个
(defun sel_block ( / p1 s e)
(if
(setq p1 (getpoint "\nSelect block: "))
(if
(setq s (nentselp p1))
(if
(and
(eq (type (setq e (car (cadddr s)))) 'ENAME)
(eq (cdr (assoc 0 (entget e))) "INSERT")
)
(cdr (assoc 10 (entget e)))
(progn
(princ "\nNot a block")
(sel_block)
)
)
p1
)
)
)
(defun C:TEST ()
(sel_block)
)
关于entsel,当你“错过”时,你什么也得不到。
但是,您可以使用grread
(if (or (setq ent (entsel))
(setq gr (grread t 15 0)
code (car gr)))
(setq pt (ifent
(cdr (assoc 10 (entget (Car ent))))
(cadr gr)))
)
OOPS 谢谢Stefan和pBe,你的代码正是我想要的。我花了半天的时间来解决这个问题,但毫无结果。再次感谢!
pBe,
只是想知道,“code”变量的目的是什么?
凉豆
不要在意。这是我复制片段的例程的剩余部分。
无论如何,仅供参考
(=5代码);;鼠标已被拖动
(=2代码);;键盘已按下
(=3代码);;鼠标左键单击
HTH公司 嗯很好,再次感谢。
页:
[1]