把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
This commit is contained in:
gjm committed 2026-10-04 00:04:20 +08:00
1 parent 2b0c2055ff
commit 164968b62e
6171 files changed
+191244 -191243

No files matched your search

+70 -70
View File
@@ -1,10 +1,10 @@
//-----------------------------------------------------------------------------+
//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, SH Software Co. Ltd.
// = FileName : CPloyLine.cpp
// = Version : ver2.0
// = Author : zjq
// = CreateDate : 2002-09-09
// = Description: 类的定义
// = Description: 类的定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
@@ -219,7 +219,7 @@ BOOL CPloyLine::InsertBLineInto(CBNode* pNode,CPloyLine* pBLine,BOOL LinkEdgeUnv
}
CBNode* pNodeHereNew = new CBNode(pNodeHere);
pNodeHereNew->m_bVisible = bNextVisible;
tempList.AddTail(pNodeHereNew);//多增加一个结点
tempList.AddTail(pNodeHereNew);//多增加一个结点
}
}
m_BNodeList.RemoveAll();
@@ -369,7 +369,7 @@ void CPloyLine::MergeCoArc(double tol)
continue;
}
else
{//末端点
{//末端点
delete pNode->m_pArc;
pNode->m_pArc = NULL;
}
@@ -377,7 +377,7 @@ void CPloyLine::MergeCoArc(double tol)
}
pNodePrev = pNode;
}
if ((m_BNodeList.GetCount() > 2) && IsClosed())//去除首尾处多余的点。
if ((m_BNodeList.GetCount() > 2) && IsClosed())//去除首尾处多余的点。
{
CBNode* pNode = m_BNodeList.GetHead();
POSITION pos = m_BNodeList.GetTailPosition();
@@ -452,7 +452,7 @@ void CPloyLine::MergeCoLine(double tol)
}
if (pNodePrev == NULL && pNodeNext != NULL && m_bClosed)
{//第一接点且封闭
{//第一接点且封闭
CBNode* pNodePrevPrev = NULL;
POSITION pos1 = m_BNodeList.GetTailPosition();
if (pos1 != NULL)
@@ -613,7 +613,7 @@ CPloyLine& CPloyLine::Reverse()
pNodePre = m_BNodeList.GetAt(pos);
}
if (pNodePre != NULL)
{//不是第一点
{//不是第一点
pNode->m_s = totLength-pNode->m_s;
if (pNodePre->m_eType == BLINESEG)
@@ -647,14 +647,14 @@ CPloyLine& CPloyLine::Reverse()
}
}
else
{//原来的第一点
{//原来的第一点
pNode->m_s = totLength;
pNode->m_eType = BLINESEG;
pNode->m_pArc = NULL;
}
tempList.AddTail(pNode);
}
//在链表中的位置反向
//在链表中的位置反向
m_BNodeList.RemoveAll();
m_BNodeList.AddTail(&tempList);
tempList.RemoveAll();
@@ -722,7 +722,7 @@ int CPloyLine::IsWhere(CPloyLine* pBLine)
{
if (bInternal0 == 0 && bInternal == 1 || bInternal0 == 1 && bInternal == 0)
{
return 3;//相交
return 3;//相交
}
bInternal0 = bInternal;
if (bInternal0 == 1)
@@ -736,11 +736,11 @@ int CPloyLine::IsWhere(CPloyLine* pBLine)
}
}
if (HasOnePointOut)
{//BLine在THIS外部
{//BLine在THIS外部
return 2;
}
else
{//BLine在THIS内部
{//BLine在THIS内部
return 1;
}
}
@@ -765,13 +765,13 @@ BOOL CPloyLine::Create(const XPolygonEx& polySrc)
}
CBNode* pNode = new CBNode(BLINESEG,SLength,pt1);
//zjq临时注释,3d炸碎崩
//zjq临时注释,3d炸碎崩
pNode->m_bVisible = *(poly.GetVisibleFlag()[i]);
m_BNodeList.AddTail(pNode);
pNodePrevious = pNode;
}
//封闭最后一点和第一点
//封闭最后一点和第一点
pt1 = (*poly[0]).AsAcGePoint3d();
SLength += pNodePrevious->m_pt.distanceTo(pt1);
@@ -787,7 +787,7 @@ BOOL CPloyLine::Create(const XPolygonEx& polySrc)
BOOL CPloyLine::Create(const XPoly2D& poly)
{
//方法2:直接转换(高效率),缺点是不考虑poly的弧度
//方法2:直接转换(高效率),缺点是不考虑poly的弧度
int nCount = poly.Length();
if (nCount < 2)
{
@@ -809,7 +809,7 @@ BOOL CPloyLine::Create(const XPoly2D& poly)
pNodePrevious = pNode;
}
//封闭最后一点和第一点
//封闭最后一点和第一点
if(poly.IsClosed())
{
AcGePoint3d pt1 = poly[0];
@@ -823,7 +823,7 @@ BOOL CPloyLine::Create(const XPoly2D& poly)
return TRUE;
}
//新增函数,支持LINE,PLINE,CIRCLE,TRACE
//新增函数,支持LINE,PLINE,CIRCLE,TRACE
BOOL CPloyLine::Create(const AcDbEntity* pEntity)
{
if (pEntity == NULL)
@@ -857,7 +857,7 @@ BOOL CPloyLine::Create(const AcDbEntity* pEntity)
AcGePoint3d cent = pArc->center();
double startAng = pArc->startAngle();
double endAng = pArc->endAngle();
//圆心角
//圆心角
double EntcAng;
if (endAng >= startAng)
{
@@ -891,9 +891,9 @@ BOOL CPloyLine::Create(const AcDbEntity* pEntity)
AcDbCircle *pCircle = AcDbCircle::cast(pEntity);
if (pCircle != NULL)
{
//当是圆时,需要指定UCS起始角。
//当是圆时,需要指定UCS起始角。
AcGePoint3d cent = pCircle->center();
//圆心角
//圆心角
double EntcAng = 2 * PI;
m_bClosed = 1;
CBArc* pBLArc = new CBArc(cent,pCircle->radius(),startUCSAng,EntcAng);
@@ -1153,14 +1153,14 @@ BOOL CPloyLine::Create(const AcDbEntity* pEntity)
FirstPt = pVertex->position();
}
double Bulge = pVertex->bulge();//凸度
double Bulge = pVertex->bulge();//凸度
AcGePoint3d pt1,pt2;
pt1 = pVertex->position();//ECS
pVertex->close();
pVertIter->step();
if (!pVertIter->done())
{//不是最后一点
{//不是最后一点
AcDbObjectId vertxId2 = pVertIter->objectId();
AcDb2dVertex *pVertex2 = NULL;
if (acdbOpenObject(pVertex2, vertxId2,AcDb::kForRead) != Acad::eOk)
@@ -1387,8 +1387,8 @@ BOOL CPloyLine::Create(AcDbObjectId& objId)
CString strLineType = pEntity->isA()->dxfName();
int isParal = IsZParalECSAndUcs(objId);
if (!isParal && strLineType != _T("LINE"))
{//判断实体坐标系与用户坐标系的Z轴是否平行
AfxMessageBox(_T("ECS与UCS的Z轴不平行!"));
{//判断实体坐标系与用户坐标系的Z轴是否平行
AfxMessageBox(_T("ECS与UCS的Z轴不平行!"));
pEntity->close();
return 0;
}
@@ -1413,7 +1413,7 @@ BOOL CPloyLine::Create(AcDbObjectId& objId)
AcGePoint3d cent = pArc->center();
double startAng = pArc->startAngle();
double endAng = pArc->endAngle();
double EntcAng; //圆心角
double EntcAng; //圆心角
if (endAng >= startAng)
{
EntcAng = endAng - startAng;
@@ -1424,10 +1424,10 @@ BOOL CPloyLine::Create(AcDbObjectId& objId)
}
if (isParal == 2)
{
EntcAng = -EntcAng;//反向
EntcAng = -EntcAng;//反向
}
double radius = pArc->radius();
WCS2ECS(cent,objId);//先从WCS到ECS
WCS2ECS(cent,objId);//先从WCS到ECS
CBArc* pArcTemp = new CBArc(cent,radius,startAng,EntcAng);//ECS
AcGePoint3d ptStart = pArcTemp->GetStartPoint();//ECS
AcGePoint3d ptEnd = pArcTemp->GetEndPoint();//ECS
@@ -1449,11 +1449,11 @@ BOOL CPloyLine::Create(AcDbObjectId& objId)
m_BNodeList.AddTail(pNode);
}
else if (strLineType == _T("CIRCLE"))
{//当是圆时,需要指定UCS起始角。
{//当是圆时,需要指定UCS起始角。
AcDbCircle* pCircle = (AcDbCircle*)(pEntity);
AcGePoint3d cent = pCircle->center();
WCS2UCS(cent);
double EntcAng = 2 * PI;//圆心角
double EntcAng = 2 * PI;//圆心角
m_bClosed = 1;
CBArc* pBLArc = new CBArc(cent,pCircle->radius(),startUCSAng,EntcAng);
CBNode* pNode = new CBNode(BARCSEG,0.0,pBLArc->GetStartPoint(),pBLArc);
@@ -1723,15 +1723,15 @@ BOOL CPloyLine::Create(AcDbObjectId& objId)
}
if (vertexNumber == 0) FirstPt = pVertex->position();
double Bulge = pVertex->bulge();//凸度
if (isParal == 2) Bulge = -Bulge;//UCS与ECS的Z轴反向平行
double Bulge = pVertex->bulge();//凸度
if (isParal == 2) Bulge = -Bulge;//UCS与ECS的Z轴反向平行
AcGePoint3d pt1,pt2;
pt1 = pVertex->position();//ECS
pVertex->close();
pVertIter->step();
if (!pVertIter->done())
{//不是最后一点
{//不是最后一点
AcDbObjectId vertxId2 = pVertIter->objectId();
AcDb2dVertex *pVertex2 = NULL;
if (acdbOpenObject(pVertex2, vertxId2,AcDb::kForRead) != Acad::eOk)
@@ -1986,9 +1986,9 @@ BOOL CPloyLine::GetDNode(double s,CDNode* pDivNode)
if (((len - s) >= TOL) && pNodePre != NULL)
{
//等分点处于两拐点之间
//pNodePre == NULL则len一定为0
//从结点pNodePre处的相对S坐标
//等分点处于两拐点之间
//pNodePre == NULL则len一定为0
//从结点pNodePre处的相对S坐标
double relatedS = s - pNodePre->m_s;
if (pNodePre->m_eType == BLINESEG)
{
@@ -2005,7 +2005,7 @@ BOOL CPloyLine::GetDNode(double s,CDNode* pDivNode)
pDivNode->m_pt = pNodePre->m_pArc->GetPtAtS(relatedS);
double ang = AngleToX(pNodePre->m_pArc->m_centPt,pDivNode->m_pt);
if (pNodePre->m_pArc->m_centAngle<0)
{//顺时针
{//顺时针
pDivNode->m_angTng = ang - PI / 2.;
while (pDivNode->m_angTng < 0)
{
@@ -2034,14 +2034,14 @@ BOOL CPloyLine::GetDNode(double s,CDNode* pDivNode)
}
else if (fabs(s - len) < TOL)
{
//等分点处于基线拐点上
//等分点处于基线拐点上
CBNode* pNodeNext = NULL;
if (pos != NULL)
{
pNodeNext = m_BNodeList.GetNext(pos);
}
if (pNodePre == NULL)
{//处于第一点
{//处于第一点
if (pNode->m_eType == BLINESEG)
{
if (pNodeNext == NULL)
@@ -2058,7 +2058,7 @@ BOOL CPloyLine::GetDNode(double s,CDNode* pDivNode)
pDivNode->m_pt = pNode->m_pt;
double ang = AngleToX(pNode->m_pArc->m_centPt,pDivNode->m_pt);
if (pNode->m_pArc->m_centAngle < 0)
{//顺时针
{//顺时针
pDivNode->m_angTng = ang - PI / 2.;
while (pDivNode->m_angTng < 0)
{
@@ -2086,7 +2086,7 @@ BOOL CPloyLine::GetDNode(double s,CDNode* pDivNode)
return 1;
}
else if (pNodeNext == NULL)
{//处于最后一个结点上pNodeFirst
{//处于最后一个结点上pNodeFirst
if (pNodePre == NULL)
{
return 0;
@@ -2102,7 +2102,7 @@ BOOL CPloyLine::GetDNode(double s,CDNode* pDivNode)
pDivNode->m_pt = pNode->m_pt;
double ang = AngleToX(pNodePre->m_pArc->m_centPt,pDivNode->m_pt);
if (pNodePre->m_pArc->m_centAngle < 0)
{//顺时针
{//顺时针
pDivNode->m_angTng = ang - PI / 2.;
while (pDivNode->m_angTng < 0)
{
@@ -2130,7 +2130,7 @@ BOOL CPloyLine::GetDNode(double s,CDNode* pDivNode)
return 1;
}
else
{//处于中间结点上
{//处于中间结点上
if (pNode->m_eType == BLINESEG)
{
double angIn;
@@ -2216,7 +2216,7 @@ double CPloyLine::GetActAngOfArcIn(CBNode* pNode)
return 0.;
}
if (pNode->m_pArc->m_centAngle >= 0)
{//逆时针
{//逆时针
double ang = pNode->m_pArc->m_startAngle + PI / 2.;
while (ang >= 2*PI)
{
@@ -2242,7 +2242,7 @@ double CPloyLine::GetActAngOfArcOut(CBNode* pNode)
return 0.;
}
if (pNode->m_pArc->m_centAngle >= 0)
{//逆时针
{//逆时针
double ang = pNode->m_pArc->m_startAngle + PI/2. + pNode->m_pArc->m_centAngle;
while (ang >= 2*PI)
{
@@ -2321,7 +2321,7 @@ void CPloyLine::LinearizePLine(int nSegs)
}
void CPloyLine::DivideByAng(const double detaAng)
{//按角度,只划分圆弧
{//按角度,只划分圆弧
if (IsEmpty())
{
return;
@@ -2364,11 +2364,11 @@ void CPloyLine::DivideByAng(const double detaAng)
CBNode* pNodeNext = NULL;
if (posTemp != NULL)
{
pNodeNext = m_BNodeList.GetNext(posTemp);//得到下一结点但不增加pos
pNodeNext = m_BNodeList.GetNext(posTemp);//得到下一结点但不增加pos
}
double s = pNode->m_s;//结点S坐标
double s = pNode->m_s;//结点S坐标
if (pNode->m_eType == BLINESEG)
{//直线
{//直线
CDNode* pDieNode = new CDNode;
if (GetDNode(s,pDieNode))
{
@@ -2377,21 +2377,21 @@ void CPloyLine::DivideByAng(const double detaAng)
}
}
else
{//圆弧
{//圆弧
if (pNodeNext != NULL)
{//不是最后一点
{//不是最后一点
if (pNode->m_pArc != NULL)
{
double s0 = pNode->m_s;
double len = pNodeNext->m_s - s0; //线段长度
int nSeg = abs((int)(pNode->m_pArc->m_centAngle / detaAng + 0.5));//等分数
double len = pNodeNext->m_s - s0; //线段长度
int nSeg = abs((int)(pNode->m_pArc->m_centAngle / detaAng + 0.5));//等分数
if (nSeg == 0)
{
nSeg = 1;
}
double detaS = len / nSeg;
if (detaS > TOL)
{//等分
{//等分
for (int i = 0; i < nSeg; i++)
{
CDNode* pDieNode = new CDNode;
@@ -2405,7 +2405,7 @@ void CPloyLine::DivideByAng(const double detaAng)
}
}
else
{//最后一点
{//最后一点
CDNode* pDieNode = new CDNode;
if (GetDNode(s,pDieNode))
{
@@ -2459,18 +2459,18 @@ void CPloyLine::DivideBySegs(const int nSegs,BOOL flag)
CBNode* pNodeNext = NULL;
if (posTemp != NULL)
{
pNodeNext = m_BNodeList.GetNext(posTemp);//得到下一结点但不增加pos
pNodeNext = m_BNodeList.GetNext(posTemp);//得到下一结点但不增加pos
}
double s = pNode->m_s;//结点S坐标
double s = pNode->m_s;//结点S坐标
if (pNode->m_eType == BLINESEG)
{
if (flag && pNodeNext != NULL)
{//不是最后一个结点
{//不是最后一个结点
double s0 = pNode->m_s;
double len = pNodeNext->m_s - s0; //线段长度
double len = pNodeNext->m_s - s0; //线段长度
double detaS = len / nSegs;
if (detaS > TOL)
{//等分
{//等分
for (int i = 0; i < nSegs; i++)
{
CDNode* pDieNode = new CDNode;
@@ -2483,7 +2483,7 @@ void CPloyLine::DivideBySegs(const int nSegs,BOOL flag)
}
}
else
{//不等分直线或pNodeNext == NULL(最后一点)
{//不等分直线或pNodeNext == NULL(最后一点)
CDNode* pDieNode = new CDNode;
if (GetDNode(s,pDieNode))
{
@@ -2493,14 +2493,14 @@ void CPloyLine::DivideBySegs(const int nSegs,BOOL flag)
}
}
else
{//圆弧
{//圆弧
if (pNodeNext != NULL)
{//不是最后一点
{//不是最后一点
double s0 = pNode->m_s;
double len = pNodeNext->m_s - s0; //线段长度
double len = pNodeNext->m_s - s0; //线段长度
double detaS = len / nSegs;
if (detaS > TOL)
{//等分
{//等分
for (int i = 0;i < nSegs; i++)
{
CDNode* pDieNode = new CDNode;
@@ -2513,7 +2513,7 @@ void CPloyLine::DivideBySegs(const int nSegs,BOOL flag)
}
}
else
{//最后一点
{//最后一点
CDNode* pDieNode = new CDNode;
if (GetDNode(s,pDieNode))
{
@@ -2829,20 +2829,20 @@ BOOL CPloyLine::IsPtInPolygon(AcGePoint3d& pt) const
AcGePoint3d pt1 = pt;
pt1.x += 100;
AcGeRay3d rayLine(pt,pt1); //以pt为起点的水平射线
AcGeRay3d rayLine(pt,pt1); //以pt为起点的水平射线
POSITION pos = pNew->m_BNodeList.GetHeadPosition();
CBNode* pNodePre = NULL;
int nTotpt = 0; //射线与多边形的交点数
int nTotpt = 0; //射线与多边形的交点数
while (pos != NULL)
{
CBNode* pNode = pNew->m_BNodeList.GetNext(pos);
if (pNodePre != NULL)
{
AcGeLineSeg3d line3d(pNodePre->m_pt,pNode->m_pt); //得到直线段
AcGeLineSeg3d line3d(pNodePre->m_pt,pNode->m_pt); //得到直线段
AcGePoint3d secPt;
if (line3d.isOn(pt,tol))
{
return 2; //点在边上
return 2; //点在边上
}
if (IsOverlap(pt,pt1,pNodePre->m_pt,pNode->m_pt))
{
@@ -3010,7 +3010,7 @@ int CPloyLine::IsZParalECSAndUcs(AcDbObjectId& objId)
ads_name_set(pEntName,from.resval.rlname); //ECS
to.restype = RTSHORT;
to.resval.rint = 1; //UCS
acedTrans(ads_pt,&from,&to,1,ads_ret); //按矢量转换
acedTrans(ads_pt,&from,&to,1,ads_ret); //按矢量转换
double tol = TOL;
if (fabs(ads_ret[X]) < TOL && fabs(ads_ret[Y]) < TOL && ads_ret[Z] >= 0.)