331 lines
6.1 KiB
C++
331 lines
6.1 KiB
C++
#include "StdAfx.h"
|
|
#include "SubText.h"
|
|
#include "AecDbMText.h"
|
|
#include "AcDbObjectPtr.h"
|
|
#include "PickEntSet.h"
|
|
|
|
SubText::SubText(AcDbObjectId id,AcDbEntity*pTextEnt,long iText,bool bAcadEntity)
|
|
: m_idEnt(id),m_pTextEnt(pTextEnt),m_iText(iText),m_iMenuType(0),m_iFlag(0)
|
|
{
|
|
AcDbEntity*pEnt = NULL;
|
|
if (bAcadEntity) //上华对象中的ACAD文字
|
|
{
|
|
m_iMenuType = 3;
|
|
}
|
|
else if (m_pTextEnt->isKindOf(AcDbText::desc())
|
|
|| m_pTextEnt->isKindOf(AcDbMText::desc()))
|
|
{
|
|
m_iMenuType = 0;
|
|
}
|
|
else //上华文字
|
|
{
|
|
m_iMenuType = 1;
|
|
}
|
|
|
|
SetMultiLine(m_pTextEnt->isKindOf(AecXDbMText::desc())
|
|
||_tcsicmp(m_pTextEnt->isA()->name(), _T("AecXDbMText")) == 0
|
|
|| m_pTextEnt->isKindOf(AcDbMText::desc()));
|
|
if (bAcadEntity)
|
|
{
|
|
m_iFlag |= ACAD_ENTITY;
|
|
}
|
|
}
|
|
|
|
SubText::~SubText()
|
|
{
|
|
if (m_pTextEnt != NULL)
|
|
{
|
|
delete m_pTextEnt;
|
|
}
|
|
}
|
|
|
|
int SubText::GetMenuType()const
|
|
{
|
|
return m_iMenuType;
|
|
}
|
|
|
|
void SubText::SetMenuType(int type)
|
|
{
|
|
m_iMenuType = type;
|
|
}
|
|
|
|
void SubText::SetIndex(long i)
|
|
{
|
|
m_iText = i;
|
|
}
|
|
|
|
long SubText::GetIndex()const
|
|
{
|
|
return m_iText;
|
|
}
|
|
|
|
void SubText::SetObjectId(AcDbObjectId id)
|
|
{
|
|
m_idEnt = id;
|
|
}
|
|
|
|
AcDbObjectId SubText::GetObjectId()const
|
|
{
|
|
return m_idEnt;
|
|
}
|
|
|
|
void SubText::SetMultiLine(bool bML)
|
|
{
|
|
if (bML)
|
|
{
|
|
m_iFlag |= MULTI_LINE;
|
|
}
|
|
else
|
|
{
|
|
m_iFlag &= ~MULTI_LINE;
|
|
}
|
|
}
|
|
|
|
bool SubText::IsMultiLine()const
|
|
{
|
|
return (m_iFlag & MULTI_LINE) != 0;
|
|
}
|
|
|
|
bool SubText::IsAcadEntity()const
|
|
{
|
|
return (m_iFlag & ACAD_ENTITY) != 0;
|
|
}
|
|
|
|
const AcDbEntity* SubText::GetTextEntity()const
|
|
{
|
|
return m_pTextEnt;
|
|
}
|
|
|
|
CString SubText::GetText()const
|
|
{
|
|
CString strClassName = m_pTextEnt->isA()->name();
|
|
if (_tcsicmp(strClassName, _T("AecXDbText")) == 0
|
|
|| _tcsicmp(strClassName, _T("AecXDbMText")) == 0)
|
|
{
|
|
AecXDbText *pTextEnt = AecXDbText::cast(m_pTextEnt);
|
|
return pTextEnt->GetText();
|
|
}
|
|
|
|
else if (m_pTextEnt->isKindOf(AcDbText::desc()))
|
|
{
|
|
AcDbText*pText = AcDbText::cast(m_pTextEnt);
|
|
return pText->textString();
|
|
}
|
|
else if (m_pTextEnt->isKindOf(AcDbMText::desc()))
|
|
{
|
|
AcDbMText* pText = AcDbMText::cast(m_pTextEnt);
|
|
#if ARX>17
|
|
return pText->text();//wlw mod 13.0628
|
|
#else
|
|
return pText->contents();//wlw mod 13.0628
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
return _T("");
|
|
}
|
|
}
|
|
|
|
void SubText::SetText(CString sText)
|
|
{
|
|
CString strClassName = m_pTextEnt->isA()->name();
|
|
if (_tcsicmp(strClassName, _T("AecXDbText")) == 0
|
|
|| _tcsicmp(strClassName, _T("AecXDbMText")) == 0)
|
|
{
|
|
AecXDbText *pTextEnt = AecXDbText::cast(m_pTextEnt);
|
|
pTextEnt->SetText(sText);
|
|
}
|
|
else if (m_pTextEnt->isKindOf(AcDbText::desc()))
|
|
{
|
|
AcDbText*pText = AcDbText::cast(m_pTextEnt);
|
|
pText->setTextString(sText);
|
|
}
|
|
else
|
|
{
|
|
AcDbMText* pText = AcDbMText::cast(m_pTextEnt);
|
|
pText->setContents(sText);
|
|
}
|
|
}
|
|
|
|
void SubText::GetExtent2d(ADSGePoint3d &ptMin,ADSGePoint3d&ptMax)const
|
|
{
|
|
AcDbExtents ext;
|
|
m_pTextEnt->getGeomExtents(ext);
|
|
ptMin = ext.minPoint();
|
|
ptMax = ext.maxPoint();
|
|
}
|
|
|
|
BaseEx* SubText::OpenEntityBase(bool bWrite)const
|
|
{
|
|
if (m_idEnt.isNull() || !m_idEnt.isValid())
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
AcDbEntity*pEnt = NULL;
|
|
acdbOpenObject(pEnt, m_idEnt, bWrite ? AcDb::kForWrite : AcDb::kForRead);
|
|
|
|
BaseEx *pRet = AecXDbEntityBaseEx::cast(pEnt);
|
|
if (pRet != NULL)
|
|
{
|
|
return pRet;
|
|
}
|
|
else
|
|
{
|
|
return AecXDbCurveBaseEx::cast(pEnt);
|
|
}
|
|
}
|
|
|
|
void SubText::Highlight(bool bHL)const
|
|
{
|
|
if (m_idEnt.isNull() || !m_idEnt.isValid())
|
|
{
|
|
return;
|
|
}
|
|
|
|
AcDbEntity*pEnt = NULL;
|
|
acdbOpenObject(pEnt,m_idEnt,AcDb::kForRead);
|
|
|
|
if (pEnt != NULL)
|
|
{
|
|
//if (!pEnt->isKindOf(TDbSheet::desc()))
|
|
if (_tcsicmp(pEnt->isA()->name(), _T("TDbSheet")) != 0)
|
|
{
|
|
if (bHL)
|
|
{
|
|
pEnt->highlight();
|
|
}
|
|
else
|
|
{
|
|
pEnt->unhighlight();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pEnt->draw();
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
SubText* SubText::GetNext(bool bVert,bool bPre)const
|
|
{
|
|
if (IsAcadEntity())
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
OPENOBJ_BEGIN(m_idEnt, AcDb::kForWrite, AecXDbCurveBaseEx, pEnt)
|
|
if (pEnt)
|
|
{
|
|
long iText = pEnt->GetNextSubTextIndex(m_iText, bVert, bPre);
|
|
if (m_iText != iText)
|
|
{
|
|
SubText *pNext = pEnt->GetSubText(iText);
|
|
return pNext;
|
|
}
|
|
return NULL;
|
|
}
|
|
OPENOBJ_END()
|
|
OPENOBJ_BEGIN(m_idEnt, AcDb::kForWrite, AecXDbEntityBaseEx, pEnt)
|
|
if (pEnt)
|
|
{
|
|
long iText = pEnt->GetNextSubTextIndex(m_iText, bVert, bPre);
|
|
if (m_iText != iText)
|
|
{
|
|
SubText *pNext = pEnt->GetSubText(iText);
|
|
return pNext;
|
|
}
|
|
return NULL;
|
|
}
|
|
OPENOBJ_END()
|
|
return NULL;
|
|
}
|
|
|
|
void SubText::Update(CString sText)
|
|
{
|
|
if (IsAcadEntity())
|
|
{
|
|
if (m_idEnt.isNull() || !m_idEnt.isValid())
|
|
{
|
|
return;
|
|
}
|
|
|
|
AcDbEntity*pEnt = NULL;
|
|
acdbOpenObject(pEnt,m_idEnt,AcDb::kForWrite);
|
|
if (pEnt != NULL)
|
|
{
|
|
AcDbText*pText1 = AcDbText::cast(pEnt);
|
|
if (pText1 != NULL)
|
|
{
|
|
pText1->setTextString(sText);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//如果是AecXDbText或其它 标注符号 实体 则进行处理
|
|
|
|
OPENOBJ_BEGIN(m_idEnt, AcDb::kForWrite, AecXDbCurveBaseEx, pEnt)
|
|
if (pEnt)
|
|
{
|
|
pEnt->SetSubText(m_iText, sText);
|
|
}
|
|
OPENOBJ_END()
|
|
OPENOBJ_BEGIN(m_idEnt, AcDb::kForWrite, AecXDbEntityBaseEx, pEnt)
|
|
if (pEnt)
|
|
{
|
|
pEnt->SetSubText(m_iText, sText);
|
|
}
|
|
OPENOBJ_END()
|
|
}
|
|
}
|
|
|
|
SubText* HitTestOnText(PickEntSet& ss,ADSGePoint3d pt)
|
|
{
|
|
SubText* pSubText = NULL;
|
|
long count = ss.Length();
|
|
for (long i = 0; i < count && pSubText == NULL; i++)
|
|
{
|
|
CString sText;
|
|
ADSGePoint3d ptMin,ptMax;
|
|
OPENOBJ_BEGIN(ss[i], AcDb::kForRead, AcDbEntity, pEnt);
|
|
if (pEnt != NULL)
|
|
{
|
|
// 如果是AecXDbText或其它 标注符号 实体 则进行处理
|
|
//TDbEntity*pEnt1 = TDbEntity::cast(pEnt);
|
|
//if (pEnt1 != NULL)
|
|
//{
|
|
// pSubText = pEnt1->HitTestText(pt);
|
|
//}
|
|
//if (pSubText == NULL)
|
|
//{
|
|
// TDbCurveEntity*pEnt2 = TDbCurveEntity::cast(pEnt);
|
|
// if (pEnt2 != NULL)
|
|
// {
|
|
// pSubText = pEnt2->HitTestText(pt);
|
|
// }
|
|
// if (pSubText == NULL)
|
|
// {
|
|
// AcDbText*pEnt3 = AcDbText::cast(pEnt);
|
|
// if (pEnt3 != NULL)
|
|
// {
|
|
// pSubText = new SubText(pEnt->objectId(),(AcDbEntity*)pEnt->clone(),0,true);
|
|
// }
|
|
// else
|
|
// {//wlw mod 130625
|
|
// AcDbMText*pEnt4 = AcDbMText::cast(pEnt);
|
|
// if (pEnt4 != NULL)
|
|
// {
|
|
// pSubText = new SubText(pEnt->objectId(),(AcDbEntity*)pEnt->clone(),0,true);
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
}
|
|
OPENOBJ_END();
|
|
}
|
|
return pSubText;
|
|
}
|