#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; }