明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9096|回复: 30

[函数] 如何让一个 lsp (或cad)的命令重复运行,按空格或esc退出?

  [复制链接]
发表于 2011-6-11 13:52 | 显示全部楼层 |阅读模式
本帖最后由 669423907 于 2011-6-12 17:42 编辑

要求如标题所述,如何让一个 lsp (或cad)的命令在运行完一次后再次运行.......再次运行......再次运行.......按空格或esc退出?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-6-11 14:39 | 显示全部楼层
(defun c:tt()
  (while (setq i (getint "\n输入序号:"))
    (if i
      (progn
        (princ "\n运行程序")
        (princ i)
        );progn
      
    );endif
    );endwhile
  (princ "\n运行结束")
  (princ)
)
发表于 2011-6-11 15:20 | 显示全部楼层
用GRREAD函数比较好。
发表于 2011-6-11 18:08 | 显示全部楼层
用 multiple命令调用
发表于 2011-6-11 21:32 | 显示全部楼层
好像意义不大
 楼主| 发表于 2011-6-11 22:23 | 显示全部楼层
本帖最后由 669423907 于 2011-6-11 22:27 编辑

回复 ahwx0814 的帖子

首先非常感谢你的回复。你的程序程序与我的要求有点不相符。我以下一程序为例:

文字居中
(setvar "CMDECHO" 0)
(vl-load-com)
(defun C:jz(/ X Y SIZE PT EN AREA STR TMP)
(if (and (setq SS (entsel "\n选择要居中的文字: "))
(setq EN (car SS))
(setq EN_TMP (bpoly (cadr SS))))
(progn
(setq TMP (BOX EN)
TMP (mapcar '+ (car TMP) (cadr TMP))
PT0 (mapcar '* TMP '(0.5 0.5 0.5)))
(setq TMP (BOX EN_TMP)
TMP (mapcar '+ (car TMP) (cadr TMP))
PT1 (mapcar '* TMP '(0.5 0.5 0.5)))
(command "_.move" EN "" "non" PT0 "non" PT1)
(entdel EN_TMP)))
(princ))
(defun BOX (E / LL UR)
(vla-getboundingbox (vlax-ename->vla-object E) 'LL 'UR)
(mapcar 'vlax-safearray->list (list LL UR)))

如何在 “jz” 之后再自动不停地重复 “jz” ?

非常期待你的再次指教!
 楼主| 发表于 2011-6-11 22:27 | 显示全部楼层
回复 xiaxiang 的帖子

请看看以上例子。
发表于 2011-6-11 23:25 | 显示全部楼层
(defun C:jz(/ X Y SIZE PT EN AREA STR TMP)
  (setvar "CMDECHO" 0)
  (vl-load-com)
  (defun BOX (E / LL UR)
    (vla-getboundingbox (vlax-ename->vla-object E) 'LL 'UR)
    (mapcar 'vlax-safearray->list (list LL UR))
  )
  (while (setq SS (entsel "\n选择要居中的文字: "))
    (setq EN (car SS))
    (setq EN_TMP (bpoly (cadr SS)))
    (setq TMP (BOX EN)
          TMP (mapcar '+ (car TMP) (cadr TMP))
          PT0 (mapcar '* TMP '(0.5 0.5 0.5))
    )
    (setq TMP (BOX EN_TMP)
          TMP (mapcar '+ (car TMP) (cadr TMP))
          PT1 (mapcar '* TMP '(0.5 0.5 0.5))
    )
    (command "_.move" EN "" "non" PT0 "non" PT1)
    (entdel EN_TMP)
  )
  (princ)
)
 楼主| 发表于 2011-6-12 17:37 | 显示全部楼层
本帖最后由 669423907 于 2011-6-12 17:38 编辑

回复 啵浪鼓 的帖子

谢谢你 啵浪鼓 ,你的名字很特别,很好记。很多地方都见过你。谢谢你优化了此程序。
不过我的意思是:
1:有很多的 lsp ;
2:每个 lsp 运行 一次后就结束了,要重新输入命令或空格或右键才能再次运行;
3:或者是 cad 本身的命令如“C”;
4:能不能用一程序把一些或全部的命令加在此程序中;
5:当用到此程序中加载的命令时,命令就可以不断重复了。

不知这是否是异想天开呢?????
发表于 2011-6-12 19:26 | 显示全部楼层
可以从定义菜单入手来实现这个功能:
如果是2005以前的版本,直接编辑扩展名为mnu的菜单文件,
比如直线命令,原来是这样的:[直线(L)]^C^C_line每次只能执行一次,如果改成
[直线(L)]*^C^C_line,即在^C^C前加*号,就变成重复执行了。
如果是2005及以后的版本,由于菜单结构变了,不能直接编辑,应该在cad中编辑,具体为:点菜单:工具——》自定义——》界面,如图:这是对话框的局部,你可以参照这个格式添加自己的命令。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

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

GMT+8, 2024-5-19 00:52 , Processed in 0.197107 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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