明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5098|回复: 16

[已解答] 关于pause的关键字请教

  [复制链接]
发表于 2015-11-9 11:24 | 显示全部楼层 |阅读模式
本帖最后由 azbk00 于 2015-11-9 11:27 编辑

我有这样一句代码(vl-cmdf "copy" ss "" "non" pt pause),其中pause是要求用户输入一个点。
我本来想在这句代码之前插入“关键字D”,即如果我输入的不是点,而是输入字母D的话,程序就会执行我的另一端代码。
于是我就写成了
(initget "D")
(vl-cmdf "copy" ss "" "non" pt pause)
(if(= pause "D")(vl-cmdf "copy" ss "" "non" pt (HH:RectangCen (car (entsel)))))
其中(HH:RectangCen (car (entsel)))论坛找来的是获取矩形中心点的子函数。
但好像这个“pause”是不能被D给赋值的,代码在执行到pause要我输入点的时候,我输入D,程序还是会提示我“需要点或选项关键字”。
后来我又无奈改成了
(initget "D")
(setq p1(getpoint))
(if(= p1 "D")
(vl-cmdf "copy" ss "" "non" pt (HH:RectangCen (car (entsel))))
(vl-cmdf "copy" ss "" "non" pt p1)
)
但是这样有个不好的地方,就是在命令中选定p1点时不会有实时拖动复制对象的轨迹,这个好像牵扯到反应器,我还是新手,暂时没学到这块。
所以还是想从之前的思路进行改写
(initget "D")
(vl-cmdf "copy" ss "" "non" pt pause)
(if(= pause "D")(vl-cmdf "copy" ss "" "non" pt (HH:RectangCen (car (entsel)))))
不知道这种错误的写法要怎么改才行呢?


发表于 2015-11-9 20:11 来自手机 | 显示全部楼层
仅靠lisp是不可能的
高飞鸟的动态函数库可以解决你的问题
自己搜一下

他的函数在2004下有些小问题
其它版本没试过
可以搜一下我最近1年内的帖子
回复 支持 1 反对 0

使用道具 举报

发表于 2023-11-9 16:24 | 显示全部楼层
复制时 动态移动中捕捉矩形的几何中心 不行吗?为何要弄那么复杂?
发表于 2015-11-9 22:08 | 显示全部楼层
(setq ss(ssget)p(getpoint))
(while(and(not(equal'(2 68)(setq a(grread 2))))(/=(car a)3)));;(chr 68)=="D"
(vl-cmdf"copy"ss"""non"p(if(equal'(2 68)a)(getpoint"目标点")pause))

应该还是不能达到你的要求,你可以试下,如果觉得差不太多可以自己改下,如果差太多不用这样研究了
发表于 2015-11-10 00:21 | 显示全部楼层
本帖最后由 namezg 于 2015-11-10 00:22 编辑

变通一下
(defun c:test (\ en ss pt)
        (print "\n请选择要复制的对象: ")
        (setq ss (ssget))
        (setq pt (getpoint "\n请指定第一点: "))
        (if (setq en (car (entsel "\n选择对象以其中心点作为第二点<指定第二点>: ")))
                (vl-cmdf "copy" ss "" "non" pt (HH:RectangCen en))
                (vl-cmdf "copy" ss "" "non" pt (getpoint "\n请指定第二点: "))
        )
)
发表于 2015-11-10 01:29 来自手机 | 显示全部楼层
楼上两位没看明白吗
楼主需要的是在拖动的过程中
可以接受鼠标取点或自定义参数
取点不是问题
自定义参数也不是问题
问题在于必须是拖动
除了高飞鸟的动态函数外
还可以试试express工具里提供的动态函数
这个功能弱一点但是兼容性好
发表于 2015-11-10 10:21 | 显示全部楼层
看看联机帮助怎样说(AutoLisp R14帮助中关于command函数):

本帖子中包含更多资源

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

x
 楼主| 发表于 2015-11-10 11:07 | 显示全部楼层
辛苦楼上几位了,虽然llsheng_73和namezg都热心地给了代码,但说实话效果还是不理想。看到ll_j的贴图我算是死心了,我回头好好研究下masterlong的建议,学习下高飞鸟的动态函数库,在此对如此热心的各位一并表示感谢了!
发表于 2015-11-10 12:00 来自手机 | 显示全部楼层
如果你只需要在平移拖动中使用到自定义参数
那还是优先试试express的函数
 楼主| 发表于 2015-11-10 12:53 | 显示全部楼层
masterlong 发表于 2015-11-10 12:00
如果你只需要在平移拖动中使用到自定义参数
那还是优先试试express的函数

express函数我之前也尝试用过,不过好像会提示未知命令,而且我用vlax-add-cmd添加命令好像也无效,比如说(command "flatten")
不知道该怎么引用啊?
发表于 2015-11-10 15:51 | 显示全部楼层
azbk00 发表于 2015-11-10 12:53
express函数我之前也尝试用过,不过好像会提示未知命令,而且我用vlax-add-cmd添加命令好像也无效,比如说 ...

ET的函数详解也没见过,论坛里也有人零零星星贴过一些,也都不全,多数也是自己“试验”出来的,所以想用也基本靠自己。
ET的函数部分是在Lisp文件,多数是在arx和编译的fas中定义的,在Lsp文件中定义的还可以打开文件看看,比如你提到的faltten,就是在flatten.lsp和flattensup.lsp这两个文件中定义的(需要说一下,ET中的函数基本都不是使用command加载的,而是使用函数调用的方法加载的)。如果对这个有兴趣,不妨经常有选择地打开ET目录下的Lsp文件看看,多少是会有点收获的(首先建议好读书不求甚解,目的明确再单独仔细研究)。
arx和fas文件定义的函数是无法打开看的,不过在acetauto.lsp中有部分函数的加载文件和加载方法,谁没有明确注解,但也能为研究提供点捷径。一部分函数会出现在其他的lsp文件中,遇到也可留意其用法。
好久不写程序了,只能为你提这些建议,希望有用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 02:27 , Processed in 0.173935 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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