Fixed a missing face on a profile cut

0.6.0-stable
Dahlia Trimble 2008-10-12 08:52:42 +00:00
parent 216787ee1d
commit 116a08f42e
1 changed files with 23 additions and 4 deletions

View File

@ -458,6 +458,10 @@ namespace PrimMesher
return; return;
} }
bool simpleFace = false; // flag to create as few triangles as possible for 3 or 4 side profile
if (sides < 5 && hollow == 0.0f && profileStart == 0.0f && profileEnd == 1.0f)
simpleFace = true;
if (this.calcVertexNormals) if (this.calcVertexNormals)
{ {
if (sides > 4) if (sides > 4)
@ -501,7 +505,7 @@ namespace PrimMesher
} }
} }
} }
else else if (!simpleFace)
{ {
this.coords.Add(center); this.coords.Add(center);
if (this.calcVertexNormals && sides > 4) if (this.calcVertexNormals && sides > 4)
@ -546,7 +550,7 @@ namespace PrimMesher
hollowCoords.Add(newVert); hollowCoords.Add(newVert);
} }
} }
else if (createFaces && angle.angle > 0.0001f) else if (!simpleFace && createFaces && angle.angle > 0.0001f)
{ {
Face newFace = new Face(); Face newFace = new Face();
newFace.v1 = 0; newFace.v1 = 0;
@ -641,6 +645,18 @@ namespace PrimMesher
this.coords.AddRange(hollowCoords); this.coords.AddRange(hollowCoords);
} }
if (simpleFace && createFaces)
{
if (sides == 3)
this.faces.Add(new Face(0, 1, 2));
else if (sides == 4)
{
this.faces.Add(new Face(0, 1, 2));
this.faces.Add(new Face(0, 2, 3));
}
}
} }
public Profile Clone() public Profile Clone()
@ -966,7 +982,7 @@ namespace PrimMesher
hollow *= 1.414f; hollow *= 1.414f;
bool hasProfileCut = false; bool hasProfileCut = false;
if (profileStart < 0.0 || profileEnd < 1.0) if (profileStart > 0.0f || profileEnd < 1.0f)
hasProfileCut = true; hasProfileCut = true;
Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides, true, calcVertexNormals); Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides, true, calcVertexNormals);
@ -1023,7 +1039,7 @@ namespace PrimMesher
int startVert = coordsLen + 1; int startVert = coordsLen + 1;
int endVert = this.coords.Count - 1; int endVert = this.coords.Count - 1;
if (hasProfileCut || hollow > 0.0f) if (sides < 5 || hasProfileCut || hollow > 0.0f)
startVert--; startVert--;
for (int i = startVert; i < endVert; i++) for (int i = startVert; i < endVert; i++)
@ -1067,6 +1083,9 @@ namespace PrimMesher
} }
else done = true; else done = true;
} }
if (calcVertexNormals && sides < 5 && twistBegin == 0.0f && twistEnd == 0.0f)
this.CalcNormals();
} }
public void ExtrudeCircular() public void ExtrudeCircular()