精雕输出的dxf文件可以用CAD软件读取吗?cad怎么输出dxf读取?

二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
&&上述代码为打开一个DXF文件后就顺序读取只到文件结束,当遇到组码为2且组码对应的组值为字符串“HEADER”时就对HEADER段进行处理。在HEADER段中,若遇到组值“$ACADVER”时,则下一个组码对应的值就为AutoCAD的版本信息。具体版本信息可参考AutoCAD帮助文件DXF参考中的HEADER段-&HEADER段组码部分。若对理解了上述程序后,就可以读取DXF文件中实体ENTITIES部分的有用的数据了。首先要确定实体的数据结构。下面的代码为实体数据结构的定义,你也可以根据需要扩展这些实体的内容。程序的主要思路来自参考文献2。#define STRLEN&&&&&&&&&&&60#define DATASIZE&&&&&&&sizeof(EntityData)&/*-----每个实体的结构-----*///你可在在此添加其它的实体//为了提高精度,变量可定义为双精度型typedef struct tagLine{&&&&float x1,y1,z1;&&&&float x2,y2,z2;}LINE;&typedef struct tagCircle{&&&&float x,y,z;&&&&}CIRCLE;/*------------------------*/&typedef union specialData{&&&&LINE&&&&&&&CIRCLE}privateD/*------实体的数据结构-------*/typedef struct commonData{&&&&char id[STRLEN];&&&&&&&&&&&&/*实体标识字符串*/&&&&char layer[STRLEN];&&&&&&&&&/*层名字符串*/&&&&privateD&&&&&&&&&&&/*特有数据块*/&&&&struct commonData *&&&&/*用于构建链表*/}EntityD&&&&定义完数据结构后,就可以用链表结构来存储实体中有用的信息了。以下程序为读取实体LINE的有关信息的代码。/*------------------------------------------&*Entity.C&读取实体LINE部分内容。&*&&&&&02-05-08 19:52&*-------------------------------------------*/&#include &stdio.h&#include &conio.h&#include &stdlib.h&#include &string.h&&#define STRLEN&&&&&&&&&&&60#define DATASIZE&&&&&&&sizeof(EntityData)&/*-----每个实体的结构-----*///你可在在此添加其它的实体typedef struct tagLine{&&&&float x1,y1,z1;&&&&float x2,y2,z2;}LINE;&typedef struct tagCircle{&&&&float x,y,z;&&&&}CIRCLE;/*------------------------*/&typedef union specialData{&&&&LINE&&&&&&&CIRCLE}privateD&typedef struct commonData{&&&&char id[STRLEN];&&&&&&&&&&&&/*实体标识字符串*/&&&&char layer[STRLEN];&&&&&&&&&/*层名字符串*/&&&&privateD&&&&&&&&&&&/*特有数据块*/&&&&struct commonData *&&&&/*用于构建链表*/}EntityD&/*----------函数声明部分-----------*/void print(EntityData *entity);/*---------------------------------*/&int main(int argc,char *argv[]){&&&&&&&int&&&&&&&&&&&&&&&&&&float&&&&&&&&char&codevalue[STRLEN];&&&&&&&&&&&&&FILE&&&&&&&*&&&&&&&char&filename[STRLEN];&&&&&&&char&suffix[6] = ".dxf";&&&&&&&&EntityData *entity,*entity1,*entity2;&&&&&&&&printf("请输入DXF文件名:");&&&&&&&gets(filename);&&&&&&&strcat(filename,suffix);&&&&&&&&dxf = fopen(filename,"r");&&&&&&&if(!dxf) {&&&&&&&&&&&&&&printf("打开文件出错!/n可能不存在此文件./n");&&&&&&&&&&&&&&printf("按任意键退出...");&&&&&&&&&&&&&&getch();&&&&&&&&&&&&&&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,"LINE")==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);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 10:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%f",&value);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%d",&code);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&entity1-&data.line.x1 =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 20:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%f",&value);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%d",&code);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&entity1-&data.line.y1 =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 30:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%f",&value);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%d",&code);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&entity1-&data.line.z1 =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 11:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%f",&value);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%d",&code);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&entity1-&data.line.x2 =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 21:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%f",&value);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%d",&code);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&entity1-&data.line.y2 =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&case 31:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%f",&value);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%d",&code);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&entity1-&data.line.z2 =&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&default: {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%s",codevalue);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&fscanf(dxf,"%d",&code);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&entity2-&next = entity1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&entity2 = entity1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&&entity2-&next = NULL;&&&&&&&&&&&&&&}&&&&&&&}&&&&&&&&entity = entity-&&&&&&&&&&&&&//第一个实体区为空,所以使头指针移向下一个实体&&&&&&&print(entity);&&&&&&&&&&&&&&&&&&&&&&&&//输出链表&&&&&printf("/nPress any key to halt...");&&&&getch();&&&&return 0;}&//输出链表void print(EntityData *entity){&&&&&&&int i=0;&&&&&&&EntityData *&&&&&&&&pointer =&&&&&&&&if(pointer != NULL) {&&&&&&&&&&&&&&do{&&&&&&&&&&&&&&&&&&&&&i++;&&&&&&&&&&&&&&&&&&&&&pointer = pointer-&&&&&&&&&&&&&&&}while(pointer != NULL);&&&&&&&}&&&&&&&&printf("/nOutput LinkList:");&&&&&&&printf("/nDXF文件中总共有%d条直线:/n",i);&&&&&&&&i = 1;&&&&&&&pointer =&&&&&&&&if(pointer != NULL) {&&&&&&&&&&&&&&do{&&&&&&&&&&&&&&&&&&&&&printf("第%d条直线:/n",i);&&&&&&&&&&&&&&&&&&&&&printf("X1=%f/tY1=%f/tZ1=%f/n",pointer-&data.line.x1,&&&&&&&&&&&&&&&&&&&&&&&&&&&&pointer-&data.line.y1,pointer-&data.line.z1);&&&&&&&&&&&&&&&&&&&&&printf("X2=%f/tY2=%f/tZ2=%f/n",pointer-&data.line.x2,&&&&&&&&&&&&&&&&&&&&&&&&&&&&pointer-&data.line.y2,pointer-&data.line.z2);&&&&&&&&&&&&&&&&&&&&&&pointer = pointer-&&&&&&&&&&&&&&&&&&&&&&i++;&&&&&&&&&&&&&&}while(pointer !=NULL);&&&&&&&}}&这个程序可以读取DXF文件中的有关直线的信息。你可以用AutoCAD绘制一些直线并另存为DXF格式,然后运行此程序,输入文件名就可以得到DXF文件中有关直线的条数和每条直线两个端点的坐标信息了。&四、总结&&&&&通过编写读取ASCII的DXF文件的有关信息的程序,对C的文件操作和ASCII的DXF文件有了一定的理解。在得到ASCII的DXF文件中的实体的信息后就可以用TC中的”graphics.h”图形操作函数或用Windows的GDI或&调用OpenGL的API绘制出相应的图形了。OpenGL的API功能强大,且对三维图形有很好的支持,因此在得到DXF文件中的有关信息后可以很方便地用OpenGL来处理得到美观的图形。&&&&&由于本人不是计算机专业的,水平有限,请多指点。
阅读(2410)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'用C读取DXF文件',
blogAbstract:'摘要:本文简要介绍了一下DXF文件的组成。重点讲述了怎样使用C语言来读取DXF文件中的实体信息。关键字:C、DXF&',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:7,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:3,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}查看: 1317|回复: 11
sms输出dxf文件的一些方法及问题
注册时间最后登录
签到天数: 6 天[LV.2]本科生
在运用sms剖分网格时,往往想得到CAD能读取的dxf文件。其实sms是可以获得相关文件,但是问题就在于sms8.1及以上版本所输出的dxf文件用CAD2004打不开,这一问题在本论坛成员也有发帖,但是没有太多的响应,没有产生响应的共鸣。现在,我将平时所领悟的一下东西写出来,与大家分享。
现在sms运用的版本很多,8.0/8.1/9.0,也许采用的比较多是8.1/9.0版本的吧,也就是这两个版本所生成的dxf文件在Autocad2004下是不能打开的,然而8.0版本的却是可以的,这一点应该引起大家的重视。
注册时间最后登录
签到天数: 6 天[LV.2]本科生
一个提取cad2000,dxf文件水深点的程序
论坛里找到的
本帖子中包含更多资源
才可以下载或查看,没有帐号?
注册时间最后登录
该用户从未签到
现在有CAD07了,不存在打不开了
注册时间最后登录
该用户从未签到
感谢楼上的分享
注册时间最后登录
该用户从未签到
一个人最大的破产是绝望,最大的资产是希望。&&
注册时间最后登录
该用户从未签到
越办越好~~~~~~~~~`&&
注册时间最后登录
签到天数: 25 天[LV.4]博士生
先看看怎么样!&&
注册时间最后登录
签到天数: 3 天[LV.2]本科生
抢座位来了&&
注册时间最后登录
签到天数: 1 天[LV.1]游客
风物长宜放眼量&&
注册时间最后登录
签到天数: 1 天[LV.1]游客
呵呵 那就好好玩吧~~~~&&
注册时间最后登录
签到天数: 1 天[LV.1]游客
帮你项项吧& &
注册时间最后登录
签到天数: 1 天[LV.1]游客
真是天底下好事多多& &
注册咨询群:
水论坛铁杆群:
联系电话:
Powered byJAVA怎么读取CAD文件, 如DWF.DXF都可以, - 开源中国社区
当前访客身份:游客 [
当前位置:
求开源项目推荐
共有1个答案
<span class="a_vote_num" id="a_vote_num_
你可以用gdal库 可以读取dxf 你也可以自己写dxf一个接系库 我就用c++x写了一个 dwg目前没开源库可以读
更多开发者职位上
有什么技术问题吗?
爱吃大肉包的其它问题
类似的话题DXF文件怎么打开?DXF是什么格式及文件打开方法介绍
- 绿茶文章中心
&&&&&&&&&DXF文件怎么打开?DXF是什么格式及文件打开方法介绍
DXF文件怎么打开?DXF是什么格式及文件打开方法介绍
作者:佚名
来源:绿茶软件园
  DXF文件怎么打开?对于dxf文件打开方法有很多种,因为现在又很多软件都可以打开dxf文件,不过最常见的就是使用CAD打开,那么dxf格式是什么文件呢?下面和绿茶小编一起来了解下吧!
dxf是什么格式?dxf文件格式介绍:
  DXF文件是由很多的&代码&和&值&组成的&数据对&构造而成,这里的代码称为&组码&(group code),指定其后的值的类型和用途。每个组码和值必须为单独的一行的。DXF文件按以下顺序是由几个部分组成:标题段(包含绘图的一般信息)、类(包含应用程序定义的信息)、表段(包含项目的定义)、块段(包含实体的描述)、实体段(包含绘图实体)、对象(包含数据的非图形对象)、以及一个包含图像预览的部分组成。
  DXF文件的结构相当复杂,完整读取DXF文件也是一项异常繁琐的工程。在实际应用中,为了提取图形的实体信息,可以省略DXF文件中的许多项,只要获取其中的层表、块段和实体段,就可以完成相应几何图形的描述。在层表中说明每一层的颜色、线型,在块段中说明块所在的层、属性及其在图形中的位置,在实体段中说明直线的起点、终点及圆的圆心、半径等几何信息和各实体所在的层。根据实体所在的层,在层中搜索每一层的颜色、线型并将其添加到实体对象中。
dxf文件怎么打开方法介绍:
  DXF文件可以用文本编辑器进行查看,比如就可以打开它。当然绝大多数CAD系统都能读入或输出DXF文件,所以一般cad软件都是可以打开DXF格式文件。
  以上就是dxf格式文件的详细介绍以及打开方式了,大家知道怎么打开dxf文件了吧!下载个CAD软件就可以直接打开了哈!简单吧!
绿茶小编猜你还喜欢:
本类推荐本类排行
热门软件热门标签CAD输出的DXF文件在精雕里怎么打开看不到图?_百度知道
CAD输出的DXF文件在精雕里怎么打开看不到图?
提问者采纳
你输出的格式不对
提问者评价
说了跟没说一样,格式还有什么不对
其他类似问题
为您推荐:
您可能关注的推广
精雕的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 autuocad输出dxf单位 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信