Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

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;
}