明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 51study

关于命令行中 注册命令(vlax-add-cmd) 的问题?

  [复制链接]
发表于 2004-3-3 16:46:00 | 显示全部楼层
你是要反命令注册为AuotCAD内部指令对吧


你把你的程式义部分拿上来看一下,看看是哪里有错
 楼主| 发表于 2004-3-3 17:07:00 | 显示全部楼层
没错,就是注册为内部指令!


命令和步骤和你上次说的差不多,就是我实验不成功!


比如我写的一个文件为: Auto.lsp


(defun at()


......


)


我在Menu文件中定义的快捷键为Ctrl+Alt+A!我执行过erase命令后再按Ctrl+alt+A可以顺利完成 at 函数的功能(如画一个门),然后回车执行的还是erase命令,我想让它回车后继续执行 at 函数而不是erase,就这个意思!


我也知道用(vlax-cmd-add "at" 'at),但失败!
发表于 2004-3-3 18:00:00 | 显示全部楼层
把它放上来看一下
发表于 2004-3-3 20:48:00 | 显示全部楼层
希望你自己动手试试,看图,我将ctrl+alt+A定义为画直线,先执行qsave,然后使用ctrl+alt+A画了直线,然后直接回车,你看看执行的是什么?并不是你说的qsave,注:这里见快捷键定义为画直线和定义自己写的程序命令是一样的,因为快捷键最终只是跟菜单联系,只要你在菜单中执行的是你自己要的命令即可。


从图中能看出来,第二次画直线是直接回车的,因为它是从第二行开始。。。

本帖子中包含更多资源

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

x
 楼主| 发表于 2004-3-5 08:24:00 | 显示全部楼层
Alan发表于2004-3-3 18:00:00把它放上来看一下

不用放上来吧,有点长!我中间就是实现一个功能,你就把它当成 (command "line" '(0,0) '(100,100)) 好了!
 楼主| 发表于 2004-3-5 08:27:00 | 显示全部楼层
meflying发表于2004-3-3 20:48:00希望你自己动手试试,看图,我将ctrl+alt+A定义为画直线,先执行qsave,然后使用ctrl+alt+A画了直线,然后直接回车,你看看执行的是什么?并不是你说的qsave,注...

意思是这个意思,问题就是怎么实现,用(vlax-cmd-add)函数把它注册为AutoCAD的内部命令?! 比如我上面的程序,我这么写 (vlax-cmd-add "at" 'at) 正不正确?! 并且这个命令应该放在程序的哪里?!
发表于 2004-3-5 08:34:00 | 显示全部楼层
4楼已经说了,后者,就是2楼说的(defun c:xxx()...


如你的程序,定义(defun c:at()...


这样,你以后只要在使用它的地方使用命令at就可以了,除了(command "at")不能用以外,其余用法跟内部命令如line使用一样。。。如果你不需要如上面那样使用,就不需要使用(vlax-add-cmd。。。


如果使用vlax-add-cmd放到程序文件的最后,要放到(defun at()...)之外,就是说它不是函数at的一部分,是独立的,或者你加载完程序后,在命令行输入vlax-add-cmd函数


查一下帮助文件就知道了,是vlax-add-cmd,你写错了,还真没注意
 楼主| 发表于 2004-3-5 12:00:00 | 显示全部楼层
我只是在这里把vlax-add-cmd写错了,我实验的时候没写错!


但我现在通过快捷键调用我的程序,回车还是失败,是我原来执行的程序而不是我自己的程序?!
发表于 2004-3-5 12:08:00 | 显示全部楼层
那只有把你的程序放上来,而后把你快捷键的设置过程说一下。。。


有一点要注意,如果快捷键执行的是(at),则不会重复执行,因为它只重复命令,而不会重复lisp表达式
 楼主| 发表于 2004-3-5 15:28:00 | 显示全部楼层
meflying发表于2004-3-5 12:08:00那只有把你的程序放上来,而后把你快捷键的设置过程说一下。。。 有一点要注意,如果快捷键执行的是(at),则不会重复执行,因为它只重复命令,而不会重复lisp...

Mylisp.MNU中 ID_AUTO [绘制(&A)]^C^C^P(if (not auto) (load "auto"))(at) ***ACCELERATORS
ID_AUTO [CONTROL+ALT+"A"] 和你说的一样,执行的是自定函数! 有没有其它方法可以实现?! ----------------at 函数当作下面这样吧(原程序太长,拿这个当例子)--------------------- (defun at() (setq oce (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq t1 (getpoint "\nInput circle center point: "))
(initget 2)
(setq t2 (getdist t1 "\nInput radius of circle: "))
(while (/= t2 'nil)
(command ".circle" t1 t2)
(initget 2)
(setq t2 (getdist t1 "\nInput radius of circle: "))
)
(setvar "cmdecho" oce) )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 18:52 , Processed in 0.189439 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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