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

100 lines
2.0 KiB
C++

#include "StdAfx.h"
#include "TDbVirtualPipe.h"
TdbVirtualPipe::TdbVirtualPipe()
{
m_pPipe = NULL;
}
void TdbVirtualPipe::ShowAngleDim(bool bVal)
{
m_bShow = bVal;
}
void TdbVirtualPipe::SetPipe(TDbPipe* pPipe)
{
m_pPipe = pPipe;
}
void TdbVirtualPipe::SetAngleDim(const TADSGePoint3d &ptLoc, double dAngle)
{
m_ptText = ptLoc;
m_dAngle = dAngle;
}
Acad::ErrorStatus TdbVirtualPipe::ExplodeOrDraw2d(XExplodeDraw &mode) const
{
// 绘制管段
if (m_pPipe != NULL)
{
m_pPipe->ExplodeOrDraw2d(mode);
}
// 绘制角度标注
if (m_bShow)
{
// 绘制角度文本
XAcGiViewDraw* pXDraw = (XAcGiViewDraw*)&mode;
AcGiCommonDraw* pCDraw = NULL;
if (NULL != pXDraw)
pCDraw = pXDraw->GetCommonDraw();
if (NULL == pCDraw)
return Acad::eOk;
CString sText;
sText.Format(_T("%.3f"), m_dAngle);
sText.TrimRight(_T("0"));
sText.TrimRight(_T("."));
AcGeVector3d vtX = AcGeVector3d::kXAxis, vtZ = AcGeVector3d::kZAxis;
vtX.rotateBy(Ucs2Wcs(0.0), AcGeVector3d::kZAxis);
AcDbDatabase* pDb = acdbCurDwg();
if (NULL != pDb)
{
vtX = pDb->ucsxdir();
vtZ = pDb->ucsxdir().crossProduct(pDb->ucsydir());
}
int nLen = (int)_tcslen(sText); // 字长
AcGiTextStyle style; // 样式
style.setFileName(_T("txt.shx"));
style.setBigFontFileName(_T(""));
style.setTextSize(PixelToWcs(10));
TADSGePoint3d ptLoc = m_ptText;
ptLoc = Wcs2Ucs(ptLoc);
if (IsIn3quadrant())
{
ptLoc.x -= PixelToWcs(30);
ptLoc.y -= PixelToWcs(20);
}
else
{
ptLoc.x += PixelToWcs(10);
ptLoc.y += PixelToWcs(10);
}
ptLoc = Ucs2Wcs(ptLoc);
pCDraw->rawGeometry()->text(ptLoc, vtZ, vtX, sText, nLen, Adesk::kFalse, style);
}
return Acad::eOk;
}
bool TdbVirtualPipe::IsIn3quadrant() const
{
if (m_pPipe == NULL)
{
return false;
}
AcGeVector3d vt = m_pPipe->EndPoint() - m_pPipe->StartPoint();
AcGeVector3d vtX = AcGeVector3d::kXAxis;
vtX.rotateBy(Ucs2Wcs(0.0), AcGeVector3d::kZAxis);
double dAngle = vtX.angleTo(vt, AcGeVector3d::kZAxis);
if(dAngle > PI && dAngle < PI * 1.5)
{
return true;
}
return false;
}