如何实现多种选择方式?比如可以选取一条直线,或者输入两个点。
我需要获得一段距离,可以有以下几个方法:1、键盘直接输入
2、选取图上一条直线或者pline线
3、用鼠标直接在图上选取2个点或者多个点,然后计算这些点连接成的线的距离
正常是给出3个选择,用户选取后,根据选择分别处理以上三种方案,有没有可能用一句autolisp语言实现,然后分别根据用户的输入来决定怎么处理,比如如果用户用键盘输入,说明就是用方法1,如果选取物体,那就是2,如果连续点选,那就是3.
不知道我表达清楚没有。谢谢。
第一种和第三种现在是合并的,getdist函数可以直接给出,第二种方法属于实体选择,不可以也不可能直接得到,就像你自己所说,选择Line或PLine,这就是两种完全不同的线形,需要不同的处理方法才能得到所要的距离。
一般像你的情况可以这样处理:
(initget "S")
(setq ds(getdist "\n输入距离或 [参照(S)]: "))
(cond
((= ds "S") (se));选择参照实体并处理
((= ds nil) (end)) ;空输入退出,可在前面initget中禁止
(t nil) ;正常输入,向下继续
)
...
;;我是这样处理的,仅供参考
;;1 取得线长or点取
(defun GetCurveLeng (/ ent curve-obj leng en)
(vl-load-com)
(if (setq ent (entsel "\n>>>>>>拾取线条、尺寸、[回车]"))
(progn
(setq en (entget (car ent)))
(cond
((wcmatch (LI_item 0 en) "DIMENSION")
(if (or (wcmatch (LI_item 1 en) "*<>*") (= (LI_item 1 en) ""))
(setq leng (LI_item 42 en))
(setq leng (LI_item 1 en))
)
)
(T
(if (= (cdr (assoc 0 en)) "INSERT")
(setq ent (nentselp "" (cadr ent)))
)
(setq curve-obj (vlax-ename->vla-object (car ent)))
(redraw (car ent) 3)
(setq leng (vlax-curve-getDistAtParam
curve-obj
(vlax-curve-getEndParam curve-obj)
)
)
)
)
)
(progn
(initget 1)
(setq leng (getpoint "\n 拾取型材一端点"))
(setq leng (getdist leng "\n 拾取型材另一端点\n\n"))
)
)
(setq leng (rtos leng 2 0))
) 自贡黄明儒 发表于 2013-10-23 16:11 static/image/common/back.gif
;;我是这样处理的,仅供参考
这种方法好,谢了大家。 这说白了就是走不同的路,达到同一目标。
这种最好的方式就是用DCL,放三个按钮即可!
fl202 发表于 2013-10-25 09:44 static/image/common/back.gif
这说白了就是走不同的路,达到同一目标。
这种最好的方式就是用DCL,放三个按钮即可!
是的,DCL最好!
页:
[1]