本系列作为CAD二次开发工作中AutoLisp/VisualLisp学习心得体会及分享;
一、.AutoLisp/VisualLisp 数据类型
数据类型与常见C/C++中数据类型的名称有明显区别,分别为:
1.整形 int
2.实数型 real(即双精度浮点数double)
3.字符串 str
4.表 list
表作为AutoLisp/VisualLisp中比较特殊的数据结构,有点类似于C/C++中数组。由()为特征,可以为空,可以嵌套,例如
(+ a b c) (0 list(1 2 3)) (0 "CIRCLE")
点对是一种特殊的表,只包含两个原子元素,写作( . )有点类似于pair(,),例如
(A.B) (10.55)
5.函数
6.文件描述符 File
类似于指针,作为文件的唯一标识
7.图元名 ename
类似于指针,作为图元的唯一标识
8.选择集 pickset
一个或多个图元对象的集合
9.vla对象
是Active X的组成部分,不仅直线、圆等图元为vla对象,甚至图层、模型空间、CAD程序本身也为vla对象。
二、AutoLisp/VisualLisp 变量
AutoLisp/VisualLisp语言对大小写并不敏感,符号的大小写等价,变量名、函数名定义中不能只包含数字,且不能包含( ) 、 ;
AutoLisp/VisualLisp中较为独特的一点为不需要对变量进行类型声明,直接赋值即可,并且同一变量可以被赋予不同类型的值从而改变类型,例如
(setq a 5 b "LINE");;a为整型int,b为字符串str,
(setq c 9.9);;此时c为实数real
(setq c "ABC");;此时c为字符串str
三、AutoLisp/VisualLisp 表达式
AutoLisp/VisualLisp中表达式由表构成,采用前缀表示法,与大多数计算机语言所采用的中缀表示法
表达式中第一个元素必须为函数名,并默认返回该函数求值结果,因此可以使用quoto或单引号‘禁止求值,例如
(setq x(* (+ a b) c));;等价于x=(a+b)*c
(setq y(1 2 3));;非法,将函数1的结果赋值给y,但1并不是一个函数名
(setq y'(1 2 3));;将表(1 2 3)赋值给y
AutoLisp/VisualLisp中流程控制表达式包括cond、if、repeat、while,其中cond与常见C/C++switch语句类似,repeat与for语句类似,例如
(setq a (cond((判断1) 1) ((判断2) 2) ((判断3) 2)))
(seqt conditon1 1 conditon2 2)
(if (conditon1>conditon2)
(progn
;;为真时执行代码段1
)
(progn
;;为假时执行代码段2
)
)
(setq i 0)
(repeat 10
;;代码段重复10次
)
(setq i 0)
(while (< 10 i)
;;代码段
(seqt 1+ i)
)