⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxf1.cpp

📁 读DXF格式文件的C++文件
💻 CPP
字号:
   #include "HEAD.h" 
    
 // 声明好结构与类后,我们还需要建立一个.CPP文件,来定义几个函数。     
  //IMPLEMENT_DYNCREATE(CVertex,CObject)     
  CVertex::CVertex()     
  {     
  }     
    
  CVertex::~CVertex()   //构造函数和销毁函数都是空的     
  {     
  }     
    
  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=sequ;     
  }     
    
  //然后用结构myVertex(如前所定义)定义一个指针*myData,目的在于根据模型中实体的多少来给指针分配合适的内存,使之成为结构数组。     
 // 定义一个函数,用于确定模型中有多少个实体,函数的返回值就是实体的个数。     
  int   CJupiterView::getObjectNumber()     
  {     
  char   str1[10],str2[10];     
  char   name[]="theFirst";     
  int   num;     
    
  num=0;     
    
  FILE*   fp;     
  fp=fopen("data.dxf","r");  // 打开DXF文件,data.dxf     
  while(!   feof(fp)   &&   !   ferror(fp))  // 这个函数是根据实体的名字来判断实体的个数的     
  {   //所以函数只读取实体的名字,一旦出现新的实体名字,     
  fscanf(fp,"%s\n",str1);  // 实体数就加一。     
  if(strcmp(str1,"VERTEX")==0)     
  {     
  fscanf(fp,"%s\n",str2);   //打开DXF文件,data.dxf     
  fscanf(fp,"%s\n",str2)   ;//这个函数是根据实体的名字来判断实体的个数的     
  if(strcmp(name,str2)   !=   0)   //所以函数只读取实体的名字,一旦出现新的实体名字,     
  {//实体数就加一。     
  strcpy(name,str2);     
  num++;     
  }     
  }     
  }     
  fclose(fp);     
    
  return   num;     
  }     
    
 // 以下是读取实体点的坐标以及点序的程序代码,在这个程序中,读取了模型中点的坐标的最大值与最小值、实体的名字、点的坐标,以及点序。     
  void   CJupiterView::OnFileInput()     
  {     
  //   TODO:   Add   your   command   handler   code   here     
  FILE*   fp,*fp2;     
  int   i,k,j;     
  float   tempX,tempY,tempZ;     
    
  float   xMin,yMin,zMin,xMax,yMax,zMax,Max;     
  int   lab;     
  char   str1[20],str2[20],str[20],HT;     
  char   myName[20];     
  int   myNumber;     
  VERTEX   tempVertex;     
  SEQUENCE   tempSequence;     
    
  typedef   struct   {     
  float   x,y,z,max;     
  }MAX;     
    
  MAX   max;     
  HT=9;     
    
  objectNumber=getObjectNumber();     
  myData=new   myVertex[objectNumber];     
    
  fp=fopen(FileName,"r");     
    
  i=0;     
  j=0;     
  k=0;     
    
  myNumber=-1;     
  strcpy(myName,"ObjectName");     
    
  while(!   feof(fp)   &&   !   ferror(fp))     
  {     
  fscanf(fp,"%s\n",str);     
    
  if(strcmp(str,"$EXTMIN")==0)     
  {     
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&xMin);     
    
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&yMin);     
    
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&zMin);     
  }     
    
  if(strcmp(str,"$EXTMAX")==0)     
  {     
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&xMax);     
    
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&yMax);     
    
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&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\n",str1);     
  fscanf(fp,"%s\n",str1);     
    
  if(strcmp(myName,str1)   !=   0)     
  {     
  myNumber++;     
  strcpy(myName,str1);     
  strcpy((myData+myNumber)->obName,myName);     
  }     
    
    
  fscanf(fp,"%s\n",str2);     
  fscanf(fp,"%f\n",&tempX);     
    
  fscanf(fp,"%s\n",str2);     
  fscanf(fp,"%f\n",&tempY);     
    
  fscanf(fp,"%s\n",str2);     
  fscanf(fp,"%f\n",&tempZ);     
    
  fscanf(fp,"%d\n",&lab);     
  fscanf(fp,"%d\n",&lab);     
    
  if(lab   ==   192)     
  {     
  tempVertex.x=tempX   /   max.max;     
  tempVertex.y=tempY   /   max.max;     
  tempVertex.z=tempZ   /   max.max;     
  (myData+myNumber)->Vertex.Add(new   CVertex(tempVertex));     
    
    
  }     
    
  if(lab   ==   128)     
  {     
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&tempX);     
    
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&tempY);     
    
  fscanf(fp,"%s\n",str1);     
  fscanf(fp,"%f\n",&tempZ);     
    
  tempSequence.a=abs(tempX);     
  tempSequence.b=abs(tempY);     
  tempSequence.c=abs(tempZ);     
    
  (myData+myNumber)->Sequence.Add(new   CSequence(tempSequence));     
    
  }     
    
  }     
  }     
  fclose(fp);     
  }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -