386 lines
8.3 KiB
C++
386 lines
8.3 KiB
C++
// Res3DDatFile.cpp: implementation of the CRes3DDatFile class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "geomative.h"
|
|
#include "Res3DDatFile.h"
|
|
|
|
#include "Res3DDatFileRecord.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CRes3DDatFile::CRes3DDatFile()
|
|
{
|
|
m_szTitle.Empty();
|
|
m_iRowCount = (int)VAL_ZERO;
|
|
m_iColCount = (int)VAL_ZERO;
|
|
m_fRowSpacing = (float)VAL_ZERO;
|
|
m_fColSpacing = (float)VAL_ZERO;
|
|
m_iMedium = (int)VAL_ZERO;
|
|
m_iPtCount = (int)VAL_ZERO;
|
|
|
|
this->m_paRecordArray.RemoveAll();
|
|
}
|
|
|
|
CRes3DDatFile::~CRes3DDatFile()
|
|
{
|
|
ClearAllRecord();
|
|
}
|
|
|
|
BOOL CRes3DDatFile::SetTitle(CString szTitle)
|
|
{
|
|
if (szTitle.IsEmpty() == TRUE)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
this->m_szTitle = szTitle;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::SetGriding(int iRowCount, int iColCount)
|
|
{
|
|
if ((iRowCount <= 0) || (iColCount <= 0))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
this->m_iRowCount = iRowCount;
|
|
this->m_iColCount = iColCount;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::SetSpacing(float fRowSpacing, float fColSpacing)
|
|
{
|
|
if ((fRowSpacing <= 0) || (fColSpacing <= 0))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
this->m_fRowSpacing = fRowSpacing;
|
|
this->m_fColSpacing = fColSpacing;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::SetMedium(int iMedium)
|
|
{
|
|
m_iMedium = (int)VAL_ZERO;
|
|
switch (iMedium)
|
|
{
|
|
case 1:
|
|
this->m_iMedium = 1;
|
|
break;
|
|
case 2:
|
|
this->m_iMedium = 4;
|
|
break;
|
|
case 3:
|
|
this->m_iMedium = 5;
|
|
break;
|
|
case 11:
|
|
this->m_iMedium = 7;
|
|
break;
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::AddRecord(int iCableNum, int iA, int iB, int iM, int iN, float fR0)
|
|
{
|
|
CRes3DDatFileRecord* pRes3DDatFileRecord = NULL;
|
|
|
|
if ((iCableNum < 1) || ((iA < 1) && (iB < 1) && (iM < 1) && (iN < 1)) || (fR0 < 0) || m_fRowSpacing <= 0.0 || m_fColSpacing <= 0.0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
pRes3DDatFileRecord = new CRes3DDatFileRecord;
|
|
if (pRes3DDatFileRecord != NULL)
|
|
{
|
|
if (iA > (int)VAL_ZERO)
|
|
{
|
|
pRes3DDatFileRecord->m_fAX = (float)((iCableNum - 1) * m_fRowSpacing);
|
|
pRes3DDatFileRecord->m_fAY = (float)((iA - 1) * m_fColSpacing);
|
|
}
|
|
else
|
|
{
|
|
pRes3DDatFileRecord->m_fAX = (float)VAL_MINUS_ONE;
|
|
pRes3DDatFileRecord->m_fAY = (float)VAL_MINUS_ONE;
|
|
}
|
|
|
|
if (iB > (int)VAL_ZERO)
|
|
{
|
|
pRes3DDatFileRecord->m_fBX = (float)((iCableNum - 1) * m_fRowSpacing);
|
|
pRes3DDatFileRecord->m_fBY = (float)((iB - 1) * m_fColSpacing);
|
|
}
|
|
else
|
|
{
|
|
pRes3DDatFileRecord->m_fBX = (float)VAL_MINUS_ONE;
|
|
pRes3DDatFileRecord->m_fBY = (float)VAL_MINUS_ONE;
|
|
}
|
|
|
|
if (iM > (int)VAL_ZERO)
|
|
{
|
|
pRes3DDatFileRecord->m_fMX = (float)((iCableNum - 1) * m_fRowSpacing);
|
|
pRes3DDatFileRecord->m_fMY = (float)((iM - 1) * m_fColSpacing);
|
|
}
|
|
else
|
|
{
|
|
pRes3DDatFileRecord->m_fMX = (float)VAL_MINUS_ONE;
|
|
pRes3DDatFileRecord->m_fMY = (float)VAL_MINUS_ONE;
|
|
}
|
|
|
|
if (iN > (int)VAL_ZERO)
|
|
{
|
|
pRes3DDatFileRecord->m_fNX = (float)((iCableNum - 1) * m_fRowSpacing);
|
|
pRes3DDatFileRecord->m_fNY = (float)((iN - 1) * m_fColSpacing);
|
|
}
|
|
else
|
|
{
|
|
pRes3DDatFileRecord->m_fNX = (float)VAL_MINUS_ONE;
|
|
pRes3DDatFileRecord->m_fNY = (float)VAL_MINUS_ONE;
|
|
}
|
|
|
|
pRes3DDatFileRecord->m_fR0 = fR0;
|
|
|
|
this->m_paRecordArray.Add((void*)pRes3DDatFileRecord);
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::Generate(CString szFile)
|
|
{
|
|
HANDLE hFile = NULL;
|
|
|
|
if (szFile.IsEmpty() == TRUE)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
DeleteFile(szFile);
|
|
|
|
hFile = CreateFile(szFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
|
|
this->WriteHead(hFile);
|
|
this->WriteRecord(hFile);
|
|
this->WriteTail(hFile);
|
|
|
|
CloseHandle(hFile);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::WriteHead(HANDLE hFile)
|
|
{
|
|
DWORD dwWrites = (DWORD)VAL_ZERO;
|
|
CString szContent = _T("");
|
|
|
|
if (NULL == hFile)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
szContent.Empty();
|
|
szContent.Format(_T("%s\r\n"), this->m_szTitle);
|
|
if (FALSE == WriteFile(hFile, szContent, szContent.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
szContent.Empty();
|
|
szContent.Format(_T("%d\r\n"), this->m_iColCount);
|
|
if (FALSE == WriteFile(hFile, szContent, szContent.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
szContent.Empty();
|
|
szContent.Format(_T("%d\r\n"), this->m_iRowCount);
|
|
if (FALSE == WriteFile(hFile, szContent, szContent.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
szContent.Empty();
|
|
szContent.Format(_T("%7.2f\r\n"), this->m_fColSpacing);
|
|
if (FALSE == WriteFile(hFile, szContent, szContent.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
szContent.Empty();
|
|
szContent.Format(_T("%7.2f\r\n"), this->m_fRowSpacing);
|
|
if (FALSE == WriteFile(hFile, szContent, szContent.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
szContent.Empty();
|
|
szContent.Format(_T("%d\r\n"), this->m_iMedium);
|
|
if (FALSE == WriteFile(hFile, szContent, szContent.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
this->m_iPtCount = this->m_paRecordArray.GetSize();
|
|
szContent.Empty();
|
|
szContent.Format(_T("%d\r\n"), this->m_iPtCount);
|
|
if (FALSE == WriteFile(hFile, szContent, szContent.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::WriteRecord(HANDLE hFile)
|
|
{
|
|
CString szCoordinate = _T("");
|
|
CString szR0 = _T("");
|
|
CString szRecord = _T("");
|
|
|
|
DWORD dwWrites = (DWORD)VAL_ZERO;
|
|
|
|
CRes3DDatFileRecord* pRes3DDatFileRecord = NULL;
|
|
int iIndex = (int)VAL_ZERO;
|
|
|
|
if (NULL == hFile)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
iIndex = (int)VAL_ZERO;
|
|
while (iIndex <= this->m_paRecordArray.GetUpperBound())
|
|
{
|
|
szRecord.Empty();
|
|
pRes3DDatFileRecord = (CRes3DDatFileRecord*)this->m_paRecordArray.GetAt(iIndex);
|
|
|
|
if ((pRes3DDatFileRecord->m_fAX != (float)VAL_MINUS_ONE) && (pRes3DDatFileRecord->m_fAY != (float)VAL_MINUS_ONE))
|
|
{
|
|
szCoordinate.Empty();
|
|
szCoordinate.Format(_T("%9.3f%9.3f"), pRes3DDatFileRecord->m_fAY, pRes3DDatFileRecord->m_fAX);
|
|
szRecord = szRecord + szCoordinate;
|
|
}
|
|
|
|
if ((pRes3DDatFileRecord->m_fBX != (float)VAL_MINUS_ONE) && (pRes3DDatFileRecord->m_fBY != (float)VAL_MINUS_ONE))
|
|
{
|
|
szCoordinate.Empty();
|
|
szCoordinate.Format(_T("%9.3f%9.3f"), pRes3DDatFileRecord->m_fBY, pRes3DDatFileRecord->m_fBX);
|
|
szRecord = szRecord + szCoordinate;
|
|
}
|
|
|
|
if ((pRes3DDatFileRecord->m_fMX != (float)VAL_MINUS_ONE) && (pRes3DDatFileRecord->m_fMY != (float)VAL_MINUS_ONE))
|
|
{
|
|
szCoordinate.Empty();
|
|
szCoordinate.Format(_T("%9.3f%9.3f"), pRes3DDatFileRecord->m_fMY, pRes3DDatFileRecord->m_fMX);
|
|
szRecord = szRecord + szCoordinate;
|
|
}
|
|
|
|
if ((pRes3DDatFileRecord->m_fNX != (float)VAL_MINUS_ONE) && (pRes3DDatFileRecord->m_fNY != (float)VAL_MINUS_ONE))
|
|
{
|
|
szCoordinate.Empty();
|
|
szCoordinate.Format(_T("%9.3f%9.3f"), pRes3DDatFileRecord->m_fNY, pRes3DDatFileRecord->m_fNX);
|
|
szRecord = szRecord + szCoordinate;
|
|
}
|
|
|
|
szR0.Empty();
|
|
szR0.Format(_T("%9.4f"), pRes3DDatFileRecord->m_fR0);
|
|
|
|
szRecord = szRecord + szR0 + _T("\r\n");
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
if (FALSE == WriteFile(hFile, szRecord, szRecord.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
iIndex ++;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::WriteTail(HANDLE hFile)
|
|
{
|
|
int iZeroNum = (int)VAL_ZERO;
|
|
|
|
DWORD dwWrites = (DWORD)VAL_ZERO;
|
|
CString szContent = _T("");
|
|
|
|
if (NULL == hFile)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
while (iZeroNum < 5)
|
|
{
|
|
dwWrites = (DWORD)VAL_ZERO;
|
|
szContent.Empty();
|
|
szContent.Format(_T("%d\r\n"), (int)VAL_ZERO);
|
|
if (FALSE == WriteFile(hFile, szContent, szContent.GetLength(), &dwWrites, NULL))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
iZeroNum ++;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::ClearAllRecord()
|
|
{
|
|
int iIndex = (int)VAL_ZERO;
|
|
|
|
if (this->m_paRecordArray.GetSize() == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
iIndex = (int)VAL_ZERO;
|
|
while (iIndex < m_paRecordArray.GetSize())
|
|
{
|
|
DelRecord(iIndex);
|
|
iIndex ++;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CRes3DDatFile::DelRecord(int iIndex)
|
|
{
|
|
CRes3DDatFileRecord* pRes3DDatFileRecord = NULL;
|
|
pRes3DDatFileRecord = (CRes3DDatFileRecord*)this->m_paRecordArray.GetAt(iIndex);
|
|
|
|
if ((pRes3DDatFileRecord == NULL) || (iIndex < 0))
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
delete pRes3DDatFileRecord;
|
|
this->m_paRecordArray.RemoveAt(iIndex);
|
|
|
|
return TRUE;
|
|
} |