明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3077|回复: 20

[讨论] 怎样不按回车直接使用默认值?

[复制链接]
发表于 2022-6-17 00:25:57 | 显示全部楼层 |阅读模式
15明经币
本帖最后由 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设置新距离:" ""))) (if (= nil newdist)(setq newdist dist)(setq dist newdist)) ) ) ) (if (and newdist ss) (vlax-for ss (vla-get-activeselect ...
发表于 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)
)
回复

使用道具 举报

 楼主| 发表于 2022-6-17 04:42:52 | 显示全部楼层
本帖最后由 qazxswk 于 2022-6-17 07:27 编辑

                                                                  
回复

使用道具 举报

发表于 2022-6-17 07:55:25 | 显示全部楼层
不按回车,怎么知道你想用默认值,还是不想用默认值?
回复

使用道具 举报

 楼主| 发表于 2022-6-17 09:15:34 来自手机 | 显示全部楼层
baitang36 发表于 2022-6-17 07:55
不按回车,怎么知道你想用默认值,还是不想用默认值?

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

使用道具 举报

发表于 2022-6-17 10:33:58 来自手机 | 显示全部楼层
逻辑有问题吧,那样的话  要什么默认值? 那怎么 修改 默认值呢?
回复

使用道具 举报

 楼主| 发表于 2022-6-17 10:47:46 | 显示全部楼层
本帖最后由 qazxswk 于 2022-6-17 10:51 编辑
纵横八方 发表于 2022-6-17 10:33
逻辑有问题吧,那样的话  要什么默认值? 那怎么 修改 默认值呢?

你试试Bao_lai大神的代码,你就知道了。
回复

使用道具 举报

 楼主| 发表于 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)

办法可行,不错。
回复

使用道具 举报

 楼主| 发表于 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取消。
回复

使用道具 举报

发表于 2022-6-21 09:27:52 | 显示全部楼层
他的意思应该是设置一个常用值例如20,使用命令后,直接按20进行偏移,同时有一个选项子命令C做为修改这个常用值20的。
例如:
命令:TT   回车
命令:默认偏移距离为20,按C修改偏移距离,请点击偏移对象:
这时如果点击对象则按20偏移;输入C则修改偏移距离的值。
应该是这个意思吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-19 21:00 , Processed in 0.183633 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表