⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytopo.cpp

📁 基于SUPERMAP、VC++的二次开发
💻 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 + -