这个命令是我抄来的,也没有用过,你自己试一下吧,不知道符合不符合你的要求
(vl-cmdf [arguments] ...)
功能
执行 AutoCAD 命令
说明
1)l-cmdf 函数和 command 函数类似,但在求值传递的参数方面有所不同。
a)vl-cmdf 函数在执行 AutoCAD 命令之前检查所有的描述参数,如果在这一过程中检测到错误,将不再执行AutoCAD命令。
b) command 函数将每个参数顺序传递给 AutoCAD,所以在发现错误之时命令可能已开始执行了。
c) 如果对命令的调用中包含对其他函数的调用,则 vl-cmdf 在执行命令之前先进行函数调用。而 command 则在开始执行命令后执行定函数调用。
d ) 有些命令在通过 vl-cmdf 调用时表现正常,而在通过 command 调用时则会失败。
vl-cmdf 函数主要突破了在 command 中不能使用 getxxx 的限制。
2 ) 参数 arguments 是AutoCAD 命令及选项。
a)根据执行命令提示的要求,arguments 参数可以为字符串、实数、整数或点。空字符串和按 ENTER 键的效果一样。不带参数调用 vl-cmdf 和按 ESC 的效果一样,可以取消大多数 AutoCAD 命令。
b)如果在 Visual LISP 中执行 vl-cmdf,焦点不会转换到 AutoCAD 窗口中。若命令要求用户输入,则返回值 (T) 将出现在控制台窗口中,但 AutoCAD 继续等待输入。此时,必须手动激活 AutoCAD 窗口来响应提示。但在这之前,将停止执行任何后续命令。
返回值:
T
样例:
加深 command 和 vl-cmdf 的区别,在 AutoCAD 命令提示行(而不是 VLISP 控制台提示)输入下列代码:
1)使用 command 时,先执行 LINE 命令,然后再调用 getpoint 函数。
命令:(command "line" (getpoint " getpoint ") '(0 0) "")
line 指定第一点:getpoint
指定下一点或 [放弃(U)]:
命令:nil
2)使用 vl-cmdf 时,先调用 getpoint 函数,然后再执行 LINE 命令。
命令:(VL-CMDF "line" (getpoint "getpoint!") '(0 0) "")
getpoint!line 指定第一点:
指定下一点或 [放弃(U)]:
命令:T
3)由于向 LINE 命令传递了一个无效点表,command 函数将每个参数依次传递给 AutoCAD,而并不计算参数,所以不能检测到无效的点表,函数被取消。
命令:(command "line" (getpoint "getpoint?") '(0) "")
line 指定第一点:point?
指定下一点或 [放弃(U)]:
命令:ERASE nil
选择对象:指定对角点:*取消*
找到 0 个
命令:(VL-CMDF "line" (getpoint "getpoint!") '(0) "")
getpoint!应用程序错误: 发送到 ads_cmd 的类型无效。
nil
这是因为 vl-cmdf 在传递命令前先计算每个参数,所以检测到了无效点表,不再继续执行命令。
|