1 |
- {"ast":null,"code":"import { Vector3, TmpVectors, Matrix } from \"../../Maths/math.vector.js\";\nimport { Mesh } from \"../mesh.js\";\nimport { CreateRibbon } from \"./ribbonBuilder.js\";\nimport { Path3D } from \"../../Maths/math.path.js\";\n/**\n * Creates a tube mesh.\n * The tube is a parametric shape. It has no predefined shape. Its final shape will depend on the input parameters\n * * The parameter `path` is a required array of successive Vector3. It is the curve used as the axis of the tube\n * * The parameter `radius` (positive float, default 1) sets the tube radius size\n * * The parameter `tessellation` (positive float, default 64) is the number of sides on the tubular surface\n * * The parameter `radiusFunction` (javascript function, default null) is a vanilla javascript function. If it is not null, it overrides the parameter `radius`\n * * This function is called on each point of the tube path and is passed the index `i` of the i-th point and the distance of this point from the first point of the path. It must return a radius value (positive float)\n * * The parameter `arc` (positive float, maximum 1, default 1) is the ratio to apply to the tube circumference : 2 x PI x arc\n * * The parameter `cap` sets the way the extruded shape is capped. Possible values : BABYLON.Mesh.NO_CAP (default), BABYLON.Mesh.CAP_START, BABYLON.Mesh.CAP_END, BABYLON.Mesh.CAP_ALL\n * * The optional parameter `instance` is an instance of an existing Tube object to be updated with the passed `pathArray` parameter. The `path`Array HAS to have the SAME number of points as the previous one: https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph#tube\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 optional parameter `invertUV` (boolean, default false) swaps in the geometry the U and V coordinates to apply a texture\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. The NUMBER of points CAN'T CHANGE, only their positions.\n * @param name defines the name of the mesh\n * @param options defines the options used to create the mesh\n * @param options.path\n * @param options.radius\n * @param options.tessellation\n * @param options.radiusFunction\n * @param options.cap\n * @param options.arc\n * @param options.updatable\n * @param options.sideOrientation\n * @param options.frontUVs\n * @param options.backUVs\n * @param options.instance\n * @param options.invertUV\n * @param scene defines the hosting scene\n * @returns the tube mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#tube\n */\nexport function CreateTube(name, options, scene = null) {\n const path = options.path;\n let instance = options.instance;\n let radius = 1.0;\n if (options.radius !== undefined) {\n radius = options.radius;\n } else if (instance) {\n radius = instance._creationDataStorage.radius;\n }\n const tessellation = options.tessellation || 64 | 0;\n const radiusFunction = options.radiusFunction || null;\n let cap = options.cap || Mesh.NO_CAP;\n const invertUV = options.invertUV || false;\n const updatable = options.updatable;\n const sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\n options.arc = options.arc && (options.arc <= 0.0 || options.arc > 1.0) ? 1.0 : options.arc || 1.0;\n // tube geometry\n const tubePathArray = (path, path3D, circlePaths, radius, tessellation, radiusFunction, cap, arc) => {\n const tangents = path3D.getTangents();\n const normals = path3D.getNormals();\n const distances = path3D.getDistances();\n const pi2 = Math.PI * 2;\n const step = pi2 / tessellation * arc;\n const returnRadius = () => radius;\n const radiusFunctionFinal = radiusFunction || returnRadius;\n let circlePath;\n let rad;\n let normal;\n let rotated;\n const rotationMatrix = TmpVectors.Matrix[0];\n let index = cap === Mesh.NO_CAP || cap === Mesh.CAP_END ? 0 : 2;\n for (let i = 0; i < path.length; i++) {\n rad = radiusFunctionFinal(i, distances[i]); // current radius\n circlePath = Array(); // current circle array\n normal = normals[i]; // current normal\n for (let t = 0; t < tessellation; t++) {\n Matrix.RotationAxisToRef(tangents[i], step * t, rotationMatrix);\n rotated = circlePath[t] ? circlePath[t] : Vector3.Zero();\n Vector3.TransformCoordinatesToRef(normal, rotationMatrix, rotated);\n rotated.scaleInPlace(rad).addInPlace(path[i]);\n circlePath[t] = rotated;\n }\n circlePaths[index] = circlePath;\n index++;\n }\n // cap\n const capPath = (nbPoints, pathIndex) => {\n const pointCap = Array();\n for (let i = 0; i < nbPoints; i++) {\n pointCap.push(path[pathIndex]);\n }\n return pointCap;\n };\n switch (cap) {\n case Mesh.NO_CAP:\n break;\n case Mesh.CAP_START:\n circlePaths[0] = capPath(tessellation, 0);\n circlePaths[1] = circlePaths[2].slice(0);\n break;\n case Mesh.CAP_END:\n circlePaths[index] = circlePaths[index - 1].slice(0);\n circlePaths[index + 1] = capPath(tessellation, path.length - 1);\n break;\n case Mesh.CAP_ALL:\n circlePaths[0] = capPath(tessellation, 0);\n circlePaths[1] = circlePaths[2].slice(0);\n circlePaths[index] = circlePaths[index - 1].slice(0);\n circlePaths[index + 1] = capPath(tessellation, path.length - 1);\n break;\n default:\n break;\n }\n return circlePaths;\n };\n let path3D;\n let pathArray;\n if (instance) {\n // tube update\n const storage = instance._creationDataStorage;\n const arc = options.arc || storage.arc;\n path3D = storage.path3D.update(path);\n pathArray = tubePathArray(path, path3D, storage.pathArray, radius, storage.tessellation, radiusFunction, storage.cap, arc);\n instance = CreateRibbon(\"\", {\n pathArray: pathArray,\n instance: instance\n });\n // Update mode, no need to recreate the storage.\n storage.path3D = path3D;\n storage.pathArray = pathArray;\n storage.arc = arc;\n storage.radius = radius;\n return instance;\n }\n // tube creation\n path3D = new Path3D(path);\n const newPathArray = new Array();\n cap = cap < 0 || cap > 3 ? 0 : cap;\n pathArray = tubePathArray(path, path3D, newPathArray, radius, tessellation, radiusFunction, cap, options.arc);\n const tube = CreateRibbon(name, {\n pathArray: pathArray,\n closePath: true,\n closeArray: false,\n updatable: updatable,\n sideOrientation: sideOrientation,\n invertUV: invertUV,\n frontUVs: options.frontUVs,\n backUVs: options.backUVs\n }, scene);\n tube._creationDataStorage.pathArray = pathArray;\n tube._creationDataStorage.path3D = path3D;\n tube._creationDataStorage.tessellation = tessellation;\n tube._creationDataStorage.cap = cap;\n tube._creationDataStorage.arc = options.arc;\n tube._creationDataStorage.radius = radius;\n return tube;\n}\n/**\n * Class containing static functions to help procedurally build meshes\n * @deprecated use CreateTube directly\n */\nexport const TubeBuilder = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n CreateTube\n};\nMesh.CreateTube = (name, path, radius, tessellation, radiusFunction, cap, scene, updatable, sideOrientation, instance) => {\n const options = {\n path: path,\n radius: radius,\n tessellation: tessellation,\n radiusFunction: radiusFunction,\n arc: 1,\n cap: cap,\n updatable: updatable,\n sideOrientation: sideOrientation,\n instance: instance\n };\n return CreateTube(name, options, scene);\n};","map":{"version":3,"names":["Vector3","TmpVectors","Matrix","Mesh","CreateRibbon","Path3D","CreateTube","name","options","scene","path","instance","radius","undefined","_creationDataStorage","tessellation","radiusFunction","cap","NO_CAP","invertUV","updatable","sideOrientation","_GetDefaultSideOrientation","arc","tubePathArray","path3D","circlePaths","tangents","getTangents","normals","getNormals","distances","getDistances","pi2","Math","PI","step","returnRadius","radiusFunctionFinal","circlePath","rad","normal","rotated","rotationMatrix","index","CAP_END","i","length","Array","t","RotationAxisToRef","Zero","TransformCoordinatesToRef","scaleInPlace","addInPlace","capPath","nbPoints","pathIndex","pointCap","push","CAP_START","slice","CAP_ALL","pathArray","storage","update","newPathArray","tube","closePath","closeArray","frontUVs","backUVs","TubeBuilder"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Meshes/Builders/tubeBuilder.js"],"sourcesContent":["import { Vector3, TmpVectors, Matrix } from \"../../Maths/math.vector.js\";\nimport { Mesh } from \"../mesh.js\";\nimport { CreateRibbon } from \"./ribbonBuilder.js\";\nimport { Path3D } from \"../../Maths/math.path.js\";\n/**\n * Creates a tube mesh.\n * The tube is a parametric shape. It has no predefined shape. Its final shape will depend on the input parameters\n * * The parameter `path` is a required array of successive Vector3. It is the curve used as the axis of the tube\n * * The parameter `radius` (positive float, default 1) sets the tube radius size\n * * The parameter `tessellation` (positive float, default 64) is the number of sides on the tubular surface\n * * The parameter `radiusFunction` (javascript function, default null) is a vanilla javascript function. If it is not null, it overrides the parameter `radius`\n * * This function is called on each point of the tube path and is passed the index `i` of the i-th point and the distance of this point from the first point of the path. It must return a radius value (positive float)\n * * The parameter `arc` (positive float, maximum 1, default 1) is the ratio to apply to the tube circumference : 2 x PI x arc\n * * The parameter `cap` sets the way the extruded shape is capped. Possible values : BABYLON.Mesh.NO_CAP (default), BABYLON.Mesh.CAP_START, BABYLON.Mesh.CAP_END, BABYLON.Mesh.CAP_ALL\n * * The optional parameter `instance` is an instance of an existing Tube object to be updated with the passed `pathArray` parameter. The `path`Array HAS to have the SAME number of points as the previous one: https://doc.babylonjs.com/features/featuresDeepDive/mesh/dynamicMeshMorph#tube\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 optional parameter `invertUV` (boolean, default false) swaps in the geometry the U and V coordinates to apply a texture\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. The NUMBER of points CAN'T CHANGE, only their positions.\n * @param name defines the name of the mesh\n * @param options defines the options used to create the mesh\n * @param options.path\n * @param options.radius\n * @param options.tessellation\n * @param options.radiusFunction\n * @param options.cap\n * @param options.arc\n * @param options.updatable\n * @param options.sideOrientation\n * @param options.frontUVs\n * @param options.backUVs\n * @param options.instance\n * @param options.invertUV\n * @param scene defines the hosting scene\n * @returns the tube mesh\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set#tube\n */\nexport function CreateTube(name, options, scene = null) {\n const path = options.path;\n let instance = options.instance;\n let radius = 1.0;\n if (options.radius !== undefined) {\n radius = options.radius;\n }\n else if (instance) {\n radius = instance._creationDataStorage.radius;\n }\n const tessellation = options.tessellation || 64 | 0;\n const radiusFunction = options.radiusFunction || null;\n let cap = options.cap || Mesh.NO_CAP;\n const invertUV = options.invertUV || false;\n const updatable = options.updatable;\n const sideOrientation = Mesh._GetDefaultSideOrientation(options.sideOrientation);\n options.arc = options.arc && (options.arc <= 0.0 || options.arc > 1.0) ? 1.0 : options.arc || 1.0;\n // tube geometry\n const tubePathArray = (path, path3D, circlePaths, radius, tessellation, radiusFunction, cap, arc) => {\n const tangents = path3D.getTangents();\n const normals = path3D.getNormals();\n const distances = path3D.getDistances();\n const pi2 = Math.PI * 2;\n const step = (pi2 / tessellation) * arc;\n const returnRadius = () => radius;\n const radiusFunctionFinal = radiusFunction || returnRadius;\n let circlePath;\n let rad;\n let normal;\n let rotated;\n const rotationMatrix = TmpVectors.Matrix[0];\n let index = cap === Mesh.NO_CAP || cap === Mesh.CAP_END ? 0 : 2;\n for (let i = 0; i < path.length; i++) {\n rad = radiusFunctionFinal(i, distances[i]); // current radius\n circlePath = Array(); // current circle array\n normal = normals[i]; // current normal\n for (let t = 0; t < tessellation; t++) {\n Matrix.RotationAxisToRef(tangents[i], step * t, rotationMatrix);\n rotated = circlePath[t] ? circlePath[t] : Vector3.Zero();\n Vector3.TransformCoordinatesToRef(normal, rotationMatrix, rotated);\n rotated.scaleInPlace(rad).addInPlace(path[i]);\n circlePath[t] = rotated;\n }\n circlePaths[index] = circlePath;\n index++;\n }\n // cap\n const capPath = (nbPoints, pathIndex) => {\n const pointCap = Array();\n for (let i = 0; i < nbPoints; i++) {\n pointCap.push(path[pathIndex]);\n }\n return pointCap;\n };\n switch (cap) {\n case Mesh.NO_CAP:\n break;\n case Mesh.CAP_START:\n circlePaths[0] = capPath(tessellation, 0);\n circlePaths[1] = circlePaths[2].slice(0);\n break;\n case Mesh.CAP_END:\n circlePaths[index] = circlePaths[index - 1].slice(0);\n circlePaths[index + 1] = capPath(tessellation, path.length - 1);\n break;\n case Mesh.CAP_ALL:\n circlePaths[0] = capPath(tessellation, 0);\n circlePaths[1] = circlePaths[2].slice(0);\n circlePaths[index] = circlePaths[index - 1].slice(0);\n circlePaths[index + 1] = capPath(tessellation, path.length - 1);\n break;\n default:\n break;\n }\n return circlePaths;\n };\n let path3D;\n let pathArray;\n if (instance) {\n // tube update\n const storage = instance._creationDataStorage;\n const arc = options.arc || storage.arc;\n path3D = storage.path3D.update(path);\n pathArray = tubePathArray(path, path3D, storage.pathArray, radius, storage.tessellation, radiusFunction, storage.cap, arc);\n instance = CreateRibbon(\"\", { pathArray: pathArray, instance: instance });\n // Update mode, no need to recreate the storage.\n storage.path3D = path3D;\n storage.pathArray = pathArray;\n storage.arc = arc;\n storage.radius = radius;\n return instance;\n }\n // tube creation\n path3D = new Path3D(path);\n const newPathArray = new Array();\n cap = cap < 0 || cap > 3 ? 0 : cap;\n pathArray = tubePathArray(path, path3D, newPathArray, radius, tessellation, radiusFunction, cap, options.arc);\n const tube = CreateRibbon(name, {\n pathArray: pathArray,\n closePath: true,\n closeArray: false,\n updatable: updatable,\n sideOrientation: sideOrientation,\n invertUV: invertUV,\n frontUVs: options.frontUVs,\n backUVs: options.backUVs,\n }, scene);\n tube._creationDataStorage.pathArray = pathArray;\n tube._creationDataStorage.path3D = path3D;\n tube._creationDataStorage.tessellation = tessellation;\n tube._creationDataStorage.cap = cap;\n tube._creationDataStorage.arc = options.arc;\n tube._creationDataStorage.radius = radius;\n return tube;\n}\n/**\n * Class containing static functions to help procedurally build meshes\n * @deprecated use CreateTube directly\n */\nexport const TubeBuilder = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n CreateTube,\n};\nMesh.CreateTube = (name, path, radius, tessellation, radiusFunction, cap, scene, updatable, sideOrientation, instance) => {\n const options = {\n path: path,\n radius: radius,\n tessellation: tessellation,\n radiusFunction: radiusFunction,\n arc: 1,\n cap: cap,\n updatable: updatable,\n sideOrientation: sideOrientation,\n instance: instance,\n };\n return CreateTube(name, options, scene);\n};\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|