import2vdatasetdlg.cpp

来自「用VC+SuperMap开发的校园GIS系统」· C++ 代码 · 共 412 行

CPP
412
字号
// Import2VDatasetDlg.cpp : implementation file
//

#include "stdafx.h"
#include "CampusGis.h"
#include "Import2VDatasetDlg.h"
#include "sodatasources.h"
#include "sodatasource.h"
#include "sodatasets.h"
#include "sodataset.h"
#include "sodatapump.h"
#include "soimportparams.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CImport2VDatasetDlg dialog


CImport2VDatasetDlg::CImport2VDatasetDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CImport2VDatasetDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CImport2VDatasetDlg)
	//}}AFX_DATA_INIT
}


void CImport2VDatasetDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CImport2VDatasetDlg)
	DDX_Control(pDX, IDC_CHKCOMPRESSED, m_chkCompressed);
	DDX_Control(pDX, IDC_STATICLAYERNAME, m_StaticLayerName);
	DDX_Control(pDX, IDC_CHKTEXT, m_chkText);
	DDX_Control(pDX, IDC_CHKREGION, m_chkRegion);
	DDX_Control(pDX, IDC_CHKLINE, m_chkLine);
	DDX_Control(pDX, IDC_CHKPOINT, m_chkPoint);
	DDX_Control(pDX, IDOK, m_Ok);
	DDX_Control(pDX, IDC_FRAMECADLAYER, m_FrameCADLayer);
	DDX_Control(pDX, IDC_FRAMEGISLAYER, m_FrameGISLayer);
	DDX_Control(pDX, IDC_CHKSTYLE, m_chkStyle);
	DDX_Control(pDX, IDC_EDITTEXT, m_editText);
	DDX_Control(pDX, IDC_EDITREGION, m_editRegion);
	DDX_Control(pDX, IDC_EDITLINE, m_editLine);
	DDX_Control(pDX, IDC_EDITPOINT, m_editPoint);
	DDX_Control(pDX, IDC_EDITCADLAYER, m_editCADLayer);
	DDX_Control(pDX, IDC_CMBUNIT, m_cmbUnit);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CImport2VDatasetDlg, CDialog)
	//{{AFX_MSG_MAP(CImport2VDatasetDlg)
	ON_BN_CLICKED(IDC_RADIOGIS, OnRadioGIS)
	ON_BN_CLICKED(IDC_RADIOCAD, OnRadioCAD)
	ON_BN_CLICKED(IDC_CHKPOINT, OnChkPoint)
	ON_BN_CLICKED(IDC_CHKLINE, OnChkLine)
	ON_BN_CLICKED(IDC_CHKREGION, OnChkRegion)
	ON_BN_CLICKED(IDC_CHKTEXT, OnChkText)
	ON_BN_CLICKED(IDC_BACK, OnBack)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CImport2VDatasetDlg message handlers

BOOL CImport2VDatasetDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//初始化
	m_cmbUnit.AddString(_T("度"));
	m_cmbUnit.AddString(_T("千米"));
	m_cmbUnit.AddString(_T("米"));
	m_cmbUnit.AddString(_T("分米"));
	m_cmbUnit.AddString(_T("厘米"));
	m_cmbUnit.AddString(_T("毫米"));
	m_cmbUnit.AddString(_T("里"));
	m_cmbUnit.AddString(_T("码"));
	m_cmbUnit.AddString(_T("英尺"));
	m_cmbUnit.AddString(_T("英寸"));
	m_cmbUnit.AddString(_T("数据集打开失败"));
	m_cmbUnit.SetCurSel(2);
	GetOptionButtonPointer(IDC_RADIOCAD)->SetCheck(1);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CImport2VDatasetDlg::OnRadioGIS() 
{
	// 选择GIS图层
	m_FrameCADLayer.EnableWindow(FALSE);
	m_StaticLayerName.EnableWindow(FALSE);
	m_chkStyle.EnableWindow(FALSE);
	m_editCADLayer.EnableWindow(FALSE);
	m_FrameGISLayer.EnableWindow(TRUE);
	m_chkPoint.EnableWindow(TRUE);
	m_chkLine.EnableWindow(TRUE);
	m_chkRegion.EnableWindow(TRUE);
	m_chkText.EnableWindow(TRUE);
}

