chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
This commit is contained in:
1 parent
2b0c2055ff
commit
164968b62e
6171 files changed
+191244
-191243
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user