📄 mytopo.cpp
字号:
// MyTopo.cpp : implementation file
//
#include "stdafx.h"
#include "SuperMap Example.h"
#include "MyTopo.h"
#include "MainFrm.h"
#include "SuperMap.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyTopo dialog
CMyTopo::CMyTopo(CWnd* pParent /*=NULL*/)
: CDialog(CMyTopo::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyTopo)
m_bCiv = FALSE;
m_bCod = FALSE;
m_bCrl = FALSE;
m_bEdl = FALSE;
m_bil = FALSE;
m_bMpn = FALSE;
m_bMrn = FALSE;
m_bRegion = FALSE;
m_bTopo = FALSE;
m_bTopoEr = FALSE;
//}}AFX_DATA_INIT
}
void CMyTopo::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyTopo)
DDX_Control(pDX, IDC_CK_CIV, m_CKCiv);
DDX_Control(pDX, IDC_CK_COD, m_CKCod);
DDX_Control(pDX, IDC_CK_CRL, m_CKCrl);
DDX_Control(pDX, IDC_CK_EDL, m_CKEdl);
DDX_Control(pDX, IDC_EDIT_REGION, m_EdtRegion);
DDX_Control(pDX, IDC_EDIT_NET, m_EdtNet);
DDX_Control(pDX, IDC_CK_TOPOER, m_TopoEr);
DDX_Control(pDX, IDC_CK_TOPO, m_Topo);
DDX_Control(pDX, IDC_CK_REGION, m_TopoRegion);
DDX_Control(pDX, IDC_CK_MRN, m_CKMrn);
DDX_Control(pDX, IDC_CK_MPN, m_CKMpn);
DDX_Control(pDX, IDC_CK_IL, m_CKil);
DDX_Check(pDX, IDC_CK_CIV, m_bCiv);
DDX_Check(pDX, IDC_CK_COD, m_bCod);
DDX_Check(pDX, IDC_CK_CRL, m_bCrl);
DDX_Check(pDX, IDC_CK_EDL, m_bEdl);
DDX_Check(pDX, IDC_CK_IL, m_bil);
DDX_Check(pDX, IDC_CK_MPN, m_bMpn);
DDX_Check(pDX, IDC_CK_MRN, m_bMrn);
DDX_Check(pDX, IDC_CK_REGION, m_bRegion);
DDX_Check(pDX, IDC_CK_TOPO, m_bTopo);
DDX_Check(pDX, IDC_CK_TOPOER, m_bTopoEr);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyTopo, CDialog)
//{{AFX_MSG_MAP(CMyTopo)
ON_BN_CLICKED(IDC_ALLNOT, OnAllnot)
ON_BN_CLICKED(IDC_ALLYES, OnAllyes)
ON_BN_CLICKED(IDC_CK_TOPO, OnCkTopo)
ON_BN_CLICKED(IDC_CK_REGION, OnCkRegion)
ON_BN_CLICKED(IDC_CK_CIV, OnCkCiv)
ON_BN_CLICKED(IDC_CK_COD, OnCkCod)
ON_BN_CLICKED(IDC_CK_CRL, OnCkCrl)
ON_BN_CLICKED(IDC_CK_EDL, OnCkEdl)
ON_BN_CLICKED(IDC_CK_IL, OnCkIl)
ON_BN_CLICKED(IDC_CK_MPN, OnCkMpn)
ON_BN_CLICKED(IDC_CK_MRN, OnCkMrn)
ON_BN_CLICKED(IDC_CK_TOPOER, OnCkTopoer)
ON_BN_CLICKED(IDC_TOPO_OK, OnTopoOk)
ON_BN_CLICKED(IDC_TOPO_CANCEL, OnTopoCancel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyTopo message handlers
void CMyTopo::OnAllnot()
{
//全部取消
m_CKCiv.SetCheck(0);
m_bCiv=false;
m_CKCod.SetCheck(0);
m_bCod=false;
m_CKCrl.SetCheck(0);
m_bCrl=false;
m_CKEdl.SetCheck(0);
m_bEdl=false;
m_CKMrn.SetCheck(0);
m_bMrn=false;
m_CKMpn.SetCheck(0);
m_bMpn=false;
m_CKil.SetCheck(0);
m_bil=false;
}
void CMyTopo::OnAllyes()
{
//全部选中
m_CKCiv.SetCheck(1);
m_bCiv=true;
m_CKCod.SetCheck(1);
m_bCod=true;
m_CKCrl.SetCheck(1);
m_bCrl=true;
m_CKEdl.SetCheck(1);
m_bEdl=true;
m_CKMrn.SetCheck(1);
m_bMrn=true;
m_CKMpn.SetCheck(1);
m_bMpn=true;
m_CKil.SetCheck(1);
m_bil=true;
}
void CMyTopo::OnCkTopo()
{
//是否构建拓扑
if(m_Topo.GetCheck()==1)
{
m_EdtNet.EnableWindow(true);
m_bTopo=true;
}
else
{
m_EdtNet.EnableWindow(false);
m_bTopo=false;
}
}
void CMyTopo::OnCkRegion()
{
//是否拓扑构建面数据集
if(m_TopoRegion.GetCheck()==1)
{
m_EdtRegion.EnableWindow(true);
m_bRegion=true;
}
else
{
m_EdtRegion.EnableWindow(false);
m_bRegion=false;
}
}
void CMyTopo::OnCkCiv()
{
//是否去除冗余点
if(m_CKCiv.GetCheck()==1)
{
m_bCiv=true;
}
else
{
m_bCiv=false;
}
}
void CMyTopo::OnCkCod()
{
//是否去除短悬线
if(m_CKCod.GetCheck()==1)
{
m_bCod=true;
}
else
{
m_bCod=false;
}
}
void CMyTopo::OnCkCrl()
{
//是否去除重复线
if(m_CKCrl.GetCheck()==1)
{
m_bCrl=true;
}
else
{
m_bCrl=false;
}
}
void CMyTopo::OnCkEdl()
{
//是否延长长悬线
if(m_CKEdl.GetCheck()==1)
{
m_bEdl=true;
}
else
{
m_bEdl=false;
}
}
void CMyTopo::OnCkIl()
{
//是否弧端求交
if(m_CKil.GetCheck()==1)
{
m_bil=true;
}
else
{
m_bil=false;
}
}
void CMyTopo::OnCkMpn()
{
//是否合并假结点
if(m_CKMpn.GetCheck()==1)
{
m_bMpn=true;
}
else
{
m_bMpn=false;
}
}
void CMyTopo::OnCkMrn()
{
//是否合并邻近结点
if(m_CKMrn.GetCheck()==1)
{
m_bMrn=true;
}
else
{
m_bMrn=false;
}
}
void CMyTopo::OnCkTopoer()
{
//是否生成拓扑错误数据
if(m_TopoEr.GetCheck()==1)
{
m_bTopoEr=true;
}
else
{
m_bTopoEr=false;
}
}
void CMyTopo::OnTopoOk()
{
//执行拓扑处理过程
CString strTopoDs;
CString strTopoDt;
CString strNetName;
CString strRegionName;
bool bResult;
CsoDataSource objDs;
CsoDatasets objDts;
CsoDataset objDt;
COleVariant var;
CMainFrame *pFrame = (CMainFrame *)::AfxGetMainWnd();
m_EdtNet.GetWindowText(strNetName);
m_EdtRegion.GetWindowText(strRegionName);
strTopoDs=pFrame->m_MyDlgBar.strDs;
strTopoDt=pFrame->m_MyDlgBar.strDt;
var=strTopoDs;
objDs=pFrame->m_SuperWorkspace.GetDatasources().GetItem(var);
if(objDs==NULL)
{
MessageBox("获取数据源失败","信息提示",MB_OK);
return;
}
var=strTopoDt;
objDts=objDs.GetDatasets();
objDt=objDts.GetItem(var);
if(objDt==NULL)
{
MessageBox("获取数据集失败","信息提示",MB_OK);
return;
}
if(m_bRegion)
{
if(objDs.IsAvailableDatasetName(strRegionName)==false)
{
MessageBox("拓扑构面数据集名不合法","信息提示",MB_OK);
m_EdtRegion.SetFocus();
return;
}
}
if(m_bTopo)
{
if(objDs.IsAvailableDatasetName(strNetName)==false)
{
MessageBox("拓扑构建网络数据集名不合法","信息提示",MB_OK);
m_EdtNet.SetFocus();
return;
}
}
if(m_bTopoEr) pFrame->m_SuperTopo.CheckErrors(objDt);
if(m_bCiv) pFrame->m_SuperTopo.SetCleanIdenticalVertices(true);
if(m_bCod) pFrame->m_SuperTopo.SetCleanOvershootDangles(true);
if(m_bCrl) pFrame->m_SuperTopo.SetCleanRepeatedLines(true);
if(m_bEdl) pFrame->m_SuperTopo.SetExtendDangleLines(true);
if(m_bil) pFrame->m_SuperTopo.SetIntersectLines(true);
if(m_bMpn) pFrame->m_SuperTopo.SetMergePseudoNodes(true);
if(m_bMrn) pFrame->m_SuperTopo.SetMergeRedundantNodes(true);
pFrame->m_SuperTopo.Clean(objDt);
if(m_bTopo)
{
bResult=pFrame->m_SuperTopo.BuildNetwork(objDt,objDs,strNetName);
if(bResult==false)
{
MessageBox("构建网络数据集失败","信息提示",MB_OK);
}
}
if(m_bRegion)
{
bResult=pFrame->m_SuperTopo.BuildPolygons(objDt,objDs,strRegionName);
if(bResult==false)
{
MessageBox("构建多边形数据集失败","信息提示",MB_OK);
}
}
pFrame->m_MyDlgBar.m_SuperWksMng.Refresh();
OnOK();
}
void CMyTopo::OnTopoCancel()
{
//取消拓扑处理
OnOK();
}
BOOL CMyTopo::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_Topo.SetCheck(0);
m_TopoRegion.SetCheck(0);
m_TopoEr.SetCheck(0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -