#include "stdafx.h" #include "AecFloorViewDataRecord.h" Adesk::UInt32 AecFloorViewDataRecord::kCurrentVersionNumber = 3; ACRX_DXF_DEFINE_MEMBERS(AecFloorViewDataRecord, AcDbObject, AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, AcDbProxyEntity::kNoOperation | AcDbProxyEntity::kDisableProxyWarning, AEC_FVREC, "AecFloorViewDataRecord" "|Product Desc: shanghua earthworm app obj" "|Company: shanghua inc" "|WEB Address: www.shanghuasoft.com") AecFloorViewDataRecord::AecFloorViewDataRecord() { m_sProName = _T(""); m_nFocusOn = 1; } AecFloorViewDataRecord::~AecFloorViewDataRecord() { } void AecFloorViewDataRecord::SetProjectName(LPCTSTR pszName) { assertWriteEnabled(); m_sProName = pszName; } void AecFloorViewDataRecord::GetProjectName(CString &sName) const { assertReadEnabled(); sName = m_sProName; } void AecFloorViewDataRecord::SetBomEl(double dBomEl) { assertWriteEnabled(); m_dBomEl = dBomEl; } double AecFloorViewDataRecord::GetBomEl() const { assertReadEnabled(); return m_dBomEl; } bool AecFloorViewDataRecord::SetActive(int nIndex,Adesk::Int16 nActive) { assertWriteEnabled(); if (nIndex > -1 && nIndex < m_arDatas.length()) { FloorViewData &fv = m_arDatas.at(nIndex); fv.m_nActive = nActive; m_nFocusOn = 1; return true; } return false; } bool AecFloorViewDataRecord::SetActive(LPCTSTR pszName, Adesk::Int16 nActive) { assertWriteEnabled(); for (int i = 0; i < m_arDatas.length(); i++) { FloorViewData &rc = m_arDatas.at(i); if (_tcscmp(rc.m_szName, pszName) == 0) { rc.m_nActive = nActive; m_nFocusOn = 1; } else { rc.m_nActive = nActive ? 0 : 1; } } return true; } Adesk::Int16 AecFloorViewDataRecord::IsActive(int nIndex) const { assertReadEnabled(); if (nIndex > -1 && nIndex < m_arDatas.length()) { const FloorViewData &fv = m_arDatas.at(nIndex); return fv.m_nActive; } return 0; } Adesk::Int32 AecFloorViewDataRecord::GetActiveID(CString &sID) const { for (int i = 0; i < m_arDatas.length(); i++) { const FloorViewData &rc = m_arDatas.at(i); if (rc.m_nActive) { sID = rc.m_szID; return i; } } return -1; } void AecFloorViewDataRecord::SetBasePoint(AcGePoint3d &ptBase) { assertWriteEnabled(); m_ptBase = ptBase; } void AecFloorViewDataRecord::GetBasePoint(AcGePoint3d &ptBase) const { assertReadEnabled(); ptBase = m_ptBase; } void AecFloorViewDataRecord::SetRem(LPCTSTR pszRem) { assertWriteEnabled(); m_sRem = pszRem; } void AecFloorViewDataRecord::GetRem(CString &sRem) const { assertReadEnabled(); sRem = m_sRem; } bool AecFloorViewDataRecord::AddFloorViewRecord(FloorViewData &rc) { assertWriteEnabled(); int nRec = -1; if ( (nRec = FindFloorViewRecord(rc.m_szName) ) != -1) { //已经存在 acutPrintf(_T("\n楼层记录%s已经存在!"), rc.m_szName); return false; } m_arDatas.append(rc); return true; } bool AecFloorViewDataRecord::ModifyFloorViewRecord(const FloorViewData &rc) { assertWriteEnabled(); int nRec = -1; if ((nRec = FindFloorViewRecord(rc.m_szName)) != -1) { m_arDatas.setAt(nRec, rc); return true; } return false; } int AecFloorViewDataRecord::FindFloorViewRecord(LPCTSTR pszName) const { assertReadEnabled(); if (pszName == NULL) return -1; for (int i = 0;i < m_arDatas.length();i++) { const FloorViewData &rc = m_arDatas.at(i); if (_tcscmp(rc.m_szName, pszName) == 0) return i; } return -1; } bool AecFloorViewDataRecord::RemoveFloorViewRecord(LPCTSTR pszName) { assertWriteEnabled(); if (pszName == NULL) return false; for (int i = 0; i < m_arDatas.length(); i++) { FloorViewData &rc = m_arDatas.at(i); if (_tcscmp(rc.m_szName, pszName) == 0) { m_arDatas.removeAt(i); return true; } } return false; } bool AecFloorViewDataRecord::GetFloorViewRecord(LPCTSTR pszName, FloorViewData &vData) const { assertReadEnabled(); if (pszName == NULL) return false; for (int i = 0; i < m_arDatas.length(); i++) { const FloorViewData &rc = m_arDatas.at(i); if (_tcscmp(rc.m_szName, pszName) == 0) { memcpy(&vData, &rc, sizeof(FloorViewData)); return true; } } return false; } int AecFloorViewDataRecord::GetCount() const { assertReadEnabled(); return m_arDatas.length(); } bool AecFloorViewDataRecord::GetFloorViewRecord(int nIndex, FloorViewData &rc) const { assertReadEnabled(); if (nIndex > -1 && nIndex < m_arDatas.length()) { rc = m_arDatas.at(nIndex); return true; } return false; } void AecFloorViewDataRecord::SetFocusOn(bool bSetOn) { assertWriteEnabled(); m_nFocusOn = bSetOn ? 1 : 0; } Adesk::Int16 AecFloorViewDataRecord::IsFocusOn() const { assertReadEnabled(); return m_nFocusOn; } Acad::ErrorStatus AecFloorViewDataRecord::dwgInFields(AcDbDwgFiler *pFiler) { assertWriteEnabled(); //----- Read parent class information first. Acad::ErrorStatus es = AcDbObject::dwgInFields(pFiler); if (es != Acad::eOk) return (es); //----- Object version number needs to be read first Adesk::UInt32 version = 0; if ((es = pFiler->readUInt32(&version)) != Acad::eOk) return (es); if (version > AecFloorViewDataRecord::kCurrentVersionNumber) return (Acad::eMakeMeProxy); TCHAR* pszTmp = NULL; pFiler->readString(&pszTmp); if (pszTmp != NULL) { m_sProName = pszTmp; acutDelString(pszTmp); } pFiler->readPoint3d(&m_ptBase); pszTmp = NULL; pFiler->readString(&pszTmp); if (pszTmp != NULL) { m_sRem = pszTmp; acutDelString(pszTmp); } Adesk::Int32 nLen = 0; pFiler->readInt32(&nLen); FloorViewData data; memset(&data, 0, sizeof(FloorViewData)); m_arDatas.removeAll(); for (int i = 0;i < nLen;i++) { pFiler->readBytes(&data,sizeof(FloorViewData)); m_arDatas.append(data); } pFiler->readInt16(&m_nFocusOn); if (version > 2) pFiler->readDouble(&m_dBomEl); return pFiler->filerStatus(); } Acad::ErrorStatus AecFloorViewDataRecord::dwgOutFields(AcDbDwgFiler *pFiler) const { assertReadEnabled(); //----- Save parent class information first. Acad::ErrorStatus es = AcDbObject::dwgOutFields(pFiler); if (es != Acad::eOk) return (es); //----- Object version number needs to be saved first if ((es = pFiler->writeUInt32(AecFloorViewDataRecord::kCurrentVersionNumber)) != Acad::eOk) return (es); pFiler->writeString((LPCTSTR)m_sProName); pFiler->writePoint3d(m_ptBase); pFiler->writeString((LPCTSTR)m_sRem); Adesk::Int32 nLen = m_arDatas.length(); pFiler->writeInt32(nLen); for (int i = 0;i < m_arDatas.length();i++) { const FloorViewData &data = m_arDatas.at(i); pFiler->writeBytes(&data, sizeof(FloorViewData)); } pFiler->writeInt16(m_nFocusOn); pFiler->writeDouble(m_dBomEl); return pFiler->filerStatus(); } Acad::ErrorStatus AecFloorViewDataRecord::dxfInFields(AcDbDxfFiler *pFiler) { return Acad::eOk; } Acad::ErrorStatus AecFloorViewDataRecord::dxfOutFields(AcDbDxfFiler *pFiler) const { return Acad::eOk; }