📄 mydtm.cpp
字号:
// 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 + -