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

📄 mydtm.cpp

📁 离散点生成等高线的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//	AfxMessageBox("等高线绘制1!",MB_OK);//测试循环	
    }
//	AfxMessageBox("等高线绘制2!",MB_OK);

	}
	AfxMessageBox("等高线绘制完成!",MB_OK);
}




void PINCSet()//方格网
{

//	AfxMessageBox("程序运行中...");
	// float a,b,c,d;
     int i=0;
	 int n,k;
	 int l;
	 long x,y,z;

	 float a=2997000;//寻找数据点平面坐标最大最小值
	 float c=2997000;
	 float b=530000;
	 float d=530000;
	  

	 float aw[3],zc[20000],xx[20000],yx[20000];//未知数,常系数,系数

	ifstream MyFile("DZXTEM.DAT",ios::out);
    while(!MyFile.eof())
	{
		
		MyFile>>aint[i][0]>>s>>fdou[i][0]>>fdou[i][1]>>fdou[i][2]>>aint[i][1];//把文件数据读到数组中
		i++;
	}
	MyFile.close();

	 for(k=0;k<=i;k++)//x最小值
	{
	   if(fdou[k][0]<a)
	   {
	       a=fdou[k][0];
	   }
       if(fdou[k][0]>c)
	   {
	       c=fdou[k][0];
	   }
	}
	
	for(n=0;n<=i;n++)//y最小值
	{
		if(fdou[n][1]<b)
	   { 
		 b=fdou[n][1];
	   }
		if(fdou[n][1]>d)
	   {
	     d=fdou[n][1];
	   }
	}

	int R1=(c-a)/200;
	int R2=(d-b)/200;



   
	//int P=0;
	int m;
	int zd;
//(R1+2)  a

   for(x=a;x<=200*R1;x=x+200)//移动拟合法插格网角点,采用平面
   {
      for(y=b;y<=200*R2;y=y+200)
	  {	  
		  zd=0;
		   m=0;
        for(l=0;l<=i;l++)
		{  
		if( sqrt((fdou[l][1]-y)*(fdou[l][1]-y)+(fdou[l][0]-x)*(fdou[l][0]-x))<200 )
		{ //float aw[3][3],zc[3],xx[3],yx[3];//未知数,常系数,系数
		   zd=1; 
		   xx[m]=fdou[l][0];
		   yx[m]=fdou[l][1];
           zc[m]=fdou[l][2];
		   
		
	      m++;
		}
         else 
		{
		   float f1=fdou[l][0];//不需要的点
		   float f2=fdou[l][1];
		   float f3=fdou[l][2];

		}
		
		}	

     if((zd==1)&&(m>3))

	 {
           //求解系数
		   zc[2]=(xx[1]-xx[0])*(zc[2]-zc[0])-(zc[1]-zc[0])*(xx[2]-xx[0]);
		   yx[2]=(xx[1]-xx[0])*(yx[2]-yx[0])-(yx[1]-yx[0])*(xx[2]-xx[0]);
		   zc[1]=zc[1]-zc[0];
		   zc[0]=zc[0];
		   yx[1]=yx[1]-yx[0];
           yx[0]=yx[0]; 
		   xx[1]=xx[1]-xx[0];
		   xx[0]=xx[0];

           //解方程
	       aw[2]=zc[2]/yx[2];
		   aw[1]=(zc[1]-aw[2]*yx[1])/xx[1];
		   aw[0]=zc[0]-yx[0]*aw[2]-xx[0]*aw[1];

	       z=aw[0]+aw[1]*x+aw[2]*y; 
	 } 	
	
     else   
	 {
		 z=0;
	 }	 

		    CString TextStr;
			TextStr.Format("%d",int(z));
			AcDbObjectId TextId;
			AcDbText *pText=new AcDbText(AcGePoint3d(x,y,0),TextStr,TextId,4.5,0);
			pText->setColorIndex(2);//黄色
			
			AcDbBlockTable  *pBlockTable;
			acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable,AcDb::kForRead);
			AcDbBlockTableRecord *pBlockTableRecord;
			pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
		    pBlockTable->close();
			pBlockTableRecord->appendAcDbEntity(TextId,pText);
			pBlockTableRecord->close(); 
		    pText->close();		
	        
			
		
	       //xx[0]=xx[0];//求解系数
	       //yx[0]=yx[0];
	      //zc[0]=zc[0];
	       //  xx[1]=xx[1]-xx[0];
	       //  yx[1]=yx[1]-yx[0];
	       //  zc[1]=zc[1]-zc[0];
           //  xx[2]=
	
	 }
   }

    AfxMessageBox("已经生成方格网",MB_OK);

}


