#include "stdafx.h" #include "StdArx.h" #include "dbproxy.h" #include "geassign.h" #include "acgi.h" #include "TDbHvacEquipment.h" #define VERSION_TDBHVACEQUIPMENT 1 //{{AFX_ARX_MACRO ACRX_DXF_DEFINE_MEMBERS( TDbHvacEquipment, TDbEquipmentBase, AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, AcDbProxyEntity::kAllAllowedBits, ATS_DBHEQUIPMENT, "图形无法解析, 请下载上华软件|网址: www.shanghuasoft.com"); //}}AFX_ARX_MACRO TDbHvacEquipment::TDbHvacEquipment() { //{{AFX_ARX_DATA_INIT(TDbHvacEquipment) //}}AFX_ARX_DATA_INIT m_bIsDragging = FALSE; } TDbHvacEquipment::~TDbHvacEquipment() { } Acad::ErrorStatus TDbHvacEquipment::dxfOutFields(AcDbDxfFiler* pFiler) const { assertReadEnabled(); Acad::ErrorStatus es; if ((es = TDbEquipmentBase::dxfOutFields(pFiler)) != Acad::eOk) return es; // Write subclass marker. pFiler->writeItem(AcDb::kDxfSubclass, _T("TDbHvacEquipment")); // Write version number. pFiler->writeItem(AcDb::kDxfInt16, (Adesk::UInt16) VERSION_TDBHVACEQUIPMENT); // add begin if( g_nProductId == 15 ) { TDb::ObjectKind eKind; CString sEquipName, sEquipType; TDbXDataMap *pMap = GetSpecialtyDataReadOnly(); pMap->GetAt(KEY_RUNTIME, (int&)eKind); pMap->GetAt(HALT_SEquipType, sEquipType); pMap->GetAt(HALT_SEquipName, sEquipName); pFiler->writeItem(AcDb::kDxfXXInt16, eKind); // 设备类型 pFiler->writeItem(AcDb::kDxfXTextString, sEquipType); // 设备名称 pFiler->writeItem(AcDb::kDxfXTextString+1, sEquipName); // 设备型号 if( TDb::eVRVEqu == eKind ) {// 多联机室外机/室外机 int nType = 0; CString sMaker; pMap->GetAt(HVRV_SFactory, sMaker); pMap->GetAt(HVRV_IType, nType); CString sKind = nType==0?_T("室内机"):_T("室外机"); pFiler->writeItem(AcDb::kDxfXTextString+2, sMaker); // 厂家(VRV) pFiler->writeItem(AcDb::kDxfXTextString+3, sKind); // 样式(室内/外机) } } // add end by cq 2015-06-03 增加dxf数据强化"过滤选择"功能 return es; } Acad::ErrorStatus TDbHvacEquipment::dxfInFields(AcDbDxfFiler* pFiler) { assertWriteEnabled(); struct resbuf rb; if ((TDbEquipmentBase::dxfInFields(pFiler) != Acad::eOk) || !pFiler->atSubclassData(_T("TDbHvacEquipment"))) return pFiler->filerStatus(); // Read version number. pFiler->readItem(&rb); if (rb.restype != AcDb::kDxfInt16) { pFiler->pushBackItem(); pFiler->setError(Acad::eInvalidDxfCode, _T("Error: expected object version group code %d"), AcDb::kDxfInt16); return pFiler->filerStatus(); } else { Adesk::UInt16 version = rb.resval.rint; if (version > VERSION_TDBHVACEQUIPMENT) return Acad::eMakeMeProxy; } return pFiler->filerStatus(); } Acad::ErrorStatus TDbHvacEquipment::dwgOutFields(AcDbDwgFiler* pFiler) const { assertReadEnabled(); Acad::ErrorStatus es; // Call dwgOutFields from TDbInterfacesObj if ((es = TDbEquipmentBase::dwgOutFields(pFiler)) != Acad::eOk) { return es; } // Write version number. pFiler->writeItem((Adesk::UInt16) VERSION_TDBHVACEQUIPMENT); return pFiler->filerStatus(); } Acad::ErrorStatus TDbHvacEquipment::dwgInFields(AcDbDwgFiler* pFiler) { assertWriteEnabled(); Acad::ErrorStatus es; // Call dwgInFields from TDbInterfacesObj if ((es = TDbEquipmentBase::dwgInFields(pFiler)) != Acad::eOk) { return es; } // Read version number. Adesk::UInt16 version; pFiler->readItem(&version); if (version > VERSION_TDBHVACEQUIPMENT) return Acad::eMakeMeProxy; switch (version) { case (1): break; default: break; } return pFiler->filerStatus(); } Acad::ErrorStatus TDbHvacEquipment::subGetTransformedCopy( const AcGeMatrix3d& xform, AcDbEntity*& pEnt) const { assertReadEnabled(); pEnt = new TDbHvacEquipment; (TDbHvacEquipment*)pEnt->copyFrom(this); pEnt->transformBy(xform); return Acad::eOk; } Acad::ErrorStatus TDbHvacEquipment::ExplodeOrDraw3d( XExplodeDraw &mode ) const { TDbXDataMap* pMap = GetSpecialtyDataReadOnly(); ASSERT(NULL != pMap); HvacModelType eType = eModel; pMap->GetAt(HVAC_ModeType, (int&)eType); if (eSystem == eType) return Acad::eNotImplementedYet; return TDbEquipmentBase::ExplodeOrDraw3d(mode); } BOOL TDbHvacEquipment::IsDragging() const { return m_bIsDragging; } Adesk::Boolean TDbHvacEquipment::subWorldDraw(AcGiWorldDraw *pWd) { m_bIsDragging = pWd->isDragging(); Adesk::Boolean bRet = TDbEquipmentBase::subWorldDraw(pWd); m_bIsDragging = FALSE; return bRet; } void TDbHvacEquipment::subViewportDraw(AcGiViewportDraw* pMode) { m_bIsDragging = pMode->isDragging(); TDbEquipmentBase::subViewportDraw(pMode); m_bIsDragging = FALSE; } // 建立接口关联关系 add by hh 2013-9-12 更新接口记录 BOOL TDbHvacEquipment::SetInterfaceRelation(const AcGePoint3d& ptConnect,const AcDbObjectId& idConnect) { if(!TDbEquipmentBase::SetInterfaceRelation(ptConnect, idConnect)) return FALSE; // 更新接口记录 BOOL bSuccess = FALSE; AcDbObjectId idOwner = objectId(); if (idOwner.isValid()) { TDbInterfaceRecord* pIntfRec = TAuxTools::GetIntfPtrFromDB(); if(NULL != pIntfRec) { if(Acad::eOk == pIntfRec->upgradeOpen()) { bSuccess = pIntfRec->Update(idOwner,ptConnect,idConnect); pIntfRec->downgradeOpen(); } pIntfRec->close(); return bSuccess; } AcDbDictionary* pNamedDict = NULL; if (Acad::eOk == acdbCurDwg()->getNamedObjectsDictionary(pNamedDict,AcDb::kForRead)) { AcDbDictionary* pDict = NULL; if (Acad::eOk == pNamedDict->getAt(KEY_IRECORD,(AcDbObject*&)pDict,AcDb::kForRead)) { pNamedDict->close(); TDbInterfaceRecord* pInterfaceRec = NULL; if (Acad::eOk == pDict->getAt(KEY_IRECORD,(AcDbObject*&)pInterfaceRec,AcDb::kForWrite)) { pDict->close(); bSuccess = pIntfRec->Update(idOwner,ptConnect,idConnect); pInterfaceRec->close(); } else { pDict->close(); } } else { pNamedDict->close(); } } } return TRUE; }