📄 dlgfgw.cpp
字号:
if(MessageBox("你是否保存已经变化的数据?","保存",MB_OKCANCEL)==IDOK)
{
SaveData(); //保存数据内容
writedata.open("setini",ios::out);
if(!writedata)
MessageBox("打开文件setini用于保存新设置的参数值时出错","错误",MB_OK);
else
{
writedata<<m_countstyle<<" "<<m_jdbg<<" "<<m_xdbg<<"\n";
}
writedata.close();
} //end if
CDialog::OnOK();
}
//打开[关于]对话框
void CDLGFGW::OnHelp()
{
CAboutDlg dlg;
dlg.DoModal();
}
void CDLGFGW::OnDemo()
{
CFgwView dlg;
dlg.DoModal();
}
//修改当前记录
void CDLGFGW::OnBtnnext()
{
CString str="";
INT PreSelItem=m_countlist.GetSelectionMark();
//if(m_pelist.GetItemState(PreSelItem,LVIF_STATE)==LVIS_SELECTED)
// AfxMessageBox("有选中项");
if(PreSelItem>=0)
{ CDLGFGW::UpdateData(TRUE);
str.Format("%4d",m_ID);
m_pelist.SetItem(PreSelItem,0,LVIF_TEXT,str,0,0,0,0); //方格号
str.Format("%6.3f",m_fgb);
m_pelist.SetItem(PreSelItem,1,LVIF_TEXT,str,0,0,0,0); //方格长
str.Format("%6.3f",m_fgh);
m_pelist.SetItem(PreSelItem,2,LVIF_TEXT,str,0,0,0,0); //方格宽
str.Format("%6.3f",m_bgavg);
m_pelist.SetItem(PreSelItem,3,LVIF_TEXT,str,0,0,0,0); //平基标高
str.Format("%6.3f",m_bglefttop);
m_pelist.SetItem(PreSelItem,4,LVIF_TEXT,str,0,0,0,0); //方格左上角标高
str.Format("%6.3f",m_bgrighttop);
m_pelist.SetItem(PreSelItem,5,LVIF_TEXT,str,0,0,0,0); //方格右上角标高
str.Format("%6.3f",m_bgrightbuttom);
m_pelist.SetItem(PreSelItem,6,LVIF_TEXT,str,0,0,0,0); //方格右下角标高
str.Format("%6.3f",m_bgleftbuttom);
m_pelist.SetItem(PreSelItem,7,LVIF_TEXT,str,0,0,0,0); //方格左下角标高
str="已被修改";
m_pelist.SetItem(PreSelItem,8,LVIF_TEXT,str,0,0,0,0); //备注
OnRecount();
}//end if
CDLGFGW::UpdateData(FALSE);
}
//单击选项按纽时发生
void CDLGFGW::OnRadiojd()
{
m_bgstyle=FALSE;
// m_jdbg=325.168; //建议此行从setini中读出
// m_xdbg=0.0;
m_bgavg=m_jdbg;
CDLGFGW::UpdateData(FALSE);
}
void CDLGFGW::OnRadioxd()
{
m_bgstyle=TRUE;
// m_xdbg=0.0; //建议此行从setini中读出
// m_jdbg=0.0;
m_bgavg=m_xdbg;
CDLGFGW::UpdateData(FALSE);
}
void CDLGFGW::OnClickOpelist(NMHDR* pNMHDR, LRESULT* pResult)
{
CString str="";
int PreSelItem=-1;;
PreSelItem=m_pelist.GetSelectionMark();
m_countlist.SetSelectionMark(PreSelItem);
m_countlist.SetItemState(PreSelItem,LVIS_SELECTED,LVIS_SELECTED);
if(PreSelItem!=-1)
{
m_ID=atoi(m_pelist.GetItemText(PreSelItem,0));
m_fgb=atof(m_pelist.GetItemText(PreSelItem,1));
m_fgh=atof(m_pelist.GetItemText(PreSelItem,2));
m_bgavg=atof(m_pelist.GetItemText(PreSelItem,3));
m_bglefttop=atof(m_pelist.GetItemText(PreSelItem,4));
m_bgrighttop=atof(m_pelist.GetItemText(PreSelItem,5));
m_bgrightbuttom=atof(m_pelist.GetItemText(PreSelItem,6));
m_bgleftbuttom=atof(m_pelist.GetItemText(PreSelItem,7));
CDLGFGW::UpdateData(FALSE);
}
*pResult = 0;
}
void CDLGFGW::OnClickCountlist(NMHDR* pNMHDR, LRESULT* pResult)
{
int PreSelItem=-1;;
PreSelItem=m_countlist.GetSelectionMark();
m_pelist.SetSelectionMark(PreSelItem);
m_pelist.SetItemState(PreSelItem,LVIS_SELECTED,LVIS_SELECTED);
if(PreSelItem!=-1)
{
m_ID=atoi(m_pelist.GetItemText(PreSelItem,0));
m_fgb=atof(m_pelist.GetItemText(PreSelItem,1));
m_fgh=atof(m_pelist.GetItemText(PreSelItem,2));
m_bgavg=atof(m_pelist.GetItemText(PreSelItem,3));
m_bglefttop=atof(m_pelist.GetItemText(PreSelItem,4));
m_bgrighttop=atof(m_pelist.GetItemText(PreSelItem,5));
m_bgrightbuttom=atof(m_pelist.GetItemText(PreSelItem,6));
m_bgleftbuttom=atof(m_pelist.GetItemText(PreSelItem,7));
CDLGFGW::UpdateData(FALSE);
}
*pResult = 0;
}
//四棱柱体积法
void CDLGFGW::OnCount4()
{
m_countstyle=0;
m_strstyle=_T("四棱柱体积法");
CDLGFGW::UpdateData(FALSE);
}
//平均体积法
void CDLGFGW::OnCountno()
{
MessageBox(" 你选用的是[平均标高体积法]来计算方格网的挖填方量,这种方法对于全挖或全填时计算同实际基本相符,但若一个方格有挖有填时,选用这种方法计算是不能准确的反映实际情况,它只简单的求出平均标高来确定是挖或是填中的一种而忽略另一种。","重要提示");
m_countstyle=1;
m_strstyle=_T("平均标高体积法");
CDLGFGW::UpdateData(FALSE);
}
//三角棱柱体积法
void CDLGFGW::OnCount3()
{
MessageBox(" [三角棱柱体积法]计算方格网挖填方量对于有等高线情况下计算的精度高过四棱柱法,本软件目前暂不支持[三角棱柱体积法]来计算方格网挖填方量,建议使用四棱柱体积法。","提示",MB_OK);
m_countstyle=0;
OnCount4();
}
//仅计算填方
DOUBLE CDLGFGW::CountValueTF(BG Prebg)
{
DOUBLE V=0;
CString str="";
int style=0;
DOUBLE id1=Prebg.lefttop-Prebg.bg0 ;
DOUBLE id2=Prebg.righttop-Prebg.bg0 ;
DOUBLE id3=Prebg.rightbuttom-Prebg.bg0;
DOUBLE id4=Prebg.leftbuttom-Prebg.bg0 ;
if(fabs(id1)+fabs(id2)+fabs(id3)+fabs(id4)<0.0001) return 0;
if(m_countstyle==0) //四棱柱体积法
{
style=GetCountStyle(Prebg);
switch(style)
{
case 0: //四挖
V=0;
break;
case 1: //三挖一填
{
if(id1<0) V=(Prebg.b*Prebg.h/4)*(id1)*(id1)/(fabs(id1)+id2+id3+id4);
else if(id2<0) V=(Prebg.b*Prebg.h/4)*(id2)*(id2)/(id1+fabs(id2)+id3+id4);
else if(id3<0) V=(Prebg.b*Prebg.h/4)*(id3)*(id3)/(id1+id2+fabs(id3)+id4);
else if(id4<0) V=(Prebg.b*Prebg.h/4)*(id4)*(id4)/(id1+id2+id3+fabs(id4));
V=-1*fabs(V);
break;
}
case 2: //两挖两填(边)
if(id1<0 && id2<0) V=(Prebg.b*Prebg.h/4)*(id1+id2)*(id1+id2)/(fabs(id1+id2)+id3+id4);
else if(id1<0 && id3<0) V=(Prebg.b*Prebg.h/4)*(id1+id3)*(id1+id3)/(fabs(id1+id3)+id4+id2);
else if(id1<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id1+id4)*(id1+id4)/(fabs(id1+id4)+id2+id3);
else if(id2<0 && id3<0) V=(Prebg.b*Prebg.h/4)*(id2+id3)*(id2+id3)/(id1+id4+fabs(id2+id3));
else if(id2<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id2+id4)*(id2+id4)/(id1+id3+fabs(id4+id2));
else if(id3<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id3+id4)*(id3+id4)/(id1+id2+fabs(id3+id4));
V=-1*fabs(V);
break;
case 3: //两挖两填(角)
if(id1<0 && id2<0) V=(Prebg.b*Prebg.h/4)*(id1+id2)*(id1+id2)/(fabs(id1+id2)+id3+id4);
else if(id1<0 && id3<0) V=(Prebg.b*Prebg.h/4)*(id1+id3)*(id1+id3)/(fabs(id1+id2)+id3+id4);
else if(id1<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id1+id4)*(id1+id4)/(fabs(id1+id4)+id2+id3);
else if(id2<0 && id3<0) V=(Prebg.b*Prebg.h/4)*(id2+id3)*(id2+id3)/(id1+fabs(id2+id3)+id4);
else if(id2<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id2+id4)*(id2+id4)/(id1+id3+fabs(id2+id4));
else if(id3<0 && id4<0) V=(Prebg.b*Prebg.h/4)*(id3+id4)*(id3+id4)/(id1+id2+fabs(id3+id4));
V=-1*fabs(V);
break;
case 4: //三填一挖
if(id1>0) V=(Prebg.b*Prebg.h/4)*(id2+id3+id4)*(id2+id3+id4)/(id1+fabs(id2+id3+id4));
else if(id2>0) V=(Prebg.b*Prebg.h/4)*(id1+id3+id4)*(id1+id3+id4)/(fabs(id1+id3+id4)+id2);
else if(id3>0) V=(Prebg.b*Prebg.h/4)*(id1+id2+id4)*(id1+id2+id4)/(fabs(id1+id2+id4)+id3);
else if(id4>0) V=(Prebg.b*Prebg.h/4)*(id1+id2+id3)*(id1+id2+id3)/(fabs(id1+id2+id3)+id4);
V=-1*fabs(V);
break;
case 5: //四填
V=((Prebg.lefttop+Prebg.righttop+Prebg.rightbuttom+Prebg.leftbuttom)/4-Prebg.bg0)*Prebg.b*Prebg.h;
V=-1*fabs(V);
break;
case 6: //未知计算方法
V=((Prebg.lefttop+Prebg.righttop+Prebg.rightbuttom+Prebg.leftbuttom)/4-Prebg.bg0)*Prebg.b*Prebg.h;
V=-1*fabs(V);
break;
default:
break;
}//end switch
}//end if(countstyle==0)
str.Format("%9.3f",V);
V=atof(str);
return V;
}
//平均标高法计算方量: 返回正为挖方,返回负为填方
DOUBLE CDLGFGW::CountValueAVE(BG Prebg)
{
DOUBLE V=0;
if(m_countstyle==1) //平均标高法
{
V=((Prebg.lefttop+Prebg.righttop+Prebg.rightbuttom+Prebg.leftbuttom)/4-Prebg.bg0)*Prebg.b*Prebg.h;
}
return V;
}
//将列表框中内容写入一文本文件printtext中并打开
void CDLGFGW::OnPrint()
{
INT id=0;
DOUBLE value=0;
ofstream writedata;
CString str[11];
//退出时保存各值
CString Prev=_T("");
int n=m_pelist.GetItemCount();
///if(n==0)
//if(n==0) return;
try
{
writedata.open("printtext.txt",ios::out);
if(!writedata)
MessageBox("打开文件printtext用于保存新设置的参数值时出错","错误",MB_OK);
else
{ if(m_countstyle==0)
{
writedata<<" ****************************************************************"<<"\n";
writedata<<" * *"<<"\n";
writedata<<" * 本方格网采用四棱柱体积法计算: *"<<"\n";
writedata<<" * *"<<"\n";
writedata<<" ****************************************************************"<<"\n";
writedata<<"\n\n";
str[10]="四棱柱体积法";
}
else
{
writedata<<" ****************************************************************"<<"\n";
writedata<<" * *"<<"\n";
writedata<<" * 本方格网采用平均标高体积法计算: *"<<"\n";
writedata<<" * *"<<"\n";
writedata<<" ****************************************************************"<<"\n";
writedata<<"\n\n";
// str[10]="平均标高体积法";
}
writedata<<"---------------------------------------------------------------------------------------------------"<<"\n";
writedata<<"方格号 方格长 方格宽 平基标高 方格四角标高 挖方量 填方量 说明"<<"\n";
writedata<<"----------------------------------------------------------------------------------------------------"<<"\n";
for( int i=0;i<n;i++)
{
id=atoi(m_pelist.GetItemText(i,0));
str[0].Format("%4d",id);
value=atof(m_pelist.GetItemText(i,1));
str[1].Format("%4.1f",value);
value=atof(m_pelist.GetItemText(i,2));
str[2].Format("%4.1f",value);
value=atof(m_pelist.GetItemText(i,3));
str[3].Format("%7.2f",value);
value=atof(m_pelist.GetItemText(i,4));
str[4].Format("%7.2f",value);
value=atof(m_pelist.GetItemText(i,5));
str[5].Format("%7.2f",value);
value=atof(m_pelist.GetItemText(i,6));
str[6].Format("%7.2f",value);
value=atof(m_pelist.GetItemText(i,7));
str[7].Format("%7.2f",value);
value=atof(m_countlist.GetItemText(i,3));
str[8].Format("%7.2f",value);
value=atof(m_countlist.GetItemText(i,4));
str[9].Format("%7.2f",value);
str[10]=m_countlist.GetItemText(i,2);
writedata<<str[0]<<" ";
writedata<<str[1]<<" "<<str[2]<<" ";
writedata<<str[3]<<" "<<str[4]<<" ";
writedata<<str[5]<<" "<<str[6]<<" ";
writedata<<str[7]<<" ";
writedata<<str[8]<<" "<<str[9]<<" "<<str[10];
writedata<<"\n";
}//end for
writedata<<"****************************************************************************************************"<<"\n";
// writedata<<"方格号 方格长 方格宽 平基标高 方格四角标高 挖方量 填方量 说明"<<"\n";
writedata<<"\n\n";
writedata<<"合计: 总方格数 总挖方量 总填方量 "<<"\n\n";
writedata<<" "<<n<<" "<<m_sumwf<<" "<<m_sumtf<<"\n\n\n";
writedata<<"\n\n";
writedata<<" 版权所有 重庆第九建设有限公司 "<<"\n";
}
writedata.close();
CString strsave(g_strAppPath+_T("printtext.txt"));
ShellExecute(NULL,NULL,strsave,NULL,_T("D:\\RHWKZ"),SW_SHOW);
}
catch(...)
{
MessageBox("打开文件printtext用于保存新设置的参数值时出错","错误",MB_OK);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -