请高手进来:同时输入一个实数或者在屏幕取一个点。
如题,以下lsp语句,我现在是如果输入,按输入值,不输入则默认取0(setq qszh (getreal "\n请输入路线的起点桩号<默认0>:"))
但是我现在想加一个功能,这一步的时候,可以同时在屏幕上取一个点,如果是取点,就转向其他的处理流程。
请问各位高手我的想法可以实现吗?
getreal改为getdist ,可以在屏上点两点,也可以输入一个值 本帖最后由 wzg356 于 2023-3-15 17:49 编辑
(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))
)
没有十字光标 本帖最后由 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 更适合在其他的交互需求。
可以用grread (initget )
(getpoint )
这两个组合一起试试,组合一块去(getpoint ) 可以输入点、距离,关键字
自己想清楚起始桩号这个变量怎么复制就好了。 vormittag 发表于 2023-3-15 15:58
自己想清楚起始桩号这个变量怎么复制就好了。
恩,看情况只能先取点,要是没取到就手动输入。
这样我增加功能就少改一点。楼上几位的回复好像都不行,没法一步到位。 grread可以实现
只是代码会比较复杂
建议还是initget+get*组合
通过增加一个选项来控制流程
程序结构简单也易于实现
实际操作也就是多两次按键而已
本帖最后由 wzg356 于 2023-3-15 17:11 编辑
(getDorP)
(defun getDorP ( / p1 p2 l)
(setq p1(cadr (grread '(2 13))))
(command "line" p1 pause "")
(setq p2(getvar "lastpoint"))
(setq D(distance p1 p2))
(entdel(last))
(list P2 D)
)
要哪一个自己选
上面的发言不对
不用grread应该也可以实现三合一
(iniget 128)
(setq a (getpoint))
判断a的类型
再执行相应的流程
判断a为字符串时
需要再判断a是否可以解析成为一个数值
页:
[1]
2