LISP2LEARN 发表于 2022-7-6 07:53:09

通过entsel获取点

大家好,
 
可以将(entsel)用作(getpoint)吗。我的目标是选择一个块并得到它的插入点,如果它为零或我点击一个空白区域,它将只得到我点击并错过的点。非常感谢。

pBe 发表于 2022-7-6 08:04:37

使用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等人

LISP2LEARN 发表于 2022-7-6 08:09:55

谢谢Pbe,但这不是我的目标。如果我错过了,那么我只需要知道我点击的地方。
 
它要么得到一个块的插入点,要么得到我单击时错过的点。
 
 

BlackBox 发表于 2022-7-6 08:16:34

为了完整性起见,获取Entsel返回的列表中的第二项是选择点,这与块的插入点不同。可以很容易地评估一个块是否由Entsel返回,如果是,则返回插入点,如果不是,则返回选择点。

Stefan BMR 发表于 2022-7-6 08:30:20

也许是这个
(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)
)

pBe 发表于 2022-7-6 08:32:22

 
关于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

LISP2LEARN 发表于 2022-7-6 08:38:22

谢谢Stefan和pBe,你的代码正是我想要的。我花了半天的时间来解决这个问题,但毫无结果。再次感谢!
 
pBe,
只是想知道,“code”变量的目的是什么?
 

pBe 发表于 2022-7-6 08:52:34

 
凉豆
 
不要在意。这是我复制片段的例程的剩余部分。
无论如何,仅供参考
(=5代码);;鼠标已被拖动
(=2代码);;键盘已按下
(=3代码);;鼠标左键单击
 
HTH公司

LISP2LEARN 发表于 2022-7-6 08:55:12

嗯很好,再次感谢。
页: [1]
查看完整版本: 通过entsel获取点