cq4920 发表于 2020-10-25 00:38:00

如何判断选择方式ssget sssgetfirst entsel

本帖最后由 cq4920 于 2020-10-25 02:32 编辑

想把几种标注方式合并一下 但是因为标注方式不同执行的过程也不同 所以需要对选择方式进行判断
1.点击内空
2.点击多义线的某条单边
3.单击线段或圆弧
4.框选多义线,线段和圆弧的混合集
9.先选择了混合集
根据选择方式的不同选择的图元的不同从而进行标注!
好像和某些机械元件的标注有些类似,但又有很大不同!
不知道能否实现 entsel 和 ssget 的选择方式判断?

对齐标注 线形标注 圆弧长标注框选标注内空标注划线标注 角度标注半径标注   连续/打断标注快速标注标注合并


这命令快捷键也太多了!

如果能整合一下会不会好记一些!!虽然这些命令我已经都记得了!!但是这好多年积累的,如果是新人画图速度太慢!



wzg356 发表于 2020-10-25 13:17:18

本帖最后由 wzg356 于 2020-10-25 13:22 编辑

用grread捕捉鼠标左键坐标或getpoint直接获得坐标-----根据坐标放在不同选择方式上

(ssget "cp" (setq p (getpoint)) p)类似(entsel)

lijiao 发表于 2020-10-26 09:22:03

ssget返回的是选择集,ssgetfirst返回的是选择集列表,entsel返回的是图元名和点组成的列表
从返回值上是很好区分的,自己用的哪个函数进行选择,难道你自己都不知道?
***************************************************************************
你是不是说ssget有很多种选择方式,你不知道用户使用的是哪一种?
如果是这样的话,你试试ssnamex 函数

cq4920 发表于 2020-10-26 10:44:24

lijiao 发表于 2020-10-26 09:22
ssget返回的是选择集,ssgetfirst返回的是选择集列表,entsel返回的是图元名和点组成的列表
从返回值上是 ...

举个简单的例子


(defun c:t4 (/ p1 p2 ss )
(setq p1 (getpoint "\n选择对象:"))
        (if
(null (setq p2 (getcorner p1 "\n选择对象:")        ))       
(setq ss (nentselp p1 ))
        (setq ss (ssget "c" p1 p2))               
        )       
        )

这里现在只有两种选择方式 选择集好理解   另一种返回的是图元名 而且需要 空格 右键来确认


那能否对P1进行一个判定,
如果P1在线段上直接nentselp选择
如果 P1在空白处 继续ssget选择   如果这时按了空格 则不继续ssget选择而是反回一个点的值

lijiao 发表于 2020-10-28 09:05:13

(if (and (setq pt1 (getpoint))
       (null (setq ent (nentselp pt1)))
    )
(if (setq pt2 (getcorner pt1))
    (if        (> (car pt2) (car pt1))
      (setq ss (ssget "w" pt1 pt2))
      (setq ss (ssget "c" pt1 pt2))
    )
    pt1
)
ent
)
页: [1]
查看完整版本: 如何判断选择方式ssget sssgetfirst entsel