本帖最后由 cafa 于 2022-11-19 17:07 编辑

想写这么一个程序,输入第一点,第二点后后执行命令1,当不需要输入第二点时,直接空格跳过并执行命令2。请教如何判断第二点的输入方式?
(setq ss (ssget))
  (setq p1 (getpoint "\n指定第一点"))
  (setq p2 (getpoint "\n指定第二点"))
(if 如果P2为空格或者鼠标右键则执行命令2,这句该怎么写。请大佬赐教



网友答: 那就是没取到点,一般返回nil.

网友答:
AndyWang 发表于 2022-11-19 17:55
那就是没取到点,一般返回nil.

请问怎么表达呢?(if (= p2 nil)   ?

网友答:
cafa 发表于 2022-11-19 18:24
请问怎么表达呢?(if (= p2 nil)   ?

可以的,去试试就知道了。

网友答: 本帖最后由 kucha007 于 2022-11-19 22:18 编辑

这样?
  1. (defun C:TT (/ Old_Cmd SS P1 P2)
  2.     (setq Old_Cmd (getvar "cmdecho"))(setvar "cmdecho" 0)
  3.     (if (setq SS (SSget))
  4.       (progn
  5.           (setq P1 (getpoint "\n→请指定第一点"))
  6.           (setq P2 (getpoint "\n→请指定第二点"))
  7.           (cond
  8.             ((and P1 P2)
  9.               (progn
  10.                 (princ "\n→P1、P2都存在")(princ)
  11.               )
  12.             )
  13.             ((and P1 (not P2))
  14.               (progn
  15.                 (princ "\n→P1存在,但P2不存在")(princ)
  16.               )
  17.             )
  18.             ((and (not P1) (not P2))
  19.               (progn
  20.                 (princ "\n→P1、P2都不存在")(princ)
  21.               )
  22.             )
  23.           )
  24.       )
  25.       (progn
  26.         (princ "\n→未选择对象,命令结束")(princ)
  27.       )
  28.     )
  29.     (command "redraw")
  30.     (setvar "cmdecho" Old_Cmd)(princ)
  31. )




网友答: 可能需要用到Initget函数。
(if (null p2) (2模块))

网友答:
kucha007 发表于 2022-11-19 22:13
这样?

是这样的,非常感谢

网友答:
sto111 发表于 2022-11-19 22:37
可能需要用到Initget函数。
(if (null p2) (2模块))

好的,我试一下,非常感谢

网友答:
AndyWang 发表于 2022-11-19 18:50
可以的,去试试就知道了。

好的,谢谢
  • 上一篇:[原著]***工具5.6系列程序之树状浏览文件夹
  • 下一篇:没有了