博客
关于我
autocadR12的格式分析(一)
阅读量:753 次
发布时间:2019-03-22

本文共 2625 字,大约阅读时间需要 8 分钟。

AutoCAD R12的直线和圆格式剖析及代码实现

1. 直线格式

在AutoCAD R12中,直线的数据存储格式采用DXF文件格式,其中直线的 RECORD 8 0 XPICLINES 类型保存在线段信息。具体来说,直线记录的字段包括:

  • 10:x坐标
  • 20:y坐标
  • 11:x2坐标
  • 21:y2坐标
  • 73:插画方向参数
  • 8 0:线宽
  • 62 xx:颜色代码

以下是典型的直线数据示例:

0 SECTION 2 ENTITIES 0LINE 8 0 XPICLINES 0.1862 110 3.000000 20 3.000000 11 5.000000 21 5.000000 0 ENDSEC 0 EOF

2. 圆的格式

在AutoCAD R12中,圆的数据格式同样使用DXF文件格式。相同于直线,圆的 RECORD 8 0 XPICLINES 类型保存圆的信息。然而,圆的字段增加了:

  • 40:半径

因此,圆的记录格式如下:

0 SECTION 2 ENTITIES 0CIRCLE 8 0 XPICLINES 0.1862 110 3.000000 20 3.000000 40 3.000000 0 ENDSEC 0 EOF

需要注意的是,与直线相比,圆记录中缺少某些点序列字段(如73和74),因为圆是通过中心点和半径直接定义的。

3. 代码实现

为了实现有不同颜色和宽度的直线和圆,我们可以编写C语言程序来生成符合DXF格式的代码。以下是实现代码:

#include 
#include
#include
struct Points { char row[10]; // 定义10行 double x, y, z; // 定义点的三个坐标};void LineDXFr(FILE *fp, struct Points start, struct Points end) { fprintf(fp, "0\nLINE\n"); fprintf(fp, "8\n0.18\n"); // 线宽0.18mm fprintf(fp, "62\n1\n"); // 红色线 fprintf(fp, "10\n%f\n20\n%f\n11\n%f\n21\n%f\n", start.x, start.y, end.x, end.y);}void CircleDXF(FILE *fp, struct Points center, double radius) { fprintf(fp, "0\nCIRCLE\n"); fprintf(fp, "8\n0.18\n"); // 线宽0.18mm fprintf(fp, "62\n1\n"); // 红色圆 fprintf(fp, "10\n%f\n20\n%f\n40\n%f\n", center.x, center.y, radius);}void LineDXFg(FILE *fp, struct Points start, struct Points end) { fprintf(fp, "0\nLINE\n"); fprintf(fp, "8\n0.18\n"); // 线宽0.18mm fprintf(fp, "62\n3\n"); // 绿色线 fprintf(fp, "10\n%f\n20\n%f\n11\n%f\n21\n%f\n", start.x, start.y, end.x, end.y);}void LineDXFy(FILE *fp, struct Points start, struct Points end) { fprintf(fp, "0\nLINE\n"); fprintf(fp, "8\n0.18\n"); // 线宽0.18mm fprintf(fp, "62\n2\n"); // 黄色线 fprintf(fp, "10\n%f\n20\n%f\n11\n%f\n21\n%f\n", start.x, start.y, end.x, end.y);}int main() { struct Points po1 = {"1", 3, 3, 3}; struct Points po2 = {"2", 5, 7, 5}; struct Points po3 = {"3", 8, 9, 8}; struct Points po4 = {"4", 10, 13, 10}; FILE *fp; fp = fopen("lineall3d.dxf", "w"); if (fp == NULL) { printf("无法打开文件 !\n"); return; } fprintf(fp, "0\nSECTION\n"); fprintf(fp, "2\nENTITIES\n"); // 画红色的直线 LineDXFr(fp, po1, po2); // 画绿色的直线 LineDXFg(fp, po3, po4); // 画黄色的直线 LineDXFy(fp, po2, po3); // 画红色的圆 CircleDXF(fp, po1, 3); fprintf(fp, "0\nENDSEC\n"); fprintf(fp, "0\nEOF"); fclose(fp); return 0;}

4. 代码说明

  • LineDXFr 函数绘制红色圆线,使用指定的线宽。
  • CircleDXF 函数绘制红色圆,中心坐标和半径由参数提供。
  • LineDXFgLineDXFy 分别绘制绿色和黄色的直线。
  • 主函数中包含了创建点结构和文件操作,同时调用各个绘制函数,生成最终的DXF文件。

这种代码可以根据需求调整颜色和线宽,而无需手动操作,适合自动化处理需要生成符合特定格式的几何图形的场景。

转载地址:http://bkgwk.baihongyu.com/

你可能感兴趣的文章
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
mysql union orderby 无效
查看>>
mysql where中如何判断不为空
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>