diff --git a/Assets/UltraCombos.Metamesh/Editor/GeodesicMesh.cs b/Assets/UltraCombos.Metamesh/Editor/GeodesicMesh.cs index e3e0a62..7687aa4 100644 --- a/Assets/UltraCombos.Metamesh/Editor/GeodesicMesh.cs +++ b/Assets/UltraCombos.Metamesh/Editor/GeodesicMesh.cs @@ -12,15 +12,37 @@ namespace Metamesh O, } + public class Constant + { + public static float PHI = (1 + Mathf.Sqrt(5f)) / 2; + + public static Dictionary VertexMap => new Dictionary + { + { 0, new Vector3(0, PHI, -1) }, + { 1, new Vector3(-PHI, 1, 0) }, + { 2, new Vector3(-1, 0, -PHI) }, + { 3, new Vector3(1, 0, -PHI) }, + { 4, new Vector3(PHI, 1, 0) }, + { 5, new Vector3(0, PHI, 1) }, + { 6, new Vector3(-1, 0, PHI) }, + { 7, new Vector3(-PHI, -1, 0) }, + { 8, new Vector3(0, -PHI, -1) }, + { 9, new Vector3(PHI, -1, 0) }, + { 10, new Vector3(1, 0, PHI) }, + { 11, new Vector3(0, -PHI, 1) }, + }; + } + public class PrimaryIsoTriangle { + // ReSharper disable InconsistentNaming private int m; private int n; private List cartesian = new List(); private List vertices = new List(); private List max = new List(); private List min = new List(); - public Dictionary vecToidx = new Dictionary(); + public Dictionary vecToIdx = new Dictionary(); private Dictionary> vertByDist = new Dictionary>(); public Dictionary> closestTo = new Dictionary>(); @@ -35,27 +57,12 @@ namespace Metamesh private float coav; private float cobv; - //float PHI = (1 + Mathf.Sqrt(5f)) / 2; - const float PHI = 1.618034f; + static float PHI = (1 + Mathf.Sqrt(5f)) / 2; public PolyhedronData IDATA = new PolyhedronData( "icosahedron", "Regular", - new Dictionary - { - { 0, new Vector3(0, PHI, -1) }, - { 1, new Vector3(-PHI, 1, 0) }, - { 2, new Vector3(-1, 0, -PHI) }, - { 3, new Vector3(1, 0, -PHI) }, - { 4, new Vector3(PHI, 1, 0) }, - { 5, new Vector3(0, PHI, 1) }, - { 6, new Vector3(-1, 0, PHI) }, - { 7, new Vector3(-PHI, -1, 0) }, - { 8, new Vector3(0, -PHI, -1) }, - { 9, new Vector3(PHI, -1, 0) }, - { 10, new Vector3(1, 0, PHI) }, - { 11, new Vector3(0, -PHI, 1) }, - }, + Constant.VertexMap, new List> { new List { 0, 2, 1 }, @@ -96,7 +103,7 @@ namespace Metamesh public void SetIndices() { var indexCount = 12; // 12 vertices already assigned - var vecToidx = new Dictionary(); + var vecToIdx = new Dictionary(); var m = this.m; var n = this.n; var g = m; // hcf of m, n when n != 0 @@ -134,28 +141,28 @@ namespace Metamesh { idx = f + "|" + isoId; idxR = fr + "|" + isoIdR; - if (!(vecToidx.ContainsKey(idx) || vecToidx.ContainsKey(idxR))) + if (!(vecToIdx.ContainsKey(idx) || vecToIdx.ContainsKey(idxR))) { - vecToidx[idx] = indexCount; - vecToidx[idxR] = indexCount; + vecToIdx[idx] = indexCount; + vecToIdx[idxR] = indexCount; indexCount++; } - else if (vecToidx.ContainsKey(idx) && !vecToidx.ContainsKey(idxR)) + else if (vecToIdx.ContainsKey(idx) && !vecToIdx.ContainsKey(idxR)) { - vecToidx[idxR] = vecToidx[idx]; + vecToIdx[idxR] = vecToIdx[idx]; } - else if (vecToidx.ContainsKey(idxR) && !vecToidx.ContainsKey(idx)) + else if (vecToIdx.ContainsKey(idxR) && !vecToIdx.ContainsKey(idx)) { - vecToidx[idx] = vecToidx[idxR]; + vecToIdx[idx] = vecToIdx[idxR]; } if (vDist[isoId][0] > 2) { - closestTo[vecToidx[idx]] = new List { -vDist[isoId][0], vDist[isoId][1], vecToidx[idx] }; + closestTo[vecToIdx[idx]] = new List { -vDist[isoId][0], vDist[isoId][1], vecToIdx[idx] }; } else { - closestTo[vecToidx[idx]] = new List { verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx] }; + closestTo[vecToIdx[idx]] = new List { verts[vDist[isoId][0]], vDist[isoId][1], vecToIdx[idx] }; } } @@ -196,25 +203,25 @@ namespace Metamesh isoId = oVec.x + "|" + oVec.y; idx = f + "|" + isoId; - if (!vecToidx.ContainsKey(idx)) + if (!vecToIdx.ContainsKey(idx)) { - vecToidx[idx] = O; + vecToIdx[idx] = O; closestTo[O] = new List { verts[vDist[isoId][0]], vDist[isoId][1] }; } isoId = aVec.x + "|" + aVec.y; idx = f + "|" + isoId; - if (!vecToidx.ContainsKey(idx)) + if (!vecToIdx.ContainsKey(idx)) { - vecToidx[idx] = A; + vecToIdx[idx] = A; closestTo[A] = new List { verts[vDist[isoId][0]], vDist[isoId][1] }; } isoId = bVec.x + "|" + bVec.y; idx = f + "|" + isoId; - if (!vecToidx.ContainsKey(idx)) + if (!vecToIdx.ContainsKey(idx)) { - vecToidx[idx] = B; + vecToIdx[idx] = B; closestTo[B] = new List { verts[vDist[isoId][0]], vDist[isoId][1] }; } @@ -269,25 +276,25 @@ namespace Metamesh { isoId = this.vertices[i].x + "|" + this.vertices[i].y; idx = f + "|" + isoId; - if (!vecToidx.ContainsKey(idx)) + if (!vecToIdx.ContainsKey(idx)) { - vecToidx[idx] = indexCount++; + vecToIdx[idx] = indexCount++; if (vDist[isoId][0] > 2) { - closestTo[vecToidx[idx]] = new List - { -vDist[isoId][0], vDist[isoId][1], vecToidx[idx] }; + closestTo[vecToIdx[idx]] = new List + { -vDist[isoId][0], vDist[isoId][1], vecToIdx[idx] }; } else { - closestTo[vecToidx[idx]] = new List - { verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx] }; + closestTo[vecToIdx[idx]] = new List + { verts[vDist[isoId][0]], vDist[isoId][1], vecToIdx[idx] }; } } } } this.closestTo = closestTo; - this.vecToidx = vecToidx; + this.vecToIdx = vecToIdx; } public void CalcCoeffs() @@ -455,7 +462,7 @@ namespace Metamesh var tempVec = x * this.cartesian[i].x + y * this.cartesian[i].y + O; //mapped[i] = tempVec; idx = faceNb + "|" + this.vertices[i].x + "|" + this.vertices[i].y; - geodesicData.vertex[this.vecToidx[idx]] = tempVec; + geodesicData.vertex[this.vecToIdx[idx]] = tempVec; } } @@ -668,7 +675,7 @@ namespace Metamesh { for (var i = 0; i < primTri.innerFacets.Count; i++) { - this.face.Add(primTri.innerFacets[i].Select((el) => primTri.vecToidx[face + el]).ToList()); + this.face.Add(primTri.innerFacets[i].Select((el) => primTri.vecToIdx[face + el]).ToList()); } } @@ -690,7 +697,7 @@ namespace Metamesh } } - this.face.Add(Enumerable.Range(0, 3).Select(i => primTri.vecToidx[temp[i]]).ToList()); + this.face.Add(Enumerable.Range(0, 3).Select(i => primTri.vecToIdx[temp[i]]).ToList()); } } @@ -712,7 +719,7 @@ namespace Metamesh } } - this.face.Add(Enumerable.Range(0, 3).Select(i => primTri.vecToidx[temp[i]]).ToList()); + this.face.Add(Enumerable.Range(0, 3).Select(i => primTri.vecToIdx[temp[i]]).ToList()); } } @@ -734,7 +741,7 @@ namespace Metamesh } } - this.face.Add(Enumerable.Range(0, 3).Select(i => primTri.vecToidx[temp[i]]).ToList()); + this.face.Add(Enumerable.Range(0, 3).Select(i => primTri.vecToIdx[temp[i]]).ToList()); } } @@ -900,21 +907,7 @@ namespace Metamesh var geodesicData = new GeodesicData( "Geodesic-m-n", "Geodesic", - new Dictionary() - { - { 0, new Vector3(0, PHI, -1) }, - { 1, new Vector3(-PHI, 1, 0) }, - { 2, new Vector3(-1, 0, -PHI) }, - { 3, new Vector3(1, 0, -PHI) }, - { 4, new Vector3(PHI, 1, 0) }, - { 5, new Vector3(0, PHI, 1) }, - { 6, new Vector3(-1, 0, PHI) }, - { 7, new Vector3(-PHI, -1, 0) }, - { 8, new Vector3(0, -PHI, -1) }, - { 9, new Vector3(PHI, -1, 0) }, - { 10, new Vector3(1, 0, PHI) }, - { 11, new Vector3(0, -PHI, 1) }, - }, + Constant.VertexMap, new List>() );