qazxswk 发表于 2022-6-17 00:25:57

怎样不按回车直接使用默认值?

本帖最后由 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))



Bao_lai 发表于 2022-6-17 00:25:58

(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 04:42:52

本帖最后由 qazxswk 于 2022-6-17 07:27 编辑

                                                                  

baitang36 发表于 2022-6-17 07:55:25

不按回车,怎么知道你想用默认值,还是不想用默认值?

qazxswk 发表于 2022-6-17 09:15:34

baitang36 发表于 2022-6-17 07:55
不按回车,怎么知道你想用默认值,还是不想用默认值?

输入命令后,回车肯定不能省。我想输入命令后,回车,就可以直接使用默认值操作。

纵横八方 发表于 2022-6-17 10:33:58

逻辑有问题吧,那样的话要什么默认值? 那怎么 修改 默认值呢?

qazxswk 发表于 2022-6-17 10:47:46

本帖最后由 qazxswk 于 2022-6-17 10:51 编辑

纵横八方 发表于 2022-6-17 10:33
逻辑有问题吧,那样的话要什么默认值? 那怎么 修改 默认值呢?
你试试Bao_lai大神的代码,你就知道了。

qazxswk 发表于 2022-6-17 10:51:04

Bao_lai 发表于 2022-6-17 09:13
(defun c:tt(/ ss)
        (if (not dist) (setq dist 240))
        (setq newdist dist)


办法可行,不错。

qazxswk 发表于 2022-6-20 22:18:56

本帖最后由 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取消。

rocking2008 发表于 2022-6-21 09:27:52

他的意思应该是设置一个常用值例如20,使用命令后,直接按20进行偏移,同时有一个选项子命令C做为修改这个常用值20的。
例如:
命令:TT   回车
命令:默认偏移距离为20,按C修改偏移距离,请点击偏移对象:
这时如果点击对象则按20偏移;输入C则修改偏移距离的值。
应该是这个意思吧。
页: [1] 2 3
查看完整版本: 怎样不按回车直接使用默认值?