奥托李斯普——第一回

特点:方言,动态类型,函数式...

基本数据容器:

(1.2 -3.4 0.5)     ("P13" "P13M" "P13SH")

((-1 . "T-2")(0 . "P13")(1 . "GSt12")(2 . "AIR COND COMP"))

(assoc -1 above_chain) ---> ((-1 . "T-2"))

(> (- 300 (1+ a)) 60)

所有语句都用圆括号,而且圆括号中第一个元素如果是关键词,那么此圆括号

就构成了一个函数表达式。


lisp基础函数

操作用函数:(setq car cdr caaddr list append ...)

判断用函数:(null and or )

控制用函数:(if cond listp null ...)

例子:行向量运算

如何实现(7 8 9) - (4 5 6) - (1 2 3)

(defun rec_- (lst_1 lst_2 lst_3)

      (if (and lst_1 lst_2 lst_3)

          (cons (- (car lst_1) (car lst_2) (car lst_3))

              (rec_- (cdr lst_1) (cdr lst_2) (cdr lst_3))

          )

      )

)

实际上autolisp有mapcar可以实现上述功能:

(mapcar '- lst_1 lst_2 lst_3)


autolisp基础函数

entsel,entmod,entmake,entget,entnext,entlast,subst,handent...

ssget,ssname,sslength,ssadd,ssdel,ssgetfirst...

strlen,substr,strcat,strcase...

distance,inters,trans,textbox,wcmatch...

grread,grdraw,command...


以2018年3月的日常改善来说明,如何使用autolisp的数据结构来实现期望的功能

一般程序框架结构,可参考PPT,AutoLisp基础讲解,再结合此案例说明

先配置系统变量,引入VLA(若需要),引入DCL,引入子函数,最后主函数过程

子函数可以不断总结归纳,减小开发时间

以SELENASBASE(select entity as base)函数为例,说明autolisp基础函数,ent类,ss类的

使用。其中:

pgfenlst:print图框(page frame entity list)

pgnenlst:print图框对应的PAGENO(page no entity lsit)

pgbplst:图框基点(page base point list)

有时间则可以讲解一下ESTI_LIN_PTS函数,功能:

判断一系列点是否在某条线段附近的某个范围之内。

linptpr:线段两个端点构成的列表

ptlist:点集

此功能涉及trans函数的活用。


可以思考一下,如何实现将多层嵌套的列表展开成一级列表,如:

((1.3 2.3 -2.1) "P13SH" ("GSt11" "AIR COND") 14.34)变成

(1.3 2.3 -2.1 "P13SH" "GSt11" "AIR COND" 14.34)

提醒:利用递归其实只要5,6行代码


下回:DCL

你可能感兴趣的:(奥托李斯普——第一回)