{"ast":null,"code":"import { Vector3 } from \"../../Maths/math.vector.js\";\nimport { Mesh } from \"../mesh.js\";\nimport { VertexData } from \"../mesh.vertexData.js\";\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions.js\";\n// based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3D/src/away3d/primitives/TorusKnot.as?spec=svn2473&r=2473\n/**\n * Creates the VertexData for a TorusKnot\n * @param options an object used to set the following optional parameters for the TorusKnot, required but can be empty\n * * radius the radius of the torus knot, optional, default 2\n * * tube the thickness of the tube, optional, default 0.5\n * * radialSegments the number of sides on each tube segments, optional, default 32\n * * tubularSegments the number of tubes to decompose the knot into, optional, default 32\n * * p the number of windings around the z axis, optional, default 2\n * * q the number of windings around the x axis, optional, default 3\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\n * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)\n * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)\n * @param options.radius\n * @param options.tube\n * @param options.radialSegments\n * @param options.tubularSegments\n * @param options.p\n * @param options.q\n * @param options.sideOrientation\n * @param options.frontUVs\n * @param options.backUVs\n * @returns the VertexData of the Torus Knot\n */\nexport function CreateTorusKnotVertexData(options) {\n const indices = [];\n const positions = [];\n const normals = [];\n const uvs = [];\n const radius = options.radius || 2;\n const tube = options.tube || 0.5;\n const radialSegments = options.radialSegments || 32;\n const tubularSegments = options.tubularSegments || 32;\n const p = options.p || 2;\n const q = options.q || 3;\n const sideOrientation = options.sideOrientation === 0 ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\n // Helper\n const getPos = angle => {\n const cu = Math.cos(angle);\n const su = Math.sin(angle);\n const quOverP = q / p * angle;\n const cs = Math.cos(quOverP);\n const tx = radius * (2 + cs) * 0.5 * cu;\n const ty = radius * (2 + cs) * su * 0.5;\n const tz = radius * Math.sin(quOverP) * 0.5;\n return new Vector3(tx, ty, tz);\n };\n // Vertices\n let i;\n let j;\n for (i = 0; i <= radialSegments; i++) {\n const modI = i % radialSegments;\n const u = modI / radialSegments * 2 * p * Math.PI;\n const p1 = getPos(u);\n const p2 = getPos(u + 0.01);\n const tang = p2.subtract(p1);\n let n = p2.add(p1);\n const bitan = Vector3.Cross(tang, n);\n n = Vector3.Cross(bitan, tang);\n bitan.normalize();\n n.normalize();\n for (j = 0; j < tubularSegments; j++) {\n const modJ = j % tubularSegments;\n const v = modJ / tubularSegments * 2 * Math.PI;\n const cx = -tube * Math.cos(v);\n const cy = tube * Math.sin(v);\n positions.push(p1.x + cx * n.x + cy * bitan.x);\n positions.push(p1.y + cx * n.y + cy * bitan.y);\n positions.push(p1.z + cx * n.z + cy * bitan.z);\n uvs.push(i / radialSegments);\n uvs.push(useOpenGLOrientationForUV ? 1.0 - j / tubularSegments : j / tubularSegments);\n }\n }\n for (i = 0; i < radialSegments; i++) {\n for (j = 0; j < tubularSegments; j++) {\n const jNext = (j + 1) % tubularSegments;\n const a = i * tubularSegments + j;\n const b = (i + 1) * tubularSegments + j;\n const c = (i + 1) * tubularSegments + jNext;\n const d = i * tubularSegments + jNext;\n indices.push(d);\n indices.push(b);\n indices.push(a);\n indices.push(d);\n indices.push(c);\n indices.push(b);\n }\n }\n // Normals\n VertexData.ComputeNormals(positions, indices, normals);\n // Sides\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\n // Result\n const vertexData = new VertexData();\n vertexData.indices = indices;\n vertexData.positions = positions;\n vertexData.normals = normals;\n vertexData.uvs = uvs;\n return vertexData;\n}\n/**\n * Creates a torus knot mesh\n * * The parameter `radius` sets the global radius size (float) of the torus knot (default 2)\n * * The parameter `radialSegments` sets the number of sides on each tube segments (positive integer, default 32)\n * * The parameter `tubularSegments` sets the number of tubes to decompose the knot into (positive integer, default 32)\n * * The parameters `p` and `q` are the number of windings on each axis (positive integers, default 2 and 3)\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#side-orientation\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created.\n * @param name defines the name of the mesh\n * @param options defines the options used to create the mesh\n * @param options.radius\n * @param options.tube\n * @param options.radialSegments\n * @param options.tubularSegments\n * @param options.p\n * @param options.q\n * @param options.updatable\n * @param options.sideOrientation\n * @param options.frontUVs\n * @param options.backUVs\n * @param scene defines the hosting scene\n * @returns the torus knot mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#torus-knot\n */\nexport function CreateTorusKnot(name, options = {}, scene) {\n const torusKnot = new Mesh(name, scene);\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\n torusKnot._originalBuilderSideOrientation = options.sideOrientation;\n const vertexData = CreateTorusKnotVertexData(options);\n vertexData.applyToMesh(torusKnot, options.updatable);\n return torusKnot;\n}\n/**\n * Class containing static functions to help procedurally build meshes\n * @deprecated use CreateTorusKnot instead\n */\nexport const TorusKnotBuilder = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n CreateTorusKnot\n};\nVertexData.CreateTorusKnot = CreateTorusKnotVertexData;\nMesh.CreateTorusKnot = (name, radius, tube, radialSegments, tubularSegments, p, q, scene, updatable, sideOrientation) => {\n const options = {\n radius,\n tube,\n radialSegments,\n tubularSegments,\n p,\n q,\n sideOrientation,\n updatable\n };\n return CreateTorusKnot(name, options, scene);\n};","map":{"version":3,"names":["Vector3","Mesh","VertexData","useOpenGLOrientationForUV","CreateTorusKnotVertexData","options","indices","positions","normals","uvs","radius","tube","radialSegments","tubularSegments","p","q","sideOrientation","DEFAULTSIDE","getPos","angle","cu","Math","cos","su","sin","quOverP","cs","tx","ty","tz","i","j","modI","u","PI","p1","p2","tang","subtract","n","add","bitan","Cross","normalize","modJ","v","cx","cy","push","x","y","z","jNext","a","b","c","d","ComputeNormals","_ComputeSides","frontUVs","backUVs","vertexData","CreateTorusKnot","name","scene","torusKnot","_GetDefaultSideOrientation","_originalBuilderSideOrientation","applyToMesh","updatable","TorusKnotBuilder"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Meshes/Builders/torusKnotBuilder.js"],"sourcesContent":["import { Vector3 } from \"../../Maths/math.vector.js\";\nimport { Mesh } from \"../mesh.js\";\nimport { VertexData } from \"../mesh.vertexData.js\";\nimport { useOpenGLOrientationForUV } from \"../../Compat/compatibilityOptions.js\";\n// based on http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3D/src/away3d/primitives/TorusKnot.as?spec=svn2473&r=2473\n/**\n * Creates the VertexData for a TorusKnot\n * @param options an object used to set the following optional parameters for the TorusKnot, required but can be empty\n * * radius the radius of the torus knot, optional, default 2\n * * tube the thickness of the tube, optional, default 0.5\n * * radialSegments the number of sides on each tube segments, optional, default 32\n * * tubularSegments the number of tubes to decompose the knot into, optional, default 32\n * * p the number of windings around the z axis, optional, default 2\n * * q the number of windings around the x axis, optional, default 3\n * * sideOrientation optional and takes the values : Mesh.FRONTSIDE (default), Mesh.BACKSIDE or Mesh.DOUBLESIDE\n * * frontUvs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the front side, optional, default vector4 (0, 0, 1, 1)\n * * backUVs only usable when you create a double-sided mesh, used to choose what parts of the texture image to crop and apply on the back side, optional, default vector4 (0, 0, 1, 1)\n * @param options.radius\n * @param options.tube\n * @param options.radialSegments\n * @param options.tubularSegments\n * @param options.p\n * @param options.q\n * @param options.sideOrientation\n * @param options.frontUVs\n * @param options.backUVs\n * @returns the VertexData of the Torus Knot\n */\nexport function CreateTorusKnotVertexData(options) {\n const indices = [];\n const positions = [];\n const normals = [];\n const uvs = [];\n const radius = options.radius || 2;\n const tube = options.tube || 0.5;\n const radialSegments = options.radialSegments || 32;\n const tubularSegments = options.tubularSegments || 32;\n const p = options.p || 2;\n const q = options.q || 3;\n const sideOrientation = options.sideOrientation === 0 ? 0 : options.sideOrientation || VertexData.DEFAULTSIDE;\n // Helper\n const getPos = (angle) => {\n const cu = Math.cos(angle);\n const su = Math.sin(angle);\n const quOverP = (q / p) * angle;\n const cs = Math.cos(quOverP);\n const tx = radius * (2 + cs) * 0.5 * cu;\n const ty = radius * (2 + cs) * su * 0.5;\n const tz = radius * Math.sin(quOverP) * 0.5;\n return new Vector3(tx, ty, tz);\n };\n // Vertices\n let i;\n let j;\n for (i = 0; i <= radialSegments; i++) {\n const modI = i % radialSegments;\n const u = (modI / radialSegments) * 2 * p * Math.PI;\n const p1 = getPos(u);\n const p2 = getPos(u + 0.01);\n const tang = p2.subtract(p1);\n let n = p2.add(p1);\n const bitan = Vector3.Cross(tang, n);\n n = Vector3.Cross(bitan, tang);\n bitan.normalize();\n n.normalize();\n for (j = 0; j < tubularSegments; j++) {\n const modJ = j % tubularSegments;\n const v = (modJ / tubularSegments) * 2 * Math.PI;\n const cx = -tube * Math.cos(v);\n const cy = tube * Math.sin(v);\n positions.push(p1.x + cx * n.x + cy * bitan.x);\n positions.push(p1.y + cx * n.y + cy * bitan.y);\n positions.push(p1.z + cx * n.z + cy * bitan.z);\n uvs.push(i / radialSegments);\n uvs.push(useOpenGLOrientationForUV ? 1.0 - j / tubularSegments : j / tubularSegments);\n }\n }\n for (i = 0; i < radialSegments; i++) {\n for (j = 0; j < tubularSegments; j++) {\n const jNext = (j + 1) % tubularSegments;\n const a = i * tubularSegments + j;\n const b = (i + 1) * tubularSegments + j;\n const c = (i + 1) * tubularSegments + jNext;\n const d = i * tubularSegments + jNext;\n indices.push(d);\n indices.push(b);\n indices.push(a);\n indices.push(d);\n indices.push(c);\n indices.push(b);\n }\n }\n // Normals\n VertexData.ComputeNormals(positions, indices, normals);\n // Sides\n VertexData._ComputeSides(sideOrientation, positions, indices, normals, uvs, options.frontUVs, options.backUVs);\n // Result\n const vertexData = new VertexData();\n vertexData.indices = indices;\n vertexData.positions = positions;\n vertexData.normals = normals;\n vertexData.uvs = uvs;\n return vertexData;\n}\n/**\n * Creates a torus knot mesh\n * * The parameter `radius` sets the global radius size (float) of the torus knot (default 2)\n * * The parameter `radialSegments` sets the number of sides on each tube segments (positive integer, default 32)\n * * The parameter `tubularSegments` sets the number of tubes to decompose the knot into (positive integer, default 32)\n * * The parameters `p` and `q` are the number of windings on each axis (positive integers, default 2 and 3)\n * * You can also set the mesh side orientation with the values : BABYLON.Mesh.FRONTSIDE (default), BABYLON.Mesh.BACKSIDE or BABYLON.Mesh.DOUBLESIDE\n * * If you create a double-sided mesh, you can choose what parts of the texture image to crop and stick respectively on the front and the back sides with the parameters `frontUVs` and `backUVs` (Vector4). Detail here : https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#side-orientation\n * * The mesh can be set to updatable with the boolean parameter `updatable` (default false) if its internal geometry is supposed to change once created.\n * @param name defines the name of the mesh\n * @param options defines the options used to create the mesh\n * @param options.radius\n * @param options.tube\n * @param options.radialSegments\n * @param options.tubularSegments\n * @param options.p\n * @param options.q\n * @param options.updatable\n * @param options.sideOrientation\n * @param options.frontUVs\n * @param options.backUVs\n * @param scene defines the hosting scene\n * @returns the torus knot mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#torus-knot\n */\nexport function CreateTorusKnot(name, options = {}, scene) {\n const torusKnot = new Mesh(name, scene);\n options.sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\n torusKnot._originalBuilderSideOrientation = options.sideOrientation;\n const vertexData = CreateTorusKnotVertexData(options);\n vertexData.applyToMesh(torusKnot, options.updatable);\n return torusKnot;\n}\n/**\n * Class containing static functions to help procedurally build meshes\n * @deprecated use CreateTorusKnot instead\n */\nexport const TorusKnotBuilder = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n CreateTorusKnot,\n};\nVertexData.CreateTorusKnot = CreateTorusKnotVertexData;\nMesh.CreateTorusKnot = (name, radius, tube, radialSegments, tubularSegments, p, q, scene, updatable, sideOrientation) => {\n const options = {\n radius,\n tube,\n radialSegments,\n tubularSegments,\n p,\n q,\n sideOrientation,\n updatable,\n };\n return CreateTorusKnot(name, options, scene);\n};\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}