用vc++读取dxf文件格式的源代码和相关资料

上传人:简****9 文档编号:95808937 上传时间:2019-08-22 格式:DOC 页数:17 大小:56.50KB
返回 下载 相关 举报
用vc++读取dxf文件格式的源代码和相关资料_第1页
第1页 / 共17页
用vc++读取dxf文件格式的源代码和相关资料_第2页
第2页 / 共17页
用vc++读取dxf文件格式的源代码和相关资料_第3页
第3页 / 共17页
用vc++读取dxf文件格式的源代码和相关资料_第4页
第4页 / 共17页
用vc++读取dxf文件格式的源代码和相关资料_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《用vc++读取dxf文件格式的源代码和相关资料》由会员分享,可在线阅读,更多相关《用vc++读取dxf文件格式的源代码和相关资料(17页珍藏版)》请在金锄头文库上搜索。

1、我刚找到的:大家先看看做好了告诉我一声我也正准备做这个!我们使用VisualC+6.0来写一个读取DXF文件的小程序。在实际应用中,模型中实体的数目以及实体中点和面的数目都是不定的,为了有效地利用内存,我们选择MFC类库中的聚合类CobArray类所创建的对象vertex,sequence来存储和管理实体的点坐标和点序。CObArray类是一个用来存放数组类的聚合类,它能根据要存进来的数组(或结构)多少自动进行自身大小的高速,而且这个类本身具有的成员函数使得我们对它的对象的操作更加方便、快捷,用它编的程序也易于读懂。三维实体模型的模型信息中的一部分信息可以在标题段中读出,通过读取变量名为UCS

2、ORG的三个变量,可以得到三维实体在世界坐标系中自身所定义的用户坐标系原点的三维坐标。通过读取EXTMAX,EXTMIN可以获知三维实体在世界坐标系中的范围,而其它部分的信息只有读完了全部DXF文件后才可以通过计算确定。对于三维实体模型的全部点坐标、点序,可以在实体段中按照前面介绍的DXF文件基本结构读出。现在我们开始写这个程序。先建立一个头文件HEAD.H定义如下的结构:VERTEX,SEQUENCE和类CVertex,Csequence。typedefstructfloatx,y,z;VERTEX;结构VERTEX用来存储点的坐标typedefstructinta,b,c;SEQUENCE

3、;结构SEQUENCE用来存储实体的面的组成typedefstructcharobName20;定义结构myVertex来存储实体的名字,点的坐标以及面的组成,CObArrayVertex;其中,点的坐标和面的组成是由聚合类CObArray定义的对象来CObArraySequence;在存储的,我们可以把VERTEX结构和SEQUENCE结构加入到myVertex;这两个对象中保存classCVertex:publicCObject因为CObArray类的对象中只能加入由CObject派生的对象,所以protected:我们还需要建立一个由CObject类派生的CVertex类。在CVerte

4、x类CVertex();中有一个VERTEX结构的变量:m_vertex,信息实际上是存储在这DECLARE_DYNCREATE(CVertex)个变量中的。virtualCVertex();/Attributespublic:我们还需要建立一个由CObject类派生的CVertex类。在CVertex类CVertex(VERTEX&ver);中有一个VERTEX结构的变量:m_vertex,信息实际上是存储在这个变量中的,函数CVertex(VERTEX&ver)把VERTEX结构的变量VERTEXm_vertex;存入CObArray对象中。;classCSequence:publicCO

5、bject这也是一个由CObject类派生的类,作用和刚才CVertex类一样,protected:只不过Csequence类是用来存储实体中面的组成(点序)的。CSequence();DECLARE_DYNCREATE(CSequence)virtualCSequence();public:CSequence(SEQUENCE&sequ);SEQUENCEm_sequence;声明好结构与类后,我们还需要建立一个.CPP文件,来定义几个函数。IMPLEMENT_DYNCREATE(CVertex,CObject)CVertex:CVertex()CVertex:CVertex()构造函数和销

6、毁函数都是空的CVertex:CVertex(VERTEX&ver)这个函数的作用是:把一个VERTEX结构的数据存入变量m_vertex中m_vertex=ver;它是这个类中最重要的一环。IMPLEMENT_DYNCREATE(CSequence,CObject)CSequence:CSequence()Csequence类的定义与CVertex类的定义差不多,只是其中的参数m_sequence的类型和CVertex类中的参数my_vertex的类型不一样CSequence:CSequence()CSequence:CSequence(SEQUENCE&sequ)m_sequence=se

7、qu;对我有用0丢个板砖0引用|举报|管理asd123asdasd123asd等级:#7得分:0回复于: 2004-12-15 11:45:34然后用结构myVertex(如前所定义)定义一个指针*myData,目的在于根据模型中实体的多少来给指针分配合适的内存,使之成为结构数组。定义一个函数,用于确定模型中有多少个实体,函数的返回值就是实体的个数。intCJupiterView:getObjectNumber()charstr110,str210;charname=theFirst;intnum;num=0;FILE*fp;fp=fopen(data.dxf,r);打开DXF文件,data.

8、dxfwhile(!feof(fp)&!ferror(fp)这个函数是根据实体的名字来判断实体的个数的所以函数只读取实体的名字,一旦出现新的实体名字,fscanf(fp,%s,str1);实体数就加一。if(strcmp(str1,VERTEX)=0)fscanf(fp,%s,str2);打开DXF文件,data.dxffscanf(fp,%s,str2);这个函数是根据实体的名字来判断实体的个数的if(strcmp(name,str2)!=0)所以函数只读取实体的名字,一旦出现新的实体名字,实体数就加一。strcpy(name,str2);num+;fclose(fp);returnnum;

9、以下是读取实体点的坐标以及点序的程序代码,在这个程序中,读取了模型中点的坐标的最大值与最小值、实体的名字、点的坐标,以及点序。voidCJupiterView:OnFileInput()/TODO:AddyourcommandhandlercodehereFILE*fp,*fp2;inti,k,j;floattempX,tempY,tempZ;floatxMin,yMin,zMin,xMax,yMax,zMax,Max;intlab;charstr120,str220,str20,HT;charmyName20;intmyNumber;VERTEXtempVertex;SEQUENCEtemp

10、Sequence;typedefstructfloatx,y,z,max;MAX;MAXmax;HT=9;objectNumber=getObjectNumber();myData=newmyVertexobjectNumber;fp=fopen(FileName,r);i=0;j=0;k=0;myNumber=-1;strcpy(myName,ObjectName);while(!feof(fp)&!ferror(fp)fscanf(fp,%s,str);if(strcmp(str,$EXTMIN)=0)fscanf(fp,%s,str1);fscanf(fp,%f,&xMin);fscan

11、f(fp,%s,str1);fscanf(fp,%f,&yMin);fscanf(fp,%s,str1);fscanf(fp,%f,&zMin);if(strcmp(str,$EXTMAX)=0)fscanf(fp,%s,str1);fscanf(fp,%f,&xMax);fscanf(fp,%s,str1);fscanf(fp,%f,&yMax);fscanf(fp,%s,str1);fscanf(fp,%f,&zMax);max.x=max(abs(xMax),abs(xMin);max.y=max(abs(yMax),abs(yMin);max.z=max(abs(zMax),abs(zMin);max.max=max(max.x,max.y);max.max=max(max.max,max.z);if(strcmp(str,VERTEX)=0)fscanf(fp,%s,str1);fscanf(fp,%s,str1);if(strcmp(myName,str1)!=0)myNumber+;strcpy(myName,str1);strcpy(myData+myNumber)-obName,myName);fscanf(fp,%s,str2);fscanf(fp,%f,&tempX);fscanf(fp,%s,s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号