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

176 lines
3.8 KiB
C++

//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, SH Software Co. Ltd.
// = FileName : CBArc.cpp
// = Version : ver2.0
// = Author : zjq
// = CreateDate : 2002-09-09
// = Description: 类的定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
#include "StdAfx.h"
#include "CBArc.h"
CBArc::CBArc()
{
}
CBArc::~CBArc()
{
}
CBArc::CBArc(AcGePoint3d& cen,double radius,double startAng,double centAng)
{
m_centPt = cen;
m_R = radius;
m_startAngle = startAng;
m_centAngle = centAng;
}
CBArc& CBArc::operator = (const CBArc& arc)
{
m_centPt = arc.m_centPt;
m_R = arc.m_R;
m_startAngle = arc.m_startAngle;
m_centAngle = arc.m_centAngle;
return *this;
}
AcGePoint3d CBArc::GetPtAtAngle(double detaAng) const
{
AcGePoint3d pt;
pt.x = m_centPt.x + m_R * cos(m_startAngle + detaAng);
pt.y = m_centPt.y + m_R * sin(m_startAngle + detaAng);
pt.z = m_centPt.z;
return pt;
}
double CBArc::GetMinX() const
{
double dvalue = 0.0;
double dendAng = m_startAngle + m_centAngle;
if ((m_startAngle < PI - fTOL) && (dendAng > PI + fTOL) && (m_centAngle > fTOL) ||
(m_startAngle > PI + fTOL) && (dendAng < PI - fTOL) && (m_centAngle < -fTOL) ||
(m_startAngle < PI - fTOL) && (dendAng < -PI - fTOL) && (m_centAngle < -fTOL) ||
(m_startAngle > PI + fTOL) && (dendAng > 3 * PI + fTOL) && (m_centAngle > fTOL))
{
dvalue = m_centPt.x-m_R;
}
else
{
AcGePoint3d ptend = GetEndPoint();
dvalue = GetStartPoint().x;
if (dvalue > ptend.x)
{
dvalue = ptend.x;
}
}
return dvalue;
}
double CBArc::GetMaxX() const
{
double dvalue = 0.0;
double dendAng = m_startAngle + m_centAngle;
if (m_startAngle < 2 * PI && dendAng > 2 * PI && m_centAngle >0. ||
m_startAngle < 2 * PI && dendAng < 0. && m_centAngle < 0.)
{
dvalue = m_centPt.x + m_R;
}
else
{
AcGePoint3d ptend = GetEndPoint();
dvalue = GetStartPoint().x;
if (dvalue < ptend.x)
{
dvalue = ptend.x;
}
}
return dvalue;
}
double CBArc::GetMinY() const
{
double dvalue = 0.0;
double PI32 = 3 * PI / 2.0;
double dendAng = m_startAngle + m_centAngle;
if (m_startAngle < PI32 && dendAng > PI32 && m_centAngle > 0. ||
m_startAngle > PI32 && dendAng < PI32 && m_centAngle < 0. ||
m_startAngle < PI32 && dendAng < -0.5 * PI && m_centAngle < 0.||
m_startAngle > PI32 && dendAng > 3.5 * PI && m_centAngle > 0.)
{
dvalue = m_centPt.y - m_R;
}
else
{
AcGePoint3d ptend = GetEndPoint();
dvalue = GetStartPoint().y;
if (dvalue > ptend.y)
{
dvalue = ptend.y;
}
}
return dvalue;
}
double CBArc::GetMaxY() const
{
double dvalue;
double PI12 = PI / 2.;
double dendAng = m_startAngle + m_centAngle;
if (m_startAngle < PI12 && dendAng > PI12 && m_centAngle > 0. ||
m_startAngle > PI12 && dendAng < PI12 && m_centAngle < 0. ||
m_startAngle < PI12 && dendAng < -1.5 * PI && m_centAngle < 0. ||
m_startAngle > PI12 && dendAng > 2.5 * PI && m_centAngle > 0.)
{
dvalue = m_centPt.y + m_R;
}
else
{
AcGePoint3d ptend = GetEndPoint();
dvalue = GetStartPoint().y;
if (dvalue < ptend.y)
{
dvalue = ptend.y;
}
}
return dvalue;
}
AcGePoint3d CBArc::GetPtAtS(double s)
{
if (fabs(m_R) < TOL)
{
return m_centPt;
}
double detang = s / m_R;
if (m_centAngle < 0)
{
detang = -detang;
}
return GetPtAtAngle(detang);
}
AcGePoint3d CBArc::GetEndPoint() const
{
AcGePoint3d pt;
pt.x = m_centPt.x + m_R * cos(m_startAngle + m_centAngle);
pt.y = m_centPt.y + m_R * sin(m_startAngle + m_centAngle);
pt.z = m_centPt.z;
return pt;
}
AcGePoint3d CBArc::GetStartPoint() const
{
AcGePoint3d pt;
pt.x = m_centPt.x + m_R * cos(m_startAngle);
pt.y = m_centPt.y + m_R * sin(m_startAngle);
pt.z = m_centPt.z;
return pt;
}
double CBArc::Length()
{
return fabs(m_R * m_centAngle);
}