@tolokoban/tgd 2.0.24 → 2.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/lib/dist/camera/camera-orthographic.d.ts +1 -0
  2. package/lib/dist/camera/camera-orthographic.d.ts.map +1 -1
  3. package/lib/dist/camera/camera-orthographic.js +21 -1
  4. package/lib/dist/camera/camera-perspective.d.ts +1 -0
  5. package/lib/dist/camera/camera-perspective.d.ts.map +1 -1
  6. package/lib/dist/camera/camera-perspective.js +21 -1
  7. package/lib/dist/camera/camera.d.ts +1 -0
  8. package/lib/dist/camera/camera.d.ts.map +1 -1
  9. package/lib/dist/camera/camera.js +4 -1
  10. package/lib/dist/canvas/gizmo/painter/shader.frag +1 -1
  11. package/lib/dist/canvas/gizmo/painter/shader.vert +1 -1
  12. package/lib/dist/code/color.d.ts +4 -4
  13. package/lib/dist/code/color.d.ts.map +1 -1
  14. package/lib/dist/code/color.js +3 -3
  15. package/lib/dist/code/coords.d.ts +4 -4
  16. package/lib/dist/code/coords.d.ts.map +1 -1
  17. package/lib/dist/code/coords.js +4 -4
  18. package/lib/dist/code/random.d.ts +2 -2
  19. package/lib/dist/code/random.d.ts.map +1 -1
  20. package/lib/dist/code/random.js +2 -2
  21. package/lib/dist/context/animation/animation-manager.d.ts +1 -0
  22. package/lib/dist/context/animation/animation-manager.d.ts.map +1 -1
  23. package/lib/dist/context/animation/animation-manager.js +11 -3
  24. package/lib/dist/context/context.d.ts +12 -2
  25. package/lib/dist/context/context.d.ts.map +1 -1
  26. package/lib/dist/context/context.js +80 -37
  27. package/lib/dist/controller/camera/orbit.d.ts +15 -2
  28. package/lib/dist/controller/camera/orbit.d.ts.map +1 -1
  29. package/lib/dist/controller/camera/orbit.js +15 -3
  30. package/lib/dist/data/gltf/gltf.d.ts +60 -0
  31. package/lib/dist/data/gltf/gltf.d.ts.map +1 -0
  32. package/lib/dist/data/gltf/gltf.js +337 -0
  33. package/lib/dist/data/gltf/index.d.ts +2 -0
  34. package/lib/dist/data/gltf/index.d.ts.map +1 -0
  35. package/lib/dist/data/gltf/index.js +2 -0
  36. package/lib/dist/data/gltf/parser.d.ts +13 -0
  37. package/lib/dist/data/gltf/parser.d.ts.map +1 -0
  38. package/lib/dist/data/gltf/parser.js +54 -0
  39. package/lib/dist/data/index.d.ts +2 -0
  40. package/lib/dist/data/index.d.ts.map +1 -0
  41. package/lib/dist/data/index.js +2 -0
  42. package/lib/dist/factory/index.d.ts +2 -0
  43. package/lib/dist/factory/index.d.ts.map +1 -0
  44. package/lib/dist/factory/index.js +2 -0
  45. package/lib/dist/factory/mesh-glb.d.ts +42 -0
  46. package/lib/dist/factory/mesh-glb.d.ts.map +1 -0
  47. package/lib/dist/factory/mesh-glb.js +91 -0
  48. package/lib/dist/index.d.ts +1 -0
  49. package/lib/dist/index.d.ts.map +1 -1
  50. package/lib/dist/index.js +2 -1
  51. package/lib/dist/input/pointer.d.ts +2 -1
  52. package/lib/dist/input/pointer.d.ts.map +1 -1
  53. package/lib/dist/input/pointer.js +8 -1
  54. package/lib/dist/interface/transformable.d.ts +1 -0
  55. package/lib/dist/interface/transformable.d.ts.map +1 -1
  56. package/lib/dist/loader/asset.d.ts +2 -2
  57. package/lib/dist/loader/asset.d.ts.map +1 -1
  58. package/lib/dist/loader/asset.js +1 -1
  59. package/lib/dist/loader/binary.d.ts +3 -2
  60. package/lib/dist/loader/binary.d.ts.map +1 -1
  61. package/lib/dist/loader/binary.js +20 -4
  62. package/lib/dist/material/diffuse.d.ts.map +1 -1
  63. package/lib/dist/material/diffuse.js +7 -5
  64. package/lib/dist/material/flat.d.ts +20 -0
  65. package/lib/dist/material/flat.d.ts.map +1 -0
  66. package/lib/dist/material/flat.js +18 -0
  67. package/lib/dist/material/index.d.ts +1 -0
  68. package/lib/dist/material/index.d.ts.map +1 -1
  69. package/lib/dist/material/index.js +2 -1
  70. package/lib/dist/math/index.d.ts +1 -0
  71. package/lib/dist/math/index.d.ts.map +1 -1
  72. package/lib/dist/math/index.js +2 -1
  73. package/lib/dist/math/mat2.d.ts +29 -0
  74. package/lib/dist/math/mat2.d.ts.map +1 -0
  75. package/lib/dist/math/mat2.js +94 -0
  76. package/lib/dist/math/quat.d.ts +2 -1
  77. package/lib/dist/math/quat.d.ts.map +1 -1
  78. package/lib/dist/math/quat.js +6 -28
  79. package/lib/dist/math/transfo.d.ts +8 -4
  80. package/lib/dist/math/transfo.d.ts.map +1 -1
  81. package/lib/dist/math/transfo.js +41 -27
  82. package/lib/dist/math/vec3.d.ts +2 -2
  83. package/lib/dist/math/vec3.d.ts.map +1 -1
  84. package/lib/dist/math/vec3.js +6 -5
  85. package/lib/dist/painter/axes/axes.frag +1 -1
  86. package/lib/dist/painter/axes/axes.vert +1 -1
  87. package/lib/dist/painter/background/background.d.ts +28 -2
  88. package/lib/dist/painter/background/background.d.ts.map +1 -1
  89. package/lib/dist/painter/background/background.frag +1 -1
  90. package/lib/dist/painter/background/background.js +47 -13
  91. package/lib/dist/painter/background-with-depth/background-with-depth.d.ts +24 -0
  92. package/lib/dist/painter/background-with-depth/background-with-depth.d.ts.map +1 -0
  93. package/lib/dist/painter/background-with-depth/background-with-depth.js +120 -0
  94. package/lib/dist/painter/background-with-depth/background.frag +17 -0
  95. package/lib/dist/painter/background-with-depth/background.vert +13 -0
  96. package/lib/dist/painter/background-with-depth/index.d.ts +2 -0
  97. package/lib/dist/painter/background-with-depth/index.d.ts.map +1 -0
  98. package/lib/dist/painter/background-with-depth/index.js +2 -0
  99. package/lib/dist/painter/debug/stencil/stencil.frag +1 -1
  100. package/lib/dist/painter/framebuffer.d.ts.map +1 -1
  101. package/lib/dist/painter/framebuffer.js +2 -2
  102. package/lib/dist/painter/group.d.ts.map +1 -1
  103. package/lib/dist/painter/group.js +1 -1
  104. package/lib/dist/painter/index.d.ts +1 -0
  105. package/lib/dist/painter/index.d.ts.map +1 -1
  106. package/lib/dist/painter/index.js +2 -1
  107. package/lib/dist/painter/mesh/gltf/gltf.d.ts +8 -4
  108. package/lib/dist/painter/mesh/gltf/gltf.d.ts.map +1 -1
  109. package/lib/dist/painter/mesh/gltf/gltf.js +23 -13
  110. package/lib/dist/painter/mesh/mesh/mesh.d.ts +12 -3
  111. package/lib/dist/painter/mesh/mesh/mesh.d.ts.map +1 -1
  112. package/lib/dist/painter/mesh/mesh/mesh.js +4 -2
  113. package/lib/dist/painter/mesh/normals/shader.vert +1 -1
  114. package/lib/dist/painter/node/node.d.ts +20 -7
  115. package/lib/dist/painter/node/node.d.ts.map +1 -1
  116. package/lib/dist/painter/node/node.js +74 -17
  117. package/lib/dist/painter/segments/segments.d.ts +9 -7
  118. package/lib/dist/painter/segments/segments.d.ts.map +1 -1
  119. package/lib/dist/painter/segments/segments.frag +12 -2
  120. package/lib/dist/painter/segments/segments.js +64 -36
  121. package/lib/dist/painter/segments/segments.vert +12 -5
  122. package/lib/dist/painter/skybox/skybox.d.ts.map +1 -1
  123. package/lib/dist/painter/skybox/skybox.js +21 -16
  124. package/lib/dist/painter/state/state.d.ts +10 -2
  125. package/lib/dist/painter/state/state.d.ts.map +1 -1
  126. package/lib/dist/painter/state/state.js +49 -19
  127. package/lib/dist/parser/gltf/gltf.d.ts +15 -2
  128. package/lib/dist/parser/gltf/gltf.d.ts.map +1 -1
  129. package/lib/dist/parser/gltf/gltf.js +55 -2
  130. package/lib/dist/parser/gltf/parser.d.ts +4 -0
  131. package/lib/dist/parser/gltf/parser.d.ts.map +1 -1
  132. package/lib/dist/parser/gltf/parser.js +5 -2
  133. package/lib/dist/program/program.d.ts +4 -3
  134. package/lib/dist/program/program.d.ts.map +1 -1
  135. package/lib/dist/program/program.js +22 -8
  136. package/lib/dist/shader/code.d.ts +2 -2
  137. package/lib/dist/shader/code.d.ts.map +1 -1
  138. package/lib/dist/shader/code.js +16 -3
  139. package/lib/dist/shader/fragment.d.ts.map +1 -1
  140. package/lib/dist/shader/fragment.js +2 -2
  141. package/lib/dist/shader/vertex.d.ts.map +1 -1
  142. package/lib/dist/shader/vertex.js +2 -3
  143. package/lib/dist/texture/texture-depth.d.ts +36 -0
  144. package/lib/dist/texture/texture-depth.d.ts.map +1 -0
  145. package/lib/dist/texture/texture-depth.js +63 -0
  146. package/lib/dist/texture/texture2d.d.ts +15 -2
  147. package/lib/dist/texture/texture2d.d.ts.map +1 -1
  148. package/lib/dist/texture/texture2d.js +87 -27
  149. package/lib/dist/types/animation.d.ts +11 -2
  150. package/lib/dist/types/animation.d.ts.map +1 -1
  151. package/lib/dist/types/index.d.ts +1 -0
  152. package/lib/dist/types/index.d.ts.map +1 -1
  153. package/lib/dist/types/index.js +2 -1
  154. package/lib/dist/types/input-pointer.d.ts +1 -0
  155. package/lib/dist/types/input-pointer.d.ts.map +1 -1
  156. package/lib/dist/types/program.d.ts +5 -0
  157. package/lib/dist/types/program.d.ts.map +1 -1
  158. package/lib/dist/utils/action/camera.d.ts.map +1 -1
  159. package/lib/dist/utils/action/camera.js +2 -2
  160. package/lib/dist/utils/action/transfo.d.ts +1 -1
  161. package/lib/dist/utils/action/transfo.d.ts.map +1 -1
  162. package/lib/dist/utils/action/transfo.js +17 -23
  163. package/lib/dist/utils/animation/chain-transfo-interpolations.d.ts +18 -0
  164. package/lib/dist/utils/animation/chain-transfo-interpolations.d.ts.map +1 -0
  165. package/lib/dist/utils/animation/chain-transfo-interpolations.js +15 -0
  166. package/lib/dist/utils/animation/chain.d.ts +11 -0
  167. package/lib/dist/utils/animation/chain.d.ts.map +1 -0
  168. package/lib/dist/utils/animation/chain.js +61 -0
  169. package/lib/dist/utils/animation/index.d.ts +3 -0
  170. package/lib/dist/utils/animation/index.d.ts.map +1 -0
  171. package/lib/dist/utils/animation/index.js +3 -0
  172. package/lib/dist/utils/index.d.ts +1 -0
  173. package/lib/dist/utils/index.d.ts.map +1 -1
  174. package/lib/dist/utils/index.js +2 -1
  175. package/lib/dist/utils/math.d.ts +13 -0
  176. package/lib/dist/utils/math.d.ts.map +1 -1
  177. package/lib/dist/utils/math.js +34 -1
  178. package/lib/dist/utils/math.test.d.ts +2 -0
  179. package/lib/dist/utils/math.test.d.ts.map +1 -0
  180. package/lib/dist/utils/math.test.js +22 -0
  181. package/lib/dist/utils/state/blend.d.ts +1 -1
  182. package/lib/dist/utils/state/blend.d.ts.map +1 -1
  183. package/lib/dist/utils/state/blend.js +21 -3
  184. package/lib/dist/utils/state/depth.d.ts +1 -1
  185. package/lib/dist/utils/state/depth.d.ts.map +1 -1
  186. package/lib/dist/utils/state/depth.js +23 -2
  187. package/lib/dist/vao/vao.d.ts +6 -0
  188. package/lib/dist/vao/vao.d.ts.map +1 -1
  189. package/lib/dist/vao/vao.js +30 -1
  190. package/package.json +1 -1
