preload preload

CAD -LISP 教程

基本知识

AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50年代末期出现,是一种擅于处理串行文字(List of Processing),属第四代「人工智能(Artificial Intelligence)」的计算机语言.

目的是令使用者充份利用AutoCAD进行开发,直接增加及修改AutoCAD指令.

AutoLisp语言建基于普通的LISP语言上,并扩充了许多适用于CAD的特殊功能而形成.

是一种能以直译方式(不须先行编译)亦可于AutoCAD内部执行的直译性程序语言.

程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响.

数据及程序均统一以串行 (List)结构表示.

可直接调用几乎全部的AutoCAD命令.

既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力.

内建于AutoCAD应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境.

可配合AutoCAD提供的PDB,建立DCL(Dialog Control Language)文件创建对话框.

缺点 : 执行速度较ObjectArx(旧称ARX,以C或C++程序开发,取代以前的ADS)程序慢;原程序不易保护;对低阶的硬件数据不易存取.

 

函数 (Function)

在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下:

       (函数名称 参数1 参数2….)
       e.g.     (PRINC "AutoLISP Programming")

每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数量的开括号,则一定有同等数量的关括号对应.

左边开括号后紧随函数名称.

函数名称与参数之间,或参数与参数之间须最少留一个空格.

函数可有一个或多个参数(也可能没有参数),视该函数而定.

函数名称不分大小写,即大小写字母视为相同.

 

数据型态 (Data Type)

整数 (INT)
没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648

实数 (REAL)

带小数字的数值,以倍精度浮点格式储存(最少14位小数)
e.g.     12.5

当数值在1与-1之间时,必须加上前导零
e.g.     0.05

可以科学记号表示 : 在E或e后加上次方值
e.g.     4.1e-6

字符串 (STR)

一般文字,其前后必须加上双引号 "
e.g.     "AutoCAD"

控制字符或脱逸码必须为小写,且须在字符前加上反斜线 \
e.g.     "\AutoCAD"

像素名称 (ENAME)
是指定给图文件内对象的指针(Pointer,为16进位的数字卷标)
       e.g.     <Entity name:14e5180>
像素名称在图文件内是唯一的,不会重复
对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象

档案 (FILE)
以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量

 

数据型态 (Data Type)

选集 (PICKSET)
用SSGET等函数建立的一个或多个对象的集合或群组

转化 (VARIANT)
可将像素名称转换为可与ActiveX配搭使用的VLA-Object对象

符号 (SYM)

用以储存静态数据的名称;例如内建或使用者定义的函数

符号名称不分大小写,可由任意长度的可打印字符组成;但下列的字符除外:

左括号 (     右括号 )     句点 .     单引号 ‘     双引号 "     分号 ;

表 (LIST)

亦称为串行,是放在一对小括号 ( ) 内,一个或多个元素的有序集合

e.g.     (1.0 "Lisp" ( ) (5.6 7))

元素可以是字符串,符号,整数或实数;也可以是另一个表

元素与元素之间要用空格隔开,但元素与小括号之间则可以不隔空格

为便于存取表内各元素,每个元素均有其序号;从表的左边开始,第一个元素序号为0,依此类推

表的大小即为其顶层元素的数量(内层嵌套式的表,视为单一元素)

点对(Dotted Pair)亦是表的一种;表内有2个元素,中间以一圆点分隔,且元素与圆点之间亦须以空格分开

若表内没有任何元素,称为空串行或空表;以 ( ) 或 (NIL) 表示

 

变数 (Variable)

为程序执行中动态储存数据的符号名称;主要分为2类:
区域(Local)变量     又称为局部变量;该变量只在该程序段落中有效,不能为其它程序使用
全域(Global)变量     又称为整体变量;变量在所有程序段落中均可使用

变量名称与符号的限制相同,使用时宜采用有意义及易于辨别的名称

变量在赋值或使用前无须先行设定

相同的变量可以储存不同型态的数据(但同一时间内只可储存一种型态)

在指定新的数据之前,变量储存的内容会保持不变

赋值

将数据给予指定的变量储存

以内建函数SETQ进行(可用于绘图模式的指令行或AutoLISP程序),其语法如下:

       (SETQ 变量名称1 资料1 [变量名称2 资料2 ....] )
       e.g.     (SETQ NAME "David" AGE 37 WEIGHT 72.5 POINT (LIST 10 20))

在函数名称之后,各参数以两个一组,每组左边为变量名称,右边为存入变量的数据

亦可将变量名称赋以空值(NIL) :

       e.g.     (SETQ OCCUPATION NIL)

要显示变量所储存的数据,可以使用内建函数PRINC(可用于绘图模式的指令行或AutoLISP程序),其语法如下 :

       (PRINC 变量名称 )

       e.g.     COMMAND : (PRINC NAME)
Result : David"David"

在绘图模式中,亦可于指令行中使用感叹号 ! 来显示变量内容,或作为指令选项的输入值;语法如下 :

       !变量名称

       e.g.     COMMAND : !NAME
Result : "David"

在Visual LISP的主控台窗口中,于提示符号 _$ 后键入要显示的变量名称

       _$变量名称
       e.g.     _$NAME

要检查变量所储存的数据型态,可使用内建函数TYPE;语法如下:

       (TYPE 变量名称)<
br />
       e.g.     COMMAND : (TYPE NAME)
Result : STR

若检查的变量没有储存数据,则会传回NIL

 

练习 (Exercises)

将四个坐标分别存入四个变量中,并以LINE或PLINE指令,配合四个坐标变量,画出正四边形.

COMMAND : (SETQ POINT1 (LIST 0 0) POINT2 (LIST 0 10) POINT3 (LIST 10 10) POINT4 (LIST 10 0))

COMMAND : LINE
;直线段指令

COMMAND : !POINT1
;第一点(左下角起点)

COMMAND : !POINT2
;第二点(左上角)

COMMAND : !POINT3
;第三点(右上角)

COMMAND : !POINT4
;第四点(右下角)

COMMAND : C
;自动联机至起点以关闭四边形

画圆 : 将圆心坐标及半径长度分别存入两个变量中(变量名称及数据型态自订)

COMMAND : (SETQ CEN (LIST 0 0) RAD 20)
;将圆心点设为坐标0,0;半径为20

COMMAND : CIRCLE
;执行划圆指令

Specify center…. : !CEN
;在提示后以变量CEN响应输入

Specify radius…. : !RAD
;在提示后以变量RAD响应输入

将不同型态的数据,分多次存入相同的变数内;每次均以PRINC及TYPE函数显示变量内容及其数据型态

COMMAND : (SETQ TEMP 1.2)
;将实数1.2存入变数TEMP

COMMAND : !TEMP
Result : 1.2

COMMAND : (TYPE TEMP)
Result : REAL

COMMAND : (SETQ TEMP "AutoLISP")
;将字符串存入变量TEMP

COMMAND : !TEMP
Result : "AutoLISP"

COMMAND : (TYPE TEMP)
Result : STR

  • Leave a Reply

    * Required
    ** Your Email is never shared