- UID
- 766097
- 积分
- 47
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2017-1-24
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2017-9-14 08:53:11
|
显示全部楼层
这是可以运行的代码 和原先的需求有些变化 谢谢大神的指导
acutPrintf(_T("Hello!"));
int i,j,k,n,m;
Acad::ErrorStatus es;
//地面线
std::vector<cgp> dmp;
std::vector<int> dmspi;
std::vector<int> dmepi;
std::vector<std::vector<cgp> > dmpp;
//三角点
//std::vector<cgp> trip;
//std::vector<std::vector<cgp> > trips;
//中桩点
//std::vector<cgp> csbasep;
//std::vector<std::vector<cgp> > csbaseps;
//冠号名
std::vector<CString> headerStr;
//std::vector<std::vector<CString> > headStrs;
//里程值
std::vector<CString> mileStr;
//起点水平标高
std::vector<CString> hsgStr;
//Hsg点的位置
std::vector<cgp> hsgP;
//寻找中桩点的参考位置x
//std::vector<double> basePx;
std::vector<double> numPx;//这是存储数字标注位置点的x轴值
std::vector<CString> numLab;//截面红色数字标注 只有数字的标注
std::vector<cgp> numP;//这是存储数字标注的点
std::vector<double> zeroPx;//这是保存0.00的x坐标值 因为hsg不是唯一的
std::vector<cgp> zeroP;//保存零点
std::vector<cgp> baseHsgP;//这是保存基线的hsg的点
//地质标注
std::vector<CString> dzLabStr;
//地质标注点位置
std::vector<cgp> dzlabp;
//地质线
std::vector<cgp> dzp;
//地质钻孔
std::vector<cgp> dzdrillp;
//地质专业文字标注
std::vector<CString> dzWZLab;
//地质专业文字标注点
std::vector<cgp> dzWZLabp;
//所有的绿色标注
std::vector<CString> allGreenLab;
std::vector<cgp> allGreenLabp;
//三位小数的点和标注
std::vector<cgp> Decimal3NumP;
std::vector<CString> Decimal3NumLab;
ads_name ssml;
ads_name ent;
AcDbObjectId objId;
AcDbEntity *pEnt;
//这表示曾经有选择集 就直接获取个数
long l=0;
acedSSGet(_T("_I"),NULL,NULL,NULL,ssml);
acedSSLength(ssml,&l);
if(l==0)
{
acedSSFree(ssml);
if(acedSSGet(NULL,NULL,NULL,NULL,ssml)!=RTNORM)
return;
acedSSLength(ssml,&l);
}
double dis=0.1;
double dis1=0.15;
for(i=0;i<l;i++)
{
acedSSName(ssml,i,ent);
acdbGetObjectId(objId,ent);
pEnt=NULL;
es=acdbOpenAcDbEntity(pEnt,objId,AcDb::kForRead);
if(pEnt!=NULL)
{
if(pEnt->isKindOf(AcDbPolyline::desc()))
{
try
{
AcDbPolyline *papl;
papl=(AcDbPolyline *)pEnt;
double tplcw=0,trvv=0;
papl->getConstantWidth(tplcw);
int ci;
ci=papl->colorIndex();
//256bylayer,0byblock
if(ci==256)
{
CString ttln;
ttln=papl->layer();
ci=GetLayerColor(ttln);//获取图层颜色
}
if(ci==0)
{
ci=7;
}
//判断是否地面线 绿色-地面线 这是习惯
if(tplcw>0 && tplcw<0.07 && ci==3)
{
if(papl->numVerts()>1)
{
int fi;
int dzfi;
int ttn=0;
AcGePoint2d lastp;
for(j=0;j<papl->numVerts();j++)
{
ttn++;
AcGePoint2d p1;
papl->getPointAt(j,p1);
cgp tppp;
tppp.x=p1.x;
tppp.y=p1.y;
//装入地面线点
//dmp.push_back(tppp);
if(j!=0)
{
double llv;
llv=sqrt((p1.x-lastp.x)*(p1.x-lastp.x)+(p1.y-lastp.y)*(p1.y-lastp.y));
if(llv>dis)//dis=0.1
{
dmp.push_back(tppp);
lastp=p1;
}
}
else
{
dmp.push_back(tppp);
fi=dmp.size()-1;
lastp=p1;
}
}
}
}
//地质线
else if((tplcw<cgzero)&&(ci==13))
{
if(papl->numVerts()>1)
{
int fi;
int dzfi;
int ttn=0;
AcGePoint2d lastp;
for(j=0;j<papl->numVerts();j++)
{
ttn++;
AcGePoint2d p1;
papl->getPointAt(j,p1);
cgp tppp;
tppp.x=p1.x;
tppp.y=p1.y;
//装入地质线点
//dzp.push_back(tppp);
if(j!=0)
{
double llv;
llv=sqrt((p1.x-lastp.x)*(p1.x-lastp.x)+(p1.y-lastp.y)*(p1.y-lastp.y));
if(llv>dis)
{
dzp.push_back(tppp);
lastp=p1;
}
}
else
{
dzp.push_back(tppp);
fi=dmp.size()-1;
lastp=p1;
}
}
}
}
else if((tplcw<cgzero)&&(ci==31))//地质钻孔
{
if(papl->numVerts()>1)
{
int fi;
int dzfi;
int ttn=0;
AcGePoint2d lastp;
for(j=0;j<papl->numVerts();j++)
{
ttn++;
AcGePoint2d p1;
papl->getPointAt(j,p1);
cgp tppp;
tppp.x=p1.x;
tppp.y=p1.y;
//装入地质线点
dzdrillp.push_back(tppp);
if(j!=0)
{
double llv;
llv=sqrt((p1.x-lastp.x)*(p1.x-lastp.x)+(p1.y-lastp.y)*(p1.y-lastp.y));
if(llv>dis)
{
dzp.push_back(tppp);
lastp=p1;
}
}
else
{
dzp.push_back(tppp);
fi=dmp.size()-1;
lastp=p1;
}
}
}
}
}
catch(...)
{
}
}
//某些图里面地面线和地质线炸开了
//if(pEnt->isKindOf(AcDbLine::desc()))
//{
// try
// {
// AcDbLine *papl;
// papl=(AcDbLine *)pEnt;
// int ci;
// ci=papl->colorIndex();//
// //地质线
// if(ci==13)
// {
//
// }
// }
// catch(...)
// {
//
// }
//}
//现在思路是这样:获取hsg起点水平标高后,记录其在此设计图中x的坐标位置
//然后再保存所有只有 红色数字 的标注及其点的x位置,同时也保存了地面线的点
// 等以l为for的条件循环结束后,
//再把这些保存起来的数字标注与地面线做比较 也与hsg的x位置做比较
//如果在地面线小域内且也在x值小范围内 那么就是中桩点的标注 域就是指地面线附近
//相当于中桩点标注满足了两个要求:即在地面线附近又在hsg起点水平标注的x附近
if(pEnt->isKindOf(AcDbText::desc()))
{
AcDbText *pTxt;
pTxt=(AcDbText *)pEnt;
int ci=0;
ci=pTxt->colorIndex();
CString hsgNum;//水平起点标高
CString lpNum;//颜色为1和7的点的水平标高值
if(ci==1||ci==7 || ci==0) //1代表红色 7代表白色
{
AcGePoint3d baseAgp3d=pTxt->position();
cgp tp;
//copyagptocp1(baseAgp3d,tp);
tp.x=baseAgp3d.x;
tp.y=baseAgp3d.y;
tp.z=baseAgp3d.z;
ACHAR *pch=pTxt->textString();
CString txtStr(pch);
txtStr.Trim();//这有问题 把0.04与0.00区分不出来
int strLen=txtStr.GetLength();
//if(*pch==_T('0.00'))
//{
// strLen=strLen-1;
//}
bool isNum=false;
bool isHsg=false;
int dn=0;//点后面的尾数 中桩点的后面 是三位小数
int dotFlag=0;
for(j=0;j<strLen;j++)
{
if(txtStr.GetAt(j)=='H'&&txtStr.GetAt(j+1)=='s'&&txtStr.GetAt(j+2)=='g')
{
//找的是基线hsg后面的数字
for(k=j+3;k<strLen;k++)
{
hsgNum=hsgNum+txtStr.GetAt(k);
}
isHsg=true;
break;//跳出本次j循环 寻找下一个循环
}
else
{
isHsg=false;
}
//表示只含数字
if(txtStr.GetAt(j)=='0' || txtStr.GetAt(j)=='1' || txtStr.GetAt(j)=='2'||
txtStr.GetAt(j)=='3' || txtStr.GetAt(j)=='4' || txtStr.GetAt(j)=='5'||
txtStr.GetAt(j)=='6' || txtStr.GetAt(j)=='7' || txtStr.GetAt(j)=='8'||
txtStr.GetAt(j)=='9' || txtStr.GetAt(j)=='.' )//表示只含数字
{
//
isNum=true;
lpNum=lpNum+txtStr.GetAt(j);
//发现小数点后 就把小数点标志设为1
if(txtStr.GetAt(j)=='.')
{
dotFlag=1;
}
//当发现小数点后 就开始记录 保存dn==4的点(带点一起算的 所以是4)
if(dotFlag==1)
{
dn++;
}
}
else
{
//isHsg=false;
isNum=false;
break;
}
}
if(isNum)
{
////保存所有 颜色为1和7的点的水平标高的标注点
//numP.push_back(tp);
////保存所有 。。。。。。数字标注点的x位置
//double numx=baseAgp3d.x;
//numPx.push_back(numx);
////保存所有 。。。。。。数字值
//numLab.push_back(lpNum);
////在这里遇到一个问题 txtStr.GetLength()返回的是5而不是4
////用trim()解决
////zeroPx.push_back(numx);
////这里换思路 通过0.00找到红色竖直线 而不能直接用0.00的坐标点
////因为。。。
////if(*pch==_T('0.00'))
////{
//// zeroPx.push_back(numx);//这有问题 把0.04与0.00区分不出来
////}
//这里要改成f比较 是因为字符串不能进行比较 因为是会把0.04变为0.0 就无法和0.00区分开来了
double f=_wtof(txtStr);
if(f<cgzero)
{
//zeroPx.push_back(numx);//不能只存x值 因为上下两个图 x值相同要依靠y值来区分改为存入点
zeroP.push_back(tp);//保存0.00的点
}
else
{
//不能保存所有 因为要把zeroP的点和其它点分开做比较 如果存在一起 会把0.00的点也存入 颜色为1和7的点的水平标高的标注点
numP.push_back(tp);
//保存所有 。。。。。。数字标注点的x位置
double numx=baseAgp3d.x;
numPx.push_back(numx);
//保存所有 。。。。。。数字值
numLab.push_back(lpNum);
//dn 表示的是小数后面跟了三位数 ==4 是因为上面从点开始计算的 所以dn==4
if(dn==4)
{
Decimal3NumP.push_back(tp);
Decimal3NumLab.push_back(lpNum);
}
}
}
if(isHsg)
{
//保存基线hsg的标注
hsgStr.push_back(hsgNum);
//保存基线hsg点的位置
hsgP.push_back(tp);
}
}
if(ci==3||ci==1||ci==0) //3代表绿色 1代表红色 0代表白色 找里程标注 也找既有新信息
{
ACHAR *pch=pTxt->textString();
CString txtStr(pch);
txtStr=pTxt->textString();
//保存所有绿色文字标注信息及其点
allGreenLab.push_back(txtStr);
AcGePoint3d agp=pTxt->position();
cgp tp;
tp.x=agp.x;
tp.y=agp.y;
tp.z=agp.z;
allGreenLabp.push_back(tp);
//或者里程冠号名
int kPos;
kPos=txtStr.Find(_T('K'));
CString strHeader;
if(kPos>=0)
{
for(j=0;j<kPos+1;j++)
{
strHeader=strHeader+txtStr.GetAt(j);//获取冠桩名
}
headerStr.push_back(strHeader);
}
//或者里程冠号值
int rkPos;//如果k在第一个那么find返回的值就是0
rkPos=txtStr.ReverseFind(_T('K'));
CString strNum;
if(rkPos>=0)
{
for(j=rkPos+1;j<txtStr.GetLength()-1;j++)
{
//0x46 == "."
if( (txtStr.GetAt(j)>0x2F)||(txtStr.GetAt(j)<0x3A)||(txtStr.GetAt(j)==0x46))
{
strNum=strNum+txtStr.GetAt(j);
}
}
//这是获取里程值
mileStr.push_back(strNum);
}
}
else if(ci==13)
{
ACHAR *pch=pTxt->textString();
CString txtStr(pch);
dzLabStr.push_back(txtStr);//地质标注
AcGePoint3d dzAgp3d=pTxt->position();
cgp dzcp;
dzcp.x=dzAgp3d.x;
dzcp.y=dzAgp3d.y;
dzcp.z=dzAgp3d.z;
dzlabp.push_back(dzcp);//地质标注点
}
else if(ci=31)//地质文字
{
ACHAR *pch=pTxt->textString();
CString txtStr(pch);
int isD=txtStr.Find(_T('D'));
int isZ=txtStr.Find(_T('Z'));
if(isD>0&&isZ>0)
{
dzWZLab.push_back(txtStr);
AcGePoint3d dzWZLabAgp3d=pTxt->position();
cgp dzWZcp;
dzWZcp.x=dzWZLabAgp3d.x;
dzWZcp.y=dzWZLabAgp3d.y;
dzWZcp.z=dzWZLabAgp3d.z;
dzWZLabp.push_back(dzWZcp);//地质文字标注点
}
}
}
pEnt->close();
}
//acedSSFree(ssml);
}//for l 结束
acedSSFree(ssml);//写上面只能得到选择集中的第一个
//获取地面线附近文字标注
std::vector<CString> dmWZLab;
std::vector<cgp> dmWZLabp;
for(i=0;i<allGreenLabp.size();i++)
{
cgp ttp=allGreenLabp.at(i);
double ty=ttp.y;
CString strWZ=allGreenLab.at(i);
bool isfind=false;
for(j=0;j<dmp.size()-1;j++)
{
cgp dp1=dmp.at(j);
cgp dp2=dmp.at(j+1);
//if(dp1.y<ty<dp2.y+1.0)
if(ty>dp1.y && ty<dp2.y+1.0)
{
isfind=true;
continue;
}
}
if(isfind)
{
dmWZLabp.push_back(ttp);//这样就避免重复装入
dmWZLab.push_back(strWZ);
}
}
//这是找既有线部分信息 刚博说了 不管这
std::vector<CString> hjgLineName;
std::vector<CString> hjgDis;
//std::vector<CString> hjgInfo
for(i=0;i<allGreenLab.size();i++)
{
CString strInfo;
strInfo=allGreenLab.at(i);
int LArc,RArc,dot;
LArc=strInfo.Find(_T('('));
RArc=strInfo.Find(_T(')'));
if(LArc>=0&&RArc>0)
{
//再判断有没有小数点
dot=strInfo.Find(_T('.'));
if(dot>0)
{
//有小数点就是距离
hjgDis.push_back(strInfo);
}
else
{
//没有小数点就是股道名
hjgLineName.push_back(strInfo);
}
}
}
//这里主要是根据上面存储的所有数字标注点numP,地面线与hsg点的x位置 三个数组找到中桩点的水平标注
//但是因为hsg在每个股道上都有 所以必须找到0.00的标注点x的值作为筛选
//关键现在是 如果很多股道每个股道都有hsg 而又没有标出0.00 那怎么解决?那就是没有水平距离的就是基线了
//地面数字点
std::vector<cgp> dmNumP;
//地面数字标注
std::vector<CString> dmNumLab;
//数字标注与地面线主要是y值上下的范围 取一个增量y 在这个范围内 就满足第一个条件 保存在dmNumP中
//但是现在已经获取了0.00的点和x值 不如直接用0.00的作比较 这样循环不是更小吗?
//不能完全这样 因为有些图没有标出0.00的值 那就只能用这种方式了 Decimal3NumP
//for(i=0;i<numP.size();i++)//所有的点数字标注点 其实可以用0.00的标注点来筛选 这样循环就会变少
//{
// cgp ttp=numP.at(i);
// double tx=ttp.x;
// double ty=ttp.y;
// bool isfind=false;
// for(j=0;j<dmp.size()-1;j++) //地面线
// {
// cgp dp1=dmp.at(j);
// cgp dp2=dmp.at(j+1);
// //if(dp1.y<ty<dp2.y+1.0)
// if(ty>dp1.y && ty<dp2.y+1.0)
// {
// //dmpNumP.push_back(ttp); //这里会重复加入 因为for不断地重复
// isfind=true;
// continue;
// }
// }
// if(isfind)
// {
// dmNumP.push_back(ttp);//这样就可以把后面去重的代码去掉了
// dmNumLab.push_back(numLab.at(i));
// }
//}
//所有的点数字标注点 其实可以用0.00的标注点来筛选 这样循环就会变少
for(i=0;i<Decimal3NumP.size();i++) //因为这里是找中桩点 其都是三位小数 所以不在用所有的点 用尾数为三位的点
{
cgp ttp=Decimal3NumP.at(i);
double tx=ttp.x;
double ty=ttp.y;
bool isfind=false;
for(j=0;j<dmp.size()-1;j++) //地面线
{
cgp dp1=dmp.at(j);
cgp dp2=dmp.at(j+1);
//if(dp1.y<ty<dp2.y+1.0)
if(ty>dp1.y && ty<dp2.y+1.0)
{
//dmpNumP.push_back(ttp); //这里会重复加入 因为for不断地重复
isfind=true;
continue;
}
}
if(isfind)
{
dmNumP.push_back(ttp);//这样就可以把后面去重的代码去掉了
dmNumLab.push_back(Decimal3NumLab.at(i));
}
}
//这一部分是把dmpNumP重复的数据给去掉 保存在dnp中
//std::vector<cgp> dnp;
//cgp tp0=dmpNumP.at(0);
//dnp.push_back(tp0);
//for(i=0;i<dmpNumP.size()-1;i++)
//{
// cgp tp1=dmpNumP.at(i);
// cgp tp2=dmpNumP.at(i+1);
// if( (i+1)!=dmpNumP.size())
// {
// if(tp1.y==tp2.y)
// {
// continue;
// }
// else
// {
// dnp.push_back(tp2);
// }
// }
//}
//只有满足条件一的才接着比较 与hsg点的x位置范围内的 就满足条件二 然后保存对应的数字标注就是中桩标注了
//这里放弃hsg 是因为每个股道上都有hsg 现在改为0.00的x位置范围
//改为0.00的x位置范围 还是要条件一 因为中桩标注在地面附近的才是中桩点 如果只对应 0.00的x位置范围
//而不在地面线附近 那就不是中桩点了
std::vector<CString> csbaseLab;//中桩点的标注
std::vector<cgp> csbasep;//中桩点
//表示绘图时 基线上标注了0.00
if(zeroP.size()>0) //zeroPx表示标注0.00的点
{
for(i=0;i<dmNumP.size();i++)//dmNumP表示地面附近的数字标注点
{
//cgp dnhp=dnp.at(i);
cgp dhp=dmNumP.at(i);
double tdhx=dhp.x;
bool isfind=false;
for(j=0;j<zeroP.size();j++) //以前采用的hsg的x位置 现在采用的是0.00的x位置
{
double hx=zeroP.at(j).x;
//if(hx-0.2<dnx<hx+0.2)
if((tdhx>hx-0.5)&&(tdhx<hx+0.5))
{
//这就是获取中桩的水平标注
isfind=true;
continue;
}
}
if(isfind)
{
csbaseLab.push_back(dmNumLab.at(i));//这样就不重复加入
csbasep.push_back(dhp);
}
}
}
else //没有标注0.00的情况
{
}
//for(i=0;i<dmNumP.size();i++)
//{
// //cgp dnhp=dnp.at(i);
// cgp dhp=dmNumP.at(i);
// double tdhx=dhp.x;
// bool isfind=false;
// for(j=0;j<numPx.size();j++)
// {
// double hx=numPx.at(j);
// //if(hx-0.2<dnx<hx+0.2)
// if((tdhx>hx-0.05)&&(tdhx<hx+0.05))
// {
// //这就是获取中桩的水平标注
// isfind=true;
// continue;
// }
// }
// if(isfind)
// {
// csbaseLab.push_back(numLab.at(i));//这样就不重复加入
// csbasep.push_back(dhp);
// }
//}
//把csbaseLab的重复部分去掉
//bool isErase=false;
//std::vector<CString>::iterator locIter;
////std::vector<cgp>::iterator locIterp;
//for(i=0;i<csbaseLab.size();i++)
//{
// CString str1=csbaseLab.at(i);
// //locIterp=csbasep.begin()+1+i;
// for(locIter=csbaseLab.begin()+1+i;locIter!=csbaseLab.end();locIter++)
// {
// if(str1==*locIter)
// {
// csbaseLab.erase(locIter);
// //csbasep.erase(locIterp);//去重复的点 重复的顺序不一样
// isErase=true;
// }
// if(isErase)
// {
// //locIter=csbaseTLab.begin()+1+i;
// isErase=false;
// if(locIter==csbaseLab.end())
// {
// break;
// }
// }
// //locIterp++;
// }
// if(i+1==csbaseLab.size())
// {
// break;
// }
//}
//去重复的点 不用这个是因为有错 cgp tp=csbasep.at(i);类型对不上
//bool isErasep=false;
//std::vector<cgp>::iterator locIterp;
//for(i=0;i<csbasep.size();i++)
//{
// cgp tp=csbasep.at(i);
// //locIter=csbaseTLab.begin()+1;
// for(locIterp=csbasep.begin()+1+i;locIterp!=csbasep.end();locIterp++)
// {
// if(tp==*locIterp)
// {
// csbasep.erase(locIterp);
// isErasep=true;
// }
// if(isErase)
// {
// //locIter=csbaseTLab.begin()+1+i;
// isErasep=false;
// if(locIterp==csbasep.end())
// {
// break;
// }
// }
// }
// if(i+1==csbasep.size())
// {
// break;
// }
//}
///////////////////////////////////////////////////////////////////////////////////////////
CString nfn;
CFileDialog filedlg(TRUE,_T("Sec Files(*.sec)"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("Sec Files (*sec)|*.sec||"),NULL);
filedlg.DoModal();
nfn=filedlg.GetPathName();
if(nfn.IsEmpty()==false)
{
try
{
CStdioFile s;
if(s.Open(nfn,CFile::modeCreate|CFile::modeReadWrite)==TRUE)
{
CString tstr;
tstr="";
s.WriteString(tstr);
tstr="\n6.900 6.600 6.000 5.600";
s.WriteString(tstr);
tstr="\n12.000 8.000 2.000 0.080 21.000 12.000 2.000 0.080";
s.WriteString(tstr);
tstr="\n1.000";
s.WriteString(tstr);
cgp ttbp;
//这里是选取了多少个截面循环就用中桩点来表示 多少个中桩点就多少个截面
for(i=0;i<csbasep.size();i++)
{
double basePx=csbasep.at(i).x;
double basePy=csbasep.at(i).y;
CString gffn;
int gffnv=1;
if(dzLabStr.size()>0)
{
gffnv=dzLabStr.size();
for(j=0;j<dzLabStr.size();j++)
{
if(j==0)
{
gffn=dzLabStr.at(j);
}
else
{
gffn=gffn+_T(" ")+dzLabStr.at(j);
}
}
}
else
{
gffn="<1>";
gffnv=1;
}
//0表示断面开始行 第二个数据为里程值,第三个值为里程冠号 第四个值为本断面有多少个地质符号,第五个值开始就是具体的地质符号值。
tstr.Format(_T("\n0 %s %s %d %s"),mileStr.at(i),headerStr.at(i),gffnv,gffn);
s.WriteString(tstr);
//第一个数据为1,表示为地面线或地质地层线 第二个数据为0为地面线 最后一个为地面线个数
tstr.Format(_T("\n1 0 0.000 3 %d"),dmp.size());
s.WriteString(tstr);
for(j=0;j<dmp.size();j++)
{
tstr.Format(_T(" %.3f %.3f"),dmp.at(j).x-basePx,dmp.at(j).y-basePy);
s.WriteString(tstr);
}
//地质线 第二个数据为1为地面线 最后一个为地质线个数
tstr.Format(_T("\n1 1 0.000 13 %d"),dzp.size());
s.WriteString(tstr);
double jz=0;
for(j=0;j<dzp.size();j++)
{
tstr.Format(_T(" %.3f %.3f"),dzp.at(j).x-basePx,dzp.at(j).y-basePy);
s.WriteString(tstr);
}
//地质标注
for(j=0;j<dzlabp.size();j++)
{
tstr.Format(_T("\n2 %.3f %.3f 0 0 0 0 0 %s"),dzlabp.at(j).x,dzlabp.at(j).y,dzLabStr.at(j));
s.WriteString(tstr);
}
//地质符号
for(j=0;j<dzlabp.size();j++)
{
tstr.Format(_T("\n5 %.3f %.3f 0.000 0.000 0.000 0.000 0.000 %s"),dzlabp.at(j).x-basePx,dzlabp.at(j).y-basePy,dzLabStr.at(j));
s.WriteString(tstr);
}
//找到基 也就是标高值 因为读的是cad格式 所以
for(j=0;j<csbaseLab.size();j++)
{
//第一个数据为10 表现基线信息 第二个表示基线点高程即中桩点的标注 第4个为基线起点的高程即hsg的值?
tstr.Format(_T("\n10 %s"),csbaseLab.at(j));
s.WriteString(tstr);
}
//地质钻孔的个数
for(j=0;j<dzdrillp.size();j++)
{
tstr.Format(_T("\n31 0 0 0 %d %.3f %.3f"),dzdrillp.size(),dzdrillp.at(j).x-basePx,dzdrillp.at(j).y-basePy);
s.WriteString(tstr);
}
//地质钻孔文字标注
for(j=0;j<dzWZLab.size();j++)
{
tstr.Format(_T("\n32 %.3f %.3f 0 0 0 0 0 %s"),dzWZLabp.at(j).x-basePx,dzWZLabp.at(j).y-basePy,dzWZLab.at(j));
s.WriteString(tstr);
}
//即有线信息hjgLineName hjgDis
for(j=0;j<hjgDis.size();j++)
{
tstr.Format(_T("\n51 %s %s"),hjgLineName.at(j),hjgDis.at(j));
s.WriteString(tstr);
}
}
}
}
catch(...)
{
acutPrintf(_T("\n,code has problem!"));
}
}//if
}
|
评分
-
查看全部评分
|