cchessbd 发表于 2023-3-15 13:19:56

请高手进来:同时输入一个实数或者在屏幕取一个点。

如题,以下lsp语句,我现在是如果输入,按输入值,不输入则默认取0

(setq qszh (getreal "\n请输入路线的起点桩号<默认0>:"))


但是我现在想加一个功能,这一步的时候,可以同时在屏幕上取一个点,如果是取点,就转向其他的处理流程。
请问各位高手我的想法可以实现吗?



自贡黄明儒 发表于 2023-3-15 15:31:15

getreal改为getdist ,可以在屏上点两点,也可以输入一个值

wzg356 发表于 2023-3-15 17:41:10

本帖最后由 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:46:47

本帖最后由 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 更适合在其他的交互需求。

x_s_s_1 发表于 2023-3-15 14:34:53

可以用grread

liuhe 发表于 2023-3-15 14:49:12

(initget )
(getpoint )
这两个组合一起试试,组合一块去(getpoint ) 可以输入点、距离,关键字

vormittag 发表于 2023-3-15 15:58:10

自己想清楚起始桩号这个变量怎么复制就好了。

cchessbd 发表于 2023-3-15 16:07:31

vormittag 发表于 2023-3-15 15:58
自己想清楚起始桩号这个变量怎么复制就好了。

恩,看情况只能先取点,要是没取到就手动输入。
这样我增加功能就少改一点。楼上几位的回复好像都不行,没法一步到位。

masterlong 发表于 2023-3-15 16:31:36

grread可以实现
只是代码会比较复杂
建议还是initget+get*组合
通过增加一个选项来控制流程
程序结构简单也易于实现
实际操作也就是多两次按键而已

wzg356 发表于 2023-3-15 17:07:49

本帖最后由 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)
)
要哪一个自己选

masterlong 发表于 2023-3-15 17:30:43

上面的发言不对

不用grread应该也可以实现三合一
(iniget 128)
(setq a (getpoint))
判断a的类型
再执行相应的流程

masterlong 发表于 2023-3-15 17:32:26

判断a为字符串时
需要再判断a是否可以解析成为一个数值
页: [1] 2
查看完整版本: 请高手进来:同时输入一个实数或者在屏幕取一个点。