#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#define STRLEN           60
#define DATASIZE       sizeof(EntityData)

/*-----每个实体的结构-----*/

//你可在在此添加其它的实体

typedef struct tagSpLine{

float x, y, z;

int pole;//节点
int control;//控制点

float weight;//权重
float knots[100];

}LINE;

/*------------------------*/
typedef union specialData{

LINE   spline;
}privateData;

typedef struct commonData{

char id[STRLEN];            /*实体标识字符串*/

char layer[STRLEN];         /*层名字符串*/

privateData data;           /*特有数据块*/

struct commonData *next;    /*用于构建链表*/

}EntityData;

/*----------函数声明部分-----------*/

void print(EntityData *entity);

/*---------------------------------*/

int main(int argc, char *argv[])
{
int  code;
int k=0;
float value;
char codevalue[STRLEN];
FILE *dxf;
char filename[STRLEN];
EntityData *entity, *entity1, *entity2;

printf("请输入DXF文件名:");
dxf = fopen("E:\\yt.dxf", "r");
if (!dxf)
{
printf("打开文件出错!\n可能不存在此文件.\n");
printf("按任意键退出...");
getchar();
exit(0);
}
else
{
printf("正在读取文件...\n");
}
entity = entity2 = (EntityData *)malloc(DATASIZE);
while (!feof(dxf))
{
fscanf(dxf, "%d", &code);
fscanf(dxf, "%s", codevalue);
if (code == 2 && strcmp(codevalue, "ENTITIES") == 0)
{
while (strcmp(codevalue, "ENDSEC"))
{
fscanf(dxf, "%d", &code);
fscanf(dxf, "%s", codevalue);
if (code == 0 && strcmp(codevalue, "SPLINE") == 0)
{
entity1 = (EntityData *)malloc(DATASIZE);
strcpy(entity1->id, codevalue);
fscanf(dxf, "%d", &code);
while (code)
{
switch (code)
{
case 8:
fscanf(dxf, "%s", codevalue);
fscanf(dxf, "%d", &code);
strcpy(entity1->layer, codevalue);
break;
case 40:
fscanf(dxf, "%f", &value);
fscanf(dxf, "%d", &code);
entity1->data.spline.knots[k++] = value;//节点值
break;
case 41:
fscanf(dxf, "%f", &value);
fscanf(dxf, "%d", &code);
entity1->data.spline.weight = value;//权重
break;
case 10:
fscanf(dxf, "%f", &value);
fscanf(dxf, "%d", &code);
entity1->data.spline.x = value;
break;
case 20:
fscanf(dxf, "%f", &value);
fscanf(dxf, "%d", &code);
entity1->data.spline.y = value;
break;
case 30:
fscanf(dxf, "%f", &value);
fscanf(dxf, "%d", &code);
entity1->data.spline.z = value;
break;
case 72:
fscanf(dxf, "%f", &value);
fscanf(dxf, "%d", &code);
entity1->data.spline.pole = value;//节点数
break;
case 73:
fscanf(dxf, "%f", &value);
fscanf(dxf, "%d", &code);
entity1->data.spline.control = value;//控制点数
break;

default:
{
  fscanf(dxf, "%s", codevalue);
  fscanf(dxf, "%d", &code);
}

}

}
entity2->next = entity1;
entity2 = entity1;
}

}
entity2->next = NULL;
}

}
entity = entity->next;            //第一个实体区为空,所以使头指针移向下一个实体
print(entity);                        //输出链表
printf("\nPress any key to halt...");
getchar();
return 0;
}

//输出链表

void print(EntityData *entity)
{
int i = 0;
int k = 0;
int j;
EntityData *pointer;
pointer = entity;
FILE *fpw = fopen("E:\\result.txt", "w");
if (pointer != NULL)
{
do{
i++;
pointer = pointer->next;
} while (pointer != NULL);

}
printf("\nOutput LinkList:");
printf("\nDXF文件中总共有%d条直线\n", i);
//i = 1;
pointer = entity;
/*直线*/
char buf[100] = { 0 };
if (pointer != NULL)
{
do{
//printf("第%d条直线:\n", i);
/*打印到桌面*/
//printf("权重%f\t节点值%f\t节点数%d\t控制点数%d\n", pointer->data.spline.weight, pointer->data.spline.knots[k++], pointer->data.spline.pole, pointer->data.spline.control);
//printf("X %f\tY %f\tZ %f\n", pointer->data.spline.x, pointer->data.spline.y, pointer->data.spline.z);
for (j = 0; j < pointer->data.spline.pole; j++)
{
printf("knots%.16f\n", pointer->data.spline.knots[k++]);
}
pointer = pointer->next;
i++;
} while (pointer != NULL);

}
fclose(fpw);
}

这是一个通过c语言来把NX10.0画的直线等关键数据提取出来,可以通过电脑端显示,并可以通过CIMCO Edit8来验证;相关推荐

  1. R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集)、ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull)

    R语言为散点图添加凸包(convex hull):数据预处理(创建一个包含每组数据凸包边界的数据集).ggplot2使用geom_polygon函数为可视化图像添加凸包(convex hull) 目录

  2. Bitcoin.com开发人员正创建一个用Rust语言编写的BCH全节点

    近日,Bitcoin.com开发人员Gabriel Cardona在推特表示,自己正创建一个用Rust语言编写的BCH全节点,目的是为了改变完整节点的范式,让BCH代码库更加安全.编程人员技术贡献更加 ...

  3. python 速度 memmap_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例

    <从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例>要点: 本文介绍了从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例,希望对您有用.如果有疑问,可 ...

  4. 转 从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例

    注: 转自 微信公众号"高可用架构":从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例 导读:Python 被很多互联网系统广泛使用,但在另外一方面,它也存在一 ...

  5. 大学c语言基本程序,一个大学C语言试题的简单实现--员工信息管理程序

    一个大学C语言试题的简单实现,供参考. 题目: 员工信息管理程序 主要用结构体数组实现,用结构体表示每项记录,数据为:员工编号.姓名.性别.年龄.工龄.职务.部门.住址. 设计各个函数,分别实现以下功 ...

  6. c语言程序设计删除,C程序设计语言练习1-23 编写一个删除C语言程序中所有的注释语句...

    C程序设计语言练习1-23 编写一个删除C语言程序中所有的注释语句,要正确处理带引号的字符串与字符常量,以C语言中,注释不允许嵌套. 本程序运行后,将要求用户输入一个当前目录下的C源码程序文件名,读取 ...

  7. 介绍一个使用 Go 语言开发的高性能可配置可扩展的日志库 logit

    这是一个使用 Go 语言开发的高性能可配置可扩展的日志库,名字叫 logit. logit 是一个高性能的日志库,从测试结果来看,比主流日志库 zap.logrus 这些要快不少. logit 支持配 ...

  8. 编译原理课程实践——实现一个初等函数运算语言的解释器或编译器

    编译原理课程实践--实现具有初等函数运算语言的解释器或编译器 作者:Sylvan Ding |转载请注明文章出处! 摘要:本文主要内容是设计词法分析器.语法分析器(LL(1).SLR(1))和语义分析 ...

  9. java开发的图片管理系统,一个使用Java语言编写的Web本地照片管理系统

    jAlbum 这是一个使用Java语言编写的本地照片管理系统.使用BS架构.服务端采用Servlet提供RESTful风格接口和动态页面供浏览器直接访问,集成照片Exif信息处理.视频流信息处理和人像 ...

最新文章

  1. Web页面中png jpg gif webp svg的区别和使用
  2. 皮一皮:有这样的妈妈挺有趣的...
  3. python读取大文件内容_python 读取大文件
  4. 解决MySQL删除外键时报错Error Code: 1091. Can‘t DROP ‘XXX‘; check that column/key exists
  5. 电气工程师学python_Python 在电气工程及其自动化上有哪些应用?
  6. 三杯茶(一本令全世界为之动容的书)(Three cups of tea)
  7. java 控制jsp_JSP学习之Java Web中的安全控制实例详解
  8. c语言第1次作业答案,C语言第五次上机作业参考答案
  9. Jsvm2 与 prototype.js 组合 應用心得
  10. xcode6.1中 symbolicatecrash位置
  11. cass等距离等分线段的命令键_南方cass快捷命令
  12. 网站优化 SEO概念
  13. 计算机上怎么计算x的n次方,计算x的n次方(用函数)
  14. ubuntu服务器网站备份,备份云服务器ubuntu系统
  15. 在光与影中用对白塑造灵魂
  16. There appears to be a gap in the edit log. We expected txid 867311, but got txid 867402.
  17. 最小生成树(库鲁斯卡尔算法)
  18. 宣化科技职业学院计算机哪个校区,宣化科技职业学院宿舍怎么样
  19. 英语基础太差,到底能不能学好编程?
  20. 中台做不起来?是技术的问题,还是人的问题

热门文章

  1. CSDN博客首行空两格
  2. [Codeforces Round #668 (Div. 2)]1405
  3. Problem : 算式等式
  4. 古风教学道德课主题PPT模板
  5. 三、pcm音频转wav
  6. valueOf()方法
  7. CString、string、char、LPCSTR的转换
  8. java利用freemarker导出含有list的数据到word,有demo可供下载
  9. opencv c++版本图片及视频打开与保存
  10. 数字信号处理第五次试验:FIR数字滤波器设计与软件实现