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 + -
显示快捷键?