AutoLisp从入门到放弃(五)
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从入门到放弃(五)相关推荐
- AutoLisp从入门到放弃(十四)
AutoLisp从入门到放弃(十四) AutoLisp选择集操作 AutoLisp从入门到放弃(十四) 一.ssget 1.函数说明 2.参数说明 3.代码示例 二.ssadd.ssdel 1.函数说 ...
- AutoLisp从入门到放弃(十)
AutoLisp从入门到放弃(十) 一.角度计算(angle) 二.距离计算(distance) 三.点坐标偏移计算(polar) 四.计算两直线交点(inters) 五.获取捕捉点(osnap) 本 ...
- AutoLisp从入门到放弃(十二)
AutoLisp从入门到放弃(十二) 一.文件操作 1.打开文件(open) 2.读文件(read-line.read-char) 3.写文件(write-line.write-char) 4.关闭文 ...
- AutoLisp从入门到放弃(十一)
AutoLisp从入门到放弃(十一) 一.常用字符串处理函数 1.ascii和chr函数 2.read函数 3.strcase函数 4.strcat和strlen函数 5.substr函数 6.wcm ...
- AutoLisp从入门到放弃(九)
AutoLisp从入门到放弃(九) 一.等待输入相关函数 1.getangle函数 2.getcorner函数 3.getdist函数 4.getenv函数 5.getint函数 6.getorien ...
- AutoLisp从入门到放弃(六)
AutoLisp从入门到放弃(六) 一.获取图元属性信息 二.修改图元属性信息 本章主要讲解如何通过AutoLisp代码查看.修改实体的所有属性信息,即图元信息. 一.获取图元属性信息 如果你是一个C ...
- AutoLisp从入门到放弃(七)
AutoLisp从入门到放弃(七) 一.创建图元 二.删除图元 1.command命令 2.entdel函数 本章将介绍如何在AutoLisp代码中通过直接操作实体数据库的方式来新增和删除图元. 一. ...
- AutoLisp从入门到放弃(八)
AutoLisp从入门到放弃(八) 一.修改图元图层 1.新建图层 2.删除图层 3.更改实体图层 二.修改图元颜色 本章将介绍如何使用AutoLisp操作图元的图层.颜色. 一.修改图元图层 使用l ...
- AutoLisp从入门到放弃(十五)
AutoLisp扩展数据操作 一.注册应用程序名(regapp) 1.函数说明 2.代码示例 二.判断应用程序名(snvalid) 1.函数说明 2.参数说明 3.返回值 三.添加扩展数据 四.查看扩 ...
最新文章
- 腾讯AI单挑碾压王者荣耀职业玩家:人类15场只能赢1局,坚持不到8分钟 | “绝悟”技术细节披露...
- python观察日志(part28)--数据的加载与存储
- jquery一些基本函数
- 第二十七章:五姓七望
- jogamp-env.xml:48: Unsupported Java version: 11. Make sure that the version of the Java compiler is
- 直播视频网站源码,静态时钟
- Windows 微信3.3.0内测如何申请,附报名及下载地址
- 乐玩插件和大漠插件哪个好_哪个PS后期插件功能最多最强?风光人像全能修图王!一个顶五个...
- 用aux口远程配置路由器
- SpringBoot热部署--bunny0728
- 软件检测怎么做?第三方软件检测方案模板
- docker mysql volum_Docker --volume(数据持久化)
- speechbrain - 小记
- 如何查阅NLP资料 转自https://blog.csdn.net/qq_27009517/article/details/80841146
- 线性回归(公式推导,Numpy、sklearn实现)
- 计算机图形学 实验二 三维模型读取与控制【OpenGL】
- jquery.form.js的ajaxSubmit和ajaxForm使用(用于多文件上传以及其他参数的混合提交)
- 号称PPT杀手的Prezi
- 最经典的LOGO设计如何返璞归真
- Android Studio倒计时定时器CountDownTimer实现
热门文章
- 发明专利、实用新型、外观专利有什么区别?
- IC是否为当下风口,本科生能否入行
- ffmpeg- 部分错误码-av_interleaved_write_frame/av_write_frame
- deep learning with Python(弗朗索瓦·肖莱) 笔记(二)
- 论文解读:Are Noisy Sentences Useless for Distant Supervised Relation Extraction?
- #10025 「一本通 1.3 练习 4」靶形数独P1074 [NOIP2009 提高组]
- 【软件构造-java编写】生成50道100以内加法/减法算式的习题,并输出。(和不能超过100,差不能小于0)
- The History of Tcl/Tk
- 2021 年第十三届四川省 ACM-ICPC 大学生程序设计竞赛
- Ubuntu下使用QQ