机械行业资料网 - 分享快乐
网站首页行业新闻机械资料求购信息供应信息机械产品机械企业机械软件招商展会

 首页 ->  机械软件 ->  AutoCAD -> 正文

 
Google

AutoLISP教程(五)

14.9  List函数
List函数用于定义一个二维或三维点。若表达式中不包含任何变量及未定义项,则该函数还可以使用单引号(’)命名。
  示例(setq x(List 2.5  3.56))   返回   2.5,3.56
      (setq x’(2.5  3.56))       返回   2.5,3.56
14.10  car、cdr与cadr函数
1.car函数
car函数返回一个表中的第一个元素。若表中不包含任何元素,函数返回nil。
car函数格式为:(car List)
  其中car…......返回第一个元素
      list.........元素列表
示例:(car‘(2.5 3.56))     返回  2.5
     (car‘(x y z))      返回  X
     (car‘((15 20) 56)返回(15 20)
    (car‘())返回    nil
其中的单引号表示~个表。
2.cdr函数
cdr函数返回一个移去了表的第一个元素后的列表,其格式为(cdr List)
其中cdr .........返回第一个元素被移去的列表
list.........元素列表
示例:(cdr‘(2.5 3.56))  返回(3.56)
     (cdr‘(x,y,z)     返回(y,z)
     (cdr‘((15 20)56)   返回( 56)
(cdr‘())          返回nil
3.cadr函数
cadr函数执行两个操作,cdr和car,返回列表中第二个元素。cdr函数移去了第一个元素。car函数返回新表中的第一个元素。、cadr函数的格式为:(cadr List)
   其中   cadr……...执行两个操作( car(cdr‘(x y z)))
          List………元素列表
    示例:(cadr‘(2 3))           返回3
         (cadr‘(2 3 56))        返回3
          ( cadr‘(x y z))      返回y
         (cadr‘((15 20) 56 24))返回56
    这些例子中, cadr执行两个操作
         (cadr‘(x y z))=(car(cdr‘(x y z))
                      =(car‘(y  z))  返回 y
   注意  除car、cdr和cadr函数外,还有其他几个函数用于选取列表中的不同元素。下面是这些函数的列表,其中函数f由列表‘((x  y f)z  w)组成。
        (setq f‘((x y)z w))
        (caar f)=(car(car n)          返回x
        (cdar f)=(cdr(car f))              返回(y)
        (cadar f)=(car(cdr(car f)))      返回y
        (cddr f)=(cdr(cdr f)            返回(w)
        (caddr f)=(car(cdr(cdr f)))    返回W
14.11  graphscr、textscr、princ与terpri函数
1.graphscr函数
若系统只有一个屏幕,graphscr函数将文本窗口转换为图形窗口,若系统有两个屏幕,该函数将被忽略。
2.textscr函数
    若系统只有一个屏幕,textscr函数将图形窗口转换为文本窗口,若系统有两个屏幕,该函数将被忽略。
3.princ函数
Princ函数打印(或显示)变量的值。若变量位于双引号中,该函数打印(或显示)双引号内的表达式。
princ函数的格式为:(Princ[变量或表达式])
    示例:(princ)在屏幕上打印一个空行
         (princa)在屏幕上打印出变量a的值
         (princ“Welcome”)在屏幕上打印Welcome
 4.terpri函数
  terpri函数用于在屏幕上打印一个新行,与\n作用相同。该函数用于打印紧跟着terpri函数的一行。
示例:(setq p1(getPoint“Enter first Point:”))(terpri)
     (setq p2(getPoint“Enter second Point:”))
  第一行(Enter first Point:)将显示在屏幕的命令提示区中。 terpri函数产生了一个回车,因此第二行(Enter second  Point:)将显示在新的一行中,也就是第一行下面的一行。若没有terpri函数,这两行将显示在同一行中(Enter  first  Point:Enter second Point:)
例3
  编写一个程序,提示用户输入一个矩形的两个对角的坐标,然后在屏幕上画出该矩形,如图12-7所示。

  输入                    处理过程
  P1点的坐标            1.计算PZ点和P4点的坐标
 P3点的坐标            2.画出下列直线
                         P1到P2的直线
                         P2到P3的直线
                         P3到P4的直线
                         P4到P1的直线
 P2和P4两点的X,Y坐标可以通过car及cadr函数算出。car函数从给定的列表中选取X坐标,cadr函数选取Y坐标。
    P2点的X坐标:             P2点的Y坐标:
    X2=X3                     Y2=Y1
    X2=car(X3 Y3)           Y2=cadr(X1 Y1)
    X2=car P3                 Y2=cadr P1
P4点的X坐标:                        P4点的Y坐标:
X4=X1                                 Y4=Y3
X4=car(X1  Y1)                       Y4=cadr(X3 Y3)
X4=car P1                              Y4=cadr P3
故,P2点和P4点为:
P2=(list(car P3)(cadr P1))
P4=(List(car P1)(cadr P3))
下面的文件是例3的程序清单。
(defun c:rect1(/p1 p2 p3 p4)
(graphscr)
(setvar“cmdecho”0)
(prompt“rect1 command draws a rectangle”)(terpri)
(setq p1(getpoint "Enter first corner")(terpri)
(setq p3(getpoint "Enter opposite corner")(terpri)
(setq p2(list(car p3)(cadr p1)))
(setq p4(list(car p1)(cadr p3)))
(command  "line"p1 p2 p3 p4 "c")
(setval "cmdecho" 1)
(Princ)

说明
    第1行:(defun c:rect1(/p1 p2 p3 p4)
 defun函数定义了函数rect1。
    第2行:(graphscr)
 如果当前屏幕恰好是文本屏幕,该函数将文本屏幕转换为图形屏幕。否则,对显示屏幕无影响。
    第3行:(setvar“cmdecho”0)
 函数setvar将0赋予AutoCAD系统变量cmdecho,即关闭了回显。如果cmdecho被关闭,AutoCAD的命令提示就不会显示在屏幕的命令提示区中。
    第4行:(prompt“rect1 command draws a rectangle”)(terpri)
prompt函数将显示双引号中的信息(“rect1 command draws a rectangle”)。函数terpri产生一个回车,因此下一行文本会打印在单独一行上。
    第5行:(setq p1(getpoint "Enter first corner")(terpri)
getpoint函数暂停程序的运行,等候用户输入一个点(该矩形的第一个角),随后setq函数将该值赋予变量P1。
    第6行:(setq p3(getpoint "Enter opposite corner")(terpri)
getpoint函数暂停程序的运行,等候用户输入一个点(该短形的对角),随后setq函数将该值赋予变量P3。
  第7行:(setq p2(list(car p3)(cadr p1)))
cadr函数选取P1点的Y坐标,car函数选取P3点的X坐标。setq函数将这两个值组成的列表赋予变量P2。
  第8行:(setq p4(list(car p1)(cadr p3)))
cadr函数选取P3点的Y坐标,car函数选取P1点的X坐标。setq函数将这两个值组成的列表赋予变量P4。
  第9行:(command  "line"p1 p2 p3 p4 "c")
Command函数使用AutoCAD的line命令在点P1,P2,P3和P4间画线。C(close)将最后一点P4与第一点P1连接起来。
  第10行:(setval "cmdecho" 1)
setvar函数将1赋予AutoCAD系统变量cmdecho,即打开了回显。
  第11行:(princ)
princ函数在屏幕上打印一个空行。若没有这一行,  AutoCAD将打印出最后一个表达式的值。该值对程序毫无影响,但却可能令人费解。princ函数用来防止在命令提示区显示该表达式的值。
  第12行:该右括号表明完成函数rect1的定义,并且程序结束。
注意  在这个程序中,定义一个矩形的两个角后,该矩形被生成。当移动屏幕光标输入第  二点时,该矩形不会被拖动。然而,可以使用getcorner函数来拖动该矩形,如以下程序清单所示:
(defun c:rect2(/p1 p2 p3 p4)
(graphscr)
(setvar“cmdecho”0)
(prompt“rect2 command draws a rectangle”)(terpri)
(setq p1(getpoint "Enter first corner")(terpri)
(setq p3(getcorner p1 "Enter opposite corner")(terpri)
(setq p2(list(car p3)(cadr p1)))
(setq p4(list(car p1)(cadr p3)))
(command  "line"p1 p2 p3 p4 "c")
(setval "cmdecho" 1)
(Princ)

 

• CATIA的一些小技巧
• CATIA V5 曲面观念解析
• CATIA在航空界的应用
• Saving as V4 Data
• V4 / V5 DRAW
• V4 / V5 SPACE
• V4 / V5 SPEC
• Migration Batch
• CATIA软件的10个使用技巧
• catia实战教程从简单到复杂

AutoCAD | Inventor | Catia | CAXA | Solidworks
Pro/Engineer | Unigraphics | ANSYS | CAE综合
CAM综合 | 数控加工 | 机械软件综合
 网站地图 - 广告服务 - 联系我们 - 友情连接 - - 站长邮箱:555jx@163.com QQ:57075944 © 55jx.com 蜀ICP备05026423号