(defun getDorP(/ loop n p gr)
(setq loop t n nil)
(while loop
(setq gr (grread t 8))
(cond
((= (car gr) 3)(setq p(cadr gr)(setq loop nil))
((and(= (car gr)2)
(setq i(vl-position (cadr gr)'(48 49 50 51 52 53 54 55 56 57)))
)
(prompt (strcat "\n距离:"(rtos(setq n(if n(+ i(* n 10)) i)))))
);记录键盘数字输入并显示在命令行
((or(member (car gr) '(3 25))(equal gr '(2 13))(equal gr '(2 32)))(setq loop nil))
)
)(if p p(if n n))
)
没有十字光标 masterlong 发表于 2023-3-15 17:30
上面的发言不对
不用grread应该也可以实现三合一
您这简单,易懂,好判断。特别好。
谢谢您!代码应该是少了个t
(initget 128)
(setq a (getpoint)) 本帖最后由 e2002 于 2023-3-15 17:50 编辑
用户输入桩号,或者应该是在图中选择一个已经有的桩号(可能是Insert的Attrib,也可能是个Text对象),那你initget 指定 Keyword 如 “Select“ :
(initget "Select")
(setq qszh (getint "\n请输入路线的起点桩号 [从图中选择(S)/0/1/2/3/4/5/6/7/8/9/10]: <默认桩号: 0>"))
(cond
((= qszh "Select") (fooSelect ....))
((= (type qszh) 'INT) (fooInt ....))
...
);_cond
...
桩号应该是个正整数吧?使用 getint 更加合适。pick point 返回的是 point的坐标值,似乎不是你需要的结果吧?
grread 更适合在其他的交互需求。
这个最好
(setq p2(getpoint (setq p1(cadr (grread '(2 13)))) "\n距离或点:"))
(list p2 (distance p1 p2)) wzg356 发表于 2023-3-15 17:57
这个最好
(setq p2(getpoint (setq p1(cadr (grread '(2 13)))) "\n距离或点:"))
(list p2 (distance p1...
这个办法可以输入,就是不好判断。昨天试了下定义函数也不行。d p1 p2 始终无法为空。
所以还是用了(initget 128)(setq a (getpoint)),这个只需要判断一下类型就可以了。
页:
1
[2]