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