100 lines
2.0 KiB
C++
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;
|
|
} |