@@ -0,0 +1,337 @@
1
+ import { __awaiter } from "tslib";
2
+ /**
3
+ * GLTF specs can be found here:
4
+ * https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html
5
+ */
6
+ import { TgdDataset } from "./../../dataset/index.js";
7
+ import { parseGLB } from "./parser.js";
8
+ import { assertTgdTypeArrayForElements, } from "./../../types/index.js";
9
+ import { TgdGeometry } from "./../../geometry/index.js";
10
+ import { TgdTexture2D } from "./../../texture/index.js";
11
+ export class TgdDataGLB {
12
+ /**
13
+ * @param content The binary content of a GLB file.
14
+ */
15
+ constructor(content) {
16
+ this.chunkDetails = [];
17
+ this.cacheImages = new Map();
18
+ this.cacheImageURLs = new Map();
19
+ this.cacheBufferViewDatas = new Map();
20
+ try {
21
+ const data = parseGLB(content);
22
+ this.gltf = data.gltf;
23
+ this.chunks = data.chunks;
24
+ this.chunkDetails = data.chunkTypes;
25
+ }
26
+ catch (error) {
27
+ const message = error instanceof Error ? error.message : JSON.stringify(error);
28
+ throw new Error(`[TgdParserGLTransfertFormatBinary] ${message}`);
29
+ }
30
+ }
31
+ getChunkDetails() {
32
+ return structuredClone(this.chunkDetails);
33
+ }
34
+ get fileSize() {
35
+ return (12 + this.chunks.reduce((size, chunk) => size + chunk.byteLength, 0));
36
+ }
37
+ getScenes() {
38
+ var _a;
39
+ return (_a = this.gltf.scenes) !== null && _a !== void 0 ? _a : [];
40
+ }
41
+ getScene(sceneIndex) {
42
+ var _a;
43
+ const scene = (_a = this.gltf.scenes) === null || _a === void 0 ? void 0 : _a[sceneIndex];
44
+ if (!scene) {
45
+ throw new Error(`Asset has no scene with index #${sceneIndex}!`);
46
+ }
47
+ return scene;
48
+ }
49
+ getNode(nodeIndex) {
50
+ var _a;
51
+ const node = (_a = this.gltf.nodes) === null || _a === void 0 ? void 0 : _a[nodeIndex];
52
+ if (!node) {
53
+ throw new Error(`Asset has no node with index #${nodeIndex}!`);
54
+ }
55
+ return node;
56
+ }
57
+ getNodeByName(nodeName) {
58
+ const nodes = this.gltf.nodes;
59
+ if (!nodes)
60
+ return;
61
+ for (const node of nodes) {
62
+ if (node.name === nodeName)
63
+ return node;
64
+ }
65
+ }
66
+ getNodeByNameOrThrow(nodeName) {
67
+ var _a;
68
+ const node = this.getNodeByName(nodeName);
69
+ if (node)
70
+ return node;
71
+ throw new Error(`Unknown node "${nodeName}"!\nAvailable names:${((_a = this.gltf.nodes) !== null && _a !== void 0 ? _a : [])
72
+ .map((node, index) => `\n - ${typeof node.name === "string"
73
+ ? JSON.stringify(node.name)
74
+ : `#${index}`}`)
75
+ .join("")}`);
76
+ }
77
+ getAccessor(accessorIndex = 0) {
78
+ var _a;
79
+ const accessor = (_a = this.gltf.accessors) === null || _a === void 0 ? void 0 : _a[accessorIndex];
80
+ if (!accessor) {
81
+ throw new Error(`Asset has no accessor with index #${accessorIndex}!`);
82
+ }
83
+ return accessor;
84
+ }
85
+ getMaterial(materialIndex) {
86
+ var _a;
87
+ const material = (_a = this.gltf.materials) === null || _a === void 0 ? void 0 : _a[materialIndex];
88
+ if (!material) {
89
+ throw new Error(`Asset has no material with index #${materialIndex}!`);
90
+ }
91
+ return material;
92
+ }
93
+ getMesh(meshIndex = 0) {
94
+ var _a;
95
+ const mesh = (_a = this.gltf.meshes) === null || _a === void 0 ? void 0 : _a[meshIndex];
96
+ if (!mesh) {
97
+ throw new Error(`Asset has no mesh with index #${meshIndex}!`);
98
+ }
99
+ return mesh;
100
+ }
101
+ getMeshPrimitive(meshIndex = 0, primitiveIndex = 0) {
102
+ const mesh = this.getMesh(meshIndex);
103
+ const primitive = mesh.primitives[primitiveIndex];
104
+ if (!primitive) {
105
+ throw new Error(`Asset has no primitive #${primitiveIndex} in mesh #${meshIndex}!`);
106
+ }
107
+ return primitive;
108
+ }
109
+ getMeshPrimitiveIndices(meshIndex = 0, primitiveIndex = 0) {
110
+ var _a, _b;
111
+ const primitive = this.getMeshPrimitive(meshIndex, primitiveIndex);
112
+ const accessor = this.getAccessor((_a = primitive.indices) !== null && _a !== void 0 ? _a : 0);
113
+ const elements = this.getBufferViewData((_b = accessor.bufferView) !== null && _b !== void 0 ? _b : 0, accessor.componentType);
114
+ assertTgdTypeArrayForElements(elements);
115
+ return elements;
116
+ }
117
+ getAccessorByAttributeName(primitive, attribName) {
118
+ const { attributes } = primitive;
119
+ if (!attributes || Object.keys(attributes).length === 0)
120
+ throw new Error("No attributes found!");
121
+ const accessorIndex = attributes[attribName];
122
+ if (typeof accessorIndex !== "number") {
123
+ throw new TypeError(`No attribute with name "${attribName}"!\nAvailable names are: ${Object.keys(attributes)
124
+ .map(name => JSON.stringify(name))
125
+ .join(", ")}.`);
126
+ }
127
+ try {
128
+ return this.getAccessor(accessorIndex);
129
+ }
130
+ catch (error) {
131
+ const message = error instanceof Error ? error.message : JSON.stringify(error);
132
+ throw new Error(`Attribute "${attribName}" pointed to an inexisting accessor!\n${message}`);
133
+ }
134
+ }
135
+ createTexture2D(context, textureIndex) {
136
+ var _a, _b, _c, _d, _e;
137
+ const gltfTex = (_a = this.gltf.textures) === null || _a === void 0 ? void 0 : _a[textureIndex];
138
+ if (!gltfTex) {
139
+ throw new Error(`Asset has no texture with index #${textureIndex}!`);
140
+ }
141
+ const source = (_e = (_b = gltfTex.source) !== null && _b !== void 0 ? _b : (_d = (_c = gltfTex.extensions) === null || _c === void 0 ? void 0 : _c.EXT_texture_webp) === null || _d === void 0 ? void 0 : _d.source) !== null && _e !== void 0 ? _e : 0;
142
+ const url = this.getImageURL(source);
143
+ const texture = new TgdTexture2D(context);
144
+ if (url) {
145
+ loadImage(url)
146
+ .then(bmp => {
147
+ if (bmp)
148
+ texture.loadBitmap(bmp);
149
+ else
150
+ console.error("Unable to load this file:", url);
151
+ })
152
+ .catch(console.error);
153
+ }
154
+ else {
155
+ console.error(`[GLTF] texture index #${textureIndex} is empty!`);
156
+ }
157
+ return texture;
158
+ }
159
+ loadImage(imageIndex) {
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ const fromCache = this.cacheImages.get(imageIndex);
162
+ if (fromCache)
163
+ return fromCache;
164
+ const url = this.getImageURL(imageIndex);
165
+ if (!url)
166
+ return;
167
+ const promise = new Promise((resolve, reject) => {
168
+ const img = new Image();
169
+ img.src = url;
170
+ img.addEventListener("load", () => {
171
+ resolve(img);
172
+ });
173
+ img.addEventListener("error", () => {
174
+ var _a;
175
+ console.error(`Unable to load image #${imageIndex}!`, (_a = this.gltf.images) === null || _a === void 0 ? void 0 : _a[imageIndex]);
176
+ reject();
177
+ });
178
+ });
179
+ this.cacheImages.set(imageIndex, promise);
180
+ return promise;
181
+ });
182
+ }
183
+ getImageURL(imageIndex) {
184
+ var _a;
185
+ const fromCache = this.cacheImageURLs.get(imageIndex);
186
+ if (fromCache)
187
+ return fromCache;
188
+ const { gltf } = this;
189
+ const image = (_a = gltf.images) === null || _a === void 0 ? void 0 : _a[imageIndex];
190
+ if (!image)
191
+ return;
192
+ if (image.uri)
193
+ return image.uri;
194
+ if (typeof image.bufferView !== "number")
195
+ return;
196
+ const buffer = this.getBufferViewData(image.bufferView, "Uint8");
197
+ if (!buffer)
198
+ return;
199
+ const blob = new Blob([buffer], {
200
+ type: image.mimeType,
201
+ });
202
+ const url = URL.createObjectURL(blob);
203
+ this.cacheImageURLs.set(imageIndex, url);
204
+ return url;
205
+ }
206
+ getBufferViewData(accessor, type = "Float32") {
207
+ var _a, _b, _c, _d, _e;
208
+ if (typeof accessor !== "number") {
209
+ return this.getBufferViewData((_a = accessor.bufferView) !== null && _a !== void 0 ? _a : 0, accessor.componentType);
210
+ }
211
+ const bufferViewIndex = accessor;
212
+ const fromCache = this.cacheBufferViewDatas.get(bufferViewIndex);
213
+ if (fromCache)
214
+ return fromCache;
215
+ const { gltf } = this;
216
+ const bufferView = (_b = gltf.bufferViews) === null || _b === void 0 ? void 0 : _b[bufferViewIndex];
217
+ if (!bufferView)
218
+ throw new Error(`No bufferView with index #${bufferViewIndex}!`);
219
+ const buffer = this.chunks[bufferView.buffer];
220
+ const byteOffset = (_c = bufferView.byteOffset) !== null && _c !== void 0 ? _c : 0;
221
+ const data = buffer.slice(byteOffset, byteOffset + bufferView.byteLength);
222
+ const view = figureOutView(data, convertTypeToNumber((_e = type !== null && type !== void 0 ? type : (_d = this.findAccessorForBufferView(bufferViewIndex)) === null || _d === void 0 ? void 0 : _d.componentType) !== null && _e !== void 0 ? _e : "Float32"));
223
+ this.cacheBufferViewDatas.set(bufferViewIndex, view);
224
+ return view;
225
+ }
226
+ findAccessorForBufferView(bufferViewIndex) {
227
+ var _a;
228
+ return ((_a = this.gltf.accessors) !== null && _a !== void 0 ? _a : []).find(accessor => accessor.bufferView === bufferViewIndex);
229
+ }
230
+ setAttrib(dataset, attribName, meshIndex = 0, primitiveIndex = 0, primitiveAttribName) {
231
+ var _a, _b, _c, _d, _e;
232
+ const { gltf } = this;
233
+ const accessorIndex = (_b = (_a = gltf.meshes) === null || _a === void 0 ? void 0 : _a[meshIndex].primitives[primitiveIndex].attributes[primitiveAttribName !== null && primitiveAttribName !== void 0 ? primitiveAttribName : attribName]) !== null && _b !== void 0 ? _b : -1;
234
+ const accessor = (_c = gltf.accessors) === null || _c === void 0 ? void 0 : _c[accessorIndex];
235
+ if (!accessor) {
236
+ throw new Error(`No attribute "${primitiveAttribName !== null && primitiveAttribName !== void 0 ? primitiveAttribName : attribName}" for primitive #${primitiveIndex} of mesh #${meshIndex}!`);
237
+ }
238
+ const bufferViewIndex = (_d = accessor.bufferView) !== null && _d !== void 0 ? _d : 0;
239
+ const bufferView = (_e = gltf.bufferViews) === null || _e === void 0 ? void 0 : _e[bufferViewIndex];
240
+ if (!bufferView) {
241
+ throw new Error(`No bufferView with index #${bufferViewIndex}!`);
242
+ }
243
+ const view = this.getBufferViewData(bufferViewIndex, accessor.componentType);
244
+ dataset.set(attribName, view, {
245
+ byteStride: bufferView.byteStride,
246
+ byteOffset: accessor.byteOffset,
247
+ count: accessor.count,
248
+ });
249
+ }
250
+ makeGeometry({ computeNormals, meshIndex = 0, primitiveIndex = 0, attPositionName = "POSITION", attNormalName = "NORMAL", attTextureCoordsName = "TEXCOORD_0", } = {}) {
251
+ const primitive = this.getMeshPrimitive(meshIndex, primitiveIndex);
252
+ try {
253
+ const { attributes } = primitive;
254
+ if (!attributes)
255
+ throw new Error("No attributes found!");
256
+ const elements = this.getMeshPrimitiveIndices(meshIndex, primitiveIndex);
257
+ const definition = {
258
+ [attPositionName]: "vec3",
259
+ };
260
+ if (typeof attributes[attNormalName] === "string") {
261
+ definition[attNormalName] = "vec3";
262
+ }
263
+ if (typeof attributes[attTextureCoordsName] === "string") {
264
+ definition[attTextureCoordsName] = "vec2";
265
+ }
266
+ const dataset = new TgdDataset(definition);
267
+ dataset.set(attPositionName, returnFloat32Array(this.getBufferViewData(this.getAccessorByAttributeName(primitive, attPositionName))));
268
+ if (typeof attributes[attNormalName] === "string") {
269
+ dataset.set(attNormalName, returnFloat32Array(this.getBufferViewData(this.getAccessorByAttributeName(primitive, attNormalName))));
270
+ }
271
+ if (typeof attributes[attTextureCoordsName] === "string") {
272
+ dataset.set(attTextureCoordsName, returnFloat32Array(this.getBufferViewData(this.getAccessorByAttributeName(primitive, attTextureCoordsName))));
273
+ }
274
+ return new TgdGeometry({
275
+ computeNormalsIfMissing: computeNormals,
276
+ dataset,
277
+ elements,
278
+ attPosition: attPositionName,
279
+ attNormal: attNormalName,
280
+ attUV: attTextureCoordsName,
281
+ });
282
+ }
283
+ catch (error) {
284
+ const message = error instanceof Error ? error.message : JSON.stringify(error);
285
+ throw new Error(`Error in primitive #${primitiveIndex} of mesh #${meshIndex}:\n${message}`);
286
+ }
287
+ }
288
+ }
289
+ function figureOutView(data, componentType) {
290
+ switch (componentType) {
291
+ case 5120:
292
+ return new Int8Array(data);
293
+ case 5121:
294
+ return new Uint8Array(data);
295
+ case 5122:
296
+ return new Int16Array(data);
297
+ case 5123:
298
+ return new Uint16Array(data);
299
+ case 5125:
300
+ return new Uint32Array(data);
301
+ default:
302
+ return new Float32Array(data);
303
+ }
304
+ }
305
+ function convertTypeToNumber(type) {
306
+ if (typeof type === "number")
307
+ return type;
308
+ switch (type) {
309
+ case "Int8":
310
+ return 5120;
311
+ case "Uint8":
312
+ return 5121;
313
+ case "Int16":
314
+ return 5122;
315
+ case "Uint16":
316
+ return 5123;
317
+ case "Uint32":
318
+ return 5125;
319
+ default:
320
+ return WebGL2RenderingContext.FLOAT;
321
+ }
322
+ throw new Error("Function not implemented.");
323
+ }
324
+ function returnFloat32Array(data) {
325
+ if (data instanceof Float32Array)
326
+ return data;
327
+ throw new Error("We were expecting a Float32Array!");
328
+ }
329
+ function loadImage(url) {
330
+ return new Promise(resolve => {
331
+ const img = new Image();
332
+ img.src = url;
333
+ img.addEventListener("load", () => resolve(img));
334
+ img.addEventListener("error", () => resolve(null));
335
+ });
336
+ }
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x0Zi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhL2dsdGYvZ2x0Zi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBd0IsTUFBTSxjQUFjLENBQUE7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQVVuQyxPQUFPLEVBQ0gsNkJBQTZCLEdBRWhDLE1BQU0sWUFBWSxDQUFBO0FBQ25CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUUzQyxNQUFNLE9BQU8sVUFBVTtJQXVCbkI7O09BRUc7SUFDSCxZQUFZLE9BQW9CO1FBdEJmLGlCQUFZLEdBR3hCLEVBQUUsQ0FBQTtRQUNVLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBR25DLENBQUE7UUFDYyxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO1FBQzFDLHlCQUFvQixHQUFHLElBQUksR0FBRyxFQVE1QyxDQUFBO1FBTUMsSUFBSSxDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7WUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFBO1FBQ3ZDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsTUFBTSxPQUFPLEdBQ1QsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNsRSxNQUFNLElBQUksS0FBSyxDQUFD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
@@ -0,0 +1,2 @@
1
+ export * from "./gltf";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/data/gltf/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./gltf.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YS9nbHRmL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsUUFBUSxDQUFBIn0=
@@ -0,0 +1,13 @@
1
+ import { TgdFormatGltf } from "../../types/gltf";
2
+ /**
3
+ * @see https://www.khronos.org/files/gltf20-reference-guide.pdf
4
+ */
5
+ export declare function parseGLB(data: ArrayBuffer): {
6
+ gltf: TgdFormatGltf;
7
+ chunks: ArrayBuffer[];
8
+ chunkTypes: Array<{
9
+ size: number;
10
+ type: "JSON" | "BIN";
11
+ }>;
12
+ };
13
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/data/gltf/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAuB,MAAM,kBAAkB,CAAA;AAErE;;GAEG;AAEH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG;IACzC,IAAI,EAAE,aAAa,CAAA;IACnB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;KAAE,CAAC,CAAA;CAC5D,CAiDA"}
@@ -0,0 +1,54 @@
1
+ import { assertTgdFormatGltf } from "../../types/gltf.js";
2
+ /**
3
+ * @see https://www.khronos.org/files/gltf20-reference-guide.pdf
4
+ */
5
+ export function parseGLB(data) {
6
+ const view = new DataView(data);
7
+ const magicNumber = view.getUint32(0, true);
8
+ if (magicNumber !== 0x46546c67) {
9
+ throw new Error("Invalid magic number for GLB file!");
10
+ }
11
+ const version = view.getUint32(4, true);
12
+ if (version !== 2) {
13
+ throw new Error(`We support only version 2, but this file is in version ${version}!`);
14
+ }
15
+ const length = view.getUint32(8, true);
16
+ let gltf = {};
17
+ const chunks = [];
18
+ const chunkTypes = [];
19
+ let offset = 12;
20
+ while (offset < length) {
21
+ const chunkLength = view.getUint32(offset, true);
22
+ offset += 4;
23
+ const chunkType = view.getUint32(offset, true);
24
+ offset += 4;
25
+ const chunkData = data.slice(offset, offset + chunkLength);
26
+ offset += chunkLength;
27
+ if (chunkType === 0x4e4f534a) {
28
+ // This is the JSON part.
29
+ const json = new TextDecoder().decode(chunkData);
30
+ try {
31
+ const object = JSON.parse(json);
32
+ assertTgdFormatGltf(object);
33
+ gltf = object;
34
+ chunkTypes.push({ type: "JSON", size: chunkData.byteLength });
35
+ }
36
+ catch (error) {
37
+ console.error("Unable to parse this JSON file:", json);
38
+ console.error(error);
39
+ throw new Error("Invalid JSON data in the chunk!");
40
+ }
41
+ }
42
+ else if (chunkType === 0x004e4942) {
43
+ chunks.push(chunkData);
44
+ chunkTypes.push({ type: "BIN", size: chunkData.byteLength });
45
+ }
46
+ else {
47
+ throw new Error(`We got an invalid chunk type: 0x${chunkType
48
+ .toString(16)
49
+ .padStart(8, "0")}!`);
50
+ }
51
+ }
52
+ return { gltf, chunks, chunkTypes };
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEvZ2x0Zi9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRXJFOztHQUVHO0FBRUgsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFpQjtJQUt0QyxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMzQyxJQUFJLFdBQVcsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3ZDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ1gsMERBQTBELE9BQU8sR0FBRyxDQUN2RSxDQUFBO0lBQ0wsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3RDLElBQUksSUFBSSxHQUFHLEVBQW1CLENBQUE7SUFDOUIsTUFBTSxNQUFNLEdBQWtCLEVBQUUsQ0FBQTtJQUNoQyxNQUFNLFVBQVUsR0FBa0QsRUFBRSxDQUFBO0lBQ3BFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtJQUNmLE9BQU8sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2hELE1BQU0sSUFBSSxDQUFDLENBQUE7UUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM5QyxNQUFNLElBQUksQ0FBQyxDQUFBO1FBQ1gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFBO1FBQzFELE1BQU0sSUFBSSxXQUFXLENBQUE7UUFDckIsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDM0IseUJBQXlCO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ2hELElBQUksQ0FBQztnQkFDRCxNQUFNLE1BQU0sR0FBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN4QyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsSUFBSSxHQUFHLE1BQU0sQ0FBQTtnQkFDYixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7WUFDakUsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDdEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1lBQ3RELENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDaEUsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLElBQUksS0FBSyxDQUNYLG1DQUFtQyxTQUFTO2lCQUN2QyxRQUFRLENBQUMsRUFBRSxDQUFDO2lCQUNaLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FDM0IsQ0FBQTtRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUE7QUFDdkMsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ export * from "../parser/gltf";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "../parser/gltf/index.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFBIn0=
@@ -0,0 +1,2 @@
1
+ export * from "./mesh-glb";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "./mesh-glb.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmFjdG9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQSJ9
@@ -0,0 +1,42 @@
1
+ import { TgdContext } from "../context";
2
+ import { TgdMaterial } from "../material";
3
+ import { TgdVec4 } from "../math";
4
+ import { TgdPainterNode } from "../painter";
5
+ import { TgdDataGlb } from "../parser";
6
+ import { TgdTexture2D } from "../texture";
7
+ import { TgdFormatGltfMesh, TgdFormatGltfMeshPrimitive, TgdFormatGltfNode } from "../types";
8
+ interface OverrideMaterialOptions {
9
+ data: TgdDataGlb;
10
+ mesh: TgdFormatGltfMesh;
11
+ primitive: TgdFormatGltfMeshPrimitive;
12
+ }
13
+ type MaterialOverrider = (options: OverrideMaterialOptions) => (this: void, options: {
14
+ color?: TgdVec4 | TgdTexture2D;
15
+ }) => TgdMaterial;
16
+ interface MakeMeshGlbPainterOptions {
17
+ data: TgdDataGlb;
18
+ context: TgdContext;
19
+ node: number | string | TgdFormatGltfNode;
20
+ overrideMaterial?: MaterialOverrider;
21
+ /**
22
+ * If defined, we skip all primitive with a material's name in the list.
23
+ */
24
+ excludeByMaterialName?: string[];
25
+ /**
26
+ * If defined, we skip all primitives with a material's name NOT in the list.
27
+ */
28
+ includeOnlyMaterialNames?: string[];
29
+ }
30
+ /**
31
+ * Create a `TgdPainterNode` from a node hierarchy from a GLTF structure.
32
+ * @param options
33
+ * * `data`: a GLTF parser
34
+ * * `context`: we will create painters, so we need a TgdContext
35
+ * * `node`: the root node you want to paint.
36
+ * @returns
37
+ */
38
+ export declare function tgdMakeMeshGlbPainter(options: MakeMeshGlbPainterOptions): {
39
+ painter: TgdPainterNode;
40
+ };
41
+ export {};
42
+ //# sourceMappingURL=mesh-glb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-glb.d.ts","sourceRoot":"","sources":["../../src/factory/mesh-glb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAqB,OAAO,EAAE,MAAM,WAAW,CAAA;AACtD,OAAO,EAEH,cAAc,EAEjB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,EAEpB,MAAM,YAAY,CAAA;AAGnB,UAAU,uBAAuB;IAC7B,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,iBAAiB,CAAA;IACvB,SAAS,EAAE,0BAA0B,CAAA;CACxC;AAED,KAAK,iBAAiB,GAAG,CACrB,OAAO,EAAE,uBAAuB,KAC/B,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;CAAE,KAAK,WAAW,CAAA;AAE7E,UAAU,yBAAyB;IAC/B,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,UAAU,CAAA;IACnB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAAA;IACzC,gBAAgB,CAAC,EAAE,iBAAiB,CAAA;IACpC;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC;;OAEG;IACH,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;CACtC;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,yBAAyB,GAAG;IACvE,OAAO,EAAE,cAAc,CAAA;CAC1B,CAKA"}
@@ -0,0 +1,91 @@
1
+ import { TgdPainterMeshGltf, TgdPainterNode, } from "./../painter/index.js";
2
+ import { isNumber, isString } from "./../types/guards.js";
3
+ /**
4
+ * Create a `TgdPainterNode` from a node hierarchy from a GLTF structure.
5
+ * @param options
6
+ * * `data`: a GLTF parser
7
+ * * `context`: we will create painters, so we need a TgdContext
8
+ * * `node`: the root node you want to paint.
9
+ * @returns
10
+ */
11
+ export function tgdMakeMeshGlbPainter(options) {
12
+ const { data, node = 0 } = options;
13
+ const actualNode = getActualNode(data, node);
14
+ const painter = makeNodePainter(actualNode, options);
15
+ return { painter };
16
+ }
17
+ /**
18
+ * Retrieve node by index or by name
19
+ */
20
+ function getActualNode(data, node) {
21
+ if (isNumber(node))
22
+ return data.getNode(node);
23
+ if (isString(node))
24
+ return data.getNodeByNameOrThrow(node);
25
+ return node;
26
+ }
27
+ function makeNodePainter(node, options) {
28
+ const transfo = {};
29
+ if (node.translation) {
30
+ transfo.position = node.translation;
31
+ }
32
+ if (node.rotation) {
33
+ transfo.orientation = node.rotation;
34
+ }
35
+ if (node.scale) {
36
+ transfo.scale = node.scale;
37
+ }
38
+ const { data } = options;
39
+ const children = makeMeshPainters(node.mesh, options);
40
+ if (node.children) {
41
+ for (const nodeIndex of node.children) {
42
+ children.push(makeNodePainter(data.getNode(nodeIndex), options));
43
+ }
44
+ }
45
+ const painter = new TgdPainterNode({
46
+ name: `TgdPainterNode::${node.name}`,
47
+ transfo,
48
+ children,
49
+ });
50
+ return painter;
51
+ }
52
+ function makeMeshPainters(meshIndex, options) {
53
+ var _a, _b;
54
+ if (!isNumber(meshIndex))
55
+ return [];
56
+ const { data, context, overrideMaterial, excludeByMaterialName, includeOnlyMaterialNames, } = options;
57
+ const mesh = data.getMesh(meshIndex);
58
+ const targets = [];
59
+ for (let primitiveIndex = 0; primitiveIndex < mesh.primitives.length; primitiveIndex++) {
60
+ const primitive = data.getMeshPrimitive(meshIndex, primitiveIndex);
61
+ const material = isNumber(primitive.material)
62
+ ? data.getMaterial(primitive.material)
63
+ : null;
64
+ const materialName = (_a = material === null || material === void 0 ? void 0 : material.name) !== null && _a !== void 0 ? _a : `#${primitive.material}`;
65
+ if (excludeByMaterialName &&
66
+ excludeByMaterialName.includes(materialName)) {
67
+ // Skipping this primitive because the material has been excluded.
68
+ continue;
69
+ }
70
+ if (includeOnlyMaterialNames &&
71
+ !includeOnlyMaterialNames.includes(materialName)) {
72
+ // If we have an include only list, we skip everything else.
73
+ continue;
74
+ }
75
+ const materialFactory = overrideMaterial === null || overrideMaterial === void 0 ? void 0 : overrideMaterial({
76
+ data,
77
+ mesh,
78
+ primitive,
79
+ });
80
+ const target = new TgdPainterMeshGltf(context, {
81
+ name: `${mesh.name}/${(_b = material === null || material === void 0 ? void 0 : material.name) !== null && _b !== void 0 ? _b : ""}`,
82
+ asset: data,
83
+ meshIndex,
84
+ primitiveIndex,
85
+ materialFactory,
86
+ });
87
+ targets.push(target);
88
+ }
89
+ return targets;
90
+ }
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1nbGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmFjdG9yeS9tZXNoLWdsYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGNBQWMsR0FFakIsTUFBTSxjQUFjLENBQUE7QUFTckIsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQTJCdEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUFrQztJQUdwRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDbEMsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUM1QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQTtBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FDbEIsSUFBZ0IsRUFDaEIsSUFBeUM7SUFFekMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzdDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzFELE9BQU8sSUFBSSxDQUFBO0FBQ2YsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUNwQixJQUF1QixFQUN2QixPQUFrQztJQUVsQyxNQUFNLE9BQU8sR0FBK0IsRUFBRSxDQUFBO0lBQzlDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQTtJQUN2QyxDQUFDO0lBQ0QsSUFBSSxJ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
@@ -7,6 +7,7 @@ export * from "./context";
7
7
  export * from "./controller";
8
8
  export * from "./dataset";
9
9
  export * from "./event";
10
+ export * from "./factory";
10
11
  export * from "./filter";
11
12
  export * from "./geometry";
12
13
  export * from "./input";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AAEvB,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,mBAAmB,CAAA;AACjC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AAEvB,cAAc,SAAS,CAAA"}