#include "stdafx.h" #include "AecDbSymbWithText.h" #include "DimOptionData.h" ///////////////////////////////////////////////////////////// // 符号标注类 ///////////////////////////////////////////////////////////// // ver:1-TArch5;2-TArch6;3,TArch7-3 const Adesk::UInt8 AecXDbSymbWithText::g_nVersion = 3; extern AcDbObjectId InitLayer(const TCHAR *szLayer, AcDbDatabase *pDb = NULL); ACRX_NO_CONS_DEFINE_MEMBERS(AecXDbSymbWithText, AecXDbEntityBaseEx); AecXDbSymbWithText::AecXDbSymbWithText() { m_nTextHeight = 3.5; m_nTextRotation = 0.0; m_colorText = 7; } AecXDbSymbWithText::~AecXDbSymbWithText() { } const TCHAR* AecXDbSymbWithText::GetDefaultLayer()const { extern TCHAR* LAY_OTHER_DIM; return LAY_OTHER_DIM; } //BOOL AecXDbSymbWithText::IsValid() const //{ // BOOL bRet = TDbEntity::IsValid(); // if (!bRet) // return bRet; // bRet = (m_nTextHeight > 1.0E-3 && !!m_idTextStyle); // return bRet; //} // 提供对格式刷的支持 void AecXDbSymbWithText::CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag) { assertWriteEnabled(); AecXDbEntityBaseEx::CopyPropertiesFrom(pSrcEntity, gMatchFlag); AecXDbSymbWithText *pSrc = AecXDbSymbWithText::cast(pSrcEntity); if (pSrc) { if (database() == NULL || pSrcEntity->database() == NULL || database() == pSrcEntity->database()) // add by whl on 060317 { m_idTextStyle = pSrc->m_idTextStyle; m_idTextLayer = pSrc->m_idTextLayer; } m_nTextHeight = pSrc->m_nTextHeight; // 第一端线距离端点, 第二端线距离第一端线 m_nTextRotation = pSrc->m_nTextRotation; m_colorText = pSrc->m_colorText; } } //Acad::ErrorStatus //AecXDbSymbWithText::DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet, BOOL *bErase) //{ // if (g_nSaveTArchVer < 7) // 7.0开始才有圆圈文字 // { // BOOL bHasCircle = FALSE; // long num = GetSubTextNum(); // for (long i = 0; i < num; i++) // { // TSubText* pSubText = GetSubText(i); // if (pSubText != NULL) // { // CString sText = pSubText->GetText(); // delete pSubText; // if (sText.Find(_T("^C")) != -1) // { // bHasCircle = TRUE; // break; // } // } // } // // if (bHasCircle) // { // XPushMemVar vTemp(XExplodeStream::m_bFullExplode, TRUE); // 完全分解 // XExplodeStream dc(entSet); // if (!OnExplodeOrDraw(dc)) // sg add 090303,解决导出后,无遮挡关系的BUG // return Acad::eOk; // // dc.SetPropertiesFrom(this); // Acad::ErrorStatus es = Acad::eOk; // if (nDrawMode == DRAW_2D) // es = ExplodeOrDraw2d(dc); // else // es = ExplodeOrDraw3d(dc); // if (bErase) // *bErase = TRUE; // return es; // } // } // return TDbEntity::DownGradeSave(nDrawMode, entSet, bErase); //} // 从DWG读入数据: Acad::ErrorStatus AecXDbSymbWithText::dwgInFields(AcDbDwgFiler* pFiler) { extern TCHAR* LAY_TEXT; assertWriteEnabled(); Acad::ErrorStatus es = AecXDbEntityBaseEx::dwgInFields(pFiler); if (es != Acad::eOk) return es; Adesk::UInt8 nVer; pFiler->readItem(&nVer); if (nVer > g_nVersion) { // Version is too new return Acad::eMakeMeProxy; } pFiler->readItem(&m_idTextStyle); pFiler->readItem(&m_nTextHeight); if (nVer > 1) { pFiler->readItem(&m_nTextRotation); pFiler->readItem(&m_idTextLayer); } else { m_nTextRotation = 0.0; if (database() == acdbCurDwg()) m_idTextLayer = InitLayer(LAY_TEXT, FALSE); else m_idTextLayer = GlobalFunc::GetLayerIdFromString(LAY_TEXT, database()); } if (nVer > 2) pFiler->readItem(&m_colorText); else { m_colorText = 7; // sg add 090608,对于7以前的图纸,默认使用白色 } return pFiler->filerStatus(); } Acad::ErrorStatus AecXDbSymbWithText::dwgOutFields(AcDbDwgFiler* pFiler) const { assertReadEnabled(); Acad::ErrorStatus es = AecXDbEntityBaseEx::dwgOutFields(pFiler); if (es != Acad::eOk) return es; pFiler->writeItem(g_nVersion); pFiler->writeItem(m_idTextStyle); pFiler->writeItem(m_nTextHeight); pFiler->writeItem(m_nTextRotation); pFiler->writeItem(m_idTextLayer); pFiler->writeItem(m_colorText); return pFiler->filerStatus(); } Acad::ErrorStatus AecXDbSymbWithText::dxfInFields(AcDbDxfFiler* pFiler) { return AecXDbEntityBaseEx::dxfInFields(pFiler); } Acad::ErrorStatus AecXDbSymbWithText::dxfOutFields(AcDbDxfFiler* pFiler) const { return AecXDbEntityBaseEx::dxfOutFields(pFiler); } Acad::ErrorStatus AecXDbSymbWithText::subTransformBy(const AcGeMatrix3d& xform) { AecXDbEntityBaseEx::subTransformBy(xform); if (!g_Option::instance().g_bLayoutRotate) { AcGeVector3d vt(cos(m_nTextRotation), sin(m_nTextRotation), 0.0); vt.transformBy(xform); m_nTextRotation = ads_angle(ADSGePoint3d(), ADSGePoint3d(vt[0], vt[1])); } return Acad::eOk; } DrawModeType AecXDbSymbWithText::GetDrawType() const { return k2DOnly; } double AecXDbSymbWithText::GetTextHeight() const { return m_nTextHeight; } AcDbObjectId AecXDbSymbWithText::GetTextStyleId() const { return m_idTextStyle; } AcDbObjectId AecXDbSymbWithText::GetTextLayerId() const { return m_idTextLayer; } void AecXDbSymbWithText::SetTextHeight(double nHeight) { assertWriteEnabled(); m_nTextHeight = nHeight; } void AecXDbSymbWithText::SetTextStyleId(AcDbObjectId id) { assertWriteEnabled(); m_idTextStyle = id; } void AecXDbSymbWithText::SetTextLayerId(AcDbObjectId id) { assertWriteEnabled(); m_idTextLayer = id; } void AecXDbSymbWithText::SetTextRotation(double nRot) { assertWriteEnabled(); m_nTextRotation = GlobalFunc::AngleRangeTo2PI(nRot); } double AecXDbSymbWithText::GetTextRotation() const { return m_nTextRotation; } BOOL AecXDbSymbWithText::IsTextRotated() const { return (fabs(m_nTextRotation) > g_DimOption::instance()._angSnap); } // sg add 090608,增加颜色设置接口 void AecXDbSymbWithText::SetTextColor(Adesk::UInt16 color) { assertWriteEnabled(); m_colorText = color; } Adesk::UInt16 AecXDbSymbWithText::GetTextColor() const { return m_colorText; }