void PINCCroute()//选线
{
    AcGePoint3d spt,ept;

    AcDbLayerTable *pLayerTable;
	acdbHostApplicationServices()->workingDatabase()
		->getSymbolTable(pLayerTable, AcDb::kForWrite);	
	AcDbLayerTableRecord *pLayerTableRecord=new AcDbLayerTableRecord;
	pLayerTableRecord->setName("LABLE");
	pLayerTable->add(pLayerTableRecord);
	pLayerTable->close();
	pLayerTableRecord->close();
	AfxMessageBox("请输入5个点选线",MB_OK);
// 	acedGetPoint(NULL,"\n 输入起点:\n",pt[0]);
	AcGePoint3dArray ptArr;
    ptArr.setLogicalLength(Npt);
//	ptArr[0]=asPnt3d(pt[0]);
    for (int i=0; i<Npt; i++) 
	{
		acedGetPoint(NULL,"\n 请输入下一点:\n",pt[i]);
		ptArr[i]=asPnt3d(pt[i]);
    }
    AcDb2dPolyline *pNewPline = new AcDb2dPolyline(AcDb::k2dSimplePoly, ptArr, 
		0.0, Adesk::kFalse,15,15,NULL);
    pNewPline->setColorIndex(2);
    AcDbBlockTable *pBlockTable;
    acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);
    AcDbBlockTableRecord *pBlockTableRecord;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite);
    pBlockTable->close();
    AcDbObjectId plineObjId;
    pBlockTableRecord->appendAcDbEntity(plineObjId,pNewPline);
    pBlockTableRecord->close();    
    pNewPline->setLayer("LABLE");
    pNewPline->close();
}




void PINCBD()//标注等高线
{
	AcDbLayerTable *pLayerTable;
	acdbHostApplicationServices()->workingDatabase()
		->getSymbolTable(pLayerTable, AcDb::kForWrite);	
	AcDbLayerTableRecord *pLayerTableRecord=new AcDbLayerTableRecord;
	pLayerTableRecord->setName("BZ");
	pLayerTable->add(pLayerTableRecord);
	pLayerTable->close();
	pLayerTableRecord->close();
	
	int t;
	int i=0;

	ifstream MyFile("DZXTEM.DAT",ios::out);//读取数据
    while(!MyFile.eof())
	{
		
		MyFile>>aint[i][0]>>s>>fdou[i][0]>>fdou[i][1]>>fdou[i][2]>>aint[i][1];//把文件数据读到数组中
		i++;
	}
	MyFile.close();

  	for(t=0;t<=i;t++)
	{	
		if(((aint[t][1]==31)||(aint[t][1]==21))&&(aint[t][0]==12)) 
		{	
			float bz[2];
			bz[0]=fdou[t][0];
			bz[1]=fdou[t][1];
			bz[2]=fdou[t][2];
            CString TextStr;
            TextStr.Format("%d",int(bz[2]));     
		
			AcDbObjectId TextId;
			AcDbText *pText=new AcDbText(AcGePoint3d(bz[0],bz[1],0),TextStr,TextId,10,0);
			pText->setColorIndex(6);

			AcDbBlockTable  *pBlockTable;
			acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable,AcDb::kForRead);
	   	    AcDbBlockTableRecord *pBlockTableRecord;
		    pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
		    pBlockTable->close();
			pBlockTableRecord->appendAcDbEntity(TextId,pText);
			pBlockTableRecord->close(); 
            pText->setLayer("BZ");
			pText->close();
		}
	 //  else
	  // {
	//	   float f1=fdou[t][0];
	//	   float f2=fdou[t][1];
	//	   float f3=fdou[t][2];
	  // }
	}
		AfxMessageBox("标注完成");
}




void PINCRBZ()//标注线路
{
      AfxMessageBox("请输入您的控制点");
      int J,I,n,k;
	  int i=0;
	  float a=2997000;//寻找数据点平面坐标最大最小值
	  float c=2997000;
	  float b=530000;
	  float d=530000;
	  float xp,yp,zp,xa,ya;//控制点的平面坐标,高程,网格左下角的平面坐标

	  
	ifstream MyFile("DZXTEM.DAT",ios::out);
    while(!MyFile.eof())
	{
		
		MyFile>>aint[i][0]>>s>>fdou[i][0]>>fdou[i][1]>>fdou[i][2]>>aint[i][1];//把文件数据读到数组中
		i++;
	}
	MyFile.close();

	 for(k=0;k<=i;k++)//x最小值
	{
	   if(fdou[k][0]<a)
	   {
	       a=fdou[k][0];
	   }
       if(fdou[k][0]>c)
	   {
	       c=fdou[k][0];
	   }
	}
	
	for(n=0;n<=i;n++)//y最小值
	{
		if(fdou[n][1]<b)
	   { 
		 b=fdou[n][1];
	   }
		if(fdou[n][1]>d)
	   {
	     d=fdou[n][1];
	   }
	}	  
		 
	J=(xp-a)/200+1;
	I=(yp-b)/200+1;
	xa=a+(J-1)*200;
	ya=b+(I-1)*200;

		  
	
}

⌨️ 快捷键说明

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