yangfanconan 发表于 2013-6-19 20:36:49

Processing之旅-----【给鱼插上翅膀,Processing基础扩展库0】

每一个被下载并解压的Processing都有那么几个自带的library,我们这部分就主要讲解ProcessingIDE自带library。
第一个库:dxf

简单介绍一下什么是DXF。
AutoCAD(Drawing Interchange Format或者Drawing Exchange Format) 绘图交换文件。DXF 是Autodesk公司开发的用于AutoCAD与其它软件之间进行CAD数据交换的CAD数据文件格式。DXF是一种开放的矢量数据格式,可以分为两类:ASCII格式和二进制格式;ASCII具有可读性好,但占有空间较大;二进制格式占有空间小、读取速度快。由于Autocad现在是最流行的cad系统,DXF也被广泛使用,成为事实上的标准。绝大多数CAD系统都能读入或输出DXF文件。
DXF文件是由很多的“代码”和“值”组成的“数据对”构造而成,这里的代码称为“组码”(group code),指定其后的值的类型和用途。每个组码和值必须为单独的一行的。
DXF文件被组织成为多个“段”(section),每个段以组码“0”和字符串“SECTION”开头,紧接着是组码“2”和表示段名的字符串(如HEADER)。段的中间,可以使用组码和值定义段中的元素。段的结尾使用组码“0”和字符串“ENDSEC”来定义。
DXF-Drawing Exchange File(图形交换文件), 这是一种ASCII文本文件,它包含对应的DWG文件的全部信息,不是ASCII码形式,可读性差,但用它形成图形速度快.不同类型的计算机(如PC及其兼容机与SUN工作站具体不同的CPU用总线)哪怕是用同一版本的文件,其DWG文件也是不可交换的. 为了克服这一缺点,AutoCAD提供了DXF类型文件,其内部为ASCII码,这样不同类型的计算机可通过交换DXF文件来达到交换图形的目的,由于DXF文件可读性好,用户可方便地对它进行修改,编程,达到从外部图形进行编辑,修改的目的。
DXF的文件格式:
ASCII 格式的 DXF 可以用文本编辑器进行查看。DXF 文件的基本组成如下所示:
●HEADER 部分 - 图的总体信息。每个参数都有一个变量名和相应的值。
●CLASSES 部分 - 包括应用程序定义的类的信息,这些实例将显示在 BLOCKS、ENTITIES 以及
OBJECTS 部分。通常不包括用于充分用于与其它应用程序交互的信息。
●TABLES 部分 - 这部分包括命名条目的定义。
Application ID (APPID) 表
Block Recod (BLOCK_RECORD) 表
Dimension Style (DIMSTYPE) 表
Layer (LAYER) 表
Linetype (LTYPE) 表
Text style (STYLE) 表
User Coordinate System (UCS) 表
View (VIEW)表
Viewport configuration (VPORT) 表
●BLOCKS 部分- 这部分包括 Block Definition 实体用于定义每个 Block 的组成。
●ENTITIES 部分 - 这部分是绘图实体,包括 Block References 在内。
●OBJECTS 部分 -- 包括非图形对象的数据,供 AutoLISP 以及 ObjectARX应用程序所使用。
●THUMBNAILIMAGE 部分 -- 包括 DXF 文件的预览图。
●END OF FILE

下面我们来分析一下自带的DXF例程:
/**
* Simple DXF Export
* by Simon Greenwold.
*
* Press the 'R' key to export a DXF file.
*/


import processing.dxf.*;//载入dxf库
boolean record = false;

void setup() {
size(400, 400, P3D);
noStroke();
sphereDetail(12);//这个函数可以理解成一个球体有多少个三角体组成。
}

void draw() {
if (record == true) {
    beginRaw(DXF, "output.dxf"); // 开始构建
}
lights();
background(0);
translate(width / 3, height / 3, -200);
rotateZ(map(mouseY, 0, height, 0, PI));
rotateY(map(mouseX, 0, width, 0, HALF_PI));
for (int y = -2; y < 2; y++) {
    for (int x = -2; x < 2; x++) {
      for (int z = -2; z < 2; z++) {
      pushMatrix();
      translate(120*x, 120*y, -120*z);
      sphere(30);//绘制球体
      popMatrix();
      }
    }
}
if (record == true) {
    endRaw();
    record = false; //停止构建
}
}

void keyPressed() {
if (key == 'R' || key == 'r') { // 键入R保存为dxf文件
    record = true;
}
}

如果用文本编辑器打开dxf文件会是这样的。
0
SECTION
2
ENTITIES
0
3DFACE
8
0
10
133.30138
20
-137.38913
30
-213.26093
11
130.96347
21
-142.94846
31
-208.26477
12
133.68564
22
-135.7313
32
-209.61975
13
133.68575
23
-135.73119
33
-209.61964
0
3DFACE
8
0
10
…………………………就此例程而言就有49万余行
那么本次就讲到这里。下课。

迷你强 发表于 2013-6-20 16:38:46

膜拜大神~~~~认真学习

yangfanconan 发表于 2013-6-21 14:25:39

迷你强 发表于 2013-6-20 16:38 static/image/common/back.gif
膜拜大神~~~~认真学习

:lol

gytzzss 发表于 2014-12-2 15:17:25

向大神们学习~~~~

林定祥 发表于 2014-12-10 13:23:42

认真阅读,受益,顶一下.

Qiu_SaMa 发表于 2017-6-2 17:33:47

已经迷上Processing了!!!!!!!!!!
页: [1]
查看完整版本: Processing之旅-----【给鱼插上翅膀,Processing基础扩展库0】