sdl-mcp 0.12.2 → 0.12.3

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 (276) hide show
  1. package/README.md +10 -0
  2. package/config/sdlmcp.config.example.json +53 -8
  3. package/config/sdlmcp.config.schema.json +530 -106
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/benchmark/external-manifest.d.ts +162 -0
  6. package/dist/benchmark/external-manifest.d.ts.map +1 -0
  7. package/dist/benchmark/external-manifest.js +336 -0
  8. package/dist/benchmark/external-manifest.js.map +1 -0
  9. package/dist/benchmark/external-runner.d.ts +100 -0
  10. package/dist/benchmark/external-runner.d.ts.map +1 -0
  11. package/dist/benchmark/external-runner.js +1171 -0
  12. package/dist/benchmark/external-runner.js.map +1 -0
  13. package/dist/benchmark/output-file.d.ts +3 -0
  14. package/dist/benchmark/output-file.d.ts.map +1 -0
  15. package/dist/benchmark/output-file.js +8 -0
  16. package/dist/benchmark/output-file.js.map +1 -0
  17. package/dist/cli/argParsing.d.ts.map +1 -1
  18. package/dist/cli/argParsing.js +6 -0
  19. package/dist/cli/argParsing.js.map +1 -1
  20. package/dist/cli/commands/benchmark.d.ts.map +1 -1
  21. package/dist/cli/commands/benchmark.js +3 -2
  22. package/dist/cli/commands/benchmark.js.map +1 -1
  23. package/dist/cli/commands/index.d.ts +1 -0
  24. package/dist/cli/commands/index.d.ts.map +1 -1
  25. package/dist/cli/commands/index.js +13 -7
  26. package/dist/cli/commands/index.js.map +1 -1
  27. package/dist/cli/commands/init.d.ts +5 -1
  28. package/dist/cli/commands/init.d.ts.map +1 -1
  29. package/dist/cli/commands/init.js +73 -3
  30. package/dist/cli/commands/init.js.map +1 -1
  31. package/dist/cli/commands/serve.d.ts.map +1 -1
  32. package/dist/cli/commands/serve.js +2 -0
  33. package/dist/cli/commands/serve.js.map +1 -1
  34. package/dist/cli/index.js +2 -0
  35. package/dist/cli/index.js.map +1 -1
  36. package/dist/cli/transport/http.d.ts +1 -35
  37. package/dist/cli/transport/http.d.ts.map +1 -1
  38. package/dist/cli/transport/http.js +151 -175
  39. package/dist/cli/transport/http.js.map +1 -1
  40. package/dist/cli/types.d.ts +1 -0
  41. package/dist/cli/types.d.ts.map +1 -1
  42. package/dist/config/constants.d.ts +30 -0
  43. package/dist/config/constants.d.ts.map +1 -1
  44. package/dist/config/constants.js +30 -0
  45. package/dist/config/constants.js.map +1 -1
  46. package/dist/config/types.d.ts +53 -1
  47. package/dist/config/types.d.ts.map +1 -1
  48. package/dist/config/types.js +62 -14
  49. package/dist/config/types.js.map +1 -1
  50. package/dist/db/ladybug-batching.d.ts +1 -0
  51. package/dist/db/ladybug-batching.d.ts.map +1 -1
  52. package/dist/db/ladybug-batching.js +1 -0
  53. package/dist/db/ladybug-batching.js.map +1 -1
  54. package/dist/db/ladybug-core.d.ts +3 -0
  55. package/dist/db/ladybug-core.d.ts.map +1 -1
  56. package/dist/db/ladybug-core.js +72 -2
  57. package/dist/db/ladybug-core.js.map +1 -1
  58. package/dist/db/ladybug-embeddings.d.ts +6 -1
  59. package/dist/db/ladybug-embeddings.d.ts.map +1 -1
  60. package/dist/db/ladybug-embeddings.js +6 -1
  61. package/dist/db/ladybug-embeddings.js.map +1 -1
  62. package/dist/db/ladybug-file-summaries.d.ts.map +1 -1
  63. package/dist/db/ladybug-file-summaries.js +23 -0
  64. package/dist/db/ladybug-file-summaries.js.map +1 -1
  65. package/dist/db/ladybug-queries.js +1 -1
  66. package/dist/db/ladybug-queries.js.map +1 -1
  67. package/dist/db/migrations/index.d.ts.map +1 -1
  68. package/dist/db/migrations/index.js +2 -0
  69. package/dist/db/migrations/index.js.map +1 -1
  70. package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts +5 -9
  71. package/dist/db/migrations/m007-copy-embeddings-to-symbol.d.ts.map +1 -1
  72. package/dist/db/migrations/m007-copy-embeddings-to-symbol.js +24 -126
  73. package/dist/db/migrations/m007-copy-embeddings-to-symbol.js.map +1 -1
  74. package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts +5 -0
  75. package/dist/db/migrations/m021-remediate-symbol-embeddings.d.ts.map +1 -0
  76. package/dist/db/migrations/m021-remediate-symbol-embeddings.js +7 -0
  77. package/dist/db/migrations/m021-remediate-symbol-embeddings.js.map +1 -0
  78. package/dist/db/migrations/symbol-embedding-remediation.d.ts +57 -0
  79. package/dist/db/migrations/symbol-embedding-remediation.d.ts.map +1 -0
  80. package/dist/db/migrations/symbol-embedding-remediation.js +335 -0
  81. package/dist/db/migrations/symbol-embedding-remediation.js.map +1 -0
  82. package/dist/graph/layout/force-layout.d.ts +4 -0
  83. package/dist/graph/layout/force-layout.d.ts.map +1 -0
  84. package/dist/graph/layout/force-layout.js +127 -0
  85. package/dist/graph/layout/force-layout.js.map +1 -0
  86. package/dist/graph/layout/layout-service.d.ts +37 -0
  87. package/dist/graph/layout/layout-service.d.ts.map +1 -0
  88. package/dist/graph/layout/layout-service.js +172 -0
  89. package/dist/graph/layout/layout-service.js.map +1 -0
  90. package/dist/graph/layout/native-engine.d.ts +9 -0
  91. package/dist/graph/layout/native-engine.d.ts.map +1 -0
  92. package/dist/graph/layout/native-engine.js +59 -0
  93. package/dist/graph/layout/native-engine.js.map +1 -0
  94. package/dist/graph/layout/prng.d.ts +3 -0
  95. package/dist/graph/layout/prng.d.ts.map +1 -0
  96. package/dist/graph/layout/prng.js +19 -0
  97. package/dist/graph/layout/prng.js.map +1 -0
  98. package/dist/graph/layout/serializer.d.ts +3 -0
  99. package/dist/graph/layout/serializer.d.ts.map +1 -0
  100. package/dist/graph/layout/serializer.js +20 -0
  101. package/dist/graph/layout/serializer.js.map +1 -0
  102. package/dist/graph/layout/types.d.ts +30 -0
  103. package/dist/graph/layout/types.d.ts.map +1 -0
  104. package/dist/graph/layout/types.js +2 -0
  105. package/dist/graph/layout/types.js.map +1 -0
  106. package/dist/indexer/embeddings.d.ts +7 -0
  107. package/dist/indexer/embeddings.d.ts.map +1 -1
  108. package/dist/indexer/embeddings.js +44 -4
  109. package/dist/indexer/embeddings.js.map +1 -1
  110. package/dist/indexer/file-summary-embeddings.d.ts +12 -0
  111. package/dist/indexer/file-summary-embeddings.d.ts.map +1 -1
  112. package/dist/indexer/file-summary-embeddings.js +83 -21
  113. package/dist/indexer/file-summary-embeddings.js.map +1 -1
  114. package/dist/indexer/fileWalker.d.ts.map +1 -1
  115. package/dist/indexer/fileWalker.js +2 -1
  116. package/dist/indexer/fileWalker.js.map +1 -1
  117. package/dist/indexer/metrics-updater.d.ts.map +1 -1
  118. package/dist/indexer/metrics-updater.js +27 -4
  119. package/dist/indexer/metrics-updater.js.map +1 -1
  120. package/dist/indexer/watcher.d.ts.map +1 -1
  121. package/dist/indexer/watcher.js +2 -1
  122. package/dist/indexer/watcher.js.map +1 -1
  123. package/dist/mcp/context-response-projection.d.ts.map +1 -1
  124. package/dist/mcp/context-response-projection.js +49 -13
  125. package/dist/mcp/context-response-projection.js.map +1 -1
  126. package/dist/mcp/tools/search-edit/planner.d.ts.map +1 -1
  127. package/dist/mcp/tools/search-edit/planner.js +10 -3
  128. package/dist/mcp/tools/search-edit/planner.js.map +1 -1
  129. package/dist/observability/event-tap.d.ts +2 -1
  130. package/dist/observability/event-tap.d.ts.map +1 -1
  131. package/dist/observability/event-tap.js.map +1 -1
  132. package/dist/observability/service.d.ts +11 -4
  133. package/dist/observability/service.d.ts.map +1 -1
  134. package/dist/observability/service.js +83 -13
  135. package/dist/observability/service.js.map +1 -1
  136. package/dist/observability/types.d.ts +48 -2
  137. package/dist/observability/types.d.ts.map +1 -1
  138. package/dist/ui/.tsbuildinfo +1 -0
  139. package/dist/ui/vendor/fflate.js +2692 -0
  140. package/dist/ui/vendor/jsm/controls/ArcballControls.js +3543 -0
  141. package/dist/ui/vendor/jsm/controls/DragControls.js +452 -0
  142. package/dist/ui/vendor/jsm/controls/FirstPersonControls.js +488 -0
  143. package/dist/ui/vendor/jsm/controls/FlyControls.js +384 -0
  144. package/dist/ui/vendor/jsm/controls/MapControls.js +116 -0
  145. package/dist/ui/vendor/jsm/controls/OrbitControls.js +1963 -0
  146. package/dist/ui/vendor/jsm/controls/PointerLockControls.js +264 -0
  147. package/dist/ui/vendor/jsm/controls/TrackballControls.js +1001 -0
  148. package/dist/ui/vendor/jsm/controls/TransformControls.js +2003 -0
  149. package/dist/ui/vendor/jsm/loaders/3DMLoader.js +1836 -0
  150. package/dist/ui/vendor/jsm/loaders/3MFLoader.js +1621 -0
  151. package/dist/ui/vendor/jsm/loaders/AMFLoader.js +541 -0
  152. package/dist/ui/vendor/jsm/loaders/BVHLoader.js +484 -0
  153. package/dist/ui/vendor/jsm/loaders/ColladaLoader.js +153 -0
  154. package/dist/ui/vendor/jsm/loaders/DDSLoader.js +385 -0
  155. package/dist/ui/vendor/jsm/loaders/DRACOLoader.js +772 -0
  156. package/dist/ui/vendor/jsm/loaders/EXRLoader.js +3395 -0
  157. package/dist/ui/vendor/jsm/loaders/FBXLoader.js +4580 -0
  158. package/dist/ui/vendor/jsm/loaders/FontLoader.js +260 -0
  159. package/dist/ui/vendor/jsm/loaders/GCodeLoader.js +318 -0
  160. package/dist/ui/vendor/jsm/loaders/GLTFLoader.js +4860 -0
  161. package/dist/ui/vendor/jsm/loaders/HDRCubeTextureLoader.js +164 -0
  162. package/dist/ui/vendor/jsm/loaders/HDRLoader.js +463 -0
  163. package/dist/ui/vendor/jsm/loaders/IESLoader.js +379 -0
  164. package/dist/ui/vendor/jsm/loaders/KMZLoader.js +163 -0
  165. package/dist/ui/vendor/jsm/loaders/KTX2Loader.js +1276 -0
  166. package/dist/ui/vendor/jsm/loaders/KTXLoader.js +197 -0
  167. package/dist/ui/vendor/jsm/loaders/LDrawLoader.js +2510 -0
  168. package/dist/ui/vendor/jsm/loaders/LUT3dlLoader.js +205 -0
  169. package/dist/ui/vendor/jsm/loaders/LUTCubeLoader.js +190 -0
  170. package/dist/ui/vendor/jsm/loaders/LUTImageLoader.js +190 -0
  171. package/dist/ui/vendor/jsm/loaders/LWOLoader.js +1051 -0
  172. package/dist/ui/vendor/jsm/loaders/LottieLoader.js +130 -0
  173. package/dist/ui/vendor/jsm/loaders/MD2Loader.js +435 -0
  174. package/dist/ui/vendor/jsm/loaders/MDDLoader.js +147 -0
  175. package/dist/ui/vendor/jsm/loaders/MTLLoader.js +593 -0
  176. package/dist/ui/vendor/jsm/loaders/MaterialXLoader.js +1126 -0
  177. package/dist/ui/vendor/jsm/loaders/NRRDLoader.js +718 -0
  178. package/dist/ui/vendor/jsm/loaders/OBJLoader.js +955 -0
  179. package/dist/ui/vendor/jsm/loaders/PCDLoader.js +620 -0
  180. package/dist/ui/vendor/jsm/loaders/PDBLoader.js +272 -0
  181. package/dist/ui/vendor/jsm/loaders/PLYLoader.js +968 -0
  182. package/dist/ui/vendor/jsm/loaders/PVRLoader.js +270 -0
  183. package/dist/ui/vendor/jsm/loaders/RGBELoader.js +18 -0
  184. package/dist/ui/vendor/jsm/loaders/STLLoader.js +421 -0
  185. package/dist/ui/vendor/jsm/loaders/SVGLoader.js +3319 -0
  186. package/dist/ui/vendor/jsm/loaders/TDSLoader.js +1142 -0
  187. package/dist/ui/vendor/jsm/loaders/TGALoader.js +538 -0
  188. package/dist/ui/vendor/jsm/loaders/TIFFLoader.js +59 -0
  189. package/dist/ui/vendor/jsm/loaders/TTFLoader.js +261 -0
  190. package/dist/ui/vendor/jsm/loaders/USDLoader.js +303 -0
  191. package/dist/ui/vendor/jsm/loaders/USDZLoader.js +16 -0
  192. package/dist/ui/vendor/jsm/loaders/UltraHDRLoader.js +755 -0
  193. package/dist/ui/vendor/jsm/loaders/VOXLoader.js +919 -0
  194. package/dist/ui/vendor/jsm/loaders/VRMLLoader.js +3646 -0
  195. package/dist/ui/vendor/jsm/loaders/VTKLoader.js +1293 -0
  196. package/dist/ui/vendor/jsm/loaders/XYZLoader.js +143 -0
  197. package/dist/ui/vendor/jsm/loaders/collada/ColladaComposer.js +3044 -0
  198. package/dist/ui/vendor/jsm/loaders/collada/ColladaParser.js +1977 -0
  199. package/dist/ui/vendor/jsm/loaders/lwo/IFFParser.js +1217 -0
  200. package/dist/ui/vendor/jsm/loaders/lwo/LWO2Parser.js +414 -0
  201. package/dist/ui/vendor/jsm/loaders/lwo/LWO3Parser.js +373 -0
  202. package/dist/ui/vendor/jsm/loaders/usd/USDAParser.js +901 -0
  203. package/dist/ui/vendor/jsm/loaders/usd/USDCParser.js +1878 -0
  204. package/dist/ui/vendor/jsm/loaders/usd/USDComposer.js +4627 -0
  205. package/dist/ui/vendor/jsm/utils/BufferGeometryUtils.js +1501 -0
  206. package/dist/ui/vendor/jsm/utils/CameraUtils.js +82 -0
  207. package/dist/ui/vendor/jsm/utils/ColorUtils.js +76 -0
  208. package/dist/ui/vendor/jsm/utils/GeometryCompressionUtils.js +547 -0
  209. package/dist/ui/vendor/jsm/utils/GeometryUtils.js +226 -0
  210. package/dist/ui/vendor/jsm/utils/LDrawUtils.js +211 -0
  211. package/dist/ui/vendor/jsm/utils/SceneOptimizer.js +458 -0
  212. package/dist/ui/vendor/jsm/utils/SceneUtils.js +363 -0
  213. package/dist/ui/vendor/jsm/utils/ShadowMapViewer.js +244 -0
  214. package/dist/ui/vendor/jsm/utils/ShadowMapViewerGPU.js +233 -0
  215. package/dist/ui/vendor/jsm/utils/SkeletonUtils.js +496 -0
  216. package/dist/ui/vendor/jsm/utils/SortUtils.js +175 -0
  217. package/dist/ui/vendor/jsm/utils/UVsDebug.js +173 -0
  218. package/dist/ui/vendor/jsm/utils/WebGLTextureUtils.js +115 -0
  219. package/dist/ui/vendor/jsm/utils/WebGPUTextureUtils.js +81 -0
  220. package/dist/ui/vendor/jsm/utils/WorkerPool.js +167 -0
  221. package/dist/ui/vendor/three.core.min.js +6 -0
  222. package/dist/ui/vendor/three.module.min.js +6 -0
  223. package/dist/ui/viewer/ambient.js +39 -0
  224. package/dist/ui/viewer/api.js +93 -0
  225. package/dist/ui/viewer/chrome.js +36 -0
  226. package/dist/ui/viewer/edges.js +33 -0
  227. package/dist/ui/viewer/index.html +32 -0
  228. package/dist/ui/viewer/inspector.js +23 -0
  229. package/dist/ui/viewer/lenses/activity.js +24 -0
  230. package/dist/ui/viewer/lenses/community.js +5 -0
  231. package/dist/ui/viewer/lenses/edges.js +4 -0
  232. package/dist/ui/viewer/lenses/impact.js +6 -0
  233. package/dist/ui/viewer/lenses/search.js +69 -0
  234. package/dist/ui/viewer/lod.js +100 -0
  235. package/dist/ui/viewer/main.js +92 -0
  236. package/dist/ui/viewer/picking.js +45 -0
  237. package/dist/ui/viewer/scene.js +85 -0
  238. package/dist/ui/viewer/skins/default-skin.js +15 -0
  239. package/dist/ui/viewer/skins/loader.js +44 -0
  240. package/dist/ui/viewer/skins/manifest-schema.js +30 -0
  241. package/dist/ui/viewer/state.js +44 -0
  242. package/dist/ui/viewer/theme.js +23 -0
  243. package/dist/ui/viewer/universe.js +151 -0
  244. package/dist/ui/viewer/viewer.css +85 -0
  245. package/dist/util/safeRegex.d.ts.map +1 -1
  246. package/dist/util/safeRegex.js +221 -68
  247. package/dist/util/safeRegex.js.map +1 -1
  248. package/dist/viewer/legacy-graph.d.ts +40 -0
  249. package/dist/viewer/legacy-graph.d.ts.map +1 -0
  250. package/dist/viewer/legacy-graph.js +152 -0
  251. package/dist/viewer/legacy-graph.js.map +1 -0
  252. package/dist/viewer/routes.d.ts +10 -0
  253. package/dist/viewer/routes.d.ts.map +1 -0
  254. package/dist/viewer/routes.js +221 -0
  255. package/dist/viewer/routes.js.map +1 -0
  256. package/dist/viewer/service.d.ts +44 -0
  257. package/dist/viewer/service.d.ts.map +1 -0
  258. package/dist/viewer/service.js +160 -0
  259. package/dist/viewer/service.js.map +1 -0
  260. package/dist/viewer/types.d.ts +63 -0
  261. package/dist/viewer/types.d.ts.map +1 -0
  262. package/dist/viewer/types.js +2 -0
  263. package/dist/viewer/types.js.map +1 -0
  264. package/dist/viewer/viewer-config.d.ts +12 -0
  265. package/dist/viewer/viewer-config.d.ts.map +1 -0
  266. package/dist/viewer/viewer-config.js +36 -0
  267. package/dist/viewer/viewer-config.js.map +1 -0
  268. package/package.json +18 -9
  269. package/templates/SDL.md +19 -0
  270. package/templates/claude-code.json +8 -43
  271. package/dist/ui/graph.css +0 -108
  272. package/dist/ui/graph.d.ts +0 -2
  273. package/dist/ui/graph.d.ts.map +0 -1
  274. package/dist/ui/graph.html +0 -52
  275. package/dist/ui/graph.js +0 -259
  276. package/dist/ui/graph.js.map +0 -1
@@ -0,0 +1,270 @@
1
+ import {
2
+ CompressedTextureLoader,
3
+ RGBA_PVRTC_2BPPV1_Format,
4
+ RGBA_PVRTC_4BPPV1_Format,
5
+ RGB_PVRTC_2BPPV1_Format,
6
+ RGB_PVRTC_4BPPV1_Format
7
+ } from 'three';
8
+
9
+ /**
10
+ * A loader for the PVRTC texture compression format.
11
+ *
12
+ * ```js
13
+ * const loader = new PVRLoader();
14
+ *
15
+ * const map = loader.load( 'textures/compressed/disturb_4bpp_rgb.pvr' );
16
+ * map.colorSpace = THREE.SRGBColorSpace; // only for color textures
17
+ * ```
18
+ *
19
+ * @augments CompressedTextureLoader
20
+ * @three_import import { PVRLoader } from 'three/addons/loaders/PVRLoader.js';
21
+ */
22
+ class PVRLoader extends CompressedTextureLoader {
23
+
24
+ /**
25
+ * Constructs a new PVR loader.
26
+ *
27
+ * @param {LoadingManager} [manager] - The loading manager.
28
+ */
29
+ constructor( manager ) {
30
+
31
+ super( manager );
32
+
33
+ }
34
+
35
+ /**
36
+ * Parses the given PVRTC texture data.
37
+ *
38
+ * @param {ArrayBuffer} buffer - The raw texture data.
39
+ * @param {boolean} loadMipmaps - Whether to load mipmaps or not. This option is not yet supported by the loader.
40
+ * @return {CompressedTextureLoader~TexData} An object representing the parsed texture data.
41
+ */
42
+ parse( buffer, loadMipmaps ) {
43
+
44
+ const headerLengthInt = 13;
45
+ const header = new Uint32Array( buffer, 0, headerLengthInt );
46
+
47
+ const pvrDatas = {
48
+ buffer: buffer,
49
+ header: header,
50
+ loadMipmaps: loadMipmaps
51
+ };
52
+
53
+ if ( header[ 0 ] === 0x03525650 ) {
54
+
55
+ // PVR v3
56
+
57
+ return _parseV3( pvrDatas );
58
+
59
+ } else if ( header[ 11 ] === 0x21525650 ) {
60
+
61
+ // PVR v2
62
+
63
+ return _parseV2( pvrDatas );
64
+
65
+ } else {
66
+
67
+ console.error( 'THREE.PVRLoader: Unknown PVR format.' );
68
+
69
+ }
70
+
71
+ }
72
+
73
+ }
74
+
75
+ function _parseV3( pvrDatas ) {
76
+
77
+ const header = pvrDatas.header;
78
+ let bpp, format;
79
+
80
+
81
+ const metaLen = header[ 12 ],
82
+ pixelFormat = header[ 2 ],
83
+ height = header[ 6 ],
84
+ width = header[ 7 ],
85
+ // numSurfs = header[ 9 ],
86
+ numFaces = header[ 10 ],
87
+ numMipmaps = header[ 11 ];
88
+
89
+ switch ( pixelFormat ) {
90
+
91
+ case 0 : // PVRTC 2bpp RGB
92
+ bpp = 2;
93
+ format = RGB_PVRTC_2BPPV1_Format;
94
+ break;
95
+
96
+ case 1 : // PVRTC 2bpp RGBA
97
+ bpp = 2;
98
+ format = RGBA_PVRTC_2BPPV1_Format;
99
+ break;
100
+
101
+ case 2 : // PVRTC 4bpp RGB
102
+ bpp = 4;
103
+ format = RGB_PVRTC_4BPPV1_Format;
104
+ break;
105
+
106
+ case 3 : // PVRTC 4bpp RGBA
107
+ bpp = 4;
108
+ format = RGBA_PVRTC_4BPPV1_Format;
109
+ break;
110
+
111
+ default :
112
+ console.error( 'THREE.PVRLoader: Unsupported PVR format:', pixelFormat );
113
+
114
+ }
115
+
116
+ pvrDatas.dataPtr = 52 + metaLen;
117
+ pvrDatas.bpp = bpp;
118
+ pvrDatas.format = format;
119
+ pvrDatas.width = width;
120
+ pvrDatas.height = height;
121
+ pvrDatas.numSurfaces = numFaces;
122
+ pvrDatas.numMipmaps = numMipmaps;
123
+ pvrDatas.isCubemap = ( numFaces === 6 );
124
+
125
+ return _extract( pvrDatas );
126
+
127
+ }
128
+
129
+ function _parseV2( pvrDatas ) {
130
+
131
+ const header = pvrDatas.header;
132
+
133
+ const headerLength = header[ 0 ],
134
+ height = header[ 1 ],
135
+ width = header[ 2 ],
136
+ numMipmaps = header[ 3 ],
137
+ flags = header[ 4 ],
138
+ // dataLength = header[ 5 ],
139
+ // bpp = header[ 6 ],
140
+ // bitmaskRed = header[ 7 ],
141
+ // bitmaskGreen = header[ 8 ],
142
+ // bitmaskBlue = header[ 9 ],
143
+ bitmaskAlpha = header[ 10 ],
144
+ // pvrTag = header[ 11 ],
145
+ numSurfs = header[ 12 ];
146
+
147
+
148
+ const TYPE_MASK = 0xff;
149
+ const PVRTC_2 = 24,
150
+ PVRTC_4 = 25;
151
+
152
+ const formatFlags = flags & TYPE_MASK;
153
+
154
+ let bpp, format;
155
+ const _hasAlpha = bitmaskAlpha > 0;
156
+
157
+ if ( formatFlags === PVRTC_4 ) {
158
+
159
+ format = _hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format;
160
+ bpp = 4;
161
+
162
+ } else if ( formatFlags === PVRTC_2 ) {
163
+
164
+ format = _hasAlpha ? RGBA_PVRTC_2BPPV1_Format : RGB_PVRTC_2BPPV1_Format;
165
+ bpp = 2;
166
+
167
+ } else {
168
+
169
+ console.error( 'THREE.PVRLoader: Unknown PVR format:', formatFlags );
170
+
171
+ }
172
+
173
+ pvrDatas.dataPtr = headerLength;
174
+ pvrDatas.bpp = bpp;
175
+ pvrDatas.format = format;
176
+ pvrDatas.width = width;
177
+ pvrDatas.height = height;
178
+ pvrDatas.numSurfaces = numSurfs;
179
+ pvrDatas.numMipmaps = numMipmaps + 1;
180
+
181
+ // guess cubemap type seems tricky in v2
182
+ // it's just a pvr containing 6 surface (no explicit cubemap type)
183
+ pvrDatas.isCubemap = ( numSurfs === 6 );
184
+
185
+ return _extract( pvrDatas );
186
+
187
+ }
188
+
189
+
190
+ function _extract( pvrDatas ) {
191
+
192
+ const pvr = {
193
+ mipmaps: [],
194
+ width: pvrDatas.width,
195
+ height: pvrDatas.height,
196
+ format: pvrDatas.format,
197
+ mipmapCount: pvrDatas.numMipmaps,
198
+ isCubemap: pvrDatas.isCubemap
199
+ };
200
+
201
+ const buffer = pvrDatas.buffer;
202
+
203
+ let dataOffset = pvrDatas.dataPtr,
204
+ dataSize = 0,
205
+ blockSize = 0,
206
+ blockWidth = 0,
207
+ blockHeight = 0,
208
+ widthBlocks = 0,
209
+ heightBlocks = 0;
210
+
211
+ const bpp = pvrDatas.bpp,
212
+ numSurfs = pvrDatas.numSurfaces;
213
+
214
+ if ( bpp === 2 ) {
215
+
216
+ blockWidth = 8;
217
+ blockHeight = 4;
218
+
219
+ } else {
220
+
221
+ blockWidth = 4;
222
+ blockHeight = 4;
223
+
224
+ }
225
+
226
+ blockSize = ( blockWidth * blockHeight ) * bpp / 8;
227
+
228
+ pvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs;
229
+
230
+ let mipLevel = 0;
231
+
232
+ while ( mipLevel < pvrDatas.numMipmaps ) {
233
+
234
+ const sWidth = pvrDatas.width >> mipLevel,
235
+ sHeight = pvrDatas.height >> mipLevel;
236
+
237
+ widthBlocks = sWidth / blockWidth;
238
+ heightBlocks = sHeight / blockHeight;
239
+
240
+ // Clamp to minimum number of blocks
241
+ if ( widthBlocks < 2 ) widthBlocks = 2;
242
+ if ( heightBlocks < 2 ) heightBlocks = 2;
243
+
244
+ dataSize = widthBlocks * heightBlocks * blockSize;
245
+
246
+ for ( let surfIndex = 0; surfIndex < numSurfs; surfIndex ++ ) {
247
+
248
+ const byteArray = new Uint8Array( buffer, dataOffset, dataSize );
249
+
250
+ const mipmap = {
251
+ data: byteArray,
252
+ width: sWidth,
253
+ height: sHeight
254
+ };
255
+
256
+ pvr.mipmaps[ surfIndex * pvrDatas.numMipmaps + mipLevel ] = mipmap;
257
+
258
+ dataOffset += dataSize;
259
+
260
+ }
261
+
262
+ mipLevel ++;
263
+
264
+ }
265
+
266
+ return pvr;
267
+
268
+ }
269
+
270
+ export { PVRLoader };
@@ -0,0 +1,18 @@
1
+ import { HDRLoader } from './HDRLoader.js';
2
+
3
+ // @deprecated, r180
4
+
5
+ class RGBELoader extends HDRLoader {
6
+
7
+ constructor( manager ) {
8
+
9
+ console.warn( 'RGBELoader has been deprecated. Please use HDRLoader instead.' );
10
+ super( manager );
11
+
12
+ }
13
+
14
+ }
15
+
16
+ export { RGBELoader };
17
+
18
+
@@ -0,0 +1,421 @@
1
+ import {
2
+ BufferAttribute,
3
+ BufferGeometry,
4
+ Color,
5
+ FileLoader,
6
+ Float32BufferAttribute,
7
+ Loader,
8
+ Vector3,
9
+ SRGBColorSpace
10
+ } from 'three';
11
+
12
+ /**
13
+ * A loader for the STL format, as created by Solidworks and other CAD programs.
14
+ *
15
+ * Supports both binary and ASCII encoded files. The loader returns a non-indexed buffer geometry.
16
+ *
17
+ * Limitations:
18
+ * - Binary decoding supports "Magics" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).
19
+ * - There is perhaps some question as to how valid it is to always assume little-endian-ness.
20
+ * - ASCII decoding assumes file is UTF-8.
21
+ *
22
+ * ```js
23
+ * const loader = new STLLoader();
24
+ * const geometry = await loader.loadAsync( './models/stl/slotted_disk.stl' )
25
+ * scene.add( new THREE.Mesh( geometry ) );
26
+ * ```
27
+ * For binary STLs geometry might contain colors for vertices. To use it:
28
+ * ```js
29
+ * // use the same code to load STL as above
30
+ * if ( geometry.hasColors ) {
31
+ * material = new THREE.MeshPhongMaterial( { opacity: geometry.alpha, vertexColors: true } );
32
+ * }
33
+ * const mesh = new THREE.Mesh( geometry, material );
34
+ * ```
35
+ * For ASCII STLs containing multiple solids, each solid is assigned to a different group.
36
+ * Groups can be used to assign a different color by defining an array of materials with the same length of
37
+ * geometry.groups and passing it to the Mesh constructor:
38
+ *
39
+ * ```js
40
+ * const materials = [];
41
+ * const nGeometryGroups = geometry.groups.length;
42
+ *
43
+ * for ( let i = 0; i < nGeometryGroups; i ++ ) {
44
+ * const material = new THREE.MeshPhongMaterial( { color: colorMap[ i ], wireframe: false } );
45
+ * materials.push( material );
46
+ * }
47
+ *
48
+ * const mesh = new THREE.Mesh(geometry, materials);
49
+ * ```
50
+ *
51
+ * @augments Loader
52
+ * @three_import import { STLLoader } from 'three/addons/loaders/STLLoader.js';
53
+ */
54
+ class STLLoader extends Loader {
55
+
56
+ /**
57
+ * Constructs a new STL loader.
58
+ *
59
+ * @param {LoadingManager} [manager] - The loading manager.
60
+ */
61
+ constructor( manager ) {
62
+
63
+ super( manager );
64
+
65
+ }
66
+
67
+ /**
68
+ * Starts loading from the given URL and passes the loaded STL asset
69
+ * to the `onLoad()` callback.
70
+ *
71
+ * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
72
+ * @param {function(BufferGeometry)} onLoad - Executed when the loading process has been finished.
73
+ * @param {onProgressCallback} onProgress - Executed while the loading is in progress.
74
+ * @param {onErrorCallback} onError - Executed when errors occur.
75
+ */
76
+ load( url, onLoad, onProgress, onError ) {
77
+
78
+ const scope = this;
79
+
80
+ const loader = new FileLoader( this.manager );
81
+ loader.setPath( this.path );
82
+ loader.setResponseType( 'arraybuffer' );
83
+ loader.setRequestHeader( this.requestHeader );
84
+ loader.setWithCredentials( this.withCredentials );
85
+
86
+ loader.load( url, function ( text ) {
87
+
88
+ try {
89
+
90
+ onLoad( scope.parse( text ) );
91
+
92
+ } catch ( e ) {
93
+
94
+ if ( onError ) {
95
+
96
+ onError( e );
97
+
98
+ } else {
99
+
100
+ console.error( e );
101
+
102
+ }
103
+
104
+ scope.manager.itemError( url );
105
+
106
+ }
107
+
108
+ }, onProgress, onError );
109
+
110
+ }
111
+
112
+ /**
113
+ * Parses the given STL data and returns the resulting geometry.
114
+ *
115
+ * @param {ArrayBuffer} data - The raw STL data as an array buffer.
116
+ * @return {BufferGeometry} The parsed geometry.
117
+ */
118
+ parse( data ) {
119
+
120
+ function isBinary( data ) {
121
+
122
+ const reader = new DataView( data );
123
+ const face_size = ( 32 / 8 * 3 ) + ( ( 32 / 8 * 3 ) * 3 ) + ( 16 / 8 );
124
+ const n_faces = reader.getUint32( 80, true );
125
+ const expect = 80 + ( 32 / 8 ) + ( n_faces * face_size );
126
+
127
+ if ( expect === reader.byteLength ) {
128
+
129
+ return true;
130
+
131
+ }
132
+
133
+ // An ASCII STL data must begin with 'solid ' as the first six bytes.
134
+ // However, ASCII STLs lacking the SPACE after the 'd' are known to be
135
+ // plentiful. So, check the first 5 bytes for 'solid'.
136
+
137
+ // Several encodings, such as UTF-8, precede the text with up to 5 bytes:
138
+ // https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding
139
+ // Search for "solid" to start anywhere after those prefixes.
140
+
141
+ // US-ASCII ordinal values for 's', 'o', 'l', 'i', 'd'
142
+
143
+ const solid = [ 115, 111, 108, 105, 100 ];
144
+
145
+ for ( let off = 0; off < 5; off ++ ) {
146
+
147
+ // If "solid" text is matched to the current offset, declare it to be an ASCII STL.
148
+
149
+ if ( matchDataViewAt( solid, reader, off ) ) return false;
150
+
151
+ }
152
+
153
+ // Couldn't find "solid" text at the beginning; it is binary STL.
154
+
155
+ return true;
156
+
157
+ }
158
+
159
+ function matchDataViewAt( query, reader, offset ) {
160
+
161
+ // Check if each byte in query matches the corresponding byte from the current offset
162
+
163
+ for ( let i = 0, il = query.length; i < il; i ++ ) {
164
+
165
+ if ( query[ i ] !== reader.getUint8( offset + i ) ) return false;
166
+
167
+ }
168
+
169
+ return true;
170
+
171
+ }
172
+
173
+ function parseBinary( data ) {
174
+
175
+ const reader = new DataView( data );
176
+ const faces = reader.getUint32( 80, true );
177
+
178
+ let r, g, b, hasColors = false, colors;
179
+ let defaultR, defaultG, defaultB, alpha;
180
+
181
+ // process STL header
182
+ // check for default color in header ("COLOR=rgba" sequence).
183
+
184
+ for ( let index = 0; index < 80 - 10; index ++ ) {
185
+
186
+ if ( ( reader.getUint32( index, false ) == 0x434F4C4F /*COLO*/ ) &&
187
+ ( reader.getUint8( index + 4 ) == 0x52 /*'R'*/ ) &&
188
+ ( reader.getUint8( index + 5 ) == 0x3D /*'='*/ ) ) {
189
+
190
+ hasColors = true;
191
+ colors = new Float32Array( faces * 3 * 3 );
192
+
193
+ defaultR = reader.getUint8( index + 6 ) / 255;
194
+ defaultG = reader.getUint8( index + 7 ) / 255;
195
+ defaultB = reader.getUint8( index + 8 ) / 255;
196
+ alpha = reader.getUint8( index + 9 ) / 255;
197
+
198
+ }
199
+
200
+ }
201
+
202
+ const dataOffset = 84;
203
+ const faceLength = 12 * 4 + 2;
204
+
205
+ const geometry = new BufferGeometry();
206
+
207
+ const vertices = new Float32Array( faces * 3 * 3 );
208
+ const normals = new Float32Array( faces * 3 * 3 );
209
+
210
+ const color = new Color();
211
+
212
+ for ( let face = 0; face < faces; face ++ ) {
213
+
214
+ const start = dataOffset + face * faceLength;
215
+ const normalX = reader.getFloat32( start, true );
216
+ const normalY = reader.getFloat32( start + 4, true );
217
+ const normalZ = reader.getFloat32( start + 8, true );
218
+
219
+ if ( hasColors ) {
220
+
221
+ const packedColor = reader.getUint16( start + 48, true );
222
+
223
+ if ( ( packedColor & 0x8000 ) === 0 ) {
224
+
225
+ // facet has its own unique color
226
+
227
+ r = ( packedColor & 0x1F ) / 31;
228
+ g = ( ( packedColor >> 5 ) & 0x1F ) / 31;
229
+ b = ( ( packedColor >> 10 ) & 0x1F ) / 31;
230
+
231
+ } else {
232
+
233
+ r = defaultR;
234
+ g = defaultG;
235
+ b = defaultB;
236
+
237
+ }
238
+
239
+ }
240
+
241
+ for ( let i = 1; i <= 3; i ++ ) {
242
+
243
+ const vertexstart = start + i * 12;
244
+ const componentIdx = ( face * 3 * 3 ) + ( ( i - 1 ) * 3 );
245
+
246
+ vertices[ componentIdx ] = reader.getFloat32( vertexstart, true );
247
+ vertices[ componentIdx + 1 ] = reader.getFloat32( vertexstart + 4, true );
248
+ vertices[ componentIdx + 2 ] = reader.getFloat32( vertexstart + 8, true );
249
+
250
+ normals[ componentIdx ] = normalX;
251
+ normals[ componentIdx + 1 ] = normalY;
252
+ normals[ componentIdx + 2 ] = normalZ;
253
+
254
+ if ( hasColors ) {
255
+
256
+ color.setRGB( r, g, b, SRGBColorSpace );
257
+
258
+ colors[ componentIdx ] = color.r;
259
+ colors[ componentIdx + 1 ] = color.g;
260
+ colors[ componentIdx + 2 ] = color.b;
261
+
262
+ }
263
+
264
+ }
265
+
266
+ }
267
+
268
+ geometry.setAttribute( 'position', new BufferAttribute( vertices, 3 ) );
269
+ geometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );
270
+
271
+ if ( hasColors ) {
272
+
273
+ geometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );
274
+ geometry.hasColors = true;
275
+ geometry.alpha = alpha;
276
+
277
+ }
278
+
279
+ return geometry;
280
+
281
+ }
282
+
283
+ function parseASCII( data ) {
284
+
285
+ const geometry = new BufferGeometry();
286
+ const patternSolid = /solid([\s\S]*?)endsolid/g;
287
+ const patternFace = /facet([\s\S]*?)endfacet/g;
288
+ const patternName = /solid\s(.+)/;
289
+ let faceCounter = 0;
290
+
291
+ const patternFloat = /[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source;
292
+ const patternVertex = new RegExp( 'vertex' + patternFloat + patternFloat + patternFloat, 'g' );
293
+ const patternNormal = new RegExp( 'normal' + patternFloat + patternFloat + patternFloat, 'g' );
294
+
295
+ const vertices = [];
296
+ const normals = [];
297
+ const groupNames = [];
298
+
299
+ const normal = new Vector3();
300
+
301
+ let result;
302
+
303
+ let groupCount = 0;
304
+ let startVertex = 0;
305
+ let endVertex = 0;
306
+
307
+ while ( ( result = patternSolid.exec( data ) ) !== null ) {
308
+
309
+ startVertex = endVertex;
310
+
311
+ const solid = result[ 0 ];
312
+
313
+ const name = ( result = patternName.exec( solid ) ) !== null ? result[ 1 ] : '';
314
+ groupNames.push( name );
315
+
316
+ while ( ( result = patternFace.exec( solid ) ) !== null ) {
317
+
318
+ let vertexCountPerFace = 0;
319
+ let normalCountPerFace = 0;
320
+
321
+ const text = result[ 0 ];
322
+
323
+ while ( ( result = patternNormal.exec( text ) ) !== null ) {
324
+
325
+ normal.x = parseFloat( result[ 1 ] );
326
+ normal.y = parseFloat( result[ 2 ] );
327
+ normal.z = parseFloat( result[ 3 ] );
328
+ normalCountPerFace ++;
329
+
330
+ }
331
+
332
+ while ( ( result = patternVertex.exec( text ) ) !== null ) {
333
+
334
+ vertices.push( parseFloat( result[ 1 ] ), parseFloat( result[ 2 ] ), parseFloat( result[ 3 ] ) );
335
+ normals.push( normal.x, normal.y, normal.z );
336
+ vertexCountPerFace ++;
337
+ endVertex ++;
338
+
339
+ }
340
+
341
+ // every face have to own ONE valid normal
342
+
343
+ if ( normalCountPerFace !== 1 ) {
344
+
345
+ console.error( 'THREE.STLLoader: Something isn\'t right with the normal of face number ' + faceCounter );
346
+
347
+ }
348
+
349
+ // each face have to own THREE valid vertices
350
+
351
+ if ( vertexCountPerFace !== 3 ) {
352
+
353
+ console.error( 'THREE.STLLoader: Something isn\'t right with the vertices of face number ' + faceCounter );
354
+
355
+ }
356
+
357
+ faceCounter ++;
358
+
359
+ }
360
+
361
+ const start = startVertex;
362
+ const count = endVertex - startVertex;
363
+
364
+ geometry.userData.groupNames = groupNames;
365
+
366
+ geometry.addGroup( start, count, groupCount );
367
+ groupCount ++;
368
+
369
+ }
370
+
371
+ geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
372
+ geometry.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
373
+
374
+ return geometry;
375
+
376
+ }
377
+
378
+ function ensureString( buffer ) {
379
+
380
+ if ( typeof buffer !== 'string' ) {
381
+
382
+ return new TextDecoder().decode( buffer );
383
+
384
+ }
385
+
386
+ return buffer;
387
+
388
+ }
389
+
390
+ function ensureBinary( buffer ) {
391
+
392
+ if ( typeof buffer === 'string' ) {
393
+
394
+ const array_buffer = new Uint8Array( buffer.length );
395
+ for ( let i = 0; i < buffer.length; i ++ ) {
396
+
397
+ array_buffer[ i ] = buffer.charCodeAt( i ) & 0xff; // implicitly assumes little-endian
398
+
399
+ }
400
+
401
+ return array_buffer.buffer || array_buffer;
402
+
403
+ } else {
404
+
405
+ return buffer;
406
+
407
+ }
408
+
409
+ }
410
+
411
+ // start
412
+
413
+ const binData = ensureBinary( data );
414
+
415
+ return isBinary( binData ) ? parseBinary( binData ) : parseASCII( ensureString( data ) );
416
+
417
+ }
418
+
419
+ }
420
+
421
+ export { STLLoader };