📄 rsipdoc.cpp
字号:
// RSIPDoc.cpp : implementation of the CRSIPDoc class
//
#include "stdafx.h"
#include "RSIP.h"
#include "RSIPDoc.h"
#include "GeneralPage.h"
#include "OptionDlg.h"
#include "gen.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc
IMPLEMENT_DYNCREATE(CRSIPDoc, CDocument)
BEGIN_MESSAGE_MAP(CRSIPDoc, CDocument)
//{{AFX_MSG_MAP(CRSIPDoc)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
ON_COMMAND(ID_FILE_EXPORT, OnFileExport)
ON_COMMAND(ID_GK_SIX, OnGkSix)
ON_COMMAND(ID_GK_THREE, OnGkThree)
ON_COMMAND(IDC_GK_SIX_XY2BL, OnGkSixXy2bl)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc construction/destruction
CRSIPDoc::CRSIPDoc()
{
m_pRSImage = NULL;
m_bModifiedFlag = FALSE;
m_bHistogramModified = FALSE;
m_szdatFilePathName.Empty();
m_dZoomedRatio = 1.0;
}
CRSIPDoc::~CRSIPDoc()
{
if(m_pRSImage != NULL)
{
delete []m_pRSImage;
}
}
BOOL CRSIPDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc serialization
void CRSIPDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc diagnostics
#ifdef _DEBUG
void CRSIPDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CRSIPDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CRSIPDoc commands
void CRSIPDoc::OnFileOpen()
{
CFileDialog dlg(TRUE,"dat",NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"RS Images(*.dat,*.raw)|*.dat;*.raw||",NULL);
if(dlg.DoModal() == IDOK)
OnOpenDocument(dlg.GetPathName());
return;
}
void CRSIPDoc::OnFileSave()
{
// save as a new file if the data is modified.
if(m_bModifiedFlag == TRUE || m_szdatFilePathName == _T(""))
OnFileSaveAs();
else
// save directly if the data is not modified.
if(m_pRSImage->SaveImage(m_szdatFilePathName))
m_bModifiedFlag = FALSE;
}
void CRSIPDoc::OnFileSaveAs()
{
CFileDialog dlg(FALSE,"dat",NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"RS Images(*.dat)|*.dat||",NULL);
if(dlg.DoModal() == IDOK)
{
CString szTemp;
szTemp = dlg.GetPathName();
if(m_pRSImage->SaveImage(szTemp))
{
m_szdatFilePathName = szTemp;
m_bModifiedFlag = FALSE;
}
}
}
void CRSIPDoc::OnFileClose()
{
int nTemp = IDNO;
if(m_bModifiedFlag == TRUE)
{
nTemp = AfxMessageBox("数据已被修改,关闭前是否保存为一个新文件?",MB_YESNO);
if(nTemp == IDYES)
OnFileSaveAs();
}
CDocument::OnCloseDocument();
}
BOOL CRSIPDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
//if (!CDocument::OnOpenDocument(lpszPathName))
// return FALSE;
// Open the dat file
m_szdatFilePathName = lpszPathName;
CFile datFile;
if(0 == datFile.Open(m_szdatFilePathName,CFile::modeRead))
{
AfxMessageBox("打开数据文件失败!");
//datFile.Close();
return FALSE;
}
m_pRSImage = new CRSImage;
ASSERT(m_pRSImage != NULL);
CImgInfoSheet infoSheet("");
// Open the inf file
CFile infFile;
char szInfFileName[256];
char drive[3];
char dir[256];
char name[256];
char ext[5];
_splitpath(m_szdatFilePathName,drive,dir,name,ext);
strcpy(szInfFileName,drive);
strcat(szInfFileName,dir);
strcat(szInfFileName,name);
strcat(szInfFileName,".inf");
if(0 != infFile.Open(szInfFileName,CFile::modeRead) &&
m_pRSImage->LoadRsInfo(&infFile))
{
// 显示图象的信息
infoSheet.SetTitle("请确认图象信息是否正确");
infoSheet.m_GeneralInfo.m_dwImageSize = datFile.GetLength();
infoSheet.m_GeneralInfo.m_nImgWidth = m_pRSImage->m_nImgWidth;
infoSheet.m_GeneralInfo.m_nImgHeight = m_pRSImage->m_nImgHeight;
infoSheet.m_GeneralInfo.m_dHResolution = m_pRSImage->m_dXResolution;
infoSheet.m_GeneralInfo.m_dVResolution = m_pRSImage->m_dYResolution;
infoSheet.m_GeneralInfo.m_dwDate = m_pRSImage->m_dwDateOfImage;
infoSheet.m_GeneralInfo.m_szImgName = m_pRSImage->m_szImgName;
infoSheet.m_GeneralInfo.m_nImgType = m_pRSImage->m_nImgType - 1;
infoSheet.m_GeneralInfo.m_MinWaveLength = m_pRSImage->m_MinWaveLength;
infoSheet.m_GeneralInfo.m_MaxWaveLength = m_pRSImage->m_MaxWaveLength;
for(int i=0; i<8; i++)
{
infoSheet.m_LocationInfo.m_pGeoPosi[i] = m_pRSImage->m_pdGeoPosition[i];
}
CString * pszTemp;
CString * pszTmp;
for(i=0; i<infoSheet.m_LinkedImgPage.m_aLinkedImageArray.GetSize(); i++)
{
pszTemp = (CString *)infoSheet.m_LinkedImgPage.m_aLinkedImageArray.GetAt(i);
delete pszTemp;
infoSheet.m_LinkedImgPage.m_aLinkedImageArray.RemoveAt(i);
}
infoSheet.m_LinkedImgPage.m_nImageCount = m_pRSImage->m_nLinkedImage;
for(i=0; i<infoSheet.m_LinkedImgPage.m_nImageCount;i++)
{
pszTemp = (CString *)m_pRSImage->m_aLinkedImageNameArray.GetAt(i);
pszTmp = new CString();
*pszTmp = *pszTemp;
infoSheet.m_LinkedImgPage.m_aLinkedImageArray.Add(pszTmp);
}
infoSheet.m_LinkedImgPage.m_nImgHeight = m_pRSImage->m_nImgHeight;
infoSheet.m_LinkedImgPage.m_nImgWidth = m_pRSImage->m_nImgWidth;
infFile.Close();
}
else
{
infoSheet.SetTitle("请输入图象信息");
infoSheet.m_GeneralInfo.m_dwImageSize = datFile.GetLength();
}
if(infoSheet.DoModal() == IDOK)
{
m_pRSImage->m_nImgWidth = infoSheet.m_GeneralInfo.m_nImgWidth;
m_pRSImage->m_nImgHeight = infoSheet.m_GeneralInfo.m_nImgHeight;
m_pRSImage->m_dXResolution = infoSheet.m_GeneralInfo.m_dHResolution;
m_pRSImage->m_dYResolution = infoSheet.m_GeneralInfo.m_dVResolution;
m_pRSImage->m_dwDateOfImage = infoSheet.m_GeneralInfo.m_dwDate;
m_pRSImage->m_szImgName = infoSheet.m_GeneralInfo.m_szImgName;
m_pRSImage->m_nImgType = infoSheet.m_GeneralInfo.m_nImgType + 1;
m_pRSImage->m_MinWaveLength = infoSheet.m_GeneralInfo.m_MinWaveLength;
m_pRSImage->m_MaxWaveLength = infoSheet.m_GeneralInfo.m_MaxWaveLength;
for(int i=0; i<8; i++)
{
m_pRSImage->m_pdGeoPosition[i] = infoSheet.m_LocationInfo.m_pGeoPosi[i];
}
CString * pszTemp;
CString * pszTmp;
for(i=0; i<m_pRSImage->m_aLinkedImageNameArray.GetSize(); i++)
{
pszTemp = (CString *)m_pRSImage->m_aLinkedImageNameArray.GetAt(i);
delete pszTemp;
m_pRSImage->m_aLinkedImageNameArray.RemoveAt(i);
}
m_pRSImage->m_nLinkedImage = infoSheet.m_LinkedImgPage.m_nImageCount;
for(i=0; i<m_pRSImage->m_nLinkedImage; i++)
{
pszTemp = (CString *)infoSheet.m_LinkedImgPage.m_aLinkedImageArray.GetAt(i);
pszTmp = new CString();
*pszTmp = *pszTemp;
m_pRSImage->m_aLinkedImageNameArray.Add(pszTmp);
}
}
m_pRSImage->LoadRsImage(&datFile,m_pRSImage->m_nImgHeight,m_pRSImage->m_nImgWidth);
datFile.Close();
SetTitle(lpszPathName);
UpdateAllViews(NULL);
return TRUE;
}
void CRSIPDoc::OnFileExport()
{
CFileDialog dlg(FALSE,NULL,NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"Bitmap Files(*.bmp)|*.bmp||",NULL);
if(dlg.DoModal() == IDOK)
{
CFile file;
if(0 == file.Open(dlg.GetPathName(),CFile::modeCreate|CFile::modeWrite))
{
AfxMessageBox("创建BMP文件失败!");
return;
}
if(!m_pRSImage->SaveBmp(&file))
{
file.Close();
return;
}
file.Close();
}
}
void CRSIPDoc::OnGkSix()
{
COptionDlg optionDlg;
optionDlg.m_nWidth = 6;
if (IDOK == optionDlg.DoModal())
{
OpenFileBL2XY(optionDlg.m_nWidth,optionDlg.m_nZone);
}
}
void CRSIPDoc::OnGkThree()
{
COptionDlg optionDlg;
optionDlg.m_nWidth = 3;
if(optionDlg.DoModal() == IDOK)
{
OpenFileBL2XY(optionDlg.m_nWidth,optionDlg.m_nZone);
}
}
void CRSIPDoc::OnGkSixXy2bl()
{
COptionDlg optionDlg;
optionDlg.m_nWidth = 6;
if( optionDlg.DoModal() == IDOK)
{
OpenFileXY2BL(optionDlg.m_nWidth,optionDlg.m_nZone);
}
}
void CRSIPDoc::OpenFileBL2XY(UINT width, UINT zone)
{
// open FileDialog to read Arc/Info Gen file
const char szExt[] = ".gen";
const char szInitName[] = "gen1.gen";
const char szFilter[] = "Gen Files(*.gen)|*.gen|All Files(*.*)|*.*||";
CString szFileName;
CFileDialog fileDialog(FALSE, szExt,szInitName,OFN_EXPLORER|
OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,szFilter,NULL);
if (IDOK == fileDialog.DoModal())
{
szFileName = fileDialog.GetPathName();
// Input a filename to
const char szExt2[] = ".54";
CString cszInitName2= fileDialog.GetFileTitle() + ".54";
const char szFilter2[] = "54 Files(*.54)|*.54|All Files(*.*)|*.*||";
CString szFileName2;
CFileDialog fileDialog2(FALSE, szExt2,cszInitName2,OFN_OVERWRITEPROMPT,szFilter2,NULL);
if (IDOK == fileDialog2.DoModal())
{
szFileName2 = fileDialog2.GetPathName();
CGenFile genFile(width, zone);
if (width == 3)
genFile.Transform(szFileName, szFileName2);
else
genFile.Trans6bl2xy(szFileName, szFileName2);
}
}
}
void CRSIPDoc::OpenFileXY2BL(UINT width, UINT zone)
{
// open FileDialog to read Arc/Info Gen file
const char szExt[] = ".54";
const char szInitName[] = "541.54";
const char szFilter[] = "54 Files(*.54)|*.54|All Files(*.*)|*.*||";
CString szFileName;
CFileDialog fileDialog(FALSE, szExt,szInitName,OFN_EXPLORER|
OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY,szFilter,NULL);
if (IDOK == fileDialog.DoModal())
{
szFileName = fileDialog.GetPathName();
// Input a filename to
const char szExt2[] = ".gen";
CString cszInitName2= fileDialog.GetFileTitle() + ".gen";
const char szFilter2[] = "gen Files(*.gen)|*.gen|All Files(*.*)|*.*||";
CString szFileName2;
CFileDialog fileDialog2(FALSE, szExt2,cszInitName2,OFN_OVERWRITEPROMPT,szFilter2,NULL);
if (IDOK == fileDialog2.DoModal())
{
szFileName2 = fileDialog2.GetPathName();
CGenFile genFile(width, zone);
genFile.Trans6xy2bl(szFileName, szFileName2);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -