211 lines
4.8 KiB
C++
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);
|
|
}
|
|
|