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