void CImport2VDatasetDlg::OnRadioCAD() 
{
	//选择CAD图层
	m_FrameGISLayer.EnableWindow(FALSE);
	if(m_chkPoint.GetCheck()==1)
		m_chkPoint.SetCheck(0);
	m_chkPoint.EnableWindow(FALSE);
	if(m_chkLine.GetCheck()==1)
		m_chkLine.SetCheck(0);
	m_chkLine.EnableWindow(FALSE);
	if(m_chkRegion.GetCheck()==1)
		m_chkRegion.SetCheck(0);
	m_chkRegion.EnableWindow(FALSE);
	if(m_chkText.GetCheck()==1)
		m_chkText.SetCheck(0);
	m_chkText.EnableWindow(FALSE);
	if(m_editPoint.IsWindowEnabled())
		m_editPoint.EnableWindow(FALSE);
	if(m_editLine.IsWindowEnabled())
		m_editLine.EnableWindow(FALSE);
	if(m_editRegion.IsWindowEnabled())
		m_editRegion.EnableWindow(FALSE);
	if(m_editText.IsWindowEnabled())
		m_editText.EnableWindow(FALSE);
	m_FrameCADLayer.EnableWindow(TRUE);
	m_chkStyle.EnableWindow(TRUE);
	m_editCADLayer.EnableWindow(TRUE);
	m_StaticLayerName.EnableWindow(TRUE);
	m_editCADLayer.SetFocus();
}

void CImport2VDatasetDlg::OnChkPoint() 
{
	//选择点数据集
	OnClickButton(&m_chkPoint,&m_editPoint);
}

void CImport2VDatasetDlg::OnChkLine() 
{
	//选择线数据集	
	OnClickButton(&m_chkLine,&m_editLine);
}

void CImport2VDatasetDlg::OnChkRegion() 
{
	//选择面数据集
	OnClickButton(&m_chkRegion,&m_editRegion);	
}

void CImport2VDatasetDlg::OnChkText() 
{
	//选择文本数据集
	OnClickButton(&m_chkText,&m_editText);
}

void CImport2VDatasetDlg::OnClickButton(CButton *button,CEdit *edit)
{
	if(button->GetCheck()==1)
	{
		edit->EnableWindow(TRUE);
		edit->SetFocus();
	}
	else
		edit->EnableWindow(FALSE);
}

CMainFrame* CImport2VDatasetDlg::GetMainFramePointer()
{
	CMainFrame *pFrame=(CMainFrame *)::AfxGetMainWnd();
	return pFrame;	
}

void CImport2VDatasetDlg::OnBack() 
{
	//上一步
	CDialog::OnCancel();
	GetMainFramePointer()->ImportDataset();
}

