lazybug 发表于 2007-7-8 12:46:00

[讨论]高版本里用command调用copy时的疑问

<p>我现在用的CAD2008(估计06、07也是这样的),发现在程序里用commad调用copy命令时与绘图时直接使用copy命令是有区别的。</p><p>大家可以看两次运行的最后一句,理论上讲不应该是一致的么?</p><p></p><p>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</p><p>命令: (command "_.copy")<br/>_.copy nil</p><p>选择对象: 指定对角点: 找到 4 个</p><p>选择对象:</p><p>指定基点或 [位移(D)/多个(M)] &lt;位移&gt;:&nbsp; *取消*<br/>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br/>命令: copy<br/>选择对象: 指定对角点: 找到 4 个</p><p>选择对象:</p><p>当前设置:&nbsp; 复制模式 = 多个<br/>指定基点或 [位移(D)/模式(O)] &lt;位移&gt;: *取消*<br/></p>

phoenixdjq 发表于 2007-7-8 22:37:00

<p>2004以上版本的复制命令就是多重复制了</p><p>我想应该是这个原因吧</p>

zml84 发表于 2007-7-9 09:54:00

参见:<a href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=61370">http://bbs.mjtd.com/forum.php?mod=viewthread&tid=61370</a>&nbsp; 第8楼

lazybug 发表于 2007-7-9 12:39:00

<p>回楼上:</p><p>我发帖之前看过你的程序</p><p>我现在要讨论的是为什么(command "_.copy")与copy的表现不同,而不是讨论因为它们的不同应该怎么写程序。</p><p>如果仅仅说是因为04之后desk把copy命令改为了默认多重复制,还是没有说明为什么在高版本里(command "_.copy")不是“指定基点或 [位移(D)/模式(O)] &lt;位移&gt;: ”</p>

zml84 发表于 2007-7-9 20:09:00

本帖最后由 作者 于 2007-7-9 20:14:45 编辑 <br /><br /> <p>说到这里,已经很明显了。</p><p>&nbsp;1、(command "_.copy")调用的是<font color="#0000bb" size="2">原始命令</font>。其模式默认为单次,键入M选项可以变更为连续模式。为了使LISP程序能够向上兼容,原始命令一般是不会轻易修改的。</p><p>  所以命令行显示为“指定基点或 [位移(D)/多个(M)] &lt;位移&gt;:&nbsp;”</p><p>2、直接在命令行中键入COPY而引发的,是随着版本升级而定制的、面向手工交互用户的命令。</p><p>  由于05版及其之后desk把copy命令改为了默认多重复制。</p><p>  所以命令行显示为:“当前设置:&nbsp; 复制模式 = 多个<br/>            指定基点或 [位移(D)/模式(O)] &lt;位移&gt;: ”</p><p>3、这样做的好处就在于,不仅使手工交互用户感受到了版本升级的便捷,又让开发者不必为随版本升级而带来的代码修改而苦恼。</p><p>4、关于在LISP中调用系统命令的前缀问题 ,参见:<a href="http://zml84.blog.sohu.com/48787059.html">http://zml84.blog.sohu.com/48787059.html</a></p><p>(不知我这样说,是否可以理解。可能的话,请加QQ讨论群:33410892)</p>

lazybug 发表于 2007-7-10 12:35:00

zml84发表于2007-7-9 20:09:00static/image/common/back.gif说到这里,已经很明显了。&nbsp;1、(command \"_.copy\")调用的是原始命令。3、这样做的好处就在于,不仅使手工交互用户感受到了版本升级的便捷,又让开发者不必为随版本升级而带来的代码修改而

<p>1. 这么理解可以解释得通,但不知道实际情况是否的确如此。</p><p>3. 假如上边的假设成立,个人认为,这样做实在不妥。<strong><em>zml84</em></strong>认为开发者不必为随版本升级而带来的代码修改而苦恼。我却认为如果这样的设定多了会导致编程时产生混乱。</p><p></p>

carrot1983 发表于 2007-7-10 13:20:00

这个我以前在想着怎么写好多重复制的时候,有研究过!

;;;(prompt "\n___多重复制___c")
(defun c:c (/ cmd_orig ss)
(setq cmd_orig (getvar "cmdecho"))
(setvar "cmdecho" 0)
(if (setq ss (ssget))
    (command "copy" ss "" "m")
)
(setvar "cmdecho" cmd_orig)
(princ)
)
页: [1]
查看完整版本: [讨论]高版本里用command调用copy时的疑问