Files
envi-code/SourceCode/Code2026/Dimension/AecDbSymbWithText.cpp
T
2026-09-28 15:28:50 +08:00

251 lines
5.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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<BOOL> 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;
}