Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtKernal/XText.cpp
T
2026-09-28 15:28:50 +08:00

211 lines
4.8 KiB
C++

// XText.cpp: implementation of the XText class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include <arxtools.h>
//#include <dbobject.h>
#include <TLampDim.h>
#include <TWireDim.h>
#include "XText.h"
#include "tapi.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
XText::XText()
{
}
XText::XText(const TCHAR* szText, XPoint ptPosition, double nHeight, double nScale, CString csTextStyle, CString csLayer)
{
xg_setvar(_T("TEXTSTYLE"), (const TCHAR*)csTextStyle);
AcDbObjectId idTextStyle = GetTextStyleId(csTextStyle);
m_ptInsert = ptPosition;
m_pText = new AcDbText;
m_pText->setPosition(ptPosition);
m_pText->setHeight(nHeight);
m_pText->setRotation(0);
m_pText->setTextString(szText);
m_pText->setTextStyle(idTextStyle);
m_pText->setWidthFactor(nScale);
m_pTgText = new TDbText;
m_pTgText->SetStyleId(idTextStyle);
m_pTgText->SetHeight(nHeight/DocGetPScale());
m_pTgText->SetText(szText);
m_pTgText->SetLocation(ptPosition);
m_csLayer = csLayer;
m_nScale = nScale;
m_nTextLength = 0.0;
m_nRotate = 0.0;
}
XText::XText(Entity ent, BOOL bNew)
{
m_pTgText = NULL;
m_pText = NULL;
if(ent.Is(_T("TEXT"))){
OPENOBJ_BEGIN(ent, AcDb::kForRead, AcDbText, pEnt);
if(pEnt){
m_idStyle = pEnt->textStyle();
m_nScale = pEnt->widthFactor();
m_nRotate = pEnt->rotation();
m_nHeight = pEnt->height();
m_vertMode = pEnt->verticalMode();
m_horzMode = pEnt->horizontalMode();
m_ptInsert = pEnt->position();
TCHAR *chlayer = pEnt->layer();
m_csLayer = chlayer;
delete [] chlayer;
TCHAR* pval = pEnt->textString();
m_csText = (const TCHAR*)pval;
delete[] pval;
}
OPENOBJ_END();
if(bNew){
m_pText = new AcDbText;
m_pText->setVerticalMode(m_vertMode);
m_pText->setHorizontalMode(m_horzMode);
m_pText->setLayer(m_csLayer);
m_pText->setPosition(m_ptInsert);
m_pText->setHeight(m_nHeight);
m_pText->setRotation(m_nRotate);
m_pText->setTextString(m_csText);
m_pText->setTextStyle(m_idStyle);
}
}
else if(ent.Is(_T("ATS_TEXT"))){
OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbText, pEnt);
if(pEnt){
m_idStyle = pEnt->GetStyleId();
m_nRotate = pEnt->GetRotation();
m_nHeight = pEnt->GetHeight();
m_Align = pEnt->GetAlignment();
m_csText = (const TCHAR*)pEnt->GetText();
m_ptInsert = pEnt->GetLocation();
m_csLayer = (const TCHAR*)pEnt->layer();
TCHAR *chlayer = pEnt->layer();
m_csLayer = chlayer;
delete [] chlayer;
}
OPENOBJ_END();
if(bNew){
m_pTgText = new TDbText;
m_pTgText->setLayer(m_csLayer);
m_pTgText->SetStyleId(m_idStyle);
m_pTgText->SetHeight(m_nHeight);
m_pTgText->SetAlignment(m_Align);
m_pTgText->SetRotation(m_nRotate);
m_pTgText->SetText(m_csText);
m_pTgText->SetLocation(m_ptInsert);
}
}
}
XText::~XText()
{
if(m_pText)
m_pText->close();
if(m_pTgText)
m_pTgText->close();
}
void XText::Draw(AcDb::TextVertMode vVerMode, AcDb::TextHorzMode nHorzMode)
{
InitLayer(m_csLayer);
XPushVarStr clayer(_T("LAYER"), m_csLayer);
m_pText->setVerticalMode(vVerMode);
m_pText->setHorizontalMode(nHorzMode);
m_pText->setPosition(m_ptInsert);
if(!m_ptAlign)//2007。9。20 对ACAD文字递增不支持“正中”
m_pText->setAlignmentPoint(m_ptInsert);
else
m_pText->setAlignmentPoint(m_ptAlign);
m_pText->setLayer(m_csLayer);
PostToDb(m_pText, TRUE);
m_pText = NULL;
Entity ent;
ent.GetLast();
XPoint ptLow, ptUp;
ent.GetExtend(ptLow, ptUp);
m_nTextLength = fabs(ptLow[0] - ptUp[0]);
}
void XText::TgDraw(XExplodeDraw::TextAlignment Align)
{
InitLayer(m_csLayer);
m_pTgText->SetAlignment(Align);
m_pTgText->setLayer(m_csLayer);
AddToModelSpace(m_pTgText, Adesk::kTrue);
m_pTgText = NULL;
}
double XText::GetEntTextLength()
{
AcDbExtents extents;
if(m_pText){
m_pText->getGeomExtents(extents);
AcGePoint3d pMax = extents.maxPoint();
AcGePoint3d pMin = extents.minPoint();
double nTextLength = fabs(pMax[0] - pMin[0]);
return nTextLength * m_nScale;
}
return 0;
}
void XText::SetInsertPoint(XPoint ptIns)
{
m_ptInsert = ptIns;
if(m_pText){
m_pText->setPosition(ptIns);
m_pText->setAlignmentPoint(ptIns);
}
if(m_pTgText)
m_pTgText->SetLocation(ptIns);
}
void XText::SetText(const TCHAR* szText)
{
m_csText = szText;
if(m_pText)
m_pText->setTextString(m_csText);
if(m_pTgText)
m_pTgText->SetText(m_csText);
}
void XText::SetHeight(double nHeight)
{
m_nHeight = nHeight;
if(m_pText)
m_pText->setHeight(m_nHeight);
if(m_pTgText)
m_pTgText->SetHeight(m_nHeight/DocGetPScale());
}
void XText::SetRotate(double nRotate)
{
m_nRotate = nRotate;
if(m_pText)
m_pText->setRotation(m_nRotate);
if(m_pTgText)
m_pTgText->SetRotation(m_nRotate);
}