exportdatasetdlg.cpp
来自「用VC+SuperMap开发的校园GIS系统」· C++ 代码 · 共 405 行
CPP
405 行
// ExportDatasetDlg.cpp : implementation file
//
#include "stdafx.h"
#include "CampusGis.h"
#include "ExportDatasetDlg.h"
#include "sodatapump.h"
#include "sodataset.h"
#include "soexportparams.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CExportDatasetDlg dialog
CExportDatasetDlg::CExportDatasetDlg(CWnd* pParent /*=NULL*/)
: CDialog(CExportDatasetDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CExportDatasetDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CExportDatasetDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CExportDatasetDlg)
DDX_Control(pDX, IDC_BTNOPENFILE, m_btnOpenFile);
DDX_Control(pDX, IDC_TXTFILENAME, m_txtFileName);
DDX_Control(pDX, IDC_CMBUNIT, m_cmbUnit);
DDX_Control(pDX, IDC_CMBFILETYPE, m_cmbFileType);
DDX_Control(pDX, IDC_CMBDGNUNIT, m_cmbDgnUnit);
DDX_Control(pDX, IDC_CMBDATASOURCE, m_cmbDatasource);
DDX_Control(pDX, IDC_CMBDATASET, m_cmbDataset);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CExportDatasetDlg, CDialog)
//{{AFX_MSG_MAP(CExportDatasetDlg)
ON_CBN_SELCHANGE(IDC_CMBDATASOURCE, OnSelchangeCmbDatasource)
ON_CBN_SELCHANGE(IDC_CMBDATASET, OnSelchangeCmbDataset)
ON_CBN_SELCHANGE(IDC_CMBFILETYPE, OnSelchangeCmbFileType)
ON_BN_CLICKED(IDC_BTNOPENFILE, OnBtnOpenFile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CExportDatasetDlg message handlers
BOOL CExportDatasetDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//初始化
m_cmbDatasource.ResetContent();
long iCount;
CMainFrame *pFrame=(CMainFrame *)::AfxGetMainWnd();
m_pSuperWorkspace=&pFrame->m_SuperWorkspace;
iCount=m_pSuperWorkspace->GetDatasources().GetCount();
CsoDataSource objDs;
for(long i=1;i<=iCount;i++)
{
objDs=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(i));
m_cmbDatasource.AddString(objDs.GetAlias());
}
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(0);
m_cmbDgnUnit.AddString(_T("主单位"));
m_cmbDgnUnit.AddString(_T("从单位"));
m_cmbDgnUnit.AddString(_T("最小分辨率"));
m_cmbDgnUnit.SetCurSel(2);
objDs.ReleaseDispatch();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CExportDatasetDlg::OnSelchangeCmbDatasource()
{
//当选择的数据源发生改变时
CsoDataSource objDs;
CsoDataset objDt;
m_cmbDataset.ResetContent();
objDs=GetDataSource();
if(!objDs)
{
AfxMessageBox("打开数据源错误!");
return;
}
if(objDs.GetDatasets().GetCount() > 0)
{
m_cmbFileType.EnableWindow();
m_txtFileName.EnableWindow();
m_btnOpenFile.EnableWindow();
for(long i=1;i<=objDs.GetDatasets().GetCount();i++)
{
objDt=objDs.GetDatasets().GetItem(COleVariant(i));
m_cmbDataset.AddString(objDt.GetName());
}
}
else
{
m_cmbFileType.EnableWindow(FALSE);
m_txtFileName.EnableWindow(FALSE);
m_btnOpenFile.EnableWindow(FALSE);
}
objDt.ReleaseDispatch();
objDs.ReleaseDispatch();
}
void CExportDatasetDlg::OnSelchangeCmbDataset()
{
//选择数据集发生改变时
CsoDataset objDt;
CsoDataSource objDs;
objDs=GetDataSource();
if(!objDs)
{
AfxMessageBox("打开数据源错误!");
return;
}
objDt=GetDataset(objDs);
if(!objDt)
{
AfxMessageBox("打开数据集错误!");
m_cmbFileType.EnableWindow(FALSE);
m_btnOpenFile.EnableWindow(FALSE);
return;
}
if(objDt.GetVector())
{
//矢量文件
m_bIsVector=TRUE;
m_cmbFileType.ResetContent();
m_cmbFileType.AddString(_T("MapInfo 交换文件 (*.mif)"));
m_cmbFileType.AddString(_T("AutoCAD 交换文件(*.dxf)"));
m_cmbFileType.AddString(_T("MicroStation dgn 文件(*.dgn)"));
m_cmbFileType.AddString(_T("Arc/Info E00 文件 (*.e00)"));
m_cmbFileType.AddString(_T("ArcView Shape 文件 (*.shp)"));
m_cmbFileType.AddString(_T("Arc/Info Coverage 文件 (*.*)"));
m_cmbFileType.SetCurSel(0);
}
else
{
//栅格文件
m_bIsVector=FALSE;
m_cmbFileType.ResetContent();
m_cmbFileType.AddString(_T("Bmp 图像文件 (*.bmp)"));
m_cmbFileType.AddString(_T("JPG 图像文件 (*.jpg)"));
m_cmbFileType.AddString(_T("TIF 图像文件 (*.tif)"));
m_cmbFileType.AddString(_T("Erdas 影像文件(*.img)"));
m_cmbFileType.AddString(_T("ECW格式文件*.ecw"));
m_cmbFileType.SetCurSel(0);
}
objDt.ReleaseDispatch();
objDs.ReleaseDispatch();
m_cmbFileType.EnableWindow();
m_btnOpenFile.EnableWindow();
}
void CExportDatasetDlg::OnSelchangeCmbFileType()
{
//当选择文件类型时
int index;
CString strText=_T("MicroStation dgn 文件(*.dgn)");
index=m_cmbFileType.GetCurSel();
if(index < 0)
return;
CString strCurSelectText;
m_cmbFileType.GetLBText(index,strCurSelectText);
strCurSelectText.TrimLeft();
strCurSelectText.TrimRight();
if(strCurSelectText==strText)
m_cmbDgnUnit.EnableWindow();
else
m_cmbDgnUnit.EnableWindow(FALSE);
}
void CExportDatasetDlg::OnBtnOpenFile()
{
//打开文件
CString strFilter;
int index;
index=m_cmbFileType.GetCurSel();
if(index < 0)
{
AfxMessageBox("请选择文件类型!");
return;
}
if(m_bIsVector)
{
switch(index)
{
case 0:
strFilter=_T("MapInfo 交换文件 (*.mif)|*.mif|"); break;
case 1:
strFilter=_T("AutoCAD 交换文件(*.dxf)|*.dxf|"); break;
case 2:
strFilter=_T("MicroStation dgn 文件(*.dgn)|*.dgn|"); break;
case 3:
strFilter=_T("Arc/Info E00 文件 (*.e00)|*.e00|"); break;
case 4:
strFilter=_T("ArcView Shape 文件 (*.shp)|*.shp|"); break;
case 5:
strFilter=_T("Arc/Info Coverage 文件 (Arc.*)|*.*|"); break;
case 6:
strFilter=_T("国标矢量交换文件 (*.vct)|*.vct|"); break;
case 7:
strFilter=_T("idrisi矢量交换文件 (*.vce)|*.vec|"); break;
}
}
else
{
switch(index)
{
case 0:
strFilter=_T("Bmp 图像文件 (*.bmp)|*.bmp|所有文件 |*.*|"); break;
case 1:
strFilter=_T("JPG 图像文件 (*.jpg)|*.jpg|所有文件 |*.*|"); break;
case 2:
strFilter=_T("TIF 图像文件 (*.tif)|*.tif|所有文件 |*.*|"); break;
case 3:
strFilter=_T("Erdas 影像文件(*.img)|*.Img|所有文件 |*.*|"); break;
case 4:
strFilter=_T("ECW格式文件(*.ecw)|*.ecw|所有文件 |*.*|"); break;
case 5:
strFilter=_T("MrSid 图像文件 (*.sid)|*.sid|所有文件 |*.*|");break;
case 6:
strFilter=_T("TGA 图像文件 (*.tga)|*.tga|所有文件 |*.*|"); break;
case 7:
strFilter=_T("GRID 图像文件 (*.grd)|*.grd|所有文件 |*.*|"); break;
case 8:
strFilter=_T("WMF 图像文件 (*.wmf)|*.wmf|所有文件 |*.*|"); break;
case 9:
strFilter=_T("Idisi 栅格文件(*.idr)|*.Idr|所有文件 |*.*|"); break;
case 10:
strFilter=_T("GIF 图像文件 (*.gif)|*.gif|所有文件 |*.*|"); break;
case 11:
strFilter=_T("国标栅格文件(*.dem)|*.Dem|所有文件 |*.*|"); break;
case 12:
strFilter=_T("RAW 图像文件 (*.raw)|*.raw|所有文件 |*.*|"); break;
}
}
CFileDialog dlg(FALSE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT,
strFilter,NULL);
if(dlg.DoModal()==IDOK)
m_txtFileName.SetWindowText(dlg.GetPathName());
}
void CExportDatasetDlg::OnOK()
{
//转入
CString strFileName;
m_txtFileName.GetWindowText(strFileName);
if(strFileName.IsEmpty())
{
AfxMessageBox("文件名不能为空!");
return;
}
CsoDataSource objDs;
CsoDataset objDt;
BOOL bExportResult;
CsoDataPump objDp;
objDs=GetDataSource();
if(!objDs)
{
AfxMessageBox("打开数据源错误!");
return;
}
objDt=GetDataset(objDs);
if(!objDt)
{
AfxMessageBox("没有数据集或打开数据集错误!");
return;
}
objDp=objDs.GetDataPump();
if(!objDp)
{
AfxMessageBox("DtaPump数据内部错误!");
return;
}
objDp.GetDataExportParams().SetDatasetToBeExported(objDt.GetName());
objDp.GetDataExportParams().SetShowProgress(TRUE);
objDp.GetDataExportParams().SetFileName(strFileName);
switch(m_cmbUnit.GetCurSel())
{
case 0://千米
objDp.GetDataExportParams().SetDesUnits(10000000/*scuKilometer*/);break;
case 1://米
objDp.GetDataExportParams().SetDesUnits(10000/*scuMeter*/); break;
case 2://分米
objDp.GetDataExportParams().SetDesUnits(1000/*scuDecimeter*/); break;
case 3://厘米
objDp.GetDataExportParams().SetDesUnits(100/*scuCentimeter*/); break;
case 4://毫米
objDp.GetDataExportParams().SetDesUnits(10/*scuMillimeter*/); break;
case 5://里
objDp.GetDataExportParams().SetDesUnits(16090000/*scuMile*/); break;
case 6://码
objDp.GetDataExportParams().SetDesUnits(9114/*scuYard*/); break;
case 7://英尺
objDp.GetDataExportParams().SetDesUnits(3048/*scuFoot*/); break;
case 8://英寸
objDp.GetDataExportParams().SetDesUnits(245/*scuInch*/); break;
}
if(m_bIsVector)
{
//根据文件类型选择转出参数
switch(m_cmbFileType.GetCurSel())
{
case 0://MapInfo 交换文件 (*.mif)
objDp.GetDataExportParams().SetFileType(12/*scfMIF*/); break;
case 1://AutoCAD 交换文件(*.dxf)
objDp.GetDataExportParams().SetFileType(3/*scfDXF*/); break;
case 2://MicroStation dgn 文件(*.dgn)
objDp.GetDataExportParams().SetFileType(16/*scfDGN*/); break;
case 3://Arc/Info E00 文件 (*.e00)
objDp.GetDataExportParams().SetFileType(7/*scfE00*/); break;
case 4://ArcView Shape 文件 (*.shp)
objDp.GetDataExportParams().SetFileType(8/*scfSHP*/); break;
case 5://Arc/Info Coverage 文件 (*.*)
objDp.GetDataExportParams().SetFileType(6/*scfCoverage*/); break;
}
}
else
{
switch(m_cmbFileType.GetCurSel())
{
case 0://Bmp 图像文件 (*.bmp)
objDp.GetDataExportParams().SetFileType(104/*scfBMP*/); break;
case 1://JPG 图像文件 (*.jpg)
objDp.GetDataExportParams().SetFileType(105/*scfJPG*/); break;
case 2://TIF 图像文件 (*.tif)
objDp.GetDataExportParams().SetFileType(103/*scfTIF*/); break;
case 3://Erdas 影像文件(*.img)
objDp.GetDataExportParams().SetFileType(101/*scfIMG*/); break;
case 4://ECW格式文件*.ecw
objDp.GetDataExportParams().SetFileType(106/*scfECW*/); break;
}
}
bExportResult=objDp.Export();
if(bExportResult)
AfxMessageBox("转出成功!");
else
AfxMessageBox("转出失败!");
objDs.ReleaseDispatch();
objDt.ReleaseDispatch();
objDp.ReleaseDispatch();
CDialog::OnOK();
}
CsoDataSource CExportDatasetDlg::GetDataSource()
{
int index;
CsoDataSource objDs;
index=m_cmbDatasource.GetCurSel();
if(index < 0)
{
AfxMessageBox("请选择数据源!");
return 0;
}
CString strDatasourceName;
m_cmbDatasource.GetLBText(index,strDatasourceName);
objDs=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(strDatasourceName));
return objDs;
}
CsoDataset CExportDatasetDlg::GetDataset(CsoDataSource objDs)
{
int index;
CsoDataset objDt;
index=m_cmbDataset.GetCurSel();
if(index < 0)
{
AfxMessageBox("请选择数据集!");
return 0;
}
CString strDatasetName;
m_cmbDataset.GetLBText(index,strDatasetName);
objDt=objDs.GetDatasets().GetItem(COleVariant(strDatasetName));
return objDt;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?