AutoLisp从入门到放弃(五)

本文介绍了AutoLisp中的列表数据类型,包括创建与操作列表的常见函数如nth、car和cdr等。同时,详细阐述了DXF组码文件的基本结构和值类型,为后续深入学习AutoLisp读取图形实体信息奠定基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本章将介绍通过AutoLisp代码来查看图形的实体信息所用到的部分相关知识。

一、列表(LIST)

在之前的内容我们已经对列表这一数据类型有过简单地介绍,我们查看实体数据信息的方法是基于列表和DXF组码的,所以在正式开始之前需要对列表和DXF组码做简单的了解。

1、列表的创建

列表的所有元素都会被包括在成对的括号中,这一点和AutoLisp语法规则完全一致,甚至我们可以说,AutoLisp代码中的所有语句实际上就是一个个列表。换而言之,AutoLisp语言中的列表,就可以理解为通过圆括号包围的一组数据,列表中的每一个数据被称为一个原子,原子之间用空格隔开,像下面这个就是一个列表:

(1 2 3)  ;; 包含3个整型数据元素的列表,三个数据分别为1、2、3

列表中的元素可以是不同类型的,例如:

(1 "2" 3)  ;; 包含了两个整型元素和一个字符串的列表

此外,列表是可以嵌套的,一个列表的元素的数据类型可以是列表,例如:

(1 2 (3 4 5))  ;; 包含三个元素的列表,其中第三个元素是一个列表

按照这个逻辑,如果我想将一个列表赋值给一个变量,代码应该如下:

(setq #lsList (1 2 3))  ;; 这里想要将(1 2 3)这个列表赋值给变量#lsList

但是,如果我们将这行代码在AutoCAD中执行的时候会发现,命令行提示:错误: 函数错误: 1。

这是因为在AutoLisp代码中,列表的第一个元素,应该是一个函数名。所以在这里解释器把(1 2 3)当作一行语句尝试运算它时,把1当作函数名,而2和3当作是参数。所以我们需要使用AutoLisp中的函数来定义一个列表。

关键函数:list(')

(list 1 2 3)  	;; 生成一个包含三个元素1、2、3的列表
'(1 2 3)  		;; 与前一行代码作用相同

2、操作列表常用函数

常用函数:

nth:返回列表中指定位置的元素。

(nth 0 #lsList) ;; 返回列表#lsList中的第一个元素。

car:返回列表中的第一个元素。

(car #lsList)  ;; 返回列表#lsList中的第一个元素。

cdr:返回列表除第一个元素之外的所有元素组成的子列表。

(setq #lsList (list 1 2 3))
(cdr #lsList)					;; 这里的执行结果是一个列表(2 3)

cdr这个函数还有一系列的扩充用法,我们可以把他写成cddr,这样就是返回第二个元素之后的所有元素组成的列表;以此类推,cdddr:返回前三个元素之后的所有元素组成的列表,cddddr:返回前四个元素之后的所有元素组成的列表。d的重复次数最多为四次,cddddr这样是合法的,而cdddddr会报错。

append:向一个列表中追加元素。

(setq #lsList '(3 2))
(append #lsList '(1))   ;; 执行结果会得到一个新的列表(3 2 1),这里需要注意,追加的数据一定是列表,否则会报错。

扩展内容:CONS(点对)

在AutoLisp中,除了支持列表这一基本数据类型之外,还可以使用CONS函数定义点对,具体用法如下:

(cons 1 2)   ;; 将数据1 2合成一个点对,表现形式为(1 . 2),这种数据形式我们在接下来的学习中会经常看到。

二、DXF组码

DXF 是Autodesk开发的用于AutoCAD与其它软件之间进行CAD数据交换的CAD数据文件格式。

1、DXF组码文件基本结构

DXF 文件本质上由代码及关联值对组成。代码(通常称为组码)表明其后的值的类型。使用这些组码和值对,可以将 DXF 文件组织到由记录组成的区域中,这些记录由组码和数据项目组成。在 DXF 文件中,每个组码和值都各占一行。

每段都以一个后跟字符串 SECTION 的组码 0 开始,其后是组码 2 和表示该段名称的字符串(例如,HEADER)。每段都由定义其元素的组码和值组成。每段都以一个后跟字符串 ENDSEC 的组码 0 结束。

DXF 文件完整的结构如下:

  • HEADER 段。包含图形的基本信息。它由 AutoCAD 数据库版本号和一些系统变量组成。每个参数都包含一个变量名称及其关联的值。
  • CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的 BLOCKS、ENTITIES 和 OBJECTS
    段中。类定义在类的层次结构中是固定不变的。
  • TABLES 段。包含以下符号表的定义:
    • APPID(应用程序标识表)
    • BLOCK_RECORD(块参照表)
    • DIMSTYLE(标注样式表)
    • LAYER(图层表)
    • LTYPE(线型表)
    • STYLE(文字样式表)
    • UCS(用户坐标系表)
    • VIEW(视图表)
    • VPORT(视口配置表).
  • BLOCKS 段。包含构成图形中每个块参照的块定义和图形图元。
  • ENTITIES段。包含图形中的图形对象(图元),其中包括块参照(插入图元)。
  • OBJECTS段。包含图形中的非图形对象。除图元、符号表记录以及符号表以外的所有对象都存储在此段。OBJECTS
    段中的条目样例是包含多线样式和组的词典。
  • THUMBNAILIMAGE 段。包含图形的预览图像数据。此段为可选。

如果使用 SAVE 或 SAVEAS 命令的“选择对象”选项,那么所得到的 DXF 文件的 ENTITIES 区域将只包含选择的图元。

2、DXF组码值类型

代码范围组值类型
0-9字符串(随着从 AutoCAD 2000 起引入了扩展符号名称,字数限制已由 255 个字符扩大到 2049 个单字节字符,不包括行末的换行符)
10-39双精度三维点值
40-59双精度浮点值
60-7916 位整数值
90-9932 位整数值
100字符串(最多 255 个字符;对于 Unicode 字符串,字符数要少一些)
102字符串(最多 255 个字符;对于 Unicode 字符串,字符数要少一些)
105表示 16 进制 (hex) 句柄值的字符串
120-129双精度浮点值
130-139双精度浮点值
140-149双精度标量浮点值
170-17916 位整数值
210-239双精度浮点值
270-27916 位整数值
280-28916 位整数值
290-299布尔标志值
300-309任意字符串
310-319表示二进制数据块的十六进制值的字符串
320-329表示 16 进制句柄值的字符串
330-369表示十六进制对象 ID 的字符串
370-37916 位整数值
380-38916 位整数值
390-399表示 16 进制句柄值的字符串
400-40916 位整数值
410-419字符串
420-42932 位整数值
430-439字符串
440-44932 位整数值
450-459长整数
460-469双精度浮点值
470-479字符串
999注释(字符串)
1000-1009字符串(与 0-9 代码范围的限制相同)
1010-1059双精度浮点值
1060-107016 位整数值
107132 位整数值

本章并没有多少关于AutoLisp代码的讲解,内容也更多是为后面的学习铺垫。且内容较为基础,如果需要更深入了解本章所介绍的DXF组码相关知识,可以去Autodesk官方帮助文档中查阅。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值