@threepipe/plugins-extra-importers 0.2.2 → 0.2.4

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,20 @@
1
+ # Changelog for @threepipe/extra-importers
2
+
3
+ All notable changes to this plugin will be documented in this file.
4
+
5
+ [//]: # (The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).)
6
+
7
+ ## [Unreleased]
8
+
9
+ ### Added
10
+
11
+ - NA
12
+
13
+ ## [0.2.4] - 2025-09-01
14
+
15
+ ### Changed
16
+
17
+ - Update [threepipe](https://threepipe.org/) `peerDependency` to [0.1.0](https://github.com/repalash/threepipe/releases/tag/v0.1.0)
18
+
19
+ [unreleased]: https://github.com/repalash/threepipe/tree/dev/plugins/extra-importers
20
+ [0.2.4]: https://github.com/repalash/threepipe/releases/tag/@threepipe/plugin-extra-importers-v0.2.4
package/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # @threepipe/extra-importers
2
+
3
+ Additional importers for [threepipe](https://threepipe.org/) to handle various 3D file formats.
4
+
5
+ [Github](https://github.com/repalash/threepipe/tree/dev/plugins/extra-importers) —
6
+ [Examples](https://threepipe.org/examples/?q=extra#extra-importer-plugins/) —
7
+ [API Reference](https://threepipe.org/docs/)
8
+
9
+ [![NPM Package](https://img.shields.io/npm/v/@threepipe/plugin-extra-importers.svg)](https://www.npmjs.com/package/@threepipe/plugin-extra-importers)
10
+ [![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-green.svg)](https://opensource.org/license/apache-2-0/)
11
+
12
+ **Documentation and Guides**: [threepipe.org/package/plugin-extra-importers](https://threepipe.org/package/plugin-extra-importers.html)
@@ -1,5 +1,5 @@
1
1
  Name: three
2
- Version: 0.153.1006
2
+ Version: 0.160.1006
3
3
  License: MIT
4
4
  Private: false
5
5
  Description: JavaScript 3D library
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AnyOptions, BaseImporterPlugin, BufferGeometry, Group, Importer, Mesh, Object3D, Points, Scene } from 'threepipe';
1
+ import { AnyOptions, BaseImporterPlugin, BufferGeometry, Group, ImportAddOptions, Importer, Mesh, Object3D, Points, PointsMaterial, Scene } from 'threepipe';
2
2
  import { TDSLoader } from 'three/examples/jsm/loaders/TDSLoader.js';
3
3
  import { ThreeMFLoader } from 'three/examples/jsm/loaders/3MFLoader.js';
4
4
  import { Collada } from 'three/examples/jsm/loaders/ColladaLoader.js';
@@ -30,17 +30,17 @@ export declare class ColladaLoadPlugin extends BaseImporterPlugin {
30
30
  static readonly PluginType = "ColladaLoadPlugin";
31
31
  protected _importer: Importer<{
32
32
  transform(res: Collada, _: AnyOptions): Scene;
33
- load(url: string, onLoad: (collada: Collada) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
34
- loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Collada>;
35
33
  parse(text: string, path: string): Collada;
36
34
  crossOrigin: string;
37
35
  withCredentials: boolean;
38
36
  path: string;
39
37
  resourcePath: string;
40
- manager: import('threepipe').LoadingManager;
38
+ manager: import('./threepipe').LoadingManager;
41
39
  requestHeader: {
42
40
  [header: string]: string;
43
41
  };
42
+ load(url: string, onLoad: (data: Collada) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void;
43
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Collada>;
44
44
  setCrossOrigin(crossOrigin: string): /*elided*/ any;
45
45
  setWithCredentials(value: boolean): /*elided*/ any;
46
46
  setPath(path: string): /*elided*/ any;
@@ -73,17 +73,17 @@ export declare class BVHLoadPlugin extends BaseImporterPlugin {
73
73
  transform(res: BVH, _: AnyOptions): Object3D;
74
74
  animateBonePositions: boolean;
75
75
  animateBoneRotations: boolean;
76
- load(url: string, onLoad: (bvh: BVH) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
77
- loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<BVH>;
78
76
  parse(text: string): BVH;
79
77
  crossOrigin: string;
80
78
  withCredentials: boolean;
81
79
  path: string;
82
80
  resourcePath: string;
83
- manager: import('threepipe').LoadingManager;
81
+ manager: import('./threepipe').LoadingManager;
84
82
  requestHeader: {
85
83
  [header: string]: string;
86
84
  };
85
+ load(url: string, onLoad: (data: BVH) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void;
86
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<BVH>;
87
87
  setCrossOrigin(crossOrigin: string): /*elided*/ any;
88
88
  setWithCredentials(value: boolean): /*elided*/ any;
89
89
  setPath(path: string): /*elided*/ any;
@@ -100,17 +100,17 @@ export declare class VOXLoadPlugin extends BaseImporterPlugin {
100
100
  static readonly PluginType = "VOXLoadPlugin";
101
101
  protected _importer: Importer<{
102
102
  transform(chunks: Chunk[], _: AnyOptions): Object3D;
103
- load(url: string, onLoad: (chunks: Chunk[]) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
104
- loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Chunk[]>;
105
103
  parse(data: ArrayBuffer): object[];
106
104
  crossOrigin: string;
107
105
  withCredentials: boolean;
108
106
  path: string;
109
107
  resourcePath: string;
110
- manager: import('threepipe').LoadingManager;
108
+ manager: import('./threepipe').LoadingManager;
111
109
  requestHeader: {
112
110
  [header: string]: string;
113
111
  };
112
+ load(url: string, onLoad: (data: Chunk[]) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void;
113
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Chunk[]>;
114
114
  setCrossOrigin(crossOrigin: string): /*elided*/ any;
115
115
  setWithCredentials(value: boolean): /*elided*/ any;
116
116
  setPath(path: string): /*elided*/ any;
@@ -127,17 +127,17 @@ export declare class MDDLoadPlugin extends BaseImporterPlugin {
127
127
  static readonly PluginType = "MDDLoadPlugin";
128
128
  protected _importer: Importer<{
129
129
  transform(res: MDD, _: AnyOptions): Object3D;
130
- load(url: string, onLoad: (result: MDD) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
131
- loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<MDD>;
132
130
  parse(data: ArrayBuffer): MDD;
133
131
  crossOrigin: string;
134
132
  withCredentials: boolean;
135
133
  path: string;
136
134
  resourcePath: string;
137
- manager: import('threepipe').LoadingManager;
135
+ manager: import('./threepipe').LoadingManager;
138
136
  requestHeader: {
139
137
  [header: string]: string;
140
138
  };
139
+ load(url: string, onLoad: (data: MDD) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void;
140
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<MDD>;
141
141
  setCrossOrigin(crossOrigin: string): /*elided*/ any;
142
142
  setWithCredentials(value: boolean): /*elided*/ any;
143
143
  setPath(path: string): /*elided*/ any;
@@ -153,19 +153,19 @@ export declare class MDDLoadPlugin extends BaseImporterPlugin {
153
153
  export declare class PCDLoadPlugin extends BaseImporterPlugin {
154
154
  static readonly PluginType = "PCDLoadPlugin";
155
155
  protected _importer: Importer<{
156
- transform(points: Points, options: AnyOptions): any;
156
+ transform(points: Points, options: ImportAddOptions): any;
157
157
  littleEndian: boolean;
158
- load(url: string, onLoad: (points: Points) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
159
- loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Points>;
160
- parse(data: ArrayBuffer | string): Points;
158
+ parse(data: ArrayBuffer | string): Points<BufferGeometry, PointsMaterial>;
161
159
  crossOrigin: string;
162
160
  withCredentials: boolean;
163
161
  path: string;
164
162
  resourcePath: string;
165
- manager: import('threepipe').LoadingManager;
163
+ manager: import('./threepipe').LoadingManager;
166
164
  requestHeader: {
167
165
  [header: string]: string;
168
166
  };
167
+ load(url: string, onLoad: (data: Points<BufferGeometry<import('./threepipe').NormalBufferAttributes, import('./threepipe').BufferGeometryEventMap>, PointsMaterial>) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void;
168
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Points<BufferGeometry<import('./threepipe').NormalBufferAttributes, import('./threepipe').BufferGeometryEventMap>, PointsMaterial>>;
169
169
  setCrossOrigin(crossOrigin: string): /*elided*/ any;
170
170
  setWithCredentials(value: boolean): /*elided*/ any;
171
171
  setPath(path: string): /*elided*/ any;
@@ -196,26 +196,26 @@ export declare class LDrawLoadPlugin extends BaseImporterPlugin {
196
196
  static readonly PluginType = "LDrawLoadPlugin";
197
197
  protected _importer: Importer<{
198
198
  transform(res: Group, _: AnyOptions): any;
199
- materials: import('threepipe').Material[];
200
- materialsLibrary: Record<string, import('threepipe').Material>;
199
+ materials: import('./threepipe').Material[];
200
+ materialsLibrary: Record<string, import('./threepipe').Material>;
201
201
  fileMap: Record<string, string>;
202
202
  smoothNormals: boolean;
203
- load(url: string, onLoad: (data: Group) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
204
- loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Group>;
205
203
  preloadMaterials(url: string): Promise<void>;
206
204
  setFileMap(fileMap: Record<string, string>): void;
207
- setMaterials(materials: import('threepipe').Material[]): void;
205
+ setMaterials(materials: import('./threepipe').Material[]): void;
208
206
  parse(text: string, path: string, onLoad: (data: Group) => void): void;
209
- addMaterial(material: import('threepipe').Material): void;
210
- getMaterial(colourCode: string): import('threepipe').Material | null;
207
+ addMaterial(material: import('./threepipe').Material): void;
208
+ getMaterial(colourCode: string): import('./threepipe').Material | null;
211
209
  crossOrigin: string;
212
210
  withCredentials: boolean;
213
211
  path: string;
214
212
  resourcePath: string;
215
- manager: import('threepipe').LoadingManager;
213
+ manager: import('./threepipe').LoadingManager;
216
214
  requestHeader: {
217
215
  [header: string]: string;
218
216
  };
217
+ load(url: string, onLoad: (data: Group<import('./threepipe').Object3DEventMap>) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void;
218
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<Group<import('./threepipe').Object3DEventMap>>;
219
219
  setCrossOrigin(crossOrigin: string): /*elided*/ any;
220
220
  setWithCredentials(value: boolean): /*elided*/ any;
221
221
  setPath(path: string): /*elided*/ any;
@@ -232,17 +232,17 @@ export declare class VTKLoadPlugin extends BaseImporterPlugin {
232
232
  static readonly PluginType = "VTKLoadPlugin";
233
233
  protected _importer: Importer<{
234
234
  transform(res: BufferGeometry, _: AnyOptions): Mesh | undefined;
235
- load(url: string, onLoad: (geometry: BufferGeometry) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
236
- loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<BufferGeometry>;
237
235
  parse(data: ArrayBuffer | string, path: string): BufferGeometry;
238
236
  crossOrigin: string;
239
237
  withCredentials: boolean;
240
238
  path: string;
241
239
  resourcePath: string;
242
- manager: import('threepipe').LoadingManager;
240
+ manager: import('./threepipe').LoadingManager;
243
241
  requestHeader: {
244
242
  [header: string]: string;
245
243
  };
244
+ load(url: string, onLoad: (data: BufferGeometry<import('./threepipe').NormalBufferAttributes, import('./threepipe').BufferGeometryEventMap>) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void;
245
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<BufferGeometry<import('./threepipe').NormalBufferAttributes, import('./threepipe').BufferGeometryEventMap>>;
246
246
  setCrossOrigin(crossOrigin: string): /*elided*/ any;
247
247
  setWithCredentials(value: boolean): /*elided*/ any;
248
248
  setPath(path: string): /*elided*/ any;
@@ -258,18 +258,18 @@ export declare class VTKLoadPlugin extends BaseImporterPlugin {
258
258
  export declare class XYZLoadPlugin extends BaseImporterPlugin {
259
259
  static readonly PluginType = "XYZLoadPlugin";
260
260
  protected _importer: Importer<{
261
- transform(res: BufferGeometry, options: AnyOptions): Points | undefined;
262
- load(url: string, onLoad: (geometry: BufferGeometry) => void, onProgress?: (event: ProgressEvent) => void, onError?: (event: ErrorEvent) => void): void;
263
- loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<BufferGeometry>;
261
+ transform(res: BufferGeometry, options: ImportAddOptions): Points | undefined;
264
262
  parse(data: string, onLoad: (geometry: BufferGeometry) => void): object;
265
263
  crossOrigin: string;
266
264
  withCredentials: boolean;
267
265
  path: string;
268
266
  resourcePath: string;
269
- manager: import('threepipe').LoadingManager;
267
+ manager: import('./threepipe').LoadingManager;
270
268
  requestHeader: {
271
269
  [header: string]: string;
272
270
  };
271
+ load(url: string, onLoad: (data: BufferGeometry<import('./threepipe').NormalBufferAttributes, import('./threepipe').BufferGeometryEventMap>) => void, onProgress?: (event: ProgressEvent) => void, onError?: (err: unknown) => void): void;
272
+ loadAsync(url: string, onProgress?: (event: ProgressEvent) => void): Promise<BufferGeometry<import('./threepipe').NormalBufferAttributes, import('./threepipe').BufferGeometryEventMap>>;
273
273
  setCrossOrigin(crossOrigin: string): /*elided*/ any;
274
274
  setWithCredentials(value: boolean): /*elided*/ any;
275
275
  setPath(path: string): /*elided*/ any;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * @license
3
- * @threepipe/plugins-extra-importers v0.2.2
3
+ * @threepipe/plugins-extra-importers v0.2.4
4
4
  * Copyright 2022-2025 repalash <palash@shaders.app>
5
5
  * Apache-2.0 License
6
6
  * See ./dependencies.txt for any bundled third-party dependencies and licenses.
7
7
  */
8
- import { Loader, LoaderUtils, FileLoader, Group, MeshPhongMaterial, DoubleSide, AdditiveBlending, BufferGeometry, Mesh, Float32BufferAttribute, Matrix4, TextureLoader, Color, SRGBColorSpace, BufferAttribute, MeshStandardMaterial, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, LinearFilter, LinearMipmapLinearFilter, NearestFilter, DataTextureLoader, Vector3, Quaternion, MeshBasicMaterial, Scene, MathUtils, AnimationClip, VectorKeyframeTrack, QuaternionKeyframeTrack, MeshLambertMaterial, Vector2, FrontSide, PerspectiveCamera, OrthographicCamera, AmbientLight, SpotLight, PointLight, DirectionalLight, Bone, LineBasicMaterial, SkinnedMesh, Line, LineSegments, Skeleton, NumberKeyframeTrack, Int32BufferAttribute, PointsMaterial, Points, RawShaderMaterial, Object3D, SphereGeometry, BackSide, DataTexture, BoxGeometry, ConeGeometry, CylinderGeometry, ShapeUtils, Ray, ShaderMaterial, UniformsUtils, UniformsLib, BaseImporterPlugin, Importer, SkeletonHelper, PhysicalMaterial } from "threepipe";
8
+ import { Loader, LoaderUtils, FileLoader, Group, MeshPhongMaterial, DoubleSide, AdditiveBlending, BufferGeometry, Mesh, Float32BufferAttribute, Matrix4, TextureLoader, Color, SRGBColorSpace, BufferAttribute, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, LinearFilter, LinearMipmapLinearFilter, NearestFilter, MeshStandardMaterial, DataTextureLoader, Vector3, Quaternion, MeshBasicMaterial, Scene, MathUtils, AnimationClip, MeshLambertMaterial, Vector2, FrontSide, PerspectiveCamera, OrthographicCamera, AmbientLight, SpotLight, PointLight, DirectionalLight, VectorKeyframeTrack, QuaternionKeyframeTrack, Bone, LineBasicMaterial, SkinnedMesh, Line, LineSegments, Skeleton, NumberKeyframeTrack, Int32BufferAttribute, PointsMaterial, Points, RawShaderMaterial, Object3D, SphereGeometry, BackSide, DataTexture, BoxGeometry, ConeGeometry, CylinderGeometry, ShapeUtils, ShaderMaterial, UniformsUtils, UniformsLib, Ray, BaseImporterPlugin, Importer, SkeletonHelper, PhysicalMaterial } from "threepipe";
9
9
  class TDSLoader extends Loader {
10
10
  constructor(manager) {
11
11
  super(manager);
@@ -1660,7 +1660,11 @@ class ThreeMFLoader extends Loader {
1660
1660
  const geometry = new BufferGeometry();
1661
1661
  geometry.setIndex(new BufferAttribute(meshData["triangles"], 1));
1662
1662
  geometry.setAttribute("position", new BufferAttribute(meshData["vertices"], 3));
1663
- const material = new MeshPhongMaterial({ color: 16777215, flatShading: true });
1663
+ const material = new MeshPhongMaterial({
1664
+ name: Loader.DEFAULT_MATERIAL_NAME,
1665
+ color: 16777215,
1666
+ flatShading: true
1667
+ });
1664
1668
  const mesh = new Mesh(geometry, material);
1665
1669
  return mesh;
1666
1670
  }
@@ -1882,7 +1886,7 @@ class TGALoader extends DataTextureLoader {
1882
1886
  case TGA_TYPE_INDEXED:
1883
1887
  case TGA_TYPE_RLE_INDEXED:
1884
1888
  if (header2.colormap_length > 256 || header2.colormap_size !== 24 || header2.colormap_type !== 1) {
1885
- console.error("THREE.TGALoader: Invalid type colormap data for indexed type.");
1889
+ throw new Error("THREE.TGALoader: Invalid type colormap data for indexed type.");
1886
1890
  }
1887
1891
  break;
1888
1892
  // check colormap type
@@ -1891,21 +1895,21 @@ class TGALoader extends DataTextureLoader {
1891
1895
  case TGA_TYPE_RLE_RGB:
1892
1896
  case TGA_TYPE_RLE_GREY:
1893
1897
  if (header2.colormap_type) {
1894
- console.error("THREE.TGALoader: Invalid type colormap data for colormap type.");
1898
+ throw new Error("THREE.TGALoader: Invalid type colormap data for colormap type.");
1895
1899
  }
1896
1900
  break;
1897
1901
  // What the need of a file without data ?
1898
1902
  case TGA_TYPE_NO_DATA:
1899
- console.error("THREE.TGALoader: No data.");
1903
+ throw new Error("THREE.TGALoader: No data.");
1900
1904
  // Invalid type ?
1901
1905
  default:
1902
- console.error('THREE.TGALoader: Invalid type "%s".', header2.image_type);
1906
+ throw new Error("THREE.TGALoader: Invalid type " + header2.image_type);
1903
1907
  }
1904
1908
  if (header2.width <= 0 || header2.height <= 0) {
1905
- console.error("THREE.TGALoader: Invalid image size.");
1909
+ throw new Error("THREE.TGALoader: Invalid image size.");
1906
1910
  }
1907
1911
  if (header2.pixel_size !== 8 && header2.pixel_size !== 16 && header2.pixel_size !== 24 && header2.pixel_size !== 32) {
1908
- console.error('THREE.TGALoader: Invalid pixel size "%s".', header2.pixel_size);
1912
+ throw new Error("THREE.TGALoader: Invalid pixel size " + header2.pixel_size);
1909
1913
  }
1910
1914
  }
1911
1915
  function tgaParse(use_rle2, use_pal2, header2, offset2, data) {
@@ -2078,8 +2082,7 @@ class TGALoader extends DataTextureLoader {
2078
2082
  tgaGetImageDataGrey16bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);
2079
2083
  break;
2080
2084
  default:
2081
- console.error("THREE.TGALoader: Format not supported.");
2082
- break;
2085
+ throw new Error("THREE.TGALoader: Format not supported.");
2083
2086
  }
2084
2087
  } else {
2085
2088
  switch (header.pixel_size) {
@@ -2096,14 +2099,13 @@ class TGALoader extends DataTextureLoader {
2096
2099
  tgaGetImageData32bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);
2097
2100
  break;
2098
2101
  default:
2099
- console.error("THREE.TGALoader: Format not supported.");
2100
- break;
2102
+ throw new Error("THREE.TGALoader: Format not supported.");
2101
2103
  }
2102
2104
  }
2103
2105
  return data;
2104
2106
  }
2105
2107
  const TGA_TYPE_NO_DATA = 0, TGA_TYPE_INDEXED = 1, TGA_TYPE_RGB = 2, TGA_TYPE_GREY = 3, TGA_TYPE_RLE_INDEXED = 9, TGA_TYPE_RLE_RGB = 10, TGA_TYPE_RLE_GREY = 11, TGA_ORIGIN_MASK = 48, TGA_ORIGIN_SHIFT = 4, TGA_ORIGIN_BL = 0, TGA_ORIGIN_BR = 1, TGA_ORIGIN_UL = 2, TGA_ORIGIN_UR = 3;
2106
- if (buffer.length < 19) console.error("THREE.TGALoader: Not enough data to contain header.");
2108
+ if (buffer.length < 19) throw new Error("THREE.TGALoader: Not enough data to contain header.");
2107
2109
  let offset = 0;
2108
2110
  const content = new Uint8Array(buffer), header = {
2109
2111
  id_length: content[offset++],
@@ -2123,7 +2125,7 @@ class TGALoader extends DataTextureLoader {
2123
2125
  };
2124
2126
  tgaCheckHeader(header);
2125
2127
  if (header.id_length + offset > buffer.length) {
2126
- console.error("THREE.TGALoader: No data.");
2128
+ throw new Error("THREE.TGALoader: No data.");
2127
2129
  }
2128
2130
  offset += header.id_length;
2129
2131
  let use_rle = false, use_pal = false, use_grey = false;
@@ -2162,9 +2164,6 @@ class TGALoader extends DataTextureLoader {
2162
2164
  }
2163
2165
  }
2164
2166
  class ColladaLoader extends Loader {
2165
- constructor(manager) {
2166
- super(manager);
2167
- }
2168
2167
  load(url, onLoad, onProgress, onError) {
2169
2168
  const scope = this;
2170
2169
  const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path;
@@ -4268,7 +4267,10 @@ class ColladaLoader extends Loader {
4268
4267
  object.matrix.decompose(object.position, object.quaternion, object.scale);
4269
4268
  return object;
4270
4269
  }
4271
- const fallbackMaterial = new MeshBasicMaterial({ color: 16711935 });
4270
+ const fallbackMaterial = new MeshBasicMaterial({
4271
+ name: Loader.DEFAULT_MATERIAL_NAME,
4272
+ color: 16711935
4273
+ });
4272
4274
  function resolveMaterialBinding(keys, instanceMaterials) {
4273
4275
  const materials = [];
4274
4276
  for (let i = 0, l = keys.length; i < l; i++) {
@@ -4423,7 +4425,7 @@ class ColladaLoader extends Loader {
4423
4425
  const textureLoader = new TextureLoader(this.manager);
4424
4426
  textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
4425
4427
  let tgaLoader;
4426
- {
4428
+ if (TGALoader) {
4427
4429
  tgaLoader = new TGALoader(this.manager);
4428
4430
  tgaLoader.setPath(this.resourcePath || path);
4429
4431
  }
@@ -4717,7 +4719,11 @@ class AMFLoader extends Loader {
4717
4719
  }
4718
4720
  }
4719
4721
  const sceneObject = new Group();
4720
- const defaultMaterial = new MeshPhongMaterial({ color: 11184895, flatShading: true });
4722
+ const defaultMaterial = new MeshPhongMaterial({
4723
+ name: Loader.DEFAULT_MATERIAL_NAME,
4724
+ color: 11184895,
4725
+ flatShading: true
4726
+ });
4721
4727
  sceneObject.name = amfName;
4722
4728
  sceneObject.userData.author = amfAuthor;
4723
4729
  sceneObject.userData.loader = "AMF";
@@ -11387,7 +11393,10 @@ class VRMLLoader extends Loader {
11387
11393
  }
11388
11394
  function buildShapeNode(node) {
11389
11395
  const fields = node.fields;
11390
- let material = new MeshBasicMaterial({ color: 0 });
11396
+ let material = new MeshBasicMaterial({
11397
+ name: Loader.DEFAULT_MATERIAL_NAME,
11398
+ color: 0
11399
+ });
11391
11400
  let geometry;
11392
11401
  for (let i = 0, l = fields.length; i < l; i++) {
11393
11402
  const field = fields[i];
@@ -11413,7 +11422,10 @@ class VRMLLoader extends Loader {
11413
11422
  if (geometry && geometry.attributes.position) {
11414
11423
  const type = geometry._type;
11415
11424
  if (type === "points") {
11416
- const pointsMaterial = new PointsMaterial({ color: 16777215 });
11425
+ const pointsMaterial = new PointsMaterial({
11426
+ name: Loader.DEFAULT_MATERIAL_NAME,
11427
+ color: 16777215
11428
+ });
11417
11429
  if (geometry.attributes.color !== void 0) {
11418
11430
  pointsMaterial.vertexColors = true;
11419
11431
  } else {
@@ -11423,7 +11435,10 @@ class VRMLLoader extends Loader {
11423
11435
  }
11424
11436
  object = new Points(geometry, pointsMaterial);
11425
11437
  } else if (type === "line") {
11426
- const lineMaterial = new LineBasicMaterial({ color: 16777215 });
11438
+ const lineMaterial = new LineBasicMaterial({
11439
+ name: Loader.DEFAULT_MATERIAL_NAME,
11440
+ color: 16777215
11441
+ });
11427
11442
  if (geometry.attributes.color !== void 0) {
11428
11443
  lineMaterial.vertexColors = true;
11429
11444
  } else {
@@ -11466,7 +11481,10 @@ class VRMLLoader extends Loader {
11466
11481
  if (materialData.transparency) material.opacity = 1 - materialData.transparency;
11467
11482
  if (materialData.transparency > 0) material.transparent = true;
11468
11483
  } else {
11469
- material = new MeshBasicMaterial({ color: 0 });
11484
+ material = new MeshBasicMaterial({
11485
+ name: Loader.DEFAULT_MATERIAL_NAME,
11486
+ color: 0
11487
+ });
11470
11488
  }
11471
11489
  break;
11472
11490
  case "texture":
@@ -12924,7 +12942,7 @@ class LDrawConditionalLineMaterial extends ShaderMaterial {
12924
12942
  outgoingLight = diffuseColor.rgb; // simple shader
12925
12943
  gl_FragColor = vec4( outgoingLight, diffuseColor.a );
12926
12944
  #include <tonemapping_fragment>
12927
- #include <encodings_fragment>
12945
+ #include <colorspace_fragment>
12928
12946
  #include <fog_fragment>
12929
12947
  #include <premultiplied_alpha_fragment>
12930
12948
  }
@@ -13285,7 +13303,7 @@ class LDrawParsedCache {
13285
13303
  try {
13286
13304
  const text = await fileLoader.loadAsync(subobjectURL);
13287
13305
  return text;
13288
- } catch {
13306
+ } catch (_) {
13289
13307
  continue;
13290
13308
  }
13291
13309
  }
@@ -13755,13 +13773,13 @@ class LDrawPartsGeometryCache {
13755
13773
  }
13756
13774
  const group = info.group;
13757
13775
  if (info.faces.length > 0) {
13758
- group.add(createObject(info.faces, 3, false, info.totalFaces));
13776
+ group.add(createObject(this.loader, info.faces, 3, false, info.totalFaces));
13759
13777
  }
13760
13778
  if (info.lineSegments.length > 0) {
13761
- group.add(createObject(info.lineSegments, 2));
13779
+ group.add(createObject(this.loader, info.lineSegments, 2));
13762
13780
  }
13763
13781
  if (info.conditionalSegments.length > 0) {
13764
- group.add(createObject(info.conditionalSegments, 2, true));
13782
+ group.add(createObject(this.loader, info.conditionalSegments, 2, true));
13765
13783
  }
13766
13784
  return group;
13767
13785
  }
@@ -13816,7 +13834,7 @@ function sortByMaterial(a, b) {
13816
13834
  }
13817
13835
  return 1;
13818
13836
  }
13819
- function createObject(elements, elementSize, isConditionalSegments = false, totalElements = null) {
13837
+ function createObject(loader, elements, elementSize, isConditionalSegments = false, totalElements = null) {
13820
13838
  elements.sort(sortByMaterial);
13821
13839
  if (totalElements === null) {
13822
13840
  totalElements = elements.length;
@@ -13889,9 +13907,10 @@ function createObject(elements, elementSize, isConditionalSegments = false, tota
13889
13907
  materials.push(material);
13890
13908
  } else if (elementSize === 2) {
13891
13909
  if (isConditionalSegments) {
13892
- materials.push(material.userData.edgeMaterial.userData.conditionalEdgeMaterial);
13910
+ const edgeMaterial = loader.edgeMaterialCache.get(material);
13911
+ materials.push(loader.conditionalEdgeMaterialCache.get(edgeMaterial));
13893
13912
  } else {
13894
- materials.push(material.userData.edgeMaterial);
13913
+ materials.push(loader.edgeMaterialCache.get(material));
13895
13914
  }
13896
13915
  }
13897
13916
  } else {
@@ -13966,19 +13985,18 @@ class LDrawLoader extends Loader {
13966
13985
  super(manager);
13967
13986
  this.materials = [];
13968
13987
  this.materialLibrary = {};
13988
+ this.edgeMaterialCache = /* @__PURE__ */ new WeakMap();
13989
+ this.conditionalEdgeMaterialCache = /* @__PURE__ */ new WeakMap();
13969
13990
  this.partsCache = new LDrawPartsGeometryCache(this);
13970
13991
  this.fileMap = {};
13971
13992
  this.setMaterials([]);
13972
13993
  this.smoothNormals = true;
13973
13994
  this.partsLibraryPath = "";
13974
- this.missingColorMaterial = new MeshStandardMaterial({ color: 16711935, roughness: 0.3, metalness: 0 });
13975
- this.missingColorMaterial.name = "Missing material";
13976
- this.missingEdgeColorMaterial = new LineBasicMaterial({ color: 16711935 });
13977
- this.missingEdgeColorMaterial.name = "Missing material - Edge";
13978
- this.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial({ fog: true, color: 16711935 });
13979
- this.missingConditionalEdgeColorMaterial.name = "Missing material - Conditional Edge";
13980
- this.missingColorMaterial.userData.edgeMaterial = this.missingEdgeColorMaterial;
13981
- this.missingEdgeColorMaterial.userData.conditionalEdgeMaterial = this.missingConditionalEdgeColorMaterial;
13995
+ this.missingColorMaterial = new MeshStandardMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, color: 16711935, roughness: 0.3, metalness: 0 });
13996
+ this.missingEdgeColorMaterial = new LineBasicMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, color: 16711935 });
13997
+ this.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, fog: true, color: 16711935 });
13998
+ this.edgeMaterialCache.set(this.missingColorMaterial, this.missingEdgeColorMaterial);
13999
+ this.conditionalEdgeMaterialCache.set(this.missingEdgeColorMaterial, this.missingConditionalEdgeColorMaterial);
13982
14000
  }
13983
14001
  setPartsLibraryPath(path) {
13984
14002
  this.partsLibraryPath = path;
@@ -14094,9 +14112,9 @@ class LDrawLoader extends Loader {
14094
14112
  return colorCode;
14095
14113
  }
14096
14114
  if (c.isLineSegments) {
14097
- material = material.userData.edgeMaterial;
14115
+ material = loader.edgeMaterialCache.get(material);
14098
14116
  if (c.isConditionalLine) {
14099
- material = material.userData.conditionalEdgeMaterial;
14117
+ material = loader.conditionalEdgeMaterialCache.get(material);
14100
14118
  }
14101
14119
  }
14102
14120
  return material;
@@ -14107,7 +14125,7 @@ class LDrawLoader extends Loader {
14107
14125
  }
14108
14126
  getMainEdgeMaterial() {
14109
14127
  const mat = this.getMaterial(MAIN_EDGE_COLOUR_CODE);
14110
- return mat ? mat.userData.edgeMaterial : null;
14128
+ return mat ? this.edgeMaterialCache.get(mat) : null;
14111
14129
  }
14112
14130
  parseColorMetaDirective(lineParser) {
14113
14131
  let code = null;
@@ -14150,7 +14168,7 @@ class LDrawLoader extends Loader {
14150
14168
  if (!edgeMaterial) {
14151
14169
  throw new Error("LDrawLoader: Invalid edge color while parsing material" + lineParser.getLineNumberString() + ".");
14152
14170
  }
14153
- edgeMaterial = edgeMaterial.userData.edgeMaterial;
14171
+ edgeMaterial = this.edgeMaterialCache.get(edgeMaterial);
14154
14172
  }
14155
14173
  break;
14156
14174
  case "ALPHA":
@@ -14232,19 +14250,20 @@ class LDrawLoader extends Loader {
14232
14250
  edgeMaterial.color;
14233
14251
  edgeMaterial.userData.code = code;
14234
14252
  edgeMaterial.name = name + " - Edge";
14235
- edgeMaterial.userData.conditionalEdgeMaterial = new LDrawConditionalLineMaterial({
14253
+ const conditionalEdgeMaterial = new LDrawConditionalLineMaterial({
14236
14254
  fog: true,
14237
14255
  transparent: isTransparent,
14238
14256
  depthWrite: !isTransparent,
14239
14257
  color: new Color().setStyle(edgeColor, COLOR_SPACE_LDRAW),
14240
14258
  opacity: alpha
14241
14259
  });
14242
- edgeMaterial.userData.conditionalEdgeMaterial.userData.code = code;
14243
- edgeMaterial.userData.conditionalEdgeMaterial.name = name + " - Conditional Edge";
14260
+ conditionalEdgeMaterial.userData.code = code;
14261
+ conditionalEdgeMaterial.name = name + " - Conditional Edge";
14262
+ this.conditionalEdgeMaterialCache.set(edgeMaterial, conditionalEdgeMaterial);
14244
14263
  }
14245
14264
  material.userData.code = code;
14246
14265
  material.name = name;
14247
- material.userData.edgeMaterial = edgeMaterial;
14266
+ this.edgeMaterialCache.set(material, edgeMaterial);
14248
14267
  this.addMaterial(material);
14249
14268
  return material;
14250
14269
  function parseLuminance(token2) {