void CImport2VDatasetDlg::OnOK() 
{
	//确定
	CsoDataSource objDs;
	CString strLayerName,strNameError;

	objDs=GetMainFramePointer()->m_SuperWorkspace.GetDatasources().GetItem(COleVariant(m_strDatasourceName));
	if(!objDs)
	{
		AfxMessageBox("数据源"+m_strDatasourceName+"内部错误,无法继续!");
		return;
	}
	if(GetOptionButtonPointer(IDC_RADIOGIS)->GetCheck()==1)
	{
		if(m_chkPoint.GetCheck()!=1 && m_chkLine.GetCheck()!=1 && m_chkRegion.GetCheck()!=1 && m_chkText.GetCheck()!=1)
		{
			AfxMessageBox("请选择要转为GIS的何种图层?",MB_ICONQUESTION);
			return;
		}
		m_chkPoint.GetWindowText(strLayerName);
		if(m_chkPoint.GetCheck()==1 && !objDs.IsAvailableDatasetName(strLayerName))
			strNameError=_T("点");
		m_chkLine.GetWindowText(strLayerName);
		if(m_chkLine.GetCheck()==1 && !objDs.IsAvailableDatasetName(strLayerName))
			strNameError=strNameError+_T("线");
		m_chkRegion.GetWindowText(strLayerName);
		if(m_chkRegion.GetCheck()==1 && !objDs.IsAvailableDatasetName(strLayerName))
			strNameError=strNameError+_T("面");
		m_chkText.GetWindowText(strLayerName);
		if(m_chkText.GetCheck()==1 && !objDs.IsAvailableDatasetName(strLayerName))
			strNameError=strNameError+_T("文本");
	}
	else
	{
		m_editCADLayer.GetWindowText(strLayerName);
		if(!objDs.IsAvailableDatasetName(strLayerName))
		{
			AfxMessageBox("CAD文件名非法!");
			objDs.ReleaseDispatch();
			return;
		}
	}
	if(strNameError.GetLength())
	{
		AfxMessageBox(strNameError+"图层名非法!");
		objDs.ReleaseDispatch();
		return;
	}

	CsoDataPump objDp;
	long lDatasetCount;
	lDatasetCount=objDs.GetDatasets().GetCount();
	objDp=objDs.GetDataPump();
	if(!objDp)
	{
		AfxMessageBox("DataPump内部错误,无法继续!");
		objDs.ReleaseDispatch();
		return;
	}

	
	objDp.GetDataImportParams().SetIgnoreAttribute(TRUE);
	objDp.GetDataImportParams().SetIgnoreCoordSys(TRUE);
	objDp.GetDataImportParams().SetShowProgress(m_bShowProgress);
	objDp.GetDataImportParams().SetFileName(m_strPathName);
	if(objDp.GetDataImportParams().GetImportAsCADDataset())
	{
		m_editCADLayer.GetWindowText(strLayerName);
		strLayerName.TrimLeft();
		strLayerName.TrimRight();
		if(strLayerName.IsEmpty())
		{
			AfxMessageBox("请给出CAD图层的名字!");
			return;
		}
		objDp.GetDataImportParams().SetDatasetCAD(strLayerName);
	}
	if(m_chkPoint.GetCheck()==1)
	{
		m_editPoint.GetWindowText(strLayerName);
		objDp.GetDataImportParams().SetDatasetPoint(strLayerName);
	}
	if(m_chkLine.GetCheck()==1)
	{
		m_editLine.GetWindowText(strLayerName);
		objDp.GetDataImportParams().SetDatasetLine(strLayerName);
	}
	if(m_chkRegion.GetCheck()==1)
	{
		m_editRegion.GetWindowText(strLayerName);
		objDp.GetDataImportParams().SetDatasetRegion(strLayerName);
	}
	if(m_chkText.GetCheck()==1)
	{
		m_editText.GetWindowText(strLayerName);
		objDp.GetDataImportParams().SetDatasetText(strLayerName);
	}
	//设置容限
	objDp.GetDataImportParams().SetToleranceGrain(0.0002);
	//单位的处理
	switch(m_cmbUnit.GetCurSel())
	{
		case 0://度
			objDp.GetDataImportParams().SetSrcDefaultUnits(0/*scuDegree*/);			 break;
		case 1://千米
			objDp.GetDataImportParams().SetSrcDefaultUnits(10000000/*scuKilometer*/);break;
		case 2://米
			objDp.GetDataImportParams().SetSrcDefaultUnits(10000/*scuMeter*/);		 break;
		case 3://分米
			objDp.GetDataImportParams().SetSrcDefaultUnits(1000/*scuDecimeter*/);	 break;
		case 4://厘米
			objDp.GetDataImportParams().SetSrcDefaultUnits(100/*scuCentimeter*/);	 break;
		case 5://毫米
			objDp.GetDataImportParams().SetSrcDefaultUnits(10/*scuMillimeter*/);	 break;
		case 6://里
			objDp.GetDataImportParams().SetSrcDefaultUnits(16090000/*scuMile*/);	 break;
		case 7://码
			objDp.GetDataImportParams().SetSrcDefaultUnits(9114/*scuYard*/);		 break;
		case 8://英尺
			objDp.GetDataImportParams().SetSrcDefaultUnits(3048/*scuFoot*/);		 break;
		case 9://英寸
			objDp.GetDataImportParams().SetSrcDefaultUnits(254/*scuInch*/);			 break;
	}
	switch(m_nFileTypeIndex)
	{
		case 0://MapInfo 交换文件 (*.mif)|*.mif
			objDp.GetDataImportParams().SetFileType(12/*scfMIF*/);    break;
		case 1://MapInfo 表文件 (*.tab)
			objDp.GetDataImportParams().SetFileType(11/*scfTAB*/);    break;
		case 2://MicroStation dgn 文件(*.dgn)|*.dgn
			ShowWindow(SW_HIDE);
			CreateImport3Dgn1DatasetDlg();
			return;
		case 3://Arc/Info E00 文件 (*.e00)|*.e00
			objDp.GetDataImportParams().SetFileType(7/*scfE00*/);     break;
		case 4://ArcView Shape 文件 (*.shp)|*.shp
			objDp.GetDataImportParams().SetFileType(8/*scfSHP*/);     break;
		case 5://Arc/Info Coverage 文件 (Arc.*)|arc*.*
			objDp.GetDataImportParams().SetFileType(6/*scfCoverage*/);break;
		case 6://国标矢量交换文件 (*.vct)|*.vct
			objDp.GetDataImportParams().SetFileType(22/*ScfVCT*/);    break;
		case 7://idrisi矢量交换文件 (*.vec)|*.vec
			objDp.GetDataImportParams().SetFileType(21/*scfVEC*/);    break;
		case 8://AutoCAD 交换文件(*.dxf)|*.dxf
			objDp.GetDataImportParams().SetFileType(3/*scfDXF*/);     break;
		case 9://Windows 元文件
			objDp.GetDataImportParams().SetFileType(36/*scfWMF*/);    break;
	}
	BOOL nResult=objDp.Import();
	if(nResult)
	{
		GetMainFramePointer()->GetManager()->Refresh();
		AfxMessageBox("文件转入成功!");
	}
	else
		AfxMessageBox("文件转入失败!");
	objDp.ReleaseDispatch();
	objDs.ReleaseDispatch();

	CDialog::OnOK();
}

CButton* CImport2VDatasetDlg::GetOptionButtonPointer(int ID)
{
	CButton *button=(CButton *)GetDlgItem(ID);
	return button;
}

void CImport2VDatasetDlg::Close()
{
	DestroyWindow();
}

void CImport2VDatasetDlg::CreateImport3Dgn1DatasetDlg()
{
	m_pImport3Dgn1DatasetDlg=new CImport3Dgn1DatasetDlg;
	m_pImport3Dgn1DatasetDlg->Create(IDD_IMPORTDGN1DLG,this);
	m_pImport3Dgn1DatasetDlg->ShowWindow(SW_SHOW);
	m_pImport3Dgn1DatasetDlg->m_strDatasourceName=m_strDatasourceName;
	m_pImport3Dgn1DatasetDlg->m_bShowProgress=m_bShowProgress;
	if(m_chkStyle.GetCheck()==1)
		m_pImport3Dgn1DatasetDlg->m_bIgnoreStyle=FALSE;
	else
		m_pImport3Dgn1DatasetDlg->m_bIgnoreStyle=TRUE;
	if(m_chkCompressed.GetCheck()==1)
		m_pImport3Dgn1DatasetDlg->m_bCompressed=TRUE;
	else
		m_pImport3Dgn1DatasetDlg->m_bCompressed=FALSE;
	if(GetOptionButtonPointer(IDC_RADIOCAD)->GetCheck()==1)
	{
		m_pImport3Dgn1DatasetDlg->m_bCADDataset=TRUE;
		m_editCADLayer.GetWindowText(m_pImport3Dgn1DatasetDlg->m_strCADLayerName);
	}
	else
		m_pImport3Dgn1DatasetDlg->m_bCADDataset=FALSE;
	if(m_chkPoint.GetCheck()==1)
	{
		m_pImport3Dgn1DatasetDlg->m_bPointDataset=TRUE;
		m_editPoint.GetWindowText(m_pImport3Dgn1DatasetDlg->m_strPointLayerName);
	}
	else
		m_pImport3Dgn1DatasetDlg->m_bPointDataset=FALSE;
	if(m_chkLine.GetCheck()==1)
	{
		m_pImport3Dgn1DatasetDlg->m_bLineDataset=TRUE;
		m_editLine.GetWindowText(m_pImport3Dgn1DatasetDlg->m_strLineLayerName);
	}
	else
		m_pImport3Dgn1DatasetDlg->m_bLineDataset=FALSE;
	if(m_chkRegion.GetCheck()==1)
	{
		m_pImport3Dgn1DatasetDlg->m_bRegionDataset=TRUE;
		m_editRegion.GetWindowText(m_pImport3Dgn1DatasetDlg->m_strRegionLayerName);
	}
	else
		m_pImport3Dgn1DatasetDlg->m_bRegionDataset=FALSE;
	if(m_chkText.GetCheck()==1)
	{
		m_pImport3Dgn1DatasetDlg->m_bTextDataset=TRUE;
		m_editText.GetWindowText(m_pImport3Dgn1DatasetDlg->m_strTextLayerName);
	}
	else
		m_pImport3Dgn1DatasetDlg->m_bTextDataset=FALSE;
	m_pImport3Dgn1DatasetDlg->m_strPathName=m_strPathName;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?