AutoLisp从入门到放弃(五)

  • 一、列表(LIST)
    • 1、列表的创建
    • 2、操作列表常用函数
  • 二、DXF组码
    • 1、DXF组码文件基本结构
    • 2、DXF组码值类型

本章将介绍通过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-79 16 位整数值
90-99 32 位整数值
100 字符串(最多 255 个字符;对于 Unicode 字符串,字符数要少一些)
102 字符串(最多 255 个字符;对于 Unicode 字符串,字符数要少一些)
105 表示 16 进制 (hex) 句柄值的字符串
120-129 双精度浮点值
130-139 双精度浮点值
140-149 双精度标量浮点值
170-179 16 位整数值
210-239 双精度浮点值
270-279 16 位整数值
280-289 16 位整数值
290-299 布尔标志值
300-309 任意字符串
310-319 表示二进制数据块的十六进制值的字符串
320-329 表示 16 进制句柄值的字符串
330-369 表示十六进制对象 ID 的字符串
370-379 16 位整数值
380-389 16 位整数值
390-399 表示 16 进制句柄值的字符串
400-409 16 位整数值
410-419 字符串
420-429 32 位整数值
430-439 字符串
440-449 32 位整数值
450-459 长整数
460-469 双精度浮点值
470-479 字符串
999 注释(字符串)
1000-1009 字符串(与 0-9 代码范围的限制相同)
1010-1059 双精度浮点值
1060-1070 16 位整数值
1071 32 位整数值

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

AutoLisp从入门到放弃(五)相关推荐

  1. AutoLisp从入门到放弃(十四)

    AutoLisp从入门到放弃(十四) AutoLisp选择集操作 AutoLisp从入门到放弃(十四) 一.ssget 1.函数说明 2.参数说明 3.代码示例 二.ssadd.ssdel 1.函数说 ...

  2. AutoLisp从入门到放弃(十)

    AutoLisp从入门到放弃(十) 一.角度计算(angle) 二.距离计算(distance) 三.点坐标偏移计算(polar) 四.计算两直线交点(inters) 五.获取捕捉点(osnap) 本 ...

  3. AutoLisp从入门到放弃(十二)

    AutoLisp从入门到放弃(十二) 一.文件操作 1.打开文件(open) 2.读文件(read-line.read-char) 3.写文件(write-line.write-char) 4.关闭文 ...

  4. AutoLisp从入门到放弃(十一)

    AutoLisp从入门到放弃(十一) 一.常用字符串处理函数 1.ascii和chr函数 2.read函数 3.strcase函数 4.strcat和strlen函数 5.substr函数 6.wcm ...

  5. AutoLisp从入门到放弃(九)

    AutoLisp从入门到放弃(九) 一.等待输入相关函数 1.getangle函数 2.getcorner函数 3.getdist函数 4.getenv函数 5.getint函数 6.getorien ...

  6. AutoLisp从入门到放弃(六)

    AutoLisp从入门到放弃(六) 一.获取图元属性信息 二.修改图元属性信息 本章主要讲解如何通过AutoLisp代码查看.修改实体的所有属性信息,即图元信息. 一.获取图元属性信息 如果你是一个C ...

  7. AutoLisp从入门到放弃(七)

    AutoLisp从入门到放弃(七) 一.创建图元 二.删除图元 1.command命令 2.entdel函数 本章将介绍如何在AutoLisp代码中通过直接操作实体数据库的方式来新增和删除图元. 一. ...

  8. AutoLisp从入门到放弃(八)

    AutoLisp从入门到放弃(八) 一.修改图元图层 1.新建图层 2.删除图层 3.更改实体图层 二.修改图元颜色 本章将介绍如何使用AutoLisp操作图元的图层.颜色. 一.修改图元图层 使用l ...

  9. AutoLisp从入门到放弃(十五)

    AutoLisp扩展数据操作 一.注册应用程序名(regapp) 1.函数说明 2.代码示例 二.判断应用程序名(snvalid) 1.函数说明 2.参数说明 3.返回值 三.添加扩展数据 四.查看扩 ...

最新文章

  1. 腾讯AI单挑碾压王者荣耀职业玩家:人类15场只能赢1局,坚持不到8分钟 | “绝悟”技术细节披露...
  2. python观察日志(part28)--数据的加载与存储
  3. jquery一些基本函数
  4. 第二十七章:五姓七望
  5. jogamp-env.xml:48: Unsupported Java version: 11. Make sure that the version of the Java compiler is
  6. 直播视频网站源码,静态时钟
  7. Windows 微信3.3.0内测如何申请,附报名及下载地址
  8. 乐玩插件和大漠插件哪个好_哪个PS后期插件功能最多最强?风光人像全能修图王!一个顶五个...
  9. 用aux口远程配置路由器
  10. SpringBoot热部署--bunny0728
  11. 软件检测怎么做?第三方软件检测方案模板
  12. docker mysql volum_Docker --volume(数据持久化)
  13. speechbrain - 小记
  14. 如何查阅NLP资料 转自https://blog.csdn.net/qq_27009517/article/details/80841146
  15. 线性回归(公式推导,Numpy、sklearn实现)
  16. 计算机图形学 实验二 三维模型读取与控制【OpenGL】
  17. jquery.form.js的ajaxSubmit和ajaxForm使用(用于多文件上传以及其他参数的混合提交)
  18. 号称PPT杀手的Prezi
  19. 最经典的LOGO设计如何返璞归真
  20. Android Studio倒计时定时器CountDownTimer实现

热门文章

  1. 发明专利、实用新型、外观专利有什么区别?
  2. IC是否为当下风口,本科生能否入行
  3. ffmpeg- 部分错误码-av_interleaved_write_frame/av_write_frame
  4. deep learning with Python(弗朗索瓦·肖莱) 笔记(二)
  5. 论文解读:Are Noisy Sentences Useless for Distant Supervised Relation Extraction?
  6. #10025 「一本通 1.3 练习 4」靶形数独P1074 [NOIP2009 提高组]
  7. 【软件构造-java编写】生成50道100以内加法/减法算式的习题,并输出。(和不能超过100,差不能小于0)
  8. The History of Tcl/Tk
  9. 2021 年第十三届四川省 ACM-ICPC 大学生程序设计竞赛
  10. Ubuntu下使用QQ