command 函数 AutoLisp 命令函数

语法

    (command [arguments]...)

功能及参数

    此函数可使 AutoLISP 能在 AutoCAD 中执行命令, 然后传回 nilarguments 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 DTEXTSKETCH命令是直接读取键盘和数字化仪上的输入值, 因此不能使用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 程序)发生问题。

 

  意见?

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AutoLISP是一种用于AutoCAD软件的编程语,它可以用来自动化CAD操作和创建自定义功能。阵列是AutoLISP中的一个重要概念,它用于在CAD中创建重复的图形或对象。 阵列可以按照指定的规则和参数在CAD中复制和排列对象。在AutoLISP中,可以使用`array`函数来创建阵列。该函数接受多个参数,包括要阵列的对象、阵列的数量、阵列的间距、阵列的方向等。 以下是一个示例代码,演示了如何使用AutoLISP创建一个直线的阵列: ``` (defun c:arrayline () (setq startpt (getpoint "\nEnter the start point of the line: ")) (setq endpt (getpoint "\nEnter the end point of the line: ")) (setq num (getint "\nEnter the number of lines in the array: ")) (setq dist (getreal "\nEnter the distance between each line: ")) (setq angle (getreal "\nEnter the rotation angle of the array: ")) (command "_.line" startpt endpt) ; 创建第一条直线 (setq pt1 startpt) (setq pt2 endpt) ; 创建阵列 (repeat num (setq pt1 (polar pt1 angle dist)) (setq pt2 (polar pt2 angle dist)) (command "_.line" pt1 pt2) ) (princ) ) ``` 以上代码定义了一个名为`c:arrayline`的命令,当在AutoCAD中输入`arrayline`时,将会调用该命令命令会提示用户输入起点、终点、阵列数量、间距和旋转角度等参数。然后,根据用户输入的参数,使用`command`函数创建一系列的直线对象,形成阵列。 希望以上介绍对您有帮助!如果您有任何相关问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值