Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

89 lines
2.0 KiB
C++

#include "stdafx.h"
#include "resource.h"
#include "ThunderCaculate.h"
#include "LightningRodData.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
TGThunderCaculate::TGThunderCaculate()
{
}
TGThunderCaculate::~TGThunderCaculate()
{
}
//通过避雷针数据进行计算
void TGThunderCaculate::CaculateThunderData(const TGLightningRodData *pData)
{
if (pData == NULL)
return;
m_result.m_dGroundRadius = pData->GetGroundRadius();
m_result.m_dHeight = pData->GetHeight();
m_result.m_nNumber = pData->GetNumber();
m_result.m_nGroupNO = pData->GetGroupNO();
m_result.m_arProHeight.setLogicalLength(0);
m_result.m_arProHeight.append(pData->m_arProtecedHeight);
pData->GetInsertPoint(m_result.m_ptInsert);
pData->GetObjectID(m_result.m_id);
//建筑物高度为0的保护高度
m_result.m_dProRadius = pow(m_result.m_dHeight*(2*m_result.m_dGroundRadius - m_result.m_dHeight),0.5);
//得到滚球圆心坐标 ptCen为返回值,其他为输入值
GetGroundCenter(m_result.m_ptInsert,m_result.m_dHeight,m_result.m_dGroundRadius,m_result.m_ptGroundCenter);
}
bool TGThunderCaculate::DocGetMeterUnitDraw()
{
struct resbuf rb;
acedGetVar(_T("INSUNITS"),&rb);
if (rb.resval.rint == AcDb::kUnitsMeters)
{
return true;
}
return false;
}
//得到滚球圆心坐标 ptCen为返回值,其他为输入值
void TGThunderCaculate::GetGroundCenter(const AcGePoint3d ptInsert,double dHeight,double dGroundRadius,AcGePoint3d& ptCen)
{
if (!DocGetMeterUnitDraw())
{
dHeight = dHeight * 1000;
dGroundRadius = dGroundRadius * 1000;
}
AcGePoint3d ptPin,ptStart,ptEnd;
ptPin = ptInsert;
ptPin.z = dHeight;
ptStart = ptInsert;
ptStart.z = dGroundRadius;
ptEnd = ptStart;
ptEnd.y += dGroundRadius;
AcDbLine line(ptStart,ptEnd);
AcGePoint3dArray arPt;
AcDbCircle circle(ptPin,AcGeVector3d::kXAxis,dGroundRadius);
line.intersectWith(&circle,AcDb::kExtendThis,arPt);
if (arPt.length() > 0)
{
ptCen = arPt[0];
}
}