把非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

+33 -33
View File
@@ -1,10 +1,10 @@
//-----------------------------------------------------------------------------+
//-----------------------------------------------------------------------------+
// Copyright (C), 1998-2007, SH Software Co. Ltd.
// = FileName : XArcWallUnit.cpp
// = Version : ver2.0
// = Author : zjq
// = CreateDate : 2002-09-09
// = Description: 类的定义
// = Description: 类的定义
// = Maintainers:
//
//-----------------------------------------------------------------------------+
@@ -60,14 +60,14 @@ XArcWallUnit::~XArcWallUnit()
}
// 对一系列3dface进行镶嵌
// 对lstFaces,根据xBeg开始,以nStep的步长进行num次镶嵌
// 结果存入lstSectFaces,lstFaces在镶嵌后扣除
// 对一系列3dface进行镶嵌
// 对lstFaces,根据xBeg开始,以nStep的步长进行num次镶嵌
// 结果存入lstSectFaces,lstFaces在镶嵌后扣除
void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace> &lstFaces, DList<X3DFace> &lstSectFaces)
{
for(int n = 0; n < num; n++)
{
double xSect = xBeg + (1 + n) * nStep; //切割位置
double xSect = xBeg + (1 + n) * nStep; //切割位置
int nFaceNum = lstFaces.Length();
for(int k = 0; k<nFaceNum; k++)
@@ -75,7 +75,7 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
X3DFace &face = *lstFaces[k];
if (face.GetFlag() & FLAG_TRIANGLE)
{
//3角形
//3角形
int nFlag1 = CompareDouble(face.GetVertex(0).x, xSect);
int nFlag2 = CompareDouble(face.GetVertex(1).x, xSect);
int nFlag3 = CompareDouble(face.GetVertex(2).x, xSect);
@@ -88,11 +88,11 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
}
else if (nFlag1 >= 0)
{
//无切割发生
//无切割发生
}
else
{
//发生切割
//发生切割
double x1 = face.GetVertex(0).x, x2 = face.GetVertex(1).x, x3 = face.GetVertex(2).x;
double y1 = face.GetVertex(0).y, y2 = face.GetVertex(1).y, y3 = face.GetVertex(2).y;
double x = xSect;
@@ -102,7 +102,7 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
int nFlagNew = newFace->GetFlag();
if (nFlag2 > 0)
{ //切割第一点, 三角形 + 四边形
{ //切割第一点, 三角形 + 四边形
nFlagNew |= 0x02 + 0x08;
double y = ((x-x1) * y2 + y1 * (x2-x)) / (x2-x1);
newFace->SetVertex(1, XPoint(x, y));
@@ -115,7 +115,7 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
nFlag &= ~FLAG_TRIANGLE;
}
else if (nFlag2 == 0)
{ // 三角形+三角形
{ // 三角形+三角形
nFlagNew |= 0x02 + 0x08;
double y = ((x - x1) * y3 + y1 * (x3 - x)) / (x3 - x1);
newFace->SetVertex(2, XPoint(x, y));
@@ -125,7 +125,7 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
face.SetVertex(3, XPoint(x, y));
}
else
{ // 四边形 + 三角形
{ // 四边形 + 三角形
double y = ((x - x3) * y2 + y3 * (x2 - x)) / (x2 - x3);
nFlagNew |= 0x04;
newFace->SetVertex(2, XPoint(x,y));
@@ -153,12 +153,12 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
}
else
{
//4边形,已经切割过
//4边形,已经切割过
int nFlag2 = CompareDouble(face.GetVertex(1).x, xSect);
int nFlag3 = CompareDouble(face.GetVertex(2).x, xSect);
// 分4种情况
// 分4种情况
if (nFlag3 <= 0)
{ //整个输出
{ //整个输出
lstSectFaces.Append(new X3DFace(face));
lstFaces.Remove(k);
k--;
@@ -181,7 +181,7 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
int nFlagNew = newFace->GetFlag();
if (nFlag2 > 0)
{ // 2个四边形
{ // 2个四边形
nFlagNew |= 0x02;
double y = ((x - x1) * y2 + y1 * (x2 - x)) / (x2 - x1);
newFace->SetVertex(1, XPoint(x, y));
@@ -192,7 +192,7 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
face.SetVertex(3, newFace->GetVertex(2));
}
else if (nFlag2 == 0)
{ // 4边形+三角形
{ // 4边形+三角形
nFlagNew |= 0x02;
double y = ((x - x3) * y4 + y3 * (x4 - x)) / (x4 - x3);
newFace->SetVertex(2, XPoint(x, y));
@@ -203,7 +203,7 @@ void XArcWallUnit::Tessellate(double xBeg, double nStep, int num, DList<X3DFace>
nFlag |= FLAG_TRIANGLE;
}
else if (nFlag2 < 0)
{ // 5边形+三角形
{ // 5边形+三角形
double y = ((x - x3) * y2 + y3 * (x2 - x)) / (x2 - x3);
double yy = ((x - x3) * y4 + y3 * (x4 - x)) / (x4 - x3);
newFace->SetVertex(2, XPoint(x, yy));
@@ -239,9 +239,9 @@ void XArcWallUnit::Tessellate(DList<X3DFace> &lstSectFaces, double nHeight,
{
double xMin = xHoleBeg, xMax = xHoleEnd;
double xBeg = xWallBeg;
int nCirDiv = GetCirDivNum(nRadius, _AS_SYS_UNIT(g_nCirDeviation)); //整圆的分段数目
int nCirDiv = GetCirDivNum(nRadius, _AS_SYS_UNIT(g_nCirDeviation)); //整圆的分段数目
//1. 输出xBeg~xMin的一段墙(四边形)
//1. 输出xBeg~xMin的一段墙(四边形)
if (xMin-xBeg > _DIST_SNAP)
{
int nDivNum = AS_INT((xMin - xBeg) / (2.0 * PI * nRadius) * nCirDiv);
@@ -255,34 +255,34 @@ void XArcWallUnit::Tessellate(DList<X3DFace> &lstSectFaces, double nHeight,
return;
}
//2. 输出xMin~xMax的一段墙(包含洞口)
XPolygonEx polyOut; //外轮廓-展开坐标系
//2. 输出xMin~xMax的一段墙(包含洞口)
XPolygonEx polyOut; //外轮廓-展开坐标系
polyOut.AppendNode(XPoint(xMin,0), bHasBot);
polyOut.AppendNode(XPoint(xMax, 0), bHasRight);
polyOut.AppendNode(XPoint(xMax, nHeight), bHasTop);
polyOut.AppendNode(XPoint(xMin, nHeight), (bHasLeft && fabs(xMin - xBeg) < _DIST_SNAP));
//在展开坐标系,分解为三角形
//在展开坐标系,分解为三角形
DList<X3DFace> lstFaces;
AsTriangleFaces(polyOut, lstHoles, lstFaces);
// 根据x坐标排序顶点(可能导致顺时针顶点方向)
// 根据x坐标排序顶点(可能导致顺时针顶点方向)
for(int i = 0; i < lstFaces.Length(); i++)
{
X3DFace *pFace = lstFaces[i];
SortVertex(pFace);
}
//3. 在展开坐标系,用分弧精度切割三角形,形成三角形或4边形
//3. 在展开坐标系,用分弧精度切割三角形,形成三角形或4边形
int num = AS_INT((xMax - xMin) / (2.0 * PI * nRadius) * nCirDiv);
num = max(1, num);
double nStep = (xMax - xMin) / num;
Tessellate(xMin, nStep, num, lstFaces, lstSectFaces);
}
// 对xBeg开始,以步长nStep共nDivNum步,高度为nHeight,进行镶嵌,
// 结果存入lstSectFaces。bHasTop, bHasBot, bHasLeft, bHasRight,外围边的可见性
// 对xBeg开始,以步长nStep共nDivNum步,高度为nHeight,进行镶嵌,
// 结果存入lstSectFaces。bHasTop, bHasBot, bHasLeft, bHasRight,外围边的可见性
void XArcWallUnit::Tessellate(DList<X3DFace> &lstSectFaces, double xBeg, double nStep, int nDivNum, double nHeight,
BOOL bHasTop, BOOL bHasBot, BOOL bHasLeft, BOOL bHasRight)
{
@@ -293,7 +293,7 @@ void XArcWallUnit::Tessellate(DList<X3DFace> &lstSectFaces, double xBeg, double
X3DFace *pFace = new X3DFace;
int nFlag = pFace->GetFlag();
// 底-右-顶-左
// 底-右-顶-左
if (!bHasBot)
{
nFlag |= 0x01;
@@ -333,8 +333,8 @@ void XArcWallUnit::Tessellate(DList<X3DFace> &lstSectFaces, double xBeg, double
}
}
// 把平面(含洞口)的模型,化解为三角形
// z坐标全部为0
// 把平面(含洞口)的模型,化解为三角形
// z坐标全部为0
int XArcWallUnit::AsTriangleFaces(const XPolygonEx &polyOut, const DList<XPoly2D> &lstHoles, DList<X3DFace> &lstFaces)
{
XTrianglePface lstTris;
@@ -364,8 +364,8 @@ int XArcWallUnit::AsTriangleFaces(const XPolygonEx &polyOut, const DList<XPoly2D
return RTERROR;
}
// 把平面(含洞口)的模型,化解为三角形
// z坐标全部为0
// 把平面(含洞口)的模型,化解为三角形
// z坐标全部为0
int XArcWallUnit::AsTriangleFaces(const XPoly2D &polyOut, const DList<XPoly2D> &lstHoles, DList<X3DFace> &lstFaces)
{
XPoly poly1;
@@ -414,7 +414,7 @@ void XArcWallUnit::SortVertex(X3DFace *pFace)
XVector3D vtNew = pFace->GetNormal();
if ((vtNew & vtOld) < 0)
{
// 可见标记也要反转
// 可见标记也要反转
BOOL b1 = bInvis1, b2 = bInvis2, b3 = bInvis3;
bInvis1 = b2;
bInvis2 = b3;