怎样不按回车直接使用默认值?
本帖最后由 qazxswk 于 2022-6-17 00:58 编辑下面是一个双向偏移的代码。
(defun c:11(/ ss x)
(if (not dist) (setq dist 240))
(setq newdist (getreal (strcat"\n请输入偏移距离 <初始值:"(rtos dist)">")))
(if (null newdist)(setq newdist dist)(setq dist newdist))
(setq ss(ssget ":s"))
(vlax-for ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
(mapcar '(lambda (x)(vla-offset ss x))(list newdist (- newdist)) )(vla-delete ss))
(princ))
操作过程:先输入命令,再输入偏移距离并回车,再选择对象偏移。如果不输入偏移距离,直接回车再选择对象偏移。这样,就多了个确定偏移距离的回车动作。
现在,直接使用默认值偏移时,想省掉这个确定偏移距离的回车动作。也就是说,使用默认值直接偏移。如果想改变偏移距离,按字母S设置。写出下面的代码,但不成功,望各位大神出点主意,帮我修改看看。
(defun c:11(/ ss x)
(if (not dist) (setq dist 240))
(initget 0 "S")
(if (/= (setq ss (ssget ":s"((strcat "\n当前偏移距离:" (rtos dist) " [设置新距离(S)]"))))nil)
(progn
(= ss "S")
(setq newdist (strcat "\n 设置新距离:" "<" (rtos dist) ">"))
(if (null newdist)(setq newdist dist)(setq dist newdist))
(initget 0 "S")
(setq newdist (getreal (strcat "\n当前偏移距离:" (rtos dist) " [设置新距离(S)]")))
(if newdist
(vlax-for ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
(mapcar '(lambda (x)(vla-offset ss x))(list newdist (- newdist)) )(vla-delete ss))
)
))
(princ))
(defun c:tt(/ ss)
(if (not dist) (setq dist 240))
(setq newdist dist)
(princ (strcat "\n当前偏移距离:" (rtos dist) " <空格或者回车设置新距离>"))
(while (= ss nil)
(setq ss (ssget ":s"))
(if (= ss nil)
(progn
(setq newdist (getdist (strcat "\n设置新距离:" "<" (rtos dist) ">")))
(if (= nil newdist)(setq newdist dist)(setq dist newdist))
)
)
)
(if (and newdist ss)
(vlax-for ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))
(mapcar '(lambda (x)(vla-offset ss x))(list newdist (- newdist)))(vla-delete ss))
)
(princ)
) 本帖最后由 qazxswk 于 2022-6-17 07:27 编辑
不按回车,怎么知道你想用默认值,还是不想用默认值? baitang36 发表于 2022-6-17 07:55
不按回车,怎么知道你想用默认值,还是不想用默认值?
输入命令后,回车肯定不能省。我想输入命令后,回车,就可以直接使用默认值操作。 逻辑有问题吧,那样的话要什么默认值? 那怎么 修改 默认值呢? 本帖最后由 qazxswk 于 2022-6-17 10:51 编辑
纵横八方 发表于 2022-6-17 10:33
逻辑有问题吧,那样的话要什么默认值? 那怎么 修改 默认值呢?
你试试Bao_lai大神的代码,你就知道了。 Bao_lai 发表于 2022-6-17 09:13
(defun c:tt(/ ss)
(if (not dist) (setq dist 240))
(setq newdist dist)
办法可行,不错。 本帖最后由 qazxswk 于 2022-6-20 23:35 编辑
Bao_lai 发表于 2022-6-17 09:13
(defun c:tt(/ ss)
(if (not dist) (setq dist 240))
(setq newdist dist)
感觉还是通过按一个字母来修改偏移距离比较好一点,如果用空格或回车来设置新距离,有时候空选,也会进入设置新距离状态,而且也只能按ESC取消。 他的意思应该是设置一个常用值例如20,使用命令后,直接按20进行偏移,同时有一个选项子命令C做为修改这个常用值20的。
例如:
命令:TT 回车
命令:默认偏移距离为20,按C修改偏移距离,请点击偏移对象:
这时如果点击对象则按20偏移;输入C则修改偏移距离的值。
应该是这个意思吧。