📄 dlgcoordtrans.cpp
字号:
tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp);
tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
break;
default://second
m_dest1=m_dest1*180.0/PI*3600;tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp);
m_dest2=m_dest2*180.0/PI*3600;tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
}
tmp.Format("%f",m_dest3);m_edtdest3.SetWindowText(tmp);
}
else
{
tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp);
tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
tmp.Format("%f",m_dest3);m_edtdest3.SetWindowText(tmp);
}
}
}
void CDlgCoordTrans::PopulateCombo()
{
//for ellipsoid.
for (u1 i=0;i<_refellip.size();i++){
m_cmbSrcEllip.AddString(_refellip.at(i).name_coor);
m_cmbDestEllip.AddString(_refellip.at(i).name_coor);
}
m_cmbSrcEllip.SetCurSel(2);
m_cmbDestEllip.SetCurSel(2);
m_SrcEllip = GeoRef::WGS84;
m_DestEllip = GeoRef::WGS84;
//for source geodetic coordinates unit
m_cmbSrcUnit.AddString("dd:mm:ss");
m_cmbSrcUnit.AddString("dd°mm′ss″");
m_cmbSrcUnit.AddString("DEG");
m_cmbSrcUnit.AddString("RADIAN");
m_cmbSrcUnit.AddString("SECOND");
m_cmbSrcUnit.SetCurSel((int)m_SrcBLUnit);
//for destination geodetic coordinates unit;
m_cmbDestUnit.AddString("dd:mm:ss");
m_cmbDestUnit.AddString("dd°mm′ss″");
m_cmbDestUnit.AddString("DEG");
m_cmbDestUnit.AddString("RADIAN");
m_cmbDestUnit.AddString("SECOND");
m_cmbDestUnit.SetCurSel((int)m_SrcBLUnit);
//Destellipsoid enable is
m_cmbDestEllip.EnableWindow((m_chkDatum.GetState()& 0x0003));
}
void CDlgCoordTrans::SetCheckState()
{
switch(m_SrcCoordType) {
case 0:
m_btnSrcCAR.SetCheck(1);m_btnSrcGEO.SetCheck(0);m_btnSrcPLAN.SetCheck(0);
m_src_label1 ="X"; m_src_label2 ="Y"; m_src_label3 ="Z";
break;
case 1:
m_btnSrcCAR.SetCheck(0);m_btnSrcGEO.SetCheck(1);m_btnSrcPLAN.SetCheck(0);
m_src_label1 ="B"; m_src_label2 ="L"; m_src_label3 ="H";
break;
case 2:
m_btnSrcCAR.SetCheck(0);m_btnSrcGEO.SetCheck(0);m_btnSrcPLAN.SetCheck(1);
m_src_label1 ="E"; m_src_label2 ="N"; m_src_label3 ="H";
break;
}
switch(m_DestCoordType){
case 0:
m_btnDestCAR.SetCheck(1);m_btnDestGEO.SetCheck(0);m_btnDestPLAN.SetCheck(0);
m_dest_label1 ="X"; m_dest_label2 ="Y"; m_dest_label3 ="Z";
break;
case 1:
m_btnDestCAR.SetCheck(0);m_btnDestGEO.SetCheck(1);m_btnDestPLAN.SetCheck(0);
m_dest_label1 ="B"; m_dest_label2 ="L"; m_dest_label3 ="H";
break;
case 2:
m_btnDestCAR.SetCheck(0);m_btnDestGEO.SetCheck(0);m_btnDestPLAN.SetCheck(1);
m_dest_label1 ="E"; m_dest_label2 ="N"; m_dest_label3 ="H";
break;
}
UpdateData(FALSE);
}
void CDlgCoordTrans::OnRadSrcCar()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_SrcCoordType=0;
SetCheckState();
m_edtSrcZone.EnableWindow(FALSE);
}
void CDlgCoordTrans::OnRadSrcGeo()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_SrcCoordType=1;
SetCheckState();
m_edtSrcZone.EnableWindow(FALSE);
}
void CDlgCoordTrans::OnRadSrcPlan()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_SrcCoordType=2;
SetCheckState();
m_edtSrcZone.EnableWindow(FALSE);
}
void CDlgCoordTrans::OnRadDestCar()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_DestCoordType=0;
SetCheckState();
}
void CDlgCoordTrans::OnRadDestGeo()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_DestCoordType=1;
SetCheckState();
}
void CDlgCoordTrans::OnRadDestPlan()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_DestCoordType=2;
SetCheckState();
}
void CDlgCoordTrans::OnSelchangeSrcUnit()
{
// TODO: Add your control notification handler code here
int n=m_cmbSrcUnit.GetCurSel();
if(m_SrcBLUnit != n)
{
RetrieveDataFromCtrl(1);
m_SrcBLUnit = n;
InitializeDataToCtrl(1);
}
}
void CDlgCoordTrans::OnSelchangeDestUnit()
{
int n=m_cmbDestUnit.GetCurSel();
if(m_DestBLUnit != n)
{
RetrieveDataFromCtrl(2);
m_DestBLUnit = n;
InitializeDataToCtrl(2);
}
}
void CDlgCoordTrans::OnChkDatum()
{
if(_datumtran.model != 0){
m_bDatumTran = (m_chkDatum.GetState()& 0x0003);
m_cmbDestEllip.EnableWindow(m_bDatumTran);
if (m_bDatumTran)
{
m_cmbSrcEllip.SetCurSel(_datumtran.srcellip);
m_cmbDestEllip.SetCurSel(_datumtran.destellip);
}
}
else{
AfxMessageBox(GetResString(IDS_ALARM_DATUM));
m_chkDatum.SetCheck(BST_UNCHECKED);
}
}
void CDlgCoordTrans::OnMenuDatumtrans()
{
// TODO: Add your command handler code here
CDatumTranPara dlg;
dlg.DoModal();
//if modify the datum transformation paras.
if(_bwsmodify){
m_cmbSrcEllip.SetCurSel(_datumtran.srcellip);
m_cmbDestEllip.SetCurSel(_datumtran.destellip);
}
}
void CDlgCoordTrans::OnEllip()
{
CEllipSoid dlg;
dlg.DoModal();
}
void CDlgCoordTrans::OnMenuProject()
{
// TODO: Add your command handler code here
CDlgProject dlg;
if (dlg.DoModal()==IDOK) {
m_k0=dlg.m_k0; //set scale factor
if (m_SrcCoordType == 2) { //grid to other.must set central meridian and north or south semisphere.
m_lon0=toRadians(dlg.m_lon0);
if(fabs(m_lon0)<1e-5){
AfxMessageBox("You must set central meridian when source coordinates is grid coordinates.");
return;
}
if((m_NorS=dlg.m_NorS) ==0)
{
AfxMessageBox("You must point out the point is in Northern semisphere or Southern semisphere.");
return;
}
}
// else if (m_DestCoordType ==2) {//ecef to grid,lla to grid. needn't set cm, cm can be got from longitude.
//
// }
m_bProject=TRUE;
}
}
void CDlgCoordTrans::OnFileOpen()
{
// TODO: Add your command handler code here
CString path = theLang.GetDirectory(EXECUTABLEDIR,TRUE);
CFileDialog dlg(TRUE, _T(".wkp"),path+"shengsir.wkp", NULL,_T("workspace file|*.wkp| All(*.*)|*.*||"), NULL);
dlg.m_ofn.lpstrTitle="Save workspace";
// peph.m_ofn.Flags=OFN_READONLY;
if(dlg.DoModal()==IDOK)
{
FILE* fp=fopen(dlg.GetPathName(),"r");
char chtmp[100];
ReadLine(fp,chtmp);//Coordinates Translation workspace file
ReadLine(fp,chtmp);//src
sscanf(chtmp,"Source Coordinates:%lf,%lf,%lf",&m_src1,&m_src2,&m_src3);
ReadLine(fp,chtmp);//dest
sscanf(chtmp,"Destination Coordinates:%lf,%lf,%lf",&m_dest1,&m_dest2,&m_dest3);
fclose(fp);
CString tmp;
tmp.Format("%f",m_src1);m_edtsrc1.SetWindowText(tmp);
tmp.Format("%f",m_src2);m_edtsrc2.SetWindowText(tmp);
tmp.Format("%f",m_src3);m_edtsrc3.SetWindowText(tmp);
tmp.Format("%f",m_dest1);m_edtdest1.SetWindowText(tmp);
tmp.Format("%f",m_dest2);m_edtdest2.SetWindowText(tmp);
tmp.Format("%f",m_dest3);m_edtdest3.SetWindowText(tmp);
UpdateData(FALSE);
}
}
void CDlgCoordTrans::OnFileSave()
{
// TODO: Add your command handler code here
CString path = theLang.GetDirectory(EXECUTABLEDIR,TRUE);
CFileDialog dlg(FALSE, _T(".wkp"),path+"shengsir.wkp", NULL,_T("workspace file|*.wkp| All(*.*)|*.*||"), NULL);
dlg.m_ofn.lpstrTitle="Save workspace";
dlg.m_ofn.Flags |= OFN_OVERWRITEPROMPT;
// peph.m_ofn.Flags=OFN_READONLY;
if(dlg.DoModal()==IDOK)
{
FILE* fp=fopen(dlg.GetPathName(),"w");
CString tmp1,tmp2,tmp3;
//head
fprintf(fp,"Coordinates Translation workspace file:\n");
//src coordinates
m_edtsrc1.GetWindowText(tmp1);
m_edtsrc2.GetWindowText(tmp2);
m_edtsrc3.GetWindowText(tmp3);
fprintf(fp,"Source Coordinates:%s,%s,%s\n",tmp1,tmp2,tmp3);
//dest coordinates
m_edtdest1.GetWindowText(tmp1);
m_edtdest2.GetWindowText(tmp2);
m_edtdest3.GetWindowText(tmp3);
fprintf(fp,"Destination Coordinates:%s,%s,%s\n",tmp1,tmp2,tmp3);
//datum transformation parameters.
if(_datumtran.model != 0)
//in form: Datum Transformation=modelID,srcellip,destellip,factor,tx,ty,tz,wx,wy,wz
fprintf(fp,"Datum Transformation=%d,%d,%d,%f,%f,%f,%f,%f,%f,%f\n",
_datumtran.model,_datumtran.srcellip,_datumtran.destellip,_datumtran.factor,
_datumtran.tx,_datumtran.ty,_datumtran.tz,
_datumtran.wx,_datumtran.wy,_datumtran.wz);
//ellipsoid parameters.
//coordinates types.
//language id;
fprintf(fp,"LanguageID=%d\n",theLang.GetLanguageID());
fclose(fp);
_bwsmodify = FALSE;
}
}
void CDlgCoordTrans::OnDataExchange()
{
UpdateData(TRUE);
//evaluation
// RetrieveDataFromCtrl();
int n1,n2;
//exchange data type;
n1=m_SrcCoordType;
m_SrcCoordType=m_DestCoordType;
m_DestCoordType=n1;
SetCheckState();
if(m_SrcCoordType == 1 || m_DestCoordType==1){
n1 = m_cmbDestUnit.GetCurSel();
n2 = m_cmbSrcUnit.GetCurSel();
m_cmbSrcUnit.SetCurSel(n1);
m_cmbDestUnit.SetCurSel(n2);
}
CString str1,str2;
m_edtsrc1.GetWindowText(str1); m_edtdest1.GetWindowText(str2);
m_edtsrc1.SetWindowText(str2); m_edtdest1.SetWindowText(str1);
m_edtsrc2.GetWindowText(str1); m_edtdest2.GetWindowText(str2);
m_edtsrc2.SetWindowText(str2); m_edtdest2.SetWindowText(str1);
m_edtsrc3.GetWindowText(str1); m_edtdest3.GetWindowText(str2);
m_edtsrc3.SetWindowText(str2); m_edtdest3.SetWindowText(str1);
}
void CDlgCoordTrans::OnLangzhCN()
{
WORD wNewLang = (WORD)LANGID_ZH_CN;
if (theLang.GetLanguageID() != wNewLang){
if (!theLang.IsLanguageSupported(wNewLang, false)){//the language is not supported.
AfxMessageBox(GetResString(IDS_LANG_NOTSUPPORTED));
return;
}
else{
theLang.SetLanguageID(wNewLang);
theLang.SetLanguage();
}
Localize();
}
}
void CDlgCoordTrans::OnLangEn()
{
WORD wNewLang = (WORD)LANGID_EN_US;
if (theLang.GetLanguageID() != wNewLang){
if (!theLang.IsLanguageSupported(wNewLang, false)){//the language is not supported.
AfxMessageBox(GetResString(IDS_LANG_NOTSUPPORTED));
return;
}
else{
theLang.SetLanguageID(wNewLang);
theLang.SetLanguage();
}
Localize();
}
}
void CDlgCoordTrans::Localize(u1 flag){
SetWindowText(GetResString(IDS_DLG_COORDTRANS));
GetDlgItem(IDC_SRC_COORDTYPE)->SetWindowText(GetResString(IDS_SRC_COORDTYPE));
GetDlgItem(IDC_DEST_COORDTYPE)->SetWindowText(GetResString(IDS_DEST_COORDTYPE));
GetDlgItem(IDC_RAD_SRC_CAR)->SetWindowText(GetResString(IDS_ECEF));
GetDlgItem(IDC_RAD_DEST_CAR)->SetWindowText(GetResString(IDS_ECEF));
GetDlgItem(IDC_RAD_SRC_GEO)->SetWindowText(GetResString(IDS_GEO));
GetDlgItem(IDC_RAD_DEST_GEO)->SetWindowText(GetResString(IDS_GEO));
GetDlgItem(IDC_RAD_SRC_PLAN)->SetWindowText(GetResString(IDS_GRID));
GetDlgItem(IDC_RAD_DEST_PLAN)->SetWindowText(GetResString(IDS_GRID));
GetDlgItem(IDC_SRCZONE)->SetWindowText(GetResString(IDS_ZONE));
GetDlgItem(IDC_DESTZONE)->SetWindowText(GetResString(IDS_ZONE));
GetDlgItem(IDC_CHK_DATUM)->SetWindowText(GetResString(IDS_DATUMTRAN));
GetDlgItem(IDC_SRCELLIP)->SetWindowText(GetResString(IDS_ELLIPSOID));
GetDlgItem(IDC_DESTELLIP)->SetWindowText(GetResString(IDS_ELLIPSOID));
GetDlgItem(IDB_TRANSFORM)->SetWindowText(GetResString(IDS_TRANSFORM));
GetDlgItem(IDB_EXCHANGE)->SetWindowText(GetResString(IDS_EXCHANGE));
GetDlgItem(IDCANCEL)->SetWindowText(GetResString(IDS_CANCEL));
GetDlgItem(IDC_SRCCOORD)->SetWindowText(GetResString(IDS_SRCCOORD));
GetDlgItem(IDC_DESTCOORD)->SetWindowText(GetResString(IDS_DESTCOORD));
//menu
CMenu* pMenu,*pSubMenu;
pMenu = GetMenu();
//for menu and each submenu;
pMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pMenu->GetMenuItemID(0),GetResString(IDS_FILE));
pMenu->ModifyMenu(1,MF_STRING|MF_BYPOSITION,pMenu->GetMenuItemID(1),GetResString(IDS_SET));
pMenu->ModifyMenu(2,MF_STRING|MF_BYPOSITION,pMenu->GetMenuItemID(2),GetResString(IDS_LANGUAGE));
pMenu->ModifyMenu(3,MF_STRING|MF_BYPOSITION,pMenu->GetMenuItemID(3),GetResString(IDS_ABOUT));
//submenu file
pSubMenu = pMenu->GetSubMenu(0);
pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(0),GetResString(IDS_FILEOPEN));
pSubMenu->ModifyMenu(1,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(1),GetResString(IDS_FILESAVE));
//submenu set
pSubMenu = pMenu->GetSubMenu(1);
pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(0),GetResString(IDS_PROJECTION));
pSubMenu->ModifyMenu(1,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(1),GetResString(IDS_ELLIPSOID));
pSubMenu->ModifyMenu(2,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(2),GetResString(IDS_CALDATUMPARA));
//submenu language
pSubMenu = pMenu->GetSubMenu(2);
pSubMenu->ModifyMenu(0,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(0),GetResString(IDS_ZHCN));
pSubMenu->ModifyMenu(1,MF_STRING|MF_BYPOSITION,pSubMenu->GetMenuItemID(1),GetResString(IDS_EN));
//submenu about
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -