- 积分
- 1168
- 明经币
- 个
- 注册时间
- 2013-7-27
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
楼主 |
发表于 2013-8-17 19:33:27
|
显示全部楼层
本帖最后由 yeahyeah 于 2013-8-18 10:40 编辑
========================================================
语法
(command [arguments]...)
功能及参数
此函数可使 AutoLISP 能在 AutoCAD 中执行命令, 然后传回 nil。arguments 是AutoCAD 的命令或副命令。每一个参数在经过分析之后, 将被送至 AutoCAD 系统中来响应其提示语句。命令的名称是以字符串来表示的, 2D点是一个含有两个实型数的表, 3D 点则是一个含有三个实型数的表。
【注意】命令的名称只能在 Command:提示号后才可被AutoCAD接受。
范例
(setq pt1 '(1.45 3.23))
(setq pt2 (getpoint "Enter a point:"))
(command "line" pt1 pt2)
(command "")
第一行语法是指定第一点 pt1 的值 。第二行语法是指示使用键入第二点pt2的值。第三行语法是要执行 AutoCAD 上的 Line 命令, 并以此二点为起始点及终点绘出一条线。在此 command 后面的参数是一个字符串及已定义的点, 但您也可用实型数或整型数来作为 command的参数。第四行命令上, command 的参数是一个空字符串 (""), 代表由键盘键入一个空格, 而这种不包含参数的方式 , 即相当于按下 Ctrl + C 键来中止AutoCAD 命令。
假如 AutoCAD 系统变量 CMDECHO (可从 setver 和 getvar存取)设定为 0, 那么由 command 函数所执行的命令将不会返回到屏幕上。command 函数是由 AutoLISP 使用 AutoCAD命令的基本方法。
【注意】getxxx 用户输入函数 (如 getangle、getstring、getint、getpoint 等) 不可以包含在 command 函数中。企图去做这件事将会产生下列信息 error:AutoCAD rejected function并终止这个函数的进行。如果需要用户的输入, 则请如前所述事先启动 getxxx 函数, 或将它们放置于连续的 command 函数调用之间。
对需要选择一个图形的 AutoCAD 命令(如 BREAK 和 TRIM 命令) 而言, 您可以提供一个以 entsel 得到的表而不需要以鼠标来选取图形。
AutoCAD 的DTEXT和SKETCH命令是直接读取键盘和数字化仪上的输入值, 因此不能使用AutoLISP 的 command 函数。
如果正在执行 AutoCAD 时, 碰到了PAUSE符号, 而它是command 函数中的一个参数, 那么这个 command 函数将会暂时停止, 以等待用户来直接输入(或作动态牵引)。
【注意】
① 目前在 command 函数中, PAUSE 符号与单一的反斜线所组成的字符串意义相同。您可以直接使用反斜线, 而不使用 PAUSE 符号。但是, 假如这个COMMAND 函数是从菜单项来运行的话, 当 AutoCAD 读到反斜线时, 它将不会暂停 command 函数, 而是将菜单项暂停。而且, 此暂停的结构在AutoLISP以后的版本也可能会需要一个不同的触发值(trigger value)。因此, 我们建议您在command 函数中, 使用 PAUSE 符号而不要使用一个反斜线。
② 假如一个命令需要键入一个字符串或属性值时, 正好碰到 PAUSE, 那么只有在系统变量 TEXTEVAL 设定值不为零的情况下, AutoCAD 才会暂停来等待输入。否则, PAUSE 符号的值 (单一的反斜线) 会被当做是要输入的文字, 因而不会发生暂停的状况。
③ 当 command 函数暂停来让用户输入时, 此函数仍然是在运行的状态下, 所以用户在这个时候不可以输入另一个 AutoLISP 表达式来求值。
下述就是一使用 PAUSE 符号的范例:
(setq blk "MY_BLOCK")
(setq old_lay (getvar "clayer"))
(command "layer" "set" "NEW_LAY" "")
(command "insert" blk pause "" "" pause)
(command "layer" "set" old_lay "")
上述这个程序片段将设定目前层到 NEW_LAY, 暂停已等待使用者输入图块图形的插入点。MY_BLOCK 是一个 X 与 Y 插入比例系数都是 1 的图块图形, 然后暂停等待使用这输入旋转角度, 最后将图层设回原来的图层上。
如果 command 函数指定了 PAUSE 到 SELECT 命令上, 而且PICKFIRST 设定为启动, 那么 SELECT 命令将得到 PICK FIRST 的效果而不会暂停。
在 DIM:提示符下发出的 Radius 与 Diameter 副指令在某些情形下将产生其他的提示语句。这将导致某些在 R11 期间所写的 LISP 程序(使用这两个副命令的AutoLISP 程序)发生问题。
====================================================================
(command "line" pause pause "") ; 第一条line
(command "line" pause pause "") ; 第二条line
====================================================================
收集相关帖子:
请教PAUSE在command 中的应用
Andyhon:
(command "line")
(while (= (logand (getvar "CmdActive") 1) 1) (command pause))
====================================================================
收集相关帖子:
如何取得command pause的返回值
caoyin:
(defun c:tt (/ a) ;pause 时,用户如拾取新的点,则返回新点坐标
(command "._move" (entlast) "" '(0 0 0))
(setq a (getvar "lastpoint"))
(command pause)
(if (equal a (getvar "lastpoint") 0.00001)
(princ "未拾取点")
(princ "拾取点")
)
(princ)
)
|
|