{"ast":null,"code":"import { Vector3, TmpVectors } from \"../Maths/math.vector.js\";\nimport { HighestCommonFactor } from \"../Maths/math.scalar.functions.js\";\nimport { PHI } from \"../Maths/math.constants.js\";\nimport { _IsoVector } from \"../Maths/math.isovector.js\";\n/**\n * Class representing data for one face OAB of an equilateral icosahedron\n * When O is the isovector (0, 0), A is isovector (m, n)\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class _PrimaryIsoTriangle {\n constructor() {\n this.cartesian = [];\n this.vertices = [];\n this.max = [];\n this.min = [];\n this.closestTo = [];\n this.innerFacets = [];\n this.isoVecsABOB = [];\n this.isoVecsOBOA = [];\n this.isoVecsBAOA = [];\n this.vertexTypes = [];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.IDATA = new PolyhedronData(\"icosahedron\", \"Regular\", [[0, PHI, -1], [-PHI, 1, 0], [-1, 0, -PHI], [1, 0, -PHI], [PHI, 1, 0], [0, PHI, 1], [-1, 0, PHI], [-PHI, -1, 0], [0, -PHI, -1], [PHI, -1, 0], [1, 0, PHI], [0, -PHI, 1]], [[0, 2, 1], [0, 3, 2], [0, 4, 3], [0, 5, 4], [0, 1, 5], [7, 6, 1], [8, 7, 2], [9, 8, 3], [10, 9, 4], [6, 10, 5], [2, 7, 1], [3, 8, 2], [4, 9, 3], [5, 10, 4], [1, 6, 5], [11, 6, 7], [11, 7, 8], [11, 8, 9], [11, 9, 10], [11, 10, 6]]);\n }\n /**\n * Creates the PrimaryIsoTriangle Triangle OAB\n * @param m an integer\n * @param n an integer\n */\n //operators\n setIndices() {\n let indexCount = 12; // 12 vertices already assigned\n const vecToidx = {}; //maps iso-vectors to indexCount;\n const m = this.m;\n const n = this.n;\n let g = m; // hcf of m, n when n != 0\n let m1 = 1;\n let n1 = 0;\n if (n !== 0) {\n g = HighestCommonFactor(m, n);\n }\n m1 = m / g;\n n1 = n / g;\n let fr; //face to the right of current face\n let rot; //rotation about which vertex for fr\n let O;\n let A;\n let B;\n const oVec = _IsoVector.Zero();\n const aVec = new _IsoVector(m, n);\n const bVec = new _IsoVector(-n, m + n);\n const oaVec = _IsoVector.Zero();\n const abVec = _IsoVector.Zero();\n const obVec = _IsoVector.Zero();\n let verts = [];\n let idx;\n let idxR;\n let isoId;\n let isoIdR;\n const closestTo = [];\n const vDist = this.vertByDist;\n const matchIdx = (f, fr, isoId, isoIdR) => {\n idx = f + \"|\" + isoId;\n idxR = fr + \"|\" + isoIdR;\n if (!(idx in vecToidx || idxR in vecToidx)) {\n vecToidx[idx] = indexCount;\n vecToidx[idxR] = indexCount;\n indexCount++;\n } else if (idx in vecToidx && !(idxR in vecToidx)) {\n vecToidx[idxR] = vecToidx[idx];\n } else if (idxR in vecToidx && !(idx in vecToidx)) {\n vecToidx[idx] = vecToidx[idxR];\n }\n if (vDist[isoId][0] > 2) {\n closestTo[vecToidx[idx]] = [-vDist[isoId][0], vDist[isoId][1], vecToidx[idx]];\n } else {\n closestTo[vecToidx[idx]] = [verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx]];\n }\n };\n this.IDATA.edgematch = [[1, \"B\"], [2, \"B\"], [3, \"B\"], [4, \"B\"], [0, \"B\"], [10, \"O\", 14, \"A\"], [11, \"O\", 10, \"A\"], [12, \"O\", 11, \"A\"], [13, \"O\", 12, \"A\"], [14, \"O\", 13, \"A\"], [0, \"O\"], [1, \"O\"], [2, \"O\"], [3, \"O\"], [4, \"O\"], [19, \"B\", 5, \"A\"], [15, \"B\", 6, \"A\"], [16, \"B\", 7, \"A\"], [17, \"B\", 8, \"A\"], [18, \"B\", 9, \"A\"]];\n /***edges AB to OB***** rotation about B*/\n for (let f = 0; f < 20; f++) {\n //f current face\n verts = this.IDATA.face[f];\n O = verts[2];\n A = verts[1];\n B = verts[0];\n isoId = oVec.x + \"|\" + oVec.y;\n idx = f + \"|\" + isoId;\n if (!(idx in vecToidx)) {\n vecToidx[idx] = O;\n closestTo[O] = [verts[vDist[isoId][0]], vDist[isoId][1]];\n }\n isoId = aVec.x + \"|\" + aVec.y;\n idx = f + \"|\" + isoId;\n if (!(idx in vecToidx)) {\n vecToidx[idx] = A;\n closestTo[A] = [verts[vDist[isoId][0]], vDist[isoId][1]];\n }\n isoId = bVec.x + \"|\" + bVec.y;\n idx = f + \"|\" + isoId;\n if (!(idx in vecToidx)) {\n vecToidx[idx] = B;\n closestTo[B] = [verts[vDist[isoId][0]], vDist[isoId][1]];\n }\n //for edge vertices\n fr = this.IDATA.edgematch[f][0];\n rot = this.IDATA.edgematch[f][1];\n if (rot === \"B\") {\n for (let i = 1; i < g; i++) {\n abVec.x = m - i * (m1 + n1);\n abVec.y = n + i * m1;\n obVec.x = -i * n1;\n obVec.y = i * (m1 + n1);\n isoId = abVec.x + \"|\" + abVec.y;\n isoIdR = obVec.x + \"|\" + obVec.y;\n matchIdx(f, fr, isoId, isoIdR);\n }\n }\n if (rot === \"O\") {\n for (let i = 1; i < g; i++) {\n obVec.x = -i * n1;\n obVec.y = i * (m1 + n1);\n oaVec.x = i * m1;\n oaVec.y = i * n1;\n isoId = obVec.x + \"|\" + obVec.y;\n isoIdR = oaVec.x + \"|\" + oaVec.y;\n matchIdx(f, fr, isoId, isoIdR);\n }\n }\n fr = this.IDATA.edgematch[f][2];\n rot = this.IDATA.edgematch[f][3];\n if (rot && rot === \"A\") {\n for (let i = 1; i < g; i++) {\n oaVec.x = i * m1;\n oaVec.y = i * n1;\n abVec.x = m - (g - i) * (m1 + n1); //reversed for BA\n abVec.y = n + (g - i) * m1; //reversed for BA\n isoId = oaVec.x + \"|\" + oaVec.y;\n isoIdR = abVec.x + \"|\" + abVec.y;\n matchIdx(f, fr, isoId, isoIdR);\n }\n }\n for (let i = 0; i < this.vertices.length; i++) {\n isoId = this.vertices[i].x + \"|\" + this.vertices[i].y;\n idx = f + \"|\" + isoId;\n if (!(idx in vecToidx)) {\n vecToidx[idx] = indexCount++;\n if (vDist[isoId][0] > 2) {\n closestTo[vecToidx[idx]] = [-vDist[isoId][0], vDist[isoId][1], vecToidx[idx]];\n } else {\n closestTo[vecToidx[idx]] = [verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx]];\n }\n }\n }\n }\n this.closestTo = closestTo;\n this.vecToidx = vecToidx;\n }\n calcCoeffs() {\n const m = this.m;\n const n = this.n;\n const thirdR3 = Math.sqrt(3) / 3;\n const LSQD = m * m + n * n + m * n;\n this.coau = (m + n) / LSQD;\n this.cobu = -n / LSQD;\n this.coav = -thirdR3 * (m - n) / LSQD;\n this.cobv = thirdR3 * (2 * m + n) / LSQD;\n }\n createInnerFacets() {\n const m = this.m;\n const n = this.n;\n for (let y = 0; y < n + m + 1; y++) {\n for (let x = this.min[y]; x < this.max[y] + 1; x++) {\n if (x < this.max[y] && x < this.max[y + 1] + 1) {\n this.innerFacets.push([\"|\" + x + \"|\" + y, \"|\" + x + \"|\" + (y + 1), \"|\" + (x + 1) + \"|\" + y]);\n }\n if (y > 0 && x < this.max[y - 1] && x + 1 < this.max[y] + 1) {\n this.innerFacets.push([\"|\" + x + \"|\" + y, \"|\" + (x + 1) + \"|\" + y, \"|\" + (x + 1) + \"|\" + (y - 1)]);\n }\n }\n }\n }\n edgeVecsABOB() {\n const m = this.m;\n const n = this.n;\n const B = new _IsoVector(-n, m + n);\n for (let y = 1; y < m + n; y++) {\n const point = new _IsoVector(this.min[y], y);\n const prev = new _IsoVector(this.min[y - 1], y - 1);\n const next = new _IsoVector(this.min[y + 1], y + 1);\n const pointR = point.clone();\n const prevR = prev.clone();\n const nextR = next.clone();\n pointR.rotate60About(B);\n prevR.rotate60About(B);\n nextR.rotate60About(B);\n const maxPoint = new _IsoVector(this.max[pointR.y], pointR.y);\n const maxPrev = new _IsoVector(this.max[pointR.y - 1], pointR.y - 1);\n const maxLeftPrev = new _IsoVector(this.max[pointR.y - 1] - 1, pointR.y - 1);\n if (pointR.x !== maxPoint.x || pointR.y !== maxPoint.y) {\n if (pointR.x !== maxPrev.x) {\n // type2\n //up\n this.vertexTypes.push([1, 0, 0]);\n this.isoVecsABOB.push([point, maxPrev, maxLeftPrev]);\n //down\n this.vertexTypes.push([1, 0, 0]);\n this.isoVecsABOB.push([point, maxLeftPrev, maxPoint]);\n } else if (pointR.y === nextR.y) {\n // type1\n //up\n this.vertexTypes.push([1, 1, 0]);\n this.isoVecsABOB.push([point, prev, maxPrev]);\n //down\n this.vertexTypes.push([1, 0, 1]);\n this.isoVecsABOB.push([point, maxPrev, next]);\n } else {\n // type 0\n //up\n this.vertexTypes.push([1, 1, 0]);\n this.isoVecsABOB.push([point, prev, maxPrev]);\n //down\n this.vertexTypes.push([1, 0, 0]);\n this.isoVecsABOB.push([point, maxPrev, maxPoint]);\n }\n }\n }\n }\n mapABOBtoOBOA() {\n const point = new _IsoVector(0, 0);\n for (let i = 0; i < this.isoVecsABOB.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n point.x = this.isoVecsABOB[i][j].x;\n point.y = this.isoVecsABOB[i][j].y;\n if (this.vertexTypes[i][j] === 0) {\n point.rotateNeg120(this.m, this.n);\n }\n temp.push(point.clone());\n }\n this.isoVecsOBOA.push(temp);\n }\n }\n mapABOBtoBAOA() {\n const point = new _IsoVector(0, 0);\n for (let i = 0; i < this.isoVecsABOB.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n point.x = this.isoVecsABOB[i][j].x;\n point.y = this.isoVecsABOB[i][j].y;\n if (this.vertexTypes[i][j] === 1) {\n point.rotate120(this.m, this.n);\n }\n temp.push(point.clone());\n }\n this.isoVecsBAOA.push(temp);\n }\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n MapToFace(faceNb, geodesicData) {\n const F = this.IDATA.face[faceNb];\n const oidx = F[2];\n const aidx = F[1];\n const bidx = F[0];\n const O = Vector3.FromArray(this.IDATA.vertex[oidx]);\n const A = Vector3.FromArray(this.IDATA.vertex[aidx]);\n const B = Vector3.FromArray(this.IDATA.vertex[bidx]);\n const OA = A.subtract(O);\n const OB = B.subtract(O);\n const x = OA.scale(this.coau).add(OB.scale(this.cobu));\n const y = OA.scale(this.coav).add(OB.scale(this.cobv));\n const mapped = [];\n let idx;\n let tempVec = TmpVectors.Vector3[0];\n for (let i = 0; i < this.cartesian.length; i++) {\n tempVec = x.scale(this.cartesian[i].x).add(y.scale(this.cartesian[i].y)).add(O);\n mapped[i] = [tempVec.x, tempVec.y, tempVec.z];\n idx = faceNb + \"|\" + this.vertices[i].x + \"|\" + this.vertices[i].y;\n geodesicData.vertex[this.vecToidx[idx]] = [tempVec.x, tempVec.y, tempVec.z];\n }\n }\n //statics\n /**Creates a primary triangle\n * @internal\n */\n build(m, n) {\n const vertices = [];\n const O = _IsoVector.Zero();\n const A = new _IsoVector(m, n);\n const B = new _IsoVector(-n, m + n);\n vertices.push(O, A, B);\n //max internal isoceles triangle vertices\n for (let y = n; y < m + 1; y++) {\n for (let x = 0; x < m + 1 - y; x++) {\n vertices.push(new _IsoVector(x, y));\n }\n }\n //shared vertices along edges when needed\n if (n > 0) {\n const g = HighestCommonFactor(m, n);\n const m1 = m / g;\n const n1 = n / g;\n for (let i = 1; i < g; i++) {\n vertices.push(new _IsoVector(i * m1, i * n1)); //OA\n vertices.push(new _IsoVector(-i * n1, i * (m1 + n1))); //OB\n vertices.push(new _IsoVector(m - i * (m1 + n1), n + i * m1)); // AB\n }\n //lower rows vertices and their rotations\n const ratio = m / n;\n for (let y = 1; y < n; y++) {\n for (let x = 0; x < y * ratio; x++) {\n vertices.push(new _IsoVector(x, y));\n vertices.push(new _IsoVector(x, y).rotate120(m, n));\n vertices.push(new _IsoVector(x, y).rotateNeg120(m, n));\n }\n }\n }\n //order vertices by x and then y\n vertices.sort((a, b) => {\n return a.x - b.x;\n });\n vertices.sort((a, b) => {\n return a.y - b.y;\n });\n const min = new Array(m + n + 1);\n const max = new Array(m + n + 1);\n for (let i = 0; i < min.length; i++) {\n min[i] = Infinity;\n max[i] = -Infinity;\n }\n let y = 0;\n let x = 0;\n const len = vertices.length;\n for (let i = 0; i < len; i++) {\n x = vertices[i].x;\n y = vertices[i].y;\n min[y] = Math.min(x, min[y]);\n max[y] = Math.max(x, max[y]);\n }\n //calculates the distance of a vertex from a given primary vertex\n const distFrom = (vert, primVert) => {\n const v = vert.clone();\n if (primVert === \"A\") {\n v.rotateNeg120(m, n);\n }\n if (primVert === \"B\") {\n v.rotate120(m, n);\n }\n if (v.x < 0) {\n return v.y;\n }\n return v.x + v.y;\n };\n const cartesian = [];\n const distFromO = [];\n const distFromA = [];\n const distFromB = [];\n const vertByDist = {};\n const vertData = [];\n let closest = -1;\n let dist = -1;\n for (let i = 0; i < len; i++) {\n cartesian[i] = vertices[i].toCartesianOrigin(new _IsoVector(0, 0), 0.5);\n distFromO[i] = distFrom(vertices[i], \"O\");\n distFromA[i] = distFrom(vertices[i], \"A\");\n distFromB[i] = distFrom(vertices[i], \"B\");\n if (distFromO[i] === distFromA[i] && distFromA[i] === distFromB[i]) {\n closest = 3;\n dist = distFromO[i];\n } else if (distFromO[i] === distFromA[i]) {\n closest = 4;\n dist = distFromO[i];\n } else if (distFromA[i] === distFromB[i]) {\n closest = 5;\n dist = distFromA[i];\n } else if (distFromB[i] === distFromO[i]) {\n closest = 6;\n dist = distFromO[i];\n }\n if (distFromO[i] < distFromA[i] && distFromO[i] < distFromB[i]) {\n closest = 2;\n dist = distFromO[i];\n }\n if (distFromA[i] < distFromO[i] && distFromA[i] < distFromB[i]) {\n closest = 1;\n dist = distFromA[i];\n }\n if (distFromB[i] < distFromA[i] && distFromB[i] < distFromO[i]) {\n closest = 0;\n dist = distFromB[i];\n }\n vertData.push([closest, dist, vertices[i].x, vertices[i].y]);\n }\n vertData.sort((a, b) => {\n return a[2] - b[2];\n });\n vertData.sort((a, b) => {\n return a[3] - b[3];\n });\n vertData.sort((a, b) => {\n return a[1] - b[1];\n });\n vertData.sort((a, b) => {\n return a[0] - b[0];\n });\n for (let v = 0; v < vertData.length; v++) {\n vertByDist[vertData[v][2] + \"|\" + vertData[v][3]] = [vertData[v][0], vertData[v][1], v];\n }\n this.m = m;\n this.n = n;\n this.vertices = vertices;\n this.vertByDist = vertByDist;\n this.cartesian = cartesian;\n this.min = min;\n this.max = max;\n return this;\n }\n}\n/** Builds Polyhedron Data\n * @internal\n */\nexport class PolyhedronData {\n constructor(\n /**\n * The name of the polyhedron\n */\n name,\n /**\n * The category of the polyhedron\n */\n category,\n /**\n * vertex data\n */\n vertex,\n /**\n * face data\n */\n face) {\n this.name = name;\n this.category = category;\n this.vertex = vertex;\n this.face = face;\n }\n}\n/**\n * This class Extends the PolyhedronData Class to provide measures for a Geodesic Polyhedron\n */\nexport class GeodesicData extends PolyhedronData {\n /**\n * @internal\n */\n innerToData(face, primTri) {\n for (let i = 0; i < primTri.innerFacets.length; i++) {\n this.face.push(primTri.innerFacets[i].map(el => primTri.vecToidx[face + el]));\n }\n }\n /**\n * @internal\n */\n mapABOBtoDATA(faceNb, primTri) {\n const fr = primTri.IDATA.edgematch[faceNb][0];\n for (let i = 0; i < primTri.isoVecsABOB.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n if (primTri.vertexTypes[i][j] === 0) {\n temp.push(faceNb + \"|\" + primTri.isoVecsABOB[i][j].x + \"|\" + primTri.isoVecsABOB[i][j].y);\n } else {\n temp.push(fr + \"|\" + primTri.isoVecsABOB[i][j].x + \"|\" + primTri.isoVecsABOB[i][j].y);\n }\n }\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\n }\n }\n /**\n * @internal\n */\n mapOBOAtoDATA(faceNb, primTri) {\n const fr = primTri.IDATA.edgematch[faceNb][0];\n for (let i = 0; i < primTri.isoVecsOBOA.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n if (primTri.vertexTypes[i][j] === 1) {\n temp.push(faceNb + \"|\" + primTri.isoVecsOBOA[i][j].x + \"|\" + primTri.isoVecsOBOA[i][j].y);\n } else {\n temp.push(fr + \"|\" + primTri.isoVecsOBOA[i][j].x + \"|\" + primTri.isoVecsOBOA[i][j].y);\n }\n }\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\n }\n }\n /**\n * @internal\n */\n mapBAOAtoDATA(faceNb, primTri) {\n const fr = primTri.IDATA.edgematch[faceNb][2];\n for (let i = 0; i < primTri.isoVecsBAOA.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n if (primTri.vertexTypes[i][j] === 1) {\n temp.push(faceNb + \"|\" + primTri.isoVecsBAOA[i][j].x + \"|\" + primTri.isoVecsBAOA[i][j].y);\n } else {\n temp.push(fr + \"|\" + primTri.isoVecsBAOA[i][j].x + \"|\" + primTri.isoVecsBAOA[i][j].y);\n }\n }\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\n }\n }\n /**\n * @internal\n */\n orderData(primTri) {\n const nearTo = [];\n for (let i = 0; i < 13; i++) {\n nearTo[i] = [];\n }\n const close = primTri.closestTo;\n for (let i = 0; i < close.length; i++) {\n if (close[i][0] > -1) {\n if (close[i][1] > 0) {\n nearTo[close[i][0]].push([i, close[i][1]]);\n }\n } else {\n nearTo[12].push([i, close[i][0]]);\n }\n }\n const near = [];\n for (let i = 0; i < 12; i++) {\n near[i] = i;\n }\n let nearIndex = 12;\n for (let i = 0; i < 12; i++) {\n nearTo[i].sort((a, b) => {\n return a[1] - b[1];\n });\n for (let j = 0; j < nearTo[i].length; j++) {\n near[nearTo[i][j][0]] = nearIndex++;\n }\n }\n for (let j = 0; j < nearTo[12].length; j++) {\n near[nearTo[12][j][0]] = nearIndex++;\n }\n for (let i = 0; i < this.vertex.length; i++) {\n this.vertex[i].push(near[i]);\n }\n this.vertex.sort((a, b) => {\n return a[3] - b[3];\n });\n for (let i = 0; i < this.vertex.length; i++) {\n this.vertex[i].pop();\n }\n for (let i = 0; i < this.face.length; i++) {\n for (let j = 0; j < this.face[i].length; j++) {\n this.face[i][j] = near[this.face[i][j]];\n }\n }\n this.sharedNodes = nearTo[12].length;\n this.poleNodes = this.vertex.length - this.sharedNodes;\n }\n /**\n * @internal\n */\n setOrder(m, faces) {\n const adjVerts = [];\n const dualFaces = [];\n let face = faces.pop();\n dualFaces.push(face);\n let index = this.face[face].indexOf(m);\n index = (index + 2) % 3;\n let v = this.face[face][index];\n adjVerts.push(v);\n let f = 0;\n while (faces.length > 0) {\n face = faces[f];\n if (this.face[face].indexOf(v) > -1) {\n // v is a vertex of face f\n index = (this.face[face].indexOf(v) + 1) % 3;\n v = this.face[face][index];\n adjVerts.push(v);\n dualFaces.push(face);\n faces.splice(f, 1);\n f = 0;\n } else {\n f++;\n }\n }\n this.adjacentFaces.push(adjVerts);\n return dualFaces;\n }\n /**\n * @internal\n */\n toGoldbergPolyhedronData() {\n const goldbergPolyhedronData = new PolyhedronData(\"GeoDual\", \"Goldberg\", [], []);\n goldbergPolyhedronData.name = \"GD dual\";\n const verticesNb = this.vertex.length;\n const map = new Array(verticesNb);\n for (let v = 0; v < verticesNb; v++) {\n map[v] = [];\n }\n for (let f = 0; f < this.face.length; f++) {\n for (let i = 0; i < 3; i++) {\n map[this.face[f][i]].push(f);\n }\n }\n let cx = 0;\n let cy = 0;\n let cz = 0;\n let face = [];\n let vertex = [];\n this.adjacentFaces = [];\n for (let m = 0; m < map.length; m++) {\n goldbergPolyhedronData.face[m] = this.setOrder(m, map[m].concat([]));\n map[m].forEach(el => {\n cx = 0;\n cy = 0;\n cz = 0;\n face = this.face[el];\n for (let i = 0; i < 3; i++) {\n vertex = this.vertex[face[i]];\n cx += vertex[0];\n cy += vertex[1];\n cz += vertex[2];\n }\n goldbergPolyhedronData.vertex[el] = [cx / 3, cy / 3, cz / 3];\n });\n }\n return goldbergPolyhedronData;\n }\n //statics\n /**Builds the data for a Geodesic Polyhedron from a primary triangle\n * @param primTri the primary triangle\n * @internal\n */\n static BuildGeodesicData(primTri) {\n const geodesicData = new GeodesicData(\"Geodesic-m-n\", \"Geodesic\", [[0, PHI, -1], [-PHI, 1, 0], [-1, 0, -PHI], [1, 0, -PHI], [PHI, 1, 0], [0, PHI, 1], [-1, 0, PHI], [-PHI, -1, 0], [0, -PHI, -1], [PHI, -1, 0], [1, 0, PHI], [0, -PHI, 1]], []);\n primTri.setIndices();\n primTri.calcCoeffs();\n primTri.createInnerFacets();\n primTri.edgeVecsABOB();\n primTri.mapABOBtoOBOA();\n primTri.mapABOBtoBAOA();\n for (let f = 0; f < primTri.IDATA.face.length; f++) {\n primTri.MapToFace(f, geodesicData);\n geodesicData.innerToData(f, primTri);\n if (primTri.IDATA.edgematch[f][1] === \"B\") {\n geodesicData.mapABOBtoDATA(f, primTri);\n }\n if (primTri.IDATA.edgematch[f][1] === \"O\") {\n geodesicData.mapOBOAtoDATA(f, primTri);\n }\n if (primTri.IDATA.edgematch[f][3] === \"A\") {\n geodesicData.mapBAOAtoDATA(f, primTri);\n }\n }\n geodesicData.orderData(primTri);\n const radius = 1;\n geodesicData.vertex = geodesicData.vertex.map(function (el) {\n const a = el[0];\n const b = el[1];\n const c = el[2];\n const d = Math.sqrt(a * a + b * b + c * c);\n el[0] *= radius / d;\n el[1] *= radius / d;\n el[2] *= radius / d;\n return el;\n });\n return geodesicData;\n }\n}","map":{"version":3,"names":["Vector3","TmpVectors","HighestCommonFactor","PHI","_IsoVector","_PrimaryIsoTriangle","constructor","cartesian","vertices","max","min","closestTo","innerFacets","isoVecsABOB","isoVecsOBOA","isoVecsBAOA","vertexTypes","IDATA","PolyhedronData","setIndices","indexCount","vecToidx","m","n","g","m1","n1","fr","rot","O","A","B","oVec","Zero","aVec","bVec","oaVec","abVec","obVec","verts","idx","idxR","isoId","isoIdR","vDist","vertByDist","matchIdx","f","edgematch","face","x","y","i","length","calcCoeffs","thirdR3","Math","sqrt","LSQD","coau","cobu","coav","cobv","createInnerFacets","push","edgeVecsABOB","point","prev","next","pointR","clone","prevR","nextR","rotate60About","maxPoint","maxPrev","maxLeftPrev","mapABOBtoOBOA","temp","j","rotateNeg120","mapABOBtoBAOA","rotate120","MapToFace","faceNb","geodesicData","F","oidx","aidx","bidx","FromArray","vertex","OA","subtract","OB","scale","add","mapped","tempVec","z","build","ratio","sort","a","b","Array","Infinity","len","distFrom","vert","primVert","v","distFromO","distFromA","distFromB","vertData","closest","dist","toCartesianOrigin","name","category","GeodesicData","innerToData","primTri","map","el","mapABOBtoDATA","mapOBOAtoDATA","mapBAOAtoDATA","orderData","nearTo","close","near","nearIndex","pop","sharedNodes","poleNodes","setOrder","faces","adjVerts","dualFaces","index","indexOf","splice","adjacentFaces","toGoldbergPolyhedronData","goldbergPolyhedronData","verticesNb","cx","cy","cz","concat","forEach","BuildGeodesicData","radius","c","d"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Meshes/geodesicMesh.js"],"sourcesContent":["import { Vector3, TmpVectors } from \"../Maths/math.vector.js\";\nimport { HighestCommonFactor } from \"../Maths/math.scalar.functions.js\";\nimport { PHI } from \"../Maths/math.constants.js\";\nimport { _IsoVector } from \"../Maths/math.isovector.js\";\n/**\n * Class representing data for one face OAB of an equilateral icosahedron\n * When O is the isovector (0, 0), A is isovector (m, n)\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class _PrimaryIsoTriangle {\n constructor() {\n this.cartesian = [];\n this.vertices = [];\n this.max = [];\n this.min = [];\n this.closestTo = [];\n this.innerFacets = [];\n this.isoVecsABOB = [];\n this.isoVecsOBOA = [];\n this.isoVecsBAOA = [];\n this.vertexTypes = [];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.IDATA = new PolyhedronData(\"icosahedron\", \"Regular\", [\n [0, PHI, -1],\n [-PHI, 1, 0],\n [-1, 0, -PHI],\n [1, 0, -PHI],\n [PHI, 1, 0],\n [0, PHI, 1],\n [-1, 0, PHI],\n [-PHI, -1, 0],\n [0, -PHI, -1],\n [PHI, -1, 0],\n [1, 0, PHI],\n [0, -PHI, 1],\n ], [\n [0, 2, 1],\n [0, 3, 2],\n [0, 4, 3],\n [0, 5, 4],\n [0, 1, 5],\n [7, 6, 1],\n [8, 7, 2],\n [9, 8, 3],\n [10, 9, 4],\n [6, 10, 5],\n [2, 7, 1],\n [3, 8, 2],\n [4, 9, 3],\n [5, 10, 4],\n [1, 6, 5],\n [11, 6, 7],\n [11, 7, 8],\n [11, 8, 9],\n [11, 9, 10],\n [11, 10, 6],\n ]);\n }\n /**\n * Creates the PrimaryIsoTriangle Triangle OAB\n * @param m an integer\n * @param n an integer\n */\n //operators\n setIndices() {\n let indexCount = 12; // 12 vertices already assigned\n const vecToidx = {}; //maps iso-vectors to indexCount;\n const m = this.m;\n const n = this.n;\n let g = m; // hcf of m, n when n != 0\n let m1 = 1;\n let n1 = 0;\n if (n !== 0) {\n g = HighestCommonFactor(m, n);\n }\n m1 = m / g;\n n1 = n / g;\n let fr; //face to the right of current face\n let rot; //rotation about which vertex for fr\n let O;\n let A;\n let B;\n const oVec = _IsoVector.Zero();\n const aVec = new _IsoVector(m, n);\n const bVec = new _IsoVector(-n, m + n);\n const oaVec = _IsoVector.Zero();\n const abVec = _IsoVector.Zero();\n const obVec = _IsoVector.Zero();\n let verts = [];\n let idx;\n let idxR;\n let isoId;\n let isoIdR;\n const closestTo = [];\n const vDist = this.vertByDist;\n const matchIdx = (f, fr, isoId, isoIdR) => {\n idx = f + \"|\" + isoId;\n idxR = fr + \"|\" + isoIdR;\n if (!(idx in vecToidx || idxR in vecToidx)) {\n vecToidx[idx] = indexCount;\n vecToidx[idxR] = indexCount;\n indexCount++;\n }\n else if (idx in vecToidx && !(idxR in vecToidx)) {\n vecToidx[idxR] = vecToidx[idx];\n }\n else if (idxR in vecToidx && !(idx in vecToidx)) {\n vecToidx[idx] = vecToidx[idxR];\n }\n if (vDist[isoId][0] > 2) {\n closestTo[vecToidx[idx]] = [-vDist[isoId][0], vDist[isoId][1], vecToidx[idx]];\n }\n else {\n closestTo[vecToidx[idx]] = [verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx]];\n }\n };\n this.IDATA.edgematch = [\n [1, \"B\"],\n [2, \"B\"],\n [3, \"B\"],\n [4, \"B\"],\n [0, \"B\"],\n [10, \"O\", 14, \"A\"],\n [11, \"O\", 10, \"A\"],\n [12, \"O\", 11, \"A\"],\n [13, \"O\", 12, \"A\"],\n [14, \"O\", 13, \"A\"],\n [0, \"O\"],\n [1, \"O\"],\n [2, \"O\"],\n [3, \"O\"],\n [4, \"O\"],\n [19, \"B\", 5, \"A\"],\n [15, \"B\", 6, \"A\"],\n [16, \"B\", 7, \"A\"],\n [17, \"B\", 8, \"A\"],\n [18, \"B\", 9, \"A\"],\n ];\n /***edges AB to OB***** rotation about B*/\n for (let f = 0; f < 20; f++) {\n //f current face\n verts = this.IDATA.face[f];\n O = verts[2];\n A = verts[1];\n B = verts[0];\n isoId = oVec.x + \"|\" + oVec.y;\n idx = f + \"|\" + isoId;\n if (!(idx in vecToidx)) {\n vecToidx[idx] = O;\n closestTo[O] = [verts[vDist[isoId][0]], vDist[isoId][1]];\n }\n isoId = aVec.x + \"|\" + aVec.y;\n idx = f + \"|\" + isoId;\n if (!(idx in vecToidx)) {\n vecToidx[idx] = A;\n closestTo[A] = [verts[vDist[isoId][0]], vDist[isoId][1]];\n }\n isoId = bVec.x + \"|\" + bVec.y;\n idx = f + \"|\" + isoId;\n if (!(idx in vecToidx)) {\n vecToidx[idx] = B;\n closestTo[B] = [verts[vDist[isoId][0]], vDist[isoId][1]];\n }\n //for edge vertices\n fr = this.IDATA.edgematch[f][0];\n rot = this.IDATA.edgematch[f][1];\n if (rot === \"B\") {\n for (let i = 1; i < g; i++) {\n abVec.x = m - i * (m1 + n1);\n abVec.y = n + i * m1;\n obVec.x = -i * n1;\n obVec.y = i * (m1 + n1);\n isoId = abVec.x + \"|\" + abVec.y;\n isoIdR = obVec.x + \"|\" + obVec.y;\n matchIdx(f, fr, isoId, isoIdR);\n }\n }\n if (rot === \"O\") {\n for (let i = 1; i < g; i++) {\n obVec.x = -i * n1;\n obVec.y = i * (m1 + n1);\n oaVec.x = i * m1;\n oaVec.y = i * n1;\n isoId = obVec.x + \"|\" + obVec.y;\n isoIdR = oaVec.x + \"|\" + oaVec.y;\n matchIdx(f, fr, isoId, isoIdR);\n }\n }\n fr = this.IDATA.edgematch[f][2];\n rot = this.IDATA.edgematch[f][3];\n if (rot && rot === \"A\") {\n for (let i = 1; i < g; i++) {\n oaVec.x = i * m1;\n oaVec.y = i * n1;\n abVec.x = m - (g - i) * (m1 + n1); //reversed for BA\n abVec.y = n + (g - i) * m1; //reversed for BA\n isoId = oaVec.x + \"|\" + oaVec.y;\n isoIdR = abVec.x + \"|\" + abVec.y;\n matchIdx(f, fr, isoId, isoIdR);\n }\n }\n for (let i = 0; i < this.vertices.length; i++) {\n isoId = this.vertices[i].x + \"|\" + this.vertices[i].y;\n idx = f + \"|\" + isoId;\n if (!(idx in vecToidx)) {\n vecToidx[idx] = indexCount++;\n if (vDist[isoId][0] > 2) {\n closestTo[vecToidx[idx]] = [-vDist[isoId][0], vDist[isoId][1], vecToidx[idx]];\n }\n else {\n closestTo[vecToidx[idx]] = [verts[vDist[isoId][0]], vDist[isoId][1], vecToidx[idx]];\n }\n }\n }\n }\n this.closestTo = closestTo;\n this.vecToidx = vecToidx;\n }\n calcCoeffs() {\n const m = this.m;\n const n = this.n;\n const thirdR3 = Math.sqrt(3) / 3;\n const LSQD = m * m + n * n + m * n;\n this.coau = (m + n) / LSQD;\n this.cobu = -n / LSQD;\n this.coav = (-thirdR3 * (m - n)) / LSQD;\n this.cobv = (thirdR3 * (2 * m + n)) / LSQD;\n }\n createInnerFacets() {\n const m = this.m;\n const n = this.n;\n for (let y = 0; y < n + m + 1; y++) {\n for (let x = this.min[y]; x < this.max[y] + 1; x++) {\n if (x < this.max[y] && x < this.max[y + 1] + 1) {\n this.innerFacets.push([\"|\" + x + \"|\" + y, \"|\" + x + \"|\" + (y + 1), \"|\" + (x + 1) + \"|\" + y]);\n }\n if (y > 0 && x < this.max[y - 1] && x + 1 < this.max[y] + 1) {\n this.innerFacets.push([\"|\" + x + \"|\" + y, \"|\" + (x + 1) + \"|\" + y, \"|\" + (x + 1) + \"|\" + (y - 1)]);\n }\n }\n }\n }\n edgeVecsABOB() {\n const m = this.m;\n const n = this.n;\n const B = new _IsoVector(-n, m + n);\n for (let y = 1; y < m + n; y++) {\n const point = new _IsoVector(this.min[y], y);\n const prev = new _IsoVector(this.min[y - 1], y - 1);\n const next = new _IsoVector(this.min[y + 1], y + 1);\n const pointR = point.clone();\n const prevR = prev.clone();\n const nextR = next.clone();\n pointR.rotate60About(B);\n prevR.rotate60About(B);\n nextR.rotate60About(B);\n const maxPoint = new _IsoVector(this.max[pointR.y], pointR.y);\n const maxPrev = new _IsoVector(this.max[pointR.y - 1], pointR.y - 1);\n const maxLeftPrev = new _IsoVector(this.max[pointR.y - 1] - 1, pointR.y - 1);\n if (pointR.x !== maxPoint.x || pointR.y !== maxPoint.y) {\n if (pointR.x !== maxPrev.x) {\n // type2\n //up\n this.vertexTypes.push([1, 0, 0]);\n this.isoVecsABOB.push([point, maxPrev, maxLeftPrev]);\n //down\n this.vertexTypes.push([1, 0, 0]);\n this.isoVecsABOB.push([point, maxLeftPrev, maxPoint]);\n }\n else if (pointR.y === nextR.y) {\n // type1\n //up\n this.vertexTypes.push([1, 1, 0]);\n this.isoVecsABOB.push([point, prev, maxPrev]);\n //down\n this.vertexTypes.push([1, 0, 1]);\n this.isoVecsABOB.push([point, maxPrev, next]);\n }\n else {\n // type 0\n //up\n this.vertexTypes.push([1, 1, 0]);\n this.isoVecsABOB.push([point, prev, maxPrev]);\n //down\n this.vertexTypes.push([1, 0, 0]);\n this.isoVecsABOB.push([point, maxPrev, maxPoint]);\n }\n }\n }\n }\n mapABOBtoOBOA() {\n const point = new _IsoVector(0, 0);\n for (let i = 0; i < this.isoVecsABOB.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n point.x = this.isoVecsABOB[i][j].x;\n point.y = this.isoVecsABOB[i][j].y;\n if (this.vertexTypes[i][j] === 0) {\n point.rotateNeg120(this.m, this.n);\n }\n temp.push(point.clone());\n }\n this.isoVecsOBOA.push(temp);\n }\n }\n mapABOBtoBAOA() {\n const point = new _IsoVector(0, 0);\n for (let i = 0; i < this.isoVecsABOB.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n point.x = this.isoVecsABOB[i][j].x;\n point.y = this.isoVecsABOB[i][j].y;\n if (this.vertexTypes[i][j] === 1) {\n point.rotate120(this.m, this.n);\n }\n temp.push(point.clone());\n }\n this.isoVecsBAOA.push(temp);\n }\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n MapToFace(faceNb, geodesicData) {\n const F = this.IDATA.face[faceNb];\n const oidx = F[2];\n const aidx = F[1];\n const bidx = F[0];\n const O = Vector3.FromArray(this.IDATA.vertex[oidx]);\n const A = Vector3.FromArray(this.IDATA.vertex[aidx]);\n const B = Vector3.FromArray(this.IDATA.vertex[bidx]);\n const OA = A.subtract(O);\n const OB = B.subtract(O);\n const x = OA.scale(this.coau).add(OB.scale(this.cobu));\n const y = OA.scale(this.coav).add(OB.scale(this.cobv));\n const mapped = [];\n let idx;\n let tempVec = TmpVectors.Vector3[0];\n for (let i = 0; i < this.cartesian.length; i++) {\n tempVec = x.scale(this.cartesian[i].x).add(y.scale(this.cartesian[i].y)).add(O);\n mapped[i] = [tempVec.x, tempVec.y, tempVec.z];\n idx = faceNb + \"|\" + this.vertices[i].x + \"|\" + this.vertices[i].y;\n geodesicData.vertex[this.vecToidx[idx]] = [tempVec.x, tempVec.y, tempVec.z];\n }\n }\n //statics\n /**Creates a primary triangle\n * @internal\n */\n build(m, n) {\n const vertices = [];\n const O = _IsoVector.Zero();\n const A = new _IsoVector(m, n);\n const B = new _IsoVector(-n, m + n);\n vertices.push(O, A, B);\n //max internal isoceles triangle vertices\n for (let y = n; y < m + 1; y++) {\n for (let x = 0; x < m + 1 - y; x++) {\n vertices.push(new _IsoVector(x, y));\n }\n }\n //shared vertices along edges when needed\n if (n > 0) {\n const g = HighestCommonFactor(m, n);\n const m1 = m / g;\n const n1 = n / g;\n for (let i = 1; i < g; i++) {\n vertices.push(new _IsoVector(i * m1, i * n1)); //OA\n vertices.push(new _IsoVector(-i * n1, i * (m1 + n1))); //OB\n vertices.push(new _IsoVector(m - i * (m1 + n1), n + i * m1)); // AB\n }\n //lower rows vertices and their rotations\n const ratio = m / n;\n for (let y = 1; y < n; y++) {\n for (let x = 0; x < y * ratio; x++) {\n vertices.push(new _IsoVector(x, y));\n vertices.push(new _IsoVector(x, y).rotate120(m, n));\n vertices.push(new _IsoVector(x, y).rotateNeg120(m, n));\n }\n }\n }\n //order vertices by x and then y\n vertices.sort((a, b) => {\n return a.x - b.x;\n });\n vertices.sort((a, b) => {\n return a.y - b.y;\n });\n const min = new Array(m + n + 1);\n const max = new Array(m + n + 1);\n for (let i = 0; i < min.length; i++) {\n min[i] = Infinity;\n max[i] = -Infinity;\n }\n let y = 0;\n let x = 0;\n const len = vertices.length;\n for (let i = 0; i < len; i++) {\n x = vertices[i].x;\n y = vertices[i].y;\n min[y] = Math.min(x, min[y]);\n max[y] = Math.max(x, max[y]);\n }\n //calculates the distance of a vertex from a given primary vertex\n const distFrom = (vert, primVert) => {\n const v = vert.clone();\n if (primVert === \"A\") {\n v.rotateNeg120(m, n);\n }\n if (primVert === \"B\") {\n v.rotate120(m, n);\n }\n if (v.x < 0) {\n return v.y;\n }\n return v.x + v.y;\n };\n const cartesian = [];\n const distFromO = [];\n const distFromA = [];\n const distFromB = [];\n const vertByDist = {};\n const vertData = [];\n let closest = -1;\n let dist = -1;\n for (let i = 0; i < len; i++) {\n cartesian[i] = vertices[i].toCartesianOrigin(new _IsoVector(0, 0), 0.5);\n distFromO[i] = distFrom(vertices[i], \"O\");\n distFromA[i] = distFrom(vertices[i], \"A\");\n distFromB[i] = distFrom(vertices[i], \"B\");\n if (distFromO[i] === distFromA[i] && distFromA[i] === distFromB[i]) {\n closest = 3;\n dist = distFromO[i];\n }\n else if (distFromO[i] === distFromA[i]) {\n closest = 4;\n dist = distFromO[i];\n }\n else if (distFromA[i] === distFromB[i]) {\n closest = 5;\n dist = distFromA[i];\n }\n else if (distFromB[i] === distFromO[i]) {\n closest = 6;\n dist = distFromO[i];\n }\n if (distFromO[i] < distFromA[i] && distFromO[i] < distFromB[i]) {\n closest = 2;\n dist = distFromO[i];\n }\n if (distFromA[i] < distFromO[i] && distFromA[i] < distFromB[i]) {\n closest = 1;\n dist = distFromA[i];\n }\n if (distFromB[i] < distFromA[i] && distFromB[i] < distFromO[i]) {\n closest = 0;\n dist = distFromB[i];\n }\n vertData.push([closest, dist, vertices[i].x, vertices[i].y]);\n }\n vertData.sort((a, b) => {\n return a[2] - b[2];\n });\n vertData.sort((a, b) => {\n return a[3] - b[3];\n });\n vertData.sort((a, b) => {\n return a[1] - b[1];\n });\n vertData.sort((a, b) => {\n return a[0] - b[0];\n });\n for (let v = 0; v < vertData.length; v++) {\n vertByDist[vertData[v][2] + \"|\" + vertData[v][3]] = [vertData[v][0], vertData[v][1], v];\n }\n this.m = m;\n this.n = n;\n this.vertices = vertices;\n this.vertByDist = vertByDist;\n this.cartesian = cartesian;\n this.min = min;\n this.max = max;\n return this;\n }\n}\n/** Builds Polyhedron Data\n * @internal\n */\nexport class PolyhedronData {\n constructor(\n /**\n * The name of the polyhedron\n */\n name, \n /**\n * The category of the polyhedron\n */\n category, \n /**\n * vertex data\n */\n vertex, \n /**\n * face data\n */\n face) {\n this.name = name;\n this.category = category;\n this.vertex = vertex;\n this.face = face;\n }\n}\n/**\n * This class Extends the PolyhedronData Class to provide measures for a Geodesic Polyhedron\n */\nexport class GeodesicData extends PolyhedronData {\n /**\n * @internal\n */\n innerToData(face, primTri) {\n for (let i = 0; i < primTri.innerFacets.length; i++) {\n this.face.push(primTri.innerFacets[i].map((el) => primTri.vecToidx[face + el]));\n }\n }\n /**\n * @internal\n */\n mapABOBtoDATA(faceNb, primTri) {\n const fr = primTri.IDATA.edgematch[faceNb][0];\n for (let i = 0; i < primTri.isoVecsABOB.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n if (primTri.vertexTypes[i][j] === 0) {\n temp.push(faceNb + \"|\" + primTri.isoVecsABOB[i][j].x + \"|\" + primTri.isoVecsABOB[i][j].y);\n }\n else {\n temp.push(fr + \"|\" + primTri.isoVecsABOB[i][j].x + \"|\" + primTri.isoVecsABOB[i][j].y);\n }\n }\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\n }\n }\n /**\n * @internal\n */\n mapOBOAtoDATA(faceNb, primTri) {\n const fr = primTri.IDATA.edgematch[faceNb][0];\n for (let i = 0; i < primTri.isoVecsOBOA.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n if (primTri.vertexTypes[i][j] === 1) {\n temp.push(faceNb + \"|\" + primTri.isoVecsOBOA[i][j].x + \"|\" + primTri.isoVecsOBOA[i][j].y);\n }\n else {\n temp.push(fr + \"|\" + primTri.isoVecsOBOA[i][j].x + \"|\" + primTri.isoVecsOBOA[i][j].y);\n }\n }\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\n }\n }\n /**\n * @internal\n */\n mapBAOAtoDATA(faceNb, primTri) {\n const fr = primTri.IDATA.edgematch[faceNb][2];\n for (let i = 0; i < primTri.isoVecsBAOA.length; i++) {\n const temp = [];\n for (let j = 0; j < 3; j++) {\n if (primTri.vertexTypes[i][j] === 1) {\n temp.push(faceNb + \"|\" + primTri.isoVecsBAOA[i][j].x + \"|\" + primTri.isoVecsBAOA[i][j].y);\n }\n else {\n temp.push(fr + \"|\" + primTri.isoVecsBAOA[i][j].x + \"|\" + primTri.isoVecsBAOA[i][j].y);\n }\n }\n this.face.push([primTri.vecToidx[temp[0]], primTri.vecToidx[temp[1]], primTri.vecToidx[temp[2]]]);\n }\n }\n /**\n * @internal\n */\n orderData(primTri) {\n const nearTo = [];\n for (let i = 0; i < 13; i++) {\n nearTo[i] = [];\n }\n const close = primTri.closestTo;\n for (let i = 0; i < close.length; i++) {\n if (close[i][0] > -1) {\n if (close[i][1] > 0) {\n nearTo[close[i][0]].push([i, close[i][1]]);\n }\n }\n else {\n nearTo[12].push([i, close[i][0]]);\n }\n }\n const near = [];\n for (let i = 0; i < 12; i++) {\n near[i] = i;\n }\n let nearIndex = 12;\n for (let i = 0; i < 12; i++) {\n nearTo[i].sort((a, b) => {\n return a[1] - b[1];\n });\n for (let j = 0; j < nearTo[i].length; j++) {\n near[nearTo[i][j][0]] = nearIndex++;\n }\n }\n for (let j = 0; j < nearTo[12].length; j++) {\n near[nearTo[12][j][0]] = nearIndex++;\n }\n for (let i = 0; i < this.vertex.length; i++) {\n this.vertex[i].push(near[i]);\n }\n this.vertex.sort((a, b) => {\n return a[3] - b[3];\n });\n for (let i = 0; i < this.vertex.length; i++) {\n this.vertex[i].pop();\n }\n for (let i = 0; i < this.face.length; i++) {\n for (let j = 0; j < this.face[i].length; j++) {\n this.face[i][j] = near[this.face[i][j]];\n }\n }\n this.sharedNodes = nearTo[12].length;\n this.poleNodes = this.vertex.length - this.sharedNodes;\n }\n /**\n * @internal\n */\n setOrder(m, faces) {\n const adjVerts = [];\n const dualFaces = [];\n let face = faces.pop();\n dualFaces.push(face);\n let index = this.face[face].indexOf(m);\n index = (index + 2) % 3;\n let v = this.face[face][index];\n adjVerts.push(v);\n let f = 0;\n while (faces.length > 0) {\n face = faces[f];\n if (this.face[face].indexOf(v) > -1) {\n // v is a vertex of face f\n index = (this.face[face].indexOf(v) + 1) % 3;\n v = this.face[face][index];\n adjVerts.push(v);\n dualFaces.push(face);\n faces.splice(f, 1);\n f = 0;\n }\n else {\n f++;\n }\n }\n this.adjacentFaces.push(adjVerts);\n return dualFaces;\n }\n /**\n * @internal\n */\n toGoldbergPolyhedronData() {\n const goldbergPolyhedronData = new PolyhedronData(\"GeoDual\", \"Goldberg\", [], []);\n goldbergPolyhedronData.name = \"GD dual\";\n const verticesNb = this.vertex.length;\n const map = new Array(verticesNb);\n for (let v = 0; v < verticesNb; v++) {\n map[v] = [];\n }\n for (let f = 0; f < this.face.length; f++) {\n for (let i = 0; i < 3; i++) {\n map[this.face[f][i]].push(f);\n }\n }\n let cx = 0;\n let cy = 0;\n let cz = 0;\n let face = [];\n let vertex = [];\n this.adjacentFaces = [];\n for (let m = 0; m < map.length; m++) {\n goldbergPolyhedronData.face[m] = this.setOrder(m, map[m].concat([]));\n map[m].forEach((el) => {\n cx = 0;\n cy = 0;\n cz = 0;\n face = this.face[el];\n for (let i = 0; i < 3; i++) {\n vertex = this.vertex[face[i]];\n cx += vertex[0];\n cy += vertex[1];\n cz += vertex[2];\n }\n goldbergPolyhedronData.vertex[el] = [cx / 3, cy / 3, cz / 3];\n });\n }\n return goldbergPolyhedronData;\n }\n //statics\n /**Builds the data for a Geodesic Polyhedron from a primary triangle\n * @param primTri the primary triangle\n * @internal\n */\n static BuildGeodesicData(primTri) {\n const geodesicData = new GeodesicData(\"Geodesic-m-n\", \"Geodesic\", [\n [0, PHI, -1],\n [-PHI, 1, 0],\n [-1, 0, -PHI],\n [1, 0, -PHI],\n [PHI, 1, 0],\n [0, PHI, 1],\n [-1, 0, PHI],\n [-PHI, -1, 0],\n [0, -PHI, -1],\n [PHI, -1, 0],\n [1, 0, PHI],\n [0, -PHI, 1],\n ], []);\n primTri.setIndices();\n primTri.calcCoeffs();\n primTri.createInnerFacets();\n primTri.edgeVecsABOB();\n primTri.mapABOBtoOBOA();\n primTri.mapABOBtoBAOA();\n for (let f = 0; f < primTri.IDATA.face.length; f++) {\n primTri.MapToFace(f, geodesicData);\n geodesicData.innerToData(f, primTri);\n if (primTri.IDATA.edgematch[f][1] === \"B\") {\n geodesicData.mapABOBtoDATA(f, primTri);\n }\n if (primTri.IDATA.edgematch[f][1] === \"O\") {\n geodesicData.mapOBOAtoDATA(f, primTri);\n }\n if (primTri.IDATA.edgematch[f][3] === \"A\") {\n geodesicData.mapBAOAtoDATA(f, primTri);\n }\n }\n geodesicData.orderData(primTri);\n const radius = 1;\n geodesicData.vertex = geodesicData.vertex.map(function (el) {\n const a = el[0];\n const b = el[1];\n const c = el[2];\n const d = Math.sqrt(a * a + b * b + c * c);\n el[0] *= radius / d;\n el[1] *= radius / d;\n el[2] *= radius / d;\n return el;\n });\n return geodesicData;\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}