|
|
|
|
@ -30,44 +30,47 @@ namespace Metamesh |
|
|
|
|
|
|
|
|
|
//float PHI = (1 + Mathf.Sqrt(5f)) / 2; |
|
|
|
|
const float PHI = 1.618034f; |
|
|
|
|
|
|
|
|
|
public PolyhedronData IDATA = new PolyhedronData( |
|
|
|
|
"icosahedron", |
|
|
|
|
"Regular", |
|
|
|
|
new List<Vector3> { |
|
|
|
|
new Vector3(0, PHI, -1), |
|
|
|
|
new Vector3(-PHI, 1, 0), |
|
|
|
|
new Vector3(-1, 0, -PHI), |
|
|
|
|
new Vector3(1, 0, -PHI), |
|
|
|
|
new Vector3(PHI, 1, 0), |
|
|
|
|
new Vector3(0, PHI, 1), |
|
|
|
|
new Vector3(-1, 0, PHI), |
|
|
|
|
new Vector3(-PHI, -1, 0), |
|
|
|
|
new Vector3(0, -PHI, -1), |
|
|
|
|
new Vector3(PHI, -1, 0), |
|
|
|
|
new Vector3(1, 0, PHI), |
|
|
|
|
new Vector3(0, -PHI, 1), |
|
|
|
|
new List<Vector3> |
|
|
|
|
{ |
|
|
|
|
new Vector3(0, PHI, -1), |
|
|
|
|
new Vector3(-PHI, 1, 0), |
|
|
|
|
new Vector3(-1, 0, -PHI), |
|
|
|
|
new Vector3(1, 0, -PHI), |
|
|
|
|
new Vector3(PHI, 1, 0), |
|
|
|
|
new Vector3(0, PHI, 1), |
|
|
|
|
new Vector3(-1, 0, PHI), |
|
|
|
|
new Vector3(-PHI, -1, 0), |
|
|
|
|
new Vector3(0, -PHI, -1), |
|
|
|
|
new Vector3(PHI, -1, 0), |
|
|
|
|
new Vector3(1, 0, PHI), |
|
|
|
|
new Vector3(0, -PHI, 1), |
|
|
|
|
}, |
|
|
|
|
new List<List<int>> { |
|
|
|
|
new List<int> {0, 2, 1}, |
|
|
|
|
new List<int> {0, 3, 2}, |
|
|
|
|
new List<int> {0, 4, 3}, |
|
|
|
|
new List<int> {0, 5, 4}, |
|
|
|
|
new List<int> {0, 1, 5}, |
|
|
|
|
new List<int> {7, 6, 1}, |
|
|
|
|
new List<int> {8, 7, 2}, |
|
|
|
|
new List<int> {9, 8, 3}, |
|
|
|
|
new List<int> {10, 9, 4}, |
|
|
|
|
new List<int> {6, 10, 5}, |
|
|
|
|
new List<int> {2, 7, 1}, |
|
|
|
|
new List<int> {3, 8, 2}, |
|
|
|
|
new List<int> {4, 9, 3}, |
|
|
|
|
new List<int> {5, 10, 4}, |
|
|
|
|
new List<int> {1, 6, 5}, |
|
|
|
|
new List<int> {11, 6, 7}, |
|
|
|
|
new List<int> {11, 7, 8}, |
|
|
|
|
new List<int> {11, 8, 9}, |
|
|
|
|
new List<int> {11, 9, 10}, |
|
|
|
|
new List<int> {11, 10, 6}, |
|
|
|
|
new List<List<int>> |
|
|
|
|
{ |
|
|
|
|
new List<int> { 0, 2, 1 }, |
|
|
|
|
new List<int> { 0, 3, 2 }, |
|
|
|
|
new List<int> { 0, 4, 3 }, |
|
|
|
|
new List<int> { 0, 5, 4 }, |
|
|
|
|
new List<int> { 0, 1, 5 }, |
|
|
|
|
new List<int> { 7, 6, 1 }, |
|
|
|
|
new List<int> { 8, 7, 2 }, |
|
|
|
|
new List<int> { 9, 8, 3 }, |
|
|
|
|
new List<int> { 10, 9, 4 }, |
|
|
|
|
new List<int> { 6, 10, 5 }, |
|
|
|
|
new List<int> { 2, 7, 1 }, |
|
|
|
|
new List<int> { 3, 8, 2 }, |
|
|
|
|
new List<int> { 4, 9, 3 }, |
|
|
|
|
new List<int> { 5, 10, 4 }, |
|
|
|
|
new List<int> { 1, 6, 5 }, |
|
|
|
|
new List<int> { 11, 6, 7 }, |
|
|
|
|
new List<int> { 11, 7, 8 }, |
|
|
|
|
new List<int> { 11, 8, 9 }, |
|
|
|
|
new List<int> { 11, 9, 10 }, |
|
|
|
|
new List<int> { 11, 10, 6 }, |
|
|
|
|
} |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
@ -78,11 +81,11 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
return b; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return HighestCommonFactor(b, r); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void SetIndices() |
|
|
|
|
{ |
|
|
|
|
var indexCount = 12; // 12 vertices already assigned |
|
|
|
|
@ -96,6 +99,7 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
g = HighestCommonFactor(m, n); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
m1 = m / g; |
|
|
|
|
n1 = n / g; |
|
|
|
|
|
|
|
|
|
@ -137,6 +141,7 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
vecToidx[idx] = vecToidx[idxR]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (vDist[isoId][0] > 2) |
|
|
|
|
{ |
|
|
|
|
closestTo[vecToidx[idx]] = new List<int> { -vDist[isoId][0], vDist[isoId][1], vecToidx[idx] }; |
|
|
|
|
@ -148,7 +153,8 @@ namespace Metamesh |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.IDATA.edgematch = new List<(int, string, int, string)> { |
|
|
|
|
this.IDATA.edgematch = new List<(int, string, int, string)> |
|
|
|
|
{ |
|
|
|
|
(1, "B", 0, ""), |
|
|
|
|
(2, "B", 0, ""), |
|
|
|
|
(3, "B", 0, ""), |
|
|
|
|
@ -261,11 +267,13 @@ namespace Metamesh |
|
|
|
|
vecToidx[idx] = indexCount++; |
|
|
|
|
if (vDist[isoId][0] > 2) |
|
|
|
|
{ |
|
|
|
|
closestTo[vecToidx[idx]] = new List<int> { -vDist[isoId][0], vDist[isoId][1], vecToidx[idx] }; |
|
|
|
|
closestTo[vecToidx[idx]] = new List<int> |
|
|
|
|
{ -vDist[isoId][0], vDist[isoId][1], vecToidx[idx] }; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
closestTo[vecToidx[idx]] = new List<int> { verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx] }; |
|
|
|
|
closestTo[vecToidx[idx]] = new List<int> |
|
|
|
|
{ verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx] }; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -299,11 +307,14 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
if (x < this.max[y] && x < this.max[y + 1] + 1) |
|
|
|
|
{ |
|
|
|
|
this.innerFacets.Add(new List<string> { "|" + x + "|" + y, "|" + x + "|" + (y + 1), "|" + (x + 1) + "|" + y }); |
|
|
|
|
this.innerFacets.Add(new List<string> |
|
|
|
|
{ "|" + x + "|" + y, "|" + x + "|" + (y + 1), "|" + (x + 1) + "|" + y }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (y > 0 && x < this.max[y - 1] && x + 1 < this.max[y] + 1) |
|
|
|
|
{ |
|
|
|
|
this.innerFacets.Add(new List<string> { "|" + x + "|" + y, "|" + (x + 1) + "|" + y, "|" + (x + 1) + "|" + (y - 1) }); |
|
|
|
|
this.innerFacets.Add(new List<string> |
|
|
|
|
{ "|" + x + "|" + y, "|" + (x + 1) + "|" + y, "|" + (x + 1) + "|" + (y - 1) }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -383,8 +394,10 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
point.RotateNeg120(this.m, this.n); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
temp.Add(point.Clone()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.isoVecsOBOA.Add(temp); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -403,8 +416,10 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
point.Rotate120(this.m, this.n); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
temp.Add(point.Clone()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.isoVecsBAOA.Add(temp); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -445,7 +460,6 @@ namespace Metamesh |
|
|
|
|
/**Creates a primary triangle |
|
|
|
|
* @internal |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
public PrimaryIsoTriangle Build(int m, int n) |
|
|
|
|
{ |
|
|
|
|
var vertices = new List<IsoVector>(); |
|
|
|
|
@ -490,16 +504,11 @@ namespace Metamesh |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//order vertices by x and then y |
|
|
|
|
vertices.Sort((a, b) => |
|
|
|
|
{ |
|
|
|
|
return a.x - b.x; |
|
|
|
|
}); |
|
|
|
|
vertices.Sort((a, b) => { return a.x - b.x; }); |
|
|
|
|
|
|
|
|
|
vertices.Sort((a, b) => |
|
|
|
|
{ |
|
|
|
|
return a.y - b.y; |
|
|
|
|
}); |
|
|
|
|
vertices.Sort((a, b) => { return a.y - b.y; }); |
|
|
|
|
|
|
|
|
|
var min = Enumerable.Repeat(int.MaxValue, m + n + 1).ToList(); |
|
|
|
|
var max = Enumerable.Repeat(int.MinValue, m + n + 1).ToList(); |
|
|
|
|
@ -524,14 +533,17 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
v.RotateNeg120(m, n); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (primVert == "B") |
|
|
|
|
{ |
|
|
|
|
v.Rotate120(m, n); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (v.x < 0) |
|
|
|
|
{ |
|
|
|
|
return v.y; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return v.x + v.y; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
@ -571,40 +583,32 @@ namespace Metamesh |
|
|
|
|
closest = 6; |
|
|
|
|
dist = distFromO[i]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (distFromO[i] < distFromA[i] && distFromO[i] < distFromB[i]) |
|
|
|
|
{ |
|
|
|
|
closest = 2; |
|
|
|
|
dist = distFromO[i]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (distFromA[i] < distFromO[i] && distFromA[i] < distFromB[i]) |
|
|
|
|
{ |
|
|
|
|
closest = 1; |
|
|
|
|
dist = distFromA[i]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (distFromB[i] < distFromA[i] && distFromB[i] < distFromO[i]) |
|
|
|
|
{ |
|
|
|
|
closest = 0; |
|
|
|
|
dist = distFromB[i]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vertData.Add(new List<int> { closest, dist, vertices[i].x, vertices[i].y }); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vertData.Sort((a, b) => |
|
|
|
|
{ |
|
|
|
|
return a[2].CompareTo(b[2]); |
|
|
|
|
}); |
|
|
|
|
vertData.Sort((a, b) => |
|
|
|
|
{ |
|
|
|
|
return a[3].CompareTo(b[3]); |
|
|
|
|
}); |
|
|
|
|
vertData.Sort((a, b) => |
|
|
|
|
{ |
|
|
|
|
return a[1].CompareTo(b[1]); |
|
|
|
|
}); |
|
|
|
|
vertData.Sort((a, b) => |
|
|
|
|
{ |
|
|
|
|
return a[0].CompareTo(b[0]); |
|
|
|
|
}); |
|
|
|
|
vertData.Sort((a, b) => { return a[2].CompareTo(b[2]); }); |
|
|
|
|
vertData.Sort((a, b) => { return a[3].CompareTo(b[3]); }); |
|
|
|
|
vertData.Sort((a, b) => { return a[1].CompareTo(b[1]); }); |
|
|
|
|
vertData.Sort((a, b) => { return a[0].CompareTo(b[0]); }); |
|
|
|
|
|
|
|
|
|
for (var v = 0; v < vertData.Count; v++) |
|
|
|
|
{ |
|
|
|
|
@ -652,17 +656,16 @@ namespace Metamesh |
|
|
|
|
public int sharedNodes; |
|
|
|
|
public int poleNodes; |
|
|
|
|
|
|
|
|
|
public GeodesicData( |
|
|
|
|
private GeodesicData( |
|
|
|
|
string name, |
|
|
|
|
string category, |
|
|
|
|
List<Vector3> vertex, |
|
|
|
|
List<List<int>> face |
|
|
|
|
) : base(name, category, vertex, face) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void innerToData(int face, PrimaryIsoTriangle primTri) |
|
|
|
|
private void InnerToData(int face, PrimaryIsoTriangle primTri) |
|
|
|
|
{ |
|
|
|
|
for (var i = 0; i < primTri.innerFacets.Count; i++) |
|
|
|
|
{ |
|
|
|
|
@ -670,7 +673,7 @@ namespace Metamesh |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void MapABOBtoDATA(int faceNb, PrimaryIsoTriangle primTri) |
|
|
|
|
private void MapABOBtoDATA(int faceNb, PrimaryIsoTriangle primTri) |
|
|
|
|
{ |
|
|
|
|
var fr = primTri.IDATA.edgematch[faceNb].Item1; |
|
|
|
|
for (var i = 0; i < primTri.isoVecsABOB.Count; i++) |
|
|
|
|
@ -687,13 +690,13 @@ namespace Metamesh |
|
|
|
|
temp.Add(fr + "|" + primTri.isoVecsABOB[i][j].x + "|" + primTri.isoVecsABOB[i][j].y); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
this.face.Add(new List<int> { primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]] }); |
|
|
|
|
|
|
|
|
|
this.face.Add(new List<int> |
|
|
|
|
{ primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]] }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* @internal |
|
|
|
|
*/ |
|
|
|
|
public void MapOBOAtoDATA(int faceNb, PrimaryIsoTriangle primTri) |
|
|
|
|
|
|
|
|
|
private void MapOBOAtoDATA(int faceNb, PrimaryIsoTriangle primTri) |
|
|
|
|
{ |
|
|
|
|
var fr = primTri.IDATA.edgematch[faceNb].Item1; |
|
|
|
|
for (var i = 0; i < primTri.isoVecsOBOA.Count; i++) |
|
|
|
|
@ -710,13 +713,13 @@ namespace Metamesh |
|
|
|
|
temp.Add(fr + "|" + primTri.isoVecsOBOA[i][j].x + "|" + primTri.isoVecsOBOA[i][j].y); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
this.face.Add(new List<int> { primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]] }); |
|
|
|
|
|
|
|
|
|
this.face.Add(new List<int> |
|
|
|
|
{ primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]] }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* @internal |
|
|
|
|
*/ |
|
|
|
|
public void MapBAOAtoDATA(int faceNb, PrimaryIsoTriangle primTri) |
|
|
|
|
|
|
|
|
|
private void MapBAOAtoDATA(int faceNb, PrimaryIsoTriangle primTri) |
|
|
|
|
{ |
|
|
|
|
var fr = primTri.IDATA.edgematch[faceNb].Item3; |
|
|
|
|
for (var i = 0; i < primTri.isoVecsBAOA.Count; i++) |
|
|
|
|
@ -733,19 +736,20 @@ namespace Metamesh |
|
|
|
|
temp.Add(fr + "|" + primTri.isoVecsBAOA[i][j].x + "|" + primTri.isoVecsBAOA[i][j].y); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
this.face.Add(new List<int> { primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]] }); |
|
|
|
|
|
|
|
|
|
this.face.Add(new List<int> |
|
|
|
|
{ primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]] }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
/** |
|
|
|
|
* @internal |
|
|
|
|
*/ |
|
|
|
|
public void OrderData(PrimaryIsoTriangle primTri) |
|
|
|
|
|
|
|
|
|
private void OrderData(PrimaryIsoTriangle primTri) |
|
|
|
|
{ |
|
|
|
|
var nearTo = new Dictionary<int, List<List<int>>>(); |
|
|
|
|
for (var i = 0; i < 13; i++) |
|
|
|
|
{ |
|
|
|
|
nearTo[i] = new List<List<int>>(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var close = primTri.closestTo; |
|
|
|
|
for (var i = 0; i < close.Count; i++) |
|
|
|
|
{ |
|
|
|
|
@ -761,6 +765,7 @@ namespace Metamesh |
|
|
|
|
nearTo[12].Add(new List<int> { i, close[i][0] }); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
var near = new List<int>(); |
|
|
|
|
for (var i = 0; i < 12; i++) |
|
|
|
|
@ -772,10 +777,7 @@ namespace Metamesh |
|
|
|
|
var nearIndex = 12; |
|
|
|
|
for (var i = 0; i < 12; i++) |
|
|
|
|
{ |
|
|
|
|
nearTo[i].Sort((a, b) => |
|
|
|
|
{ |
|
|
|
|
return a[1] - b[1]; |
|
|
|
|
}); |
|
|
|
|
nearTo[i].Sort((a, b) => { return a[1] - b[1]; }); |
|
|
|
|
/* |
|
|
|
|
for (var j = 0; j < nearTo[i].Count; j++) |
|
|
|
|
{ |
|
|
|
|
@ -787,6 +789,7 @@ namespace Metamesh |
|
|
|
|
near[item[0]] = nearIndex++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
for (var j = 0; j < nearTo[12].Count; j++) |
|
|
|
|
{ |
|
|
|
|
@ -797,6 +800,7 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
near[item[0]] = nearIndex++; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
for (var i = 0; i < this.vertex.Count; i++) |
|
|
|
|
{ |
|
|
|
|
@ -833,7 +837,7 @@ namespace Metamesh |
|
|
|
|
this.poleNodes = this.vertex.Count - this.sharedNodes; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<int> SetOrder(int m, List<int> faces) |
|
|
|
|
private List<int> SetOrder(int m, List<int> faces) |
|
|
|
|
{ |
|
|
|
|
var adjVerts = new List<int>(); |
|
|
|
|
var dualFaces = new List<int>(); |
|
|
|
|
@ -863,13 +867,15 @@ namespace Metamesh |
|
|
|
|
f++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.adjacentFaces.Add(adjVerts); |
|
|
|
|
return dualFaces; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public PolyhedronData ToGoldbergPolyhedronData() |
|
|
|
|
{ |
|
|
|
|
var goldbergPolyhedronData = new PolyhedronData("GeoDual", "Goldberg", new List<Vector3>(), new List<List<int>>()); |
|
|
|
|
var goldbergPolyhedronData = |
|
|
|
|
new PolyhedronData("GeoDual", "Goldberg", new List<Vector3>(), new List<List<int>>()); |
|
|
|
|
goldbergPolyhedronData.name = "GD dual"; |
|
|
|
|
var verticesNb = this.vertex.Count; |
|
|
|
|
var map = new List<int>[verticesNb]; |
|
|
|
|
@ -877,6 +883,7 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
map[v] = new List<int>(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (var f = 0; f < this.face.Count; f++) |
|
|
|
|
{ |
|
|
|
|
for (var i = 0; i < 3; i++) |
|
|
|
|
@ -884,6 +891,7 @@ namespace Metamesh |
|
|
|
|
map[this.face[f][i]].Add(f); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
float cx; |
|
|
|
|
float cy; |
|
|
|
|
float cz; |
|
|
|
|
@ -901,6 +909,7 @@ namespace Metamesh |
|
|
|
|
{ |
|
|
|
|
goldbergPolyhedronData.face[m] = tempFace; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (var el in map[m]) |
|
|
|
|
{ |
|
|
|
|
cx = 0; |
|
|
|
|
@ -925,8 +934,10 @@ namespace Metamesh |
|
|
|
|
goldbergPolyhedronData.vertex[el] = tempVertex; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return goldbergPolyhedronData; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -936,7 +947,8 @@ namespace Metamesh |
|
|
|
|
var geodesicData = new GeodesicData( |
|
|
|
|
"Geodesic-m-n", |
|
|
|
|
"Geodesic", |
|
|
|
|
new List<Vector3>() { |
|
|
|
|
new List<Vector3>() |
|
|
|
|
{ |
|
|
|
|
new Vector3(0, PHI, -1), |
|
|
|
|
new Vector3(-PHI, 1, 0), |
|
|
|
|
new Vector3(-1, 0, -PHI), |
|
|
|
|
@ -963,15 +975,17 @@ namespace Metamesh |
|
|
|
|
for (var f = 0; f < primTri.IDATA.face.Count; f++) |
|
|
|
|
{ |
|
|
|
|
primTri.MapToFace(f, geodesicData); |
|
|
|
|
geodesicData.innerToData(f, primTri); |
|
|
|
|
geodesicData.InnerToData(f, primTri); |
|
|
|
|
if (primTri.IDATA.edgematch[f].Item2 == "B") |
|
|
|
|
{ |
|
|
|
|
geodesicData.MapABOBtoDATA(f, primTri); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (primTri.IDATA.edgematch[f].Item2 == "O") |
|
|
|
|
{ |
|
|
|
|
geodesicData.MapOBOAtoDATA(f, primTri); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (primTri.IDATA.edgematch[f].Item4 == "A") |
|
|
|
|
{ |
|
|
|
|
geodesicData.MapBAOAtoDATA(f, primTri); |
|
|
|
|
@ -995,5 +1009,4 @@ namespace Metamesh |
|
|
|
|
return geodesicData; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |