@loaders.gl/obj 4.3.2 → 4.4.0-alpha.1
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/dist/dist.dev.js +11998 -61
- package/dist/dist.min.js +15 -6
- package/dist/index.cjs +57 -30
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +6 -46
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -21
- package/dist/lib/get-obj-schema.js +1 -1
- package/dist/lib/parse-obj.d.ts +1 -1
- package/dist/lib/parse-obj.d.ts.map +1 -1
- package/dist/lib/parse-obj.js +1 -1
- package/dist/mtl-format.d.ts +12 -0
- package/dist/mtl-format.d.ts.map +1 -0
- package/dist/mtl-format.js +14 -0
- package/dist/mtl-loader.d.ts +23 -3
- package/dist/mtl-loader.d.ts.map +1 -1
- package/dist/mtl-loader.js +17 -7
- package/dist/obj-arrow-loader.d.ts +21 -0
- package/dist/obj-arrow-loader.d.ts.map +1 -0
- package/dist/obj-arrow-loader.js +21 -0
- package/dist/obj-format.d.ts +11 -0
- package/dist/obj-format.d.ts.map +1 -0
- package/dist/obj-format.js +13 -0
- package/dist/obj-loader.d.ts +25 -5
- package/dist/obj-loader.d.ts.map +1 -1
- package/dist/obj-loader.js +17 -7
- package/dist/obj-worker.js +17 -106
- package/package.json +6 -5
- package/src/index.ts +6 -32
- package/src/lib/get-obj-schema.ts +1 -1
- package/src/lib/parse-obj.ts +2 -2
- package/src/mtl-format.ts +17 -0
- package/src/mtl-loader.ts +19 -7
- package/src/obj-arrow-loader.ts +26 -0
- package/src/obj-format.ts +16 -0
- package/src/obj-loader.ts +23 -9
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ArrowTable } from '@loaders.gl/schema';
|
|
2
|
+
/**
|
|
3
|
+
* Worker loader for OBJ - Point Cloud Data
|
|
4
|
+
*/
|
|
5
|
+
export declare const OBJArrowLoader: {
|
|
6
|
+
readonly dataType: ArrowTable;
|
|
7
|
+
readonly batchType: never;
|
|
8
|
+
readonly worker: false;
|
|
9
|
+
readonly parse: (arrayBuffer: ArrayBuffer) => Promise<ArrowTable>;
|
|
10
|
+
readonly version: any;
|
|
11
|
+
readonly testText: (text: string) => boolean;
|
|
12
|
+
readonly options: {
|
|
13
|
+
readonly obj: {};
|
|
14
|
+
};
|
|
15
|
+
readonly name: "OBJ";
|
|
16
|
+
readonly id: "obj";
|
|
17
|
+
readonly module: "obj";
|
|
18
|
+
readonly extensions: ["obj"];
|
|
19
|
+
readonly mimeTypes: ["text/plain"];
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=obj-arrow-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obj-arrow-loader.d.ts","sourceRoot":"","sources":["../src/obj-arrow-loader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAMnD;;GAEG;AACH,eAAO,MAAM,cAAc;uBAEI,UAAU;wBACpB,KAAK;;kCAEG,WAAW;;;;;;;;;;;CAMkC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { OBJWorkerLoader } from "./obj-loader.js";
|
|
5
|
+
import { convertMeshToTable } from '@loaders.gl/schema-utils';
|
|
6
|
+
import { parseOBJ } from "./lib/parse-obj.js";
|
|
7
|
+
/**
|
|
8
|
+
* Worker loader for OBJ - Point Cloud Data
|
|
9
|
+
*/
|
|
10
|
+
export const OBJArrowLoader = {
|
|
11
|
+
...OBJWorkerLoader,
|
|
12
|
+
dataType: null,
|
|
13
|
+
batchType: null,
|
|
14
|
+
worker: false,
|
|
15
|
+
parse: async (arrayBuffer) => {
|
|
16
|
+
const text = new TextDecoder().decode(arrayBuffer);
|
|
17
|
+
const mesh = parseOBJ(text);
|
|
18
|
+
const arrowTable = convertMeshToTable(mesh, 'arrow-table');
|
|
19
|
+
return arrowTable;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The OBJ geometry format
|
|
3
|
+
*/
|
|
4
|
+
export declare const OBJFormat: {
|
|
5
|
+
readonly name: "OBJ";
|
|
6
|
+
readonly id: "obj";
|
|
7
|
+
readonly module: "obj";
|
|
8
|
+
readonly extensions: ["obj"];
|
|
9
|
+
readonly mimeTypes: ["text/plain"];
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=obj-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obj-format.d.ts","sourceRoot":"","sources":["../src/obj-format.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;CAMK,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
/**
|
|
5
|
+
* The OBJ geometry format
|
|
6
|
+
*/
|
|
7
|
+
export const OBJFormat = {
|
|
8
|
+
name: 'OBJ',
|
|
9
|
+
id: 'obj',
|
|
10
|
+
module: 'obj',
|
|
11
|
+
extensions: ['obj'],
|
|
12
|
+
mimeTypes: ['text/plain']
|
|
13
|
+
};
|
package/dist/obj-loader.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { LoaderOptions } from '@loaders.gl/loader-utils';
|
|
2
|
-
import { Mesh } from '@loaders.gl/schema';
|
|
2
|
+
import type { Mesh } from '@loaders.gl/schema';
|
|
3
3
|
export type OBJLoaderOptions = LoaderOptions & {
|
|
4
4
|
obj?: {
|
|
5
5
|
/** Override the URL to the worker bundle (by default loads from unpkg.com) */
|
|
@@ -9,21 +9,41 @@ export type OBJLoaderOptions = LoaderOptions & {
|
|
|
9
9
|
/**
|
|
10
10
|
* Worker loader for the OBJ geometry format
|
|
11
11
|
*/
|
|
12
|
-
export declare const
|
|
12
|
+
export declare const OBJWorkerLoader: {
|
|
13
13
|
readonly dataType: Mesh;
|
|
14
14
|
readonly batchType: never;
|
|
15
|
+
readonly version: any;
|
|
16
|
+
readonly worker: true;
|
|
17
|
+
readonly testText: typeof testOBJFile;
|
|
18
|
+
readonly options: {
|
|
19
|
+
readonly obj: {};
|
|
20
|
+
};
|
|
15
21
|
readonly name: "OBJ";
|
|
16
22
|
readonly id: "obj";
|
|
17
23
|
readonly module: "obj";
|
|
18
|
-
readonly version: any;
|
|
19
|
-
readonly worker: true;
|
|
20
24
|
readonly extensions: ["obj"];
|
|
21
25
|
readonly mimeTypes: ["text/plain"];
|
|
26
|
+
};
|
|
27
|
+
declare function testOBJFile(text: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Loader for the OBJ geometry format
|
|
30
|
+
*/
|
|
31
|
+
export declare const OBJLoader: {
|
|
32
|
+
readonly parse: (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) => Promise<Mesh>;
|
|
33
|
+
readonly parseTextSync: (text: string, options?: OBJLoaderOptions) => Mesh;
|
|
34
|
+
readonly dataType: Mesh;
|
|
35
|
+
readonly batchType: never;
|
|
36
|
+
readonly version: any;
|
|
37
|
+
readonly worker: true;
|
|
22
38
|
readonly testText: typeof testOBJFile;
|
|
23
39
|
readonly options: {
|
|
24
40
|
readonly obj: {};
|
|
25
41
|
};
|
|
42
|
+
readonly name: "OBJ";
|
|
43
|
+
readonly id: "obj";
|
|
44
|
+
readonly module: "obj";
|
|
45
|
+
readonly extensions: ["obj"];
|
|
46
|
+
readonly mimeTypes: ["text/plain"];
|
|
26
47
|
};
|
|
27
|
-
declare function testOBJFile(text: string): boolean;
|
|
28
48
|
export {};
|
|
29
49
|
//# sourceMappingURL=obj-loader.d.ts.map
|
package/dist/obj-loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obj-loader.d.ts","sourceRoot":"","sources":["../src/obj-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"obj-loader.d.ts","sourceRoot":"","sources":["../src/obj-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAS,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAC;AAQ7C,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,8EAA8E;QAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;uBAGG,IAAI;wBACd,KAAK;;;;;;;;;;;;CAOgC,CAAC;AAE3D,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1C;AAID;;GAEG;AACH,eAAO,MAAM,SAAS;kCAEO,WAAW,YAAY,gBAAgB;mCAE5C,MAAM,YAAY,gBAAgB;uBAxB3B,IAAI;wBACd,KAAK;;;;;;;;;;;;CAwB0C,CAAC"}
|
package/dist/obj-loader.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { OBJFormat } from "./obj-format.js";
|
|
5
|
+
import { parseOBJ } from "./lib/parse-obj.js";
|
|
1
6
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
2
7
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
3
|
-
const VERSION = typeof "4.
|
|
8
|
+
const VERSION = typeof "4.4.0-alpha.0" !== 'undefined' ? "4.4.0-alpha.0" : 'latest';
|
|
4
9
|
/**
|
|
5
10
|
* Worker loader for the OBJ geometry format
|
|
6
11
|
*/
|
|
7
|
-
export const
|
|
12
|
+
export const OBJWorkerLoader = {
|
|
13
|
+
...OBJFormat,
|
|
8
14
|
dataType: null,
|
|
9
15
|
batchType: null,
|
|
10
|
-
name: 'OBJ',
|
|
11
|
-
id: 'obj',
|
|
12
|
-
module: 'obj',
|
|
13
16
|
version: VERSION,
|
|
14
17
|
worker: true,
|
|
15
|
-
extensions: ['obj'],
|
|
16
|
-
mimeTypes: ['text/plain'],
|
|
17
18
|
testText: testOBJFile,
|
|
18
19
|
options: {
|
|
19
20
|
obj: {}
|
|
@@ -23,3 +24,12 @@ function testOBJFile(text) {
|
|
|
23
24
|
// TODO - There could be comment line first
|
|
24
25
|
return text[0] === 'v';
|
|
25
26
|
}
|
|
27
|
+
// OBJLoader
|
|
28
|
+
/**
|
|
29
|
+
* Loader for the OBJ geometry format
|
|
30
|
+
*/
|
|
31
|
+
export const OBJLoader = {
|
|
32
|
+
...OBJWorkerLoader,
|
|
33
|
+
parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),
|
|
34
|
+
parseTextSync: (text, options) => parseOBJ(text, options)
|
|
35
|
+
};
|
package/dist/obj-worker.js
CHANGED
|
@@ -199,7 +199,16 @@
|
|
|
199
199
|
return await parser(data, { ...options }, context, loader);
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
//
|
|
202
|
+
// src/obj-format.ts
|
|
203
|
+
var OBJFormat = {
|
|
204
|
+
name: "OBJ",
|
|
205
|
+
id: "obj",
|
|
206
|
+
module: "obj",
|
|
207
|
+
extensions: ["obj"],
|
|
208
|
+
mimeTypes: ["text/plain"]
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// ../schema-utils/src/lib/schema/data-type.ts
|
|
203
212
|
function getDataTypeFromValue(value, defaultNumberType = "float32") {
|
|
204
213
|
if (value instanceof Date) {
|
|
205
214
|
return "date-millisecond";
|
|
@@ -250,7 +259,7 @@
|
|
|
250
259
|
}
|
|
251
260
|
}
|
|
252
261
|
|
|
253
|
-
// ../schema/src/lib/mesh/mesh-utils.ts
|
|
262
|
+
// ../schema-utils/src/lib/mesh/mesh-utils.ts
|
|
254
263
|
function getMeshBoundingBox(attributes) {
|
|
255
264
|
let minX = Infinity;
|
|
256
265
|
let minY = Infinity;
|
|
@@ -741,17 +750,13 @@
|
|
|
741
750
|
}
|
|
742
751
|
|
|
743
752
|
// src/obj-loader.ts
|
|
744
|
-
var VERSION = true ? "4.
|
|
745
|
-
var
|
|
753
|
+
var VERSION = true ? "4.4.0-alpha.0" : "latest";
|
|
754
|
+
var OBJWorkerLoader = {
|
|
755
|
+
...OBJFormat,
|
|
746
756
|
dataType: null,
|
|
747
757
|
batchType: null,
|
|
748
|
-
name: "OBJ",
|
|
749
|
-
id: "obj",
|
|
750
|
-
module: "obj",
|
|
751
758
|
version: VERSION,
|
|
752
759
|
worker: true,
|
|
753
|
-
extensions: ["obj"],
|
|
754
|
-
mimeTypes: ["text/plain"],
|
|
755
760
|
testText: testOBJFile,
|
|
756
761
|
options: {
|
|
757
762
|
obj: {}
|
|
@@ -760,106 +765,12 @@
|
|
|
760
765
|
function testOBJFile(text) {
|
|
761
766
|
return text[0] === "v";
|
|
762
767
|
}
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
var DELIMITER_PATTERN = /\s+/;
|
|
766
|
-
function parseMTL(text, options) {
|
|
767
|
-
const materials = [];
|
|
768
|
-
let currentMaterial = { name: "placeholder" };
|
|
769
|
-
const lines = text.split("\n");
|
|
770
|
-
for (let line of lines) {
|
|
771
|
-
line = line.trim();
|
|
772
|
-
if (line.length === 0 || line.charAt(0) === "#") {
|
|
773
|
-
continue;
|
|
774
|
-
}
|
|
775
|
-
const pos = line.indexOf(" ");
|
|
776
|
-
let key = pos >= 0 ? line.substring(0, pos) : line;
|
|
777
|
-
key = key.toLowerCase();
|
|
778
|
-
let value = pos >= 0 ? line.substring(pos + 1) : "";
|
|
779
|
-
value = value.trim();
|
|
780
|
-
switch (key) {
|
|
781
|
-
case "newmtl":
|
|
782
|
-
currentMaterial = { name: value };
|
|
783
|
-
materials.push(currentMaterial);
|
|
784
|
-
break;
|
|
785
|
-
case "ka":
|
|
786
|
-
currentMaterial.ambientColor = parseColor(value);
|
|
787
|
-
break;
|
|
788
|
-
case "kd":
|
|
789
|
-
currentMaterial.diffuseColor = parseColor(value);
|
|
790
|
-
break;
|
|
791
|
-
case "map_kd":
|
|
792
|
-
currentMaterial.diffuseTextureUrl = value;
|
|
793
|
-
break;
|
|
794
|
-
case "ks":
|
|
795
|
-
currentMaterial.specularColor = parseColor(value);
|
|
796
|
-
break;
|
|
797
|
-
case "map_ks":
|
|
798
|
-
currentMaterial.specularTextureUrl = value;
|
|
799
|
-
break;
|
|
800
|
-
case "ke":
|
|
801
|
-
currentMaterial.emissiveColor = parseColor(value);
|
|
802
|
-
break;
|
|
803
|
-
case "map_ke":
|
|
804
|
-
currentMaterial.emissiveTextureUrl = value;
|
|
805
|
-
break;
|
|
806
|
-
case "ns":
|
|
807
|
-
currentMaterial.shininess = parseFloat(value);
|
|
808
|
-
break;
|
|
809
|
-
case "map_ns":
|
|
810
|
-
break;
|
|
811
|
-
case "ni":
|
|
812
|
-
currentMaterial.refraction = parseFloat(value);
|
|
813
|
-
break;
|
|
814
|
-
case "illum":
|
|
815
|
-
currentMaterial.illumination = parseFloat(value);
|
|
816
|
-
break;
|
|
817
|
-
default:
|
|
818
|
-
break;
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
return materials;
|
|
822
|
-
}
|
|
823
|
-
function parseColor(value, options) {
|
|
824
|
-
const rgb = value.split(DELIMITER_PATTERN, 3);
|
|
825
|
-
const color = [
|
|
826
|
-
parseFloat(rgb[0]),
|
|
827
|
-
parseFloat(rgb[1]),
|
|
828
|
-
parseFloat(rgb[2])
|
|
829
|
-
];
|
|
830
|
-
return color;
|
|
831
|
-
}
|
|
832
|
-
|
|
833
|
-
// src/mtl-loader.ts
|
|
834
|
-
var VERSION2 = true ? "4.3.1" : "latest";
|
|
835
|
-
var MTLLoader = {
|
|
836
|
-
dataType: null,
|
|
837
|
-
batchType: null,
|
|
838
|
-
name: "MTL",
|
|
839
|
-
id: "mtl",
|
|
840
|
-
module: "mtl",
|
|
841
|
-
version: VERSION2,
|
|
842
|
-
worker: true,
|
|
843
|
-
extensions: ["mtl"],
|
|
844
|
-
mimeTypes: ["text/plain"],
|
|
845
|
-
testText: (text) => text.includes("newmtl"),
|
|
846
|
-
options: {
|
|
847
|
-
mtl: {}
|
|
848
|
-
}
|
|
849
|
-
};
|
|
850
|
-
|
|
851
|
-
// src/index.ts
|
|
852
|
-
var OBJLoader2 = {
|
|
853
|
-
...OBJLoader,
|
|
768
|
+
var OBJLoader = {
|
|
769
|
+
...OBJWorkerLoader,
|
|
854
770
|
parse: async (arrayBuffer, options) => parseOBJ(new TextDecoder().decode(arrayBuffer), options),
|
|
855
771
|
parseTextSync: (text, options) => parseOBJ(text, options)
|
|
856
772
|
};
|
|
857
|
-
var MTLLoader2 = {
|
|
858
|
-
...MTLLoader,
|
|
859
|
-
parse: async (arrayBuffer, options) => parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
|
|
860
|
-
parseTextSync: (text, options) => parseMTL(text, options?.mtl)
|
|
861
|
-
};
|
|
862
773
|
|
|
863
774
|
// src/workers/obj-worker.ts
|
|
864
|
-
createLoaderWorker(
|
|
775
|
+
createLoaderWorker(OBJLoader);
|
|
865
776
|
})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/obj",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.0-alpha.1",
|
|
4
4
|
"description": "Framework-independent loader for the OBJ format",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -42,11 +42,12 @@
|
|
|
42
42
|
"build-worker": "esbuild src/workers/obj-worker.ts --bundle --outfile=dist/obj-worker.js --define:__VERSION__=\\\"$npm_package_version\\\""
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@loaders.gl/loader-utils": "4.
|
|
46
|
-
"@loaders.gl/schema": "4.
|
|
45
|
+
"@loaders.gl/loader-utils": "4.4.0-alpha.1",
|
|
46
|
+
"@loaders.gl/schema": "4.4.0-alpha.1",
|
|
47
|
+
"@loaders.gl/schema-utils": "4.4.0-alpha.1"
|
|
47
48
|
},
|
|
48
49
|
"peerDependencies": {
|
|
49
|
-
"@loaders.gl/core": "
|
|
50
|
+
"@loaders.gl/core": "4.4.0-alpha.0"
|
|
50
51
|
},
|
|
51
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "f1732de45907bd500bf4eedb4803beca8bf4bfb0"
|
|
52
53
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,41 +2,15 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
6
|
-
import type {Mesh} from '@loaders.gl/schema';
|
|
7
|
-
import {parseOBJ} from './lib/parse-obj';
|
|
8
|
-
import type {OBJLoaderOptions} from './obj-loader';
|
|
9
|
-
import {OBJLoader as OBJWorkerLoader} from './obj-loader';
|
|
10
|
-
|
|
11
|
-
import type {MTLMaterial} from './lib/parse-mtl';
|
|
12
|
-
import {parseMTL} from './lib/parse-mtl';
|
|
13
|
-
import type {MTLLoaderOptions} from './mtl-loader';
|
|
14
|
-
import {MTLLoader as MTLWorkerLoader} from './mtl-loader';
|
|
15
|
-
|
|
16
5
|
// OBJLoader
|
|
17
6
|
|
|
7
|
+
export {OBJFormat} from './obj-format';
|
|
18
8
|
export type {OBJLoaderOptions} from './obj-loader';
|
|
19
|
-
|
|
20
|
-
export {
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Loader for the OBJ geometry format
|
|
24
|
-
*/
|
|
25
|
-
export const OBJLoader = {
|
|
26
|
-
...OBJWorkerLoader,
|
|
27
|
-
parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>
|
|
28
|
-
parseOBJ(new TextDecoder().decode(arrayBuffer), options),
|
|
29
|
-
parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)
|
|
30
|
-
} as const satisfies LoaderWithParser<Mesh, never, OBJLoaderOptions>;
|
|
9
|
+
export {OBJWorkerLoader, OBJLoader} from './obj-loader';
|
|
10
|
+
export {OBJArrowLoader} from './obj-arrow-loader';
|
|
31
11
|
|
|
32
12
|
// MTLLoader
|
|
33
13
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
export const MTLLoader = {
|
|
38
|
-
...MTLWorkerLoader,
|
|
39
|
-
parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>
|
|
40
|
-
parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
|
|
41
|
-
parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)
|
|
42
|
-
} as const satisfies LoaderWithParser<MTLMaterial[], never, MTLLoaderOptions>;
|
|
14
|
+
export {MTLFormat} from './mtl-format';
|
|
15
|
+
export type {MTLLoaderOptions} from './mtl-loader';
|
|
16
|
+
export {MTLWorkerLoader, MTLLoader} from './mtl-loader';
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {Schema, SchemaMetadata, Field, MeshAttribute} from '@loaders.gl/schema';
|
|
6
|
-
import {getDataTypeFromArray} from '@loaders.gl/schema';
|
|
6
|
+
import {getDataTypeFromArray} from '@loaders.gl/schema-utils';
|
|
7
7
|
|
|
8
8
|
/** Get Mesh Schema */
|
|
9
9
|
export function getOBJSchema(
|
package/src/lib/parse-obj.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type {Mesh, MeshAttributes} from '@loaders.gl/schema';
|
|
2
|
-
import {getMeshBoundingBox} from '@loaders.gl/schema';
|
|
2
|
+
import {getMeshBoundingBox} from '@loaders.gl/schema-utils';
|
|
3
3
|
import {parseOBJMeshes} from './parse-obj-meshes';
|
|
4
4
|
import {getOBJSchema} from './get-obj-schema';
|
|
5
5
|
|
|
6
|
-
export function parseOBJ(text, options): Mesh {
|
|
6
|
+
export function parseOBJ(text: string, options?): Mesh {
|
|
7
7
|
const {meshes} = parseOBJMeshes(text);
|
|
8
8
|
|
|
9
9
|
// @ts-expect-error
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Format} from '@loaders.gl/loader-utils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The MTL material format
|
|
9
|
+
* A Wavefront .mtl file specifying materials
|
|
10
|
+
*/
|
|
11
|
+
export const MTLFormat = {
|
|
12
|
+
name: 'MTL',
|
|
13
|
+
id: 'mtl',
|
|
14
|
+
module: 'mtl',
|
|
15
|
+
extensions: ['mtl'],
|
|
16
|
+
mimeTypes: ['text/plain']
|
|
17
|
+
} as const satisfies Format;
|
package/src/mtl-loader.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
// loaders.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
import type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';
|
|
5
6
|
import type {MTLMaterial, ParseMTLOptions} from './lib/parse-mtl';
|
|
7
|
+
import {parseMTL} from './lib/parse-mtl';
|
|
8
|
+
import {MTLFormat} from './mtl-format';
|
|
6
9
|
|
|
7
10
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
8
11
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
@@ -16,19 +19,28 @@ export type MTLLoaderOptions = LoaderOptions & {
|
|
|
16
19
|
* Loader for the MTL material format
|
|
17
20
|
* Parses a Wavefront .mtl file specifying materials
|
|
18
21
|
*/
|
|
19
|
-
export const
|
|
22
|
+
export const MTLWorkerLoader = {
|
|
23
|
+
...MTLFormat,
|
|
24
|
+
|
|
20
25
|
dataType: null as unknown as MTLMaterial[],
|
|
21
26
|
batchType: null as never,
|
|
22
27
|
|
|
23
|
-
name: 'MTL',
|
|
24
|
-
id: 'mtl',
|
|
25
|
-
module: 'mtl',
|
|
26
28
|
version: VERSION,
|
|
27
29
|
worker: true,
|
|
28
|
-
extensions: ['mtl'],
|
|
29
|
-
mimeTypes: ['text/plain'],
|
|
30
30
|
testText: (text: string): boolean => text.includes('newmtl'),
|
|
31
31
|
options: {
|
|
32
32
|
mtl: {}
|
|
33
33
|
}
|
|
34
34
|
} as const satisfies Loader<MTLMaterial[], never, LoaderOptions>;
|
|
35
|
+
|
|
36
|
+
// MTLLoader
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Loader for the MTL material format
|
|
40
|
+
*/
|
|
41
|
+
export const MTLLoader = {
|
|
42
|
+
...MTLWorkerLoader,
|
|
43
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: MTLLoaderOptions) =>
|
|
44
|
+
parseMTL(new TextDecoder().decode(arrayBuffer), options?.mtl),
|
|
45
|
+
parseTextSync: (text: string, options?: MTLLoaderOptions) => parseMTL(text, options?.mtl)
|
|
46
|
+
} as const satisfies LoaderWithParser<MTLMaterial[], never, MTLLoaderOptions>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
6
|
+
import type {ArrowTable} from '@loaders.gl/schema';
|
|
7
|
+
|
|
8
|
+
import {OBJLoaderOptions, OBJWorkerLoader} from './obj-loader';
|
|
9
|
+
import {convertMeshToTable} from '@loaders.gl/schema-utils';
|
|
10
|
+
import {parseOBJ} from './lib/parse-obj';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Worker loader for OBJ - Point Cloud Data
|
|
14
|
+
*/
|
|
15
|
+
export const OBJArrowLoader = {
|
|
16
|
+
...OBJWorkerLoader,
|
|
17
|
+
dataType: null as unknown as ArrowTable,
|
|
18
|
+
batchType: null as never,
|
|
19
|
+
worker: false,
|
|
20
|
+
parse: async (arrayBuffer: ArrayBuffer) => {
|
|
21
|
+
const text = new TextDecoder().decode(arrayBuffer);
|
|
22
|
+
const mesh = parseOBJ(text);
|
|
23
|
+
const arrowTable = convertMeshToTable(mesh, 'arrow-table');
|
|
24
|
+
return arrowTable;
|
|
25
|
+
}
|
|
26
|
+
} as const satisfies LoaderWithParser<ArrowTable, never, OBJLoaderOptions>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Format} from '@loaders.gl/loader-utils';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The OBJ geometry format
|
|
9
|
+
*/
|
|
10
|
+
export const OBJFormat = {
|
|
11
|
+
name: 'OBJ',
|
|
12
|
+
id: 'obj',
|
|
13
|
+
module: 'obj',
|
|
14
|
+
extensions: ['obj'],
|
|
15
|
+
mimeTypes: ['text/plain']
|
|
16
|
+
} as const satisfies Format;
|
package/src/obj-loader.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Loader, LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
6
|
+
import type {Mesh} from '@loaders.gl/schema';
|
|
7
|
+
import {OBJFormat} from './obj-format';
|
|
8
|
+
import {parseOBJ} from './lib/parse-obj';
|
|
3
9
|
|
|
4
10
|
// __VERSION__ is injected by babel-plugin-version-inline
|
|
5
11
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
@@ -15,17 +21,13 @@ export type OBJLoaderOptions = LoaderOptions & {
|
|
|
15
21
|
/**
|
|
16
22
|
* Worker loader for the OBJ geometry format
|
|
17
23
|
*/
|
|
18
|
-
export const
|
|
24
|
+
export const OBJWorkerLoader = {
|
|
25
|
+
...OBJFormat,
|
|
26
|
+
|
|
19
27
|
dataType: null as unknown as Mesh,
|
|
20
28
|
batchType: null as never,
|
|
21
|
-
|
|
22
|
-
name: 'OBJ',
|
|
23
|
-
id: 'obj',
|
|
24
|
-
module: 'obj',
|
|
25
29
|
version: VERSION,
|
|
26
30
|
worker: true,
|
|
27
|
-
extensions: ['obj'],
|
|
28
|
-
mimeTypes: ['text/plain'],
|
|
29
31
|
testText: testOBJFile,
|
|
30
32
|
options: {
|
|
31
33
|
obj: {}
|
|
@@ -36,3 +38,15 @@ function testOBJFile(text: string): boolean {
|
|
|
36
38
|
// TODO - There could be comment line first
|
|
37
39
|
return text[0] === 'v';
|
|
38
40
|
}
|
|
41
|
+
|
|
42
|
+
// OBJLoader
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Loader for the OBJ geometry format
|
|
46
|
+
*/
|
|
47
|
+
export const OBJLoader = {
|
|
48
|
+
...OBJWorkerLoader,
|
|
49
|
+
parse: async (arrayBuffer: ArrayBuffer, options?: OBJLoaderOptions) =>
|
|
50
|
+
parseOBJ(new TextDecoder().decode(arrayBuffer), options),
|
|
51
|
+
parseTextSync: (text: string, options?: OBJLoaderOptions) => parseOBJ(text, options)
|
|
52
|
+
} as const satisfies LoaderWithParser<Mesh, never, OBJLoaderOptions>;
|