angular-three-plugin 4.0.0-next.29 → 4.0.0-next.30
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/package.json +1 -1
- package/src/generators/gltf/files/__fileName__.ts__tmpl__ +95 -0
- package/src/generators/gltf/gltf.d.ts +21 -0
- package/src/generators/gltf/gltf.js +16 -2
- package/src/generators/gltf/gltf.js.map +1 -1
- package/src/generators/gltf/schema.json +127 -4
- package/src/generators/gltf/utils/generate-ngt.d.ts +18 -0
- package/src/generators/gltf/utils/generate-ngt.js +112 -0
- package/src/generators/gltf/utils/generate-ngt.js.map +1 -0
- package/src/generators/gltf/files/src/index.ts.template +0 -1
package/package.json
CHANGED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Auto-generated by: angular-three-plugin:gltf<% if (size) { %>
|
|
3
|
+
Size: <%= size %><% } %><% if (header) { %>
|
|
4
|
+
<%= header %><% } %><% if (extras) { %>
|
|
5
|
+
<%= extras %><% } %>
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type * as THREE from 'three';
|
|
9
|
+
import { Group<%= threeImports %> } from 'three';
|
|
10
|
+
import { extend, type NgtThreeElements, NgtObjectEvents<% if (args) { %>, NgtArgs<% } %> } from 'angular-three';
|
|
11
|
+
import { Component, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, ElementRef, inject, effect<% if (animations.length) { %>, computed, model<% } %> } from '@angular/core';
|
|
12
|
+
import { injectGLTF } from 'angular-three-soba/loaders';
|
|
13
|
+
import type { GLTF } from 'three-stdlib';<% if (animations.length) { %>
|
|
14
|
+
import { injectAnimations, type NgtsAnimationClips, type NgtsAnimationApi } from 'angular-three-soba/misc';<% } %><% if (perspective) { %>
|
|
15
|
+
import { NgtsPerspectiveCamera } from 'angular-three-soba/cameras';<% } %><% if (orthographic) { %>
|
|
16
|
+
import { NgtsOrthographicCamera } from 'angular-three-soba/cameras';<% } %>
|
|
17
|
+
<% if (useImportAttribute) { %>
|
|
18
|
+
// @ts-expect-error - import .glb/.gltf file
|
|
19
|
+
import <%= gltfName %> from '.<%= gltfPath %>' with { loader: 'file' };
|
|
20
|
+
<% } %>
|
|
21
|
+
<% if (preload) { %>
|
|
22
|
+
injectGLTF(() => <% if (useImportAttribute) { %><%= gltfName %><% } else { %>'<%= gltfPath %>'<% } %>);
|
|
23
|
+
<% } %>
|
|
24
|
+
<% if (animations.length) { %>
|
|
25
|
+
type ActionName = <% animations.map(clip => "\""+ clip.name + "\"").join(" | ") %>;
|
|
26
|
+
type <%= gltfAnimationTypeName %> = NgtsAnimationClips<ActionName>;
|
|
27
|
+
export type <%= gltfAnimationApiTypeName %> = Exclude<NgtsAnimationApi<<%= gltfAnimationTypeName %>>, { get isReady(): false }>;
|
|
28
|
+
<% } %>
|
|
29
|
+
export type <%= gltfResultTypeName %> = GLTF & {
|
|
30
|
+
nodes: {
|
|
31
|
+
<% meshes.map(({ name, type }) => "\'" + name + "\'" + ": THREE." + type).join(';\n') %>
|
|
32
|
+
<% bones.map(({ name, type }) => "\'" + name + "\'" + ": THREE." + type).join(';\n') %>
|
|
33
|
+
};
|
|
34
|
+
materials: {
|
|
35
|
+
<% materials.map(({ name, type }) => "\'" + name + "\'" + ": THREE." + type).join(';\n') %>
|
|
36
|
+
};<% if (animations.length) { %>
|
|
37
|
+
animations: <%= gltfAnimationTypeName %>[];<% } %>
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
@Component({
|
|
41
|
+
selector: '<%= selector %>',
|
|
42
|
+
template: `
|
|
43
|
+
@if (gltf(); as gltf) {
|
|
44
|
+
<ngt-group #model [parameters]="options()" [dispose]="null">
|
|
45
|
+
<%= scene %>
|
|
46
|
+
|
|
47
|
+
<ng-content />
|
|
48
|
+
</ngt-group>
|
|
49
|
+
}
|
|
50
|
+
`,
|
|
51
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
52
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
53
|
+
hostDirectives: [
|
|
54
|
+
{
|
|
55
|
+
directive: NgtObjectEvents,
|
|
56
|
+
outputs: ['click', 'dblclick', 'contextmenu', 'pointerup', 'pointerdown', 'pointerover', 'pointerout', 'pointerenter', 'pointerleave', 'pointermove', 'pointermissed', 'pointercancel', 'wheel'],
|
|
57
|
+
},
|
|
58
|
+
],<% if (angularImports.length) { %>
|
|
59
|
+
imports: [<% angularImports.join(', ') %>]<% } %>
|
|
60
|
+
})
|
|
61
|
+
export class <%= className %> {
|
|
62
|
+
protected readonly Math = Math;
|
|
63
|
+
|
|
64
|
+
options = input({} as Partial<NgtThreeElements['ngt-group']>);<% if (animations.length) { %>
|
|
65
|
+
animations = model<<%= gltfAnimationApiTypeName %>>();<% } %>
|
|
66
|
+
|
|
67
|
+
modelRef = viewChild<ElementRef<Group>>('model');
|
|
68
|
+
|
|
69
|
+
protected gltf = injectGLTF<<%= gltfResultTypeName %>>(() => ${options.importattribute && !url.startsWith("http") ? gltfName : `"${url}"`}${gltfOptions ? `, ${JSON.stringify(gltfOptions)}` : ""});
|
|
70
|
+
|
|
71
|
+
constructor() {
|
|
72
|
+
extend({ Group${ngtTypesArr.length ? ", " + ngtTypesArr.join(", ") : ""} });
|
|
73
|
+
|
|
74
|
+
${
|
|
75
|
+
hasAnimations
|
|
76
|
+
? `
|
|
77
|
+
const animations = injectAnimations(this.gltf, this.modelRef);
|
|
78
|
+
effect(() => {
|
|
79
|
+
if (animations.${useNewAnimationApi ? "isReady" : "ready()"}) {
|
|
80
|
+
this.animations.set(animations);
|
|
81
|
+
}
|
|
82
|
+
}${options.ngVer < 19 ? ", { allowSignalWrites: true }" : ""})
|
|
83
|
+
`
|
|
84
|
+
: ""
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const objectEvents = inject(NgtObjectEvents, { host: true });
|
|
88
|
+
effect(() => {
|
|
89
|
+
const model = this.modelRef()?.nativeElement;
|
|
90
|
+
if (!model) return;
|
|
91
|
+
|
|
92
|
+
objectEvents.ngtObjectEvents.set(model);
|
|
93
|
+
}${options.ngVer < 19 ? ", { allowSignalWrites: true }" : ""});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import { Tree } from '@nx/devkit';
|
|
2
2
|
export interface GltfGeneratorSchema {
|
|
3
|
+
modelPath: string;
|
|
4
|
+
output: string;
|
|
5
|
+
className: string;
|
|
6
|
+
selectorPrefix: string;
|
|
7
|
+
draco: boolean;
|
|
8
|
+
bones: boolean;
|
|
9
|
+
meta: boolean;
|
|
10
|
+
shadows: boolean;
|
|
11
|
+
precision: number;
|
|
12
|
+
console: boolean;
|
|
13
|
+
instance: boolean;
|
|
14
|
+
instanceAll: boolean;
|
|
15
|
+
resolution: number;
|
|
16
|
+
keepMeshes: boolean;
|
|
17
|
+
keepMaterials: boolean;
|
|
18
|
+
keepAttributes: boolean;
|
|
19
|
+
format: string;
|
|
20
|
+
simplify: boolean;
|
|
21
|
+
ratio: number;
|
|
22
|
+
error: number;
|
|
23
|
+
verbose: boolean;
|
|
3
24
|
}
|
|
4
25
|
export declare function gltfGenerator(tree: Tree, options: GltfGeneratorSchema): Promise<void>;
|
|
5
26
|
export default gltfGenerator;
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.gltfGenerator = gltfGenerator;
|
|
4
|
+
const generate_ngt_1 = require("./utils/generate-ngt");
|
|
4
5
|
async function gltfGenerator(tree, options) {
|
|
5
|
-
const
|
|
6
|
-
|
|
6
|
+
const { loadGLTF, AnalyzedGLTF, gltfTransform, Log, allPruneStrategies } = await import('@rosskevin/gltfjsx');
|
|
7
|
+
const gltf = await loadGLTF('');
|
|
8
|
+
const analyzed = new AnalyzedGLTF(gltf, {
|
|
9
|
+
log: new Log({ debug: options.verbose, silent: false }),
|
|
10
|
+
bones: options.bones,
|
|
11
|
+
meta: options.meta,
|
|
12
|
+
shadows: options.shadows,
|
|
13
|
+
instance: options.instance,
|
|
14
|
+
instanceall: options.instanceAll,
|
|
15
|
+
keepgroups: false,
|
|
16
|
+
keepnames: true,
|
|
17
|
+
precision: options.precision,
|
|
18
|
+
}, allPruneStrategies);
|
|
19
|
+
const generateNGT = new generate_ngt_1.GenerateNGT(analyzed, options);
|
|
20
|
+
const test = await generateNGT.print(analyzed.gltf.scene);
|
|
7
21
|
// await formatFiles(tree);
|
|
8
22
|
}
|
|
9
23
|
exports.default = gltfGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gltf.js","sourceRoot":"","sources":["../../../../../../libs/plugin/src/generators/gltf/gltf.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"gltf.js","sourceRoot":"","sources":["../../../../../../libs/plugin/src/generators/gltf/gltf.ts"],"names":[],"mappings":";;AA2BA,sCA0BC;AApDD,uDAAmD;AA0B5C,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,OAA4B;IAC3E,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAE9G,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEhC,MAAM,QAAQ,GAAG,IAAI,YAAY,CAChC,IAAI,EACJ;QACC,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACvD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,OAAO,CAAC,SAAS;KAC5B,EACD,kBAAkB,CAClB,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,0BAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1D,2BAA2B;AAC5B,CAAC;AAED,kBAAe,aAAa,CAAC"}
|
|
@@ -3,15 +3,138 @@
|
|
|
3
3
|
"title": "Generate component from GLTF",
|
|
4
4
|
"type": "object",
|
|
5
5
|
"properties": {
|
|
6
|
-
"
|
|
6
|
+
"modelPath": {
|
|
7
7
|
"type": "string",
|
|
8
|
-
"description": "",
|
|
8
|
+
"description": "GLTF model path",
|
|
9
|
+
"alias": "path",
|
|
9
10
|
"$default": {
|
|
10
11
|
"$source": "argv",
|
|
11
12
|
"index": 0
|
|
12
13
|
},
|
|
13
|
-
"x-prompt": "
|
|
14
|
+
"x-prompt": "Path to GLTF model from workspace root?"
|
|
15
|
+
},
|
|
16
|
+
"output": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Output path",
|
|
19
|
+
"alias": "o",
|
|
20
|
+
"x-prompt": "Where to output the component?"
|
|
21
|
+
},
|
|
22
|
+
"className": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "Name to use for the generated component class",
|
|
25
|
+
"alias": "C",
|
|
26
|
+
"default": "Model",
|
|
27
|
+
"x-prompt": "Enter the name of the component class to generate (default: Model)"
|
|
28
|
+
},
|
|
29
|
+
"selectorPrefix": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "Prefix to use for the generated component selector",
|
|
32
|
+
"alias": "pre",
|
|
33
|
+
"default": "app",
|
|
34
|
+
"x-prompt": "Enter the prefix to use for the generated component selector (default: app)"
|
|
35
|
+
},
|
|
36
|
+
"draco": {
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"description": "Use DracoLoader",
|
|
39
|
+
"alias": "d",
|
|
40
|
+
"default": false
|
|
41
|
+
},
|
|
42
|
+
"bones": {
|
|
43
|
+
"type": "boolean",
|
|
44
|
+
"description": "Layout Bones declaratively",
|
|
45
|
+
"alias": "b",
|
|
46
|
+
"default": false
|
|
47
|
+
},
|
|
48
|
+
"meta": {
|
|
49
|
+
"type": "boolean",
|
|
50
|
+
"decsription": "Include metadata (as userData)",
|
|
51
|
+
"alias": "m",
|
|
52
|
+
"default": false
|
|
53
|
+
},
|
|
54
|
+
"shadows": {
|
|
55
|
+
"type": "boolean",
|
|
56
|
+
"description": "Let mesh cast and receive shadows",
|
|
57
|
+
"alias": "s",
|
|
58
|
+
"default": false
|
|
59
|
+
},
|
|
60
|
+
"precision": {
|
|
61
|
+
"type": "number",
|
|
62
|
+
"description": "Number of fractional digits (default: 3)",
|
|
63
|
+
"alias": "p",
|
|
64
|
+
"default": 3
|
|
65
|
+
},
|
|
66
|
+
"console": {
|
|
67
|
+
"type": "boolean",
|
|
68
|
+
"description": "Prints to console",
|
|
69
|
+
"alias": "c",
|
|
70
|
+
"default": false
|
|
71
|
+
},
|
|
72
|
+
"instance": {
|
|
73
|
+
"type": "boolean",
|
|
74
|
+
"description": "Instance re-occuring geometry",
|
|
75
|
+
"alias": "i",
|
|
76
|
+
"default": false
|
|
77
|
+
},
|
|
78
|
+
"instanceAll": {
|
|
79
|
+
"type": "boolean",
|
|
80
|
+
"description": "Instance every geometry (for cheaper re-use)",
|
|
81
|
+
"alias": "I",
|
|
82
|
+
"default": false
|
|
83
|
+
},
|
|
84
|
+
"resolution": {
|
|
85
|
+
"type": "number",
|
|
86
|
+
"description": "Resolution for texture resizing (default: 1024)",
|
|
87
|
+
"alias": "R",
|
|
88
|
+
"default": 1024
|
|
89
|
+
},
|
|
90
|
+
"keepMeshes": {
|
|
91
|
+
"type": "boolean",
|
|
92
|
+
"description": "Do not join compatible meshes",
|
|
93
|
+
"alias": "j",
|
|
94
|
+
"default": false
|
|
95
|
+
},
|
|
96
|
+
"keepMaterials": {
|
|
97
|
+
"type": "boolean",
|
|
98
|
+
"description": "Do not palette join materials",
|
|
99
|
+
"alias": "M",
|
|
100
|
+
"default": false
|
|
101
|
+
},
|
|
102
|
+
"keepAttributes": {
|
|
103
|
+
"type": "boolean",
|
|
104
|
+
"description": "Whether to keep unused vertex attributes, such as UVs without an assigned texture",
|
|
105
|
+
"alias": "a",
|
|
106
|
+
"default": false
|
|
107
|
+
},
|
|
108
|
+
"format": {
|
|
109
|
+
"type": "string",
|
|
110
|
+
"description": "Texture format jpeg | png | webp | avif (default: \"webp\")",
|
|
111
|
+
"alias": "f",
|
|
112
|
+
"default": "webp"
|
|
113
|
+
},
|
|
114
|
+
"simplify": {
|
|
115
|
+
"type": "boolean",
|
|
116
|
+
"description": "Mesh simplification (default: false)",
|
|
117
|
+
"alias": "S",
|
|
118
|
+
"default": false
|
|
119
|
+
},
|
|
120
|
+
"ratio": {
|
|
121
|
+
"type": "number",
|
|
122
|
+
"description": "Simplifier ratio (default: 0)",
|
|
123
|
+
"alias": "r",
|
|
124
|
+
"default": 0
|
|
125
|
+
},
|
|
126
|
+
"error": {
|
|
127
|
+
"type": "number",
|
|
128
|
+
"description": "Simplifier error threshold (default: 0.0001)",
|
|
129
|
+
"alias": "e",
|
|
130
|
+
"default": 0.0001
|
|
131
|
+
},
|
|
132
|
+
"verbose": {
|
|
133
|
+
"type": "boolean",
|
|
134
|
+
"description": "Verbose log",
|
|
135
|
+
"alias": "debug",
|
|
136
|
+
"default": false
|
|
14
137
|
}
|
|
15
138
|
},
|
|
16
|
-
"required": ["
|
|
139
|
+
"required": ["modelPath", "output"]
|
|
17
140
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Object3D } from 'three';
|
|
2
|
+
import type { GltfGeneratorSchema } from '../gltf';
|
|
3
|
+
export declare class GenerateNGT {
|
|
4
|
+
private analyzedGLTF;
|
|
5
|
+
private options;
|
|
6
|
+
ngtTypes: Set<string>;
|
|
7
|
+
args: boolean;
|
|
8
|
+
constructor(analyzedGLTF: import('@rosskevin/gltfjsx').AnalyzedGLTF, options: GltfGeneratorSchema);
|
|
9
|
+
print(obj: Object3D): Promise<string>;
|
|
10
|
+
private handleAngularInputs;
|
|
11
|
+
private getType;
|
|
12
|
+
/**
|
|
13
|
+
* Transforms a type like "mesh" into "ngt-mesh".
|
|
14
|
+
* @param {string} type
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
private getAngularThreeElement;
|
|
18
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GenerateNGT = void 0;
|
|
4
|
+
class GenerateNGT {
|
|
5
|
+
analyzedGLTF;
|
|
6
|
+
options;
|
|
7
|
+
ngtTypes = new Set();
|
|
8
|
+
args = false;
|
|
9
|
+
constructor(
|
|
10
|
+
// @ts-expect-error - type only import
|
|
11
|
+
analyzedGLTF, options) {
|
|
12
|
+
this.analyzedGLTF = analyzedGLTF;
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
async print(obj) {
|
|
16
|
+
const { nodeName, isRemoved, isChildless, isTargetedLight, isInstancedMesh, sanitizeName } = await import('@rosskevin/gltfjsx');
|
|
17
|
+
let result = '';
|
|
18
|
+
let children = '';
|
|
19
|
+
if (isRemoved(obj) && !isChildless(obj)) {
|
|
20
|
+
obj.children.forEach((child) => (result += this.print(child)));
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
const { bones } = this.options;
|
|
24
|
+
const node = nodeName(obj);
|
|
25
|
+
const type = this.getType(obj);
|
|
26
|
+
// Bail out on bones
|
|
27
|
+
if (!bones && type === 'bone') {
|
|
28
|
+
this.args = true;
|
|
29
|
+
return `<ngt-primitive *args=[gltf.${node}] />\n`;
|
|
30
|
+
}
|
|
31
|
+
const ngtType = this.getAngularThreeElement(type);
|
|
32
|
+
if (isTargetedLight(obj)) {
|
|
33
|
+
this.args = true;
|
|
34
|
+
return `<${ngtType} ${this.handleAngularInputs(obj)} [target]="gltf.${node}.target">
|
|
35
|
+
<ngt-primitive *args="[gltf.${node}.target]" ${this.handleAngularInputs(obj.target)} />
|
|
36
|
+
</${ngtType}>`;
|
|
37
|
+
}
|
|
38
|
+
// Collect children
|
|
39
|
+
if (obj.children)
|
|
40
|
+
obj.children.forEach((child) => (children += this.print(child)));
|
|
41
|
+
// TODO: Instances are currently not supported for NGT components
|
|
42
|
+
if (isInstancedMesh(obj)) {
|
|
43
|
+
const geo = `gltf.${node}.geometry`;
|
|
44
|
+
const mat = 'name' in obj.material ? `gltf.materials${sanitizeName(obj.material.name)}` : `gltf.${node}.material`;
|
|
45
|
+
this.args = true;
|
|
46
|
+
result = `<ngt-instanced-mesh *args="[${geo}, ${mat}, ${!obj.count ? `gltf.${node}.count` : obj.count}]" `;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
if (type === 'bone') {
|
|
50
|
+
this.args = true;
|
|
51
|
+
result = `<ngt-primitive *args="[gltf.${node}]" `;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
result = `<${this.getAngularThreeElement(type)} `;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (obj.name.length &&
|
|
58
|
+
'morphTargetDictionary' in obj &&
|
|
59
|
+
!!obj.morphTargetDictionary &&
|
|
60
|
+
this.analyzedGLTF.hasAnimations()) {
|
|
61
|
+
result += `name="${obj.name}" `;
|
|
62
|
+
}
|
|
63
|
+
const oldResult = result;
|
|
64
|
+
result += this.handleAngularInputs(obj);
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
handleAngularInputs(obj) {
|
|
68
|
+
return '';
|
|
69
|
+
}
|
|
70
|
+
getType(obj) {
|
|
71
|
+
let type = obj.type.charAt(0).toLowerCase() + obj.type.slice(1);
|
|
72
|
+
if (type === 'object3D') {
|
|
73
|
+
type = 'group';
|
|
74
|
+
this.ngtTypes.add('Group');
|
|
75
|
+
}
|
|
76
|
+
if (type === 'perspectiveCamera')
|
|
77
|
+
type = 'PerspectiveCamera';
|
|
78
|
+
if (type === 'orthographicCamera')
|
|
79
|
+
type = 'OrthographicCamera';
|
|
80
|
+
this.ngtTypes.add(obj.type);
|
|
81
|
+
return type;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Transforms a type like "mesh" into "ngt-mesh".
|
|
85
|
+
* @param {string} type
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
getAngularThreeElement(type) {
|
|
89
|
+
if (type === 'object3D') {
|
|
90
|
+
return 'ngt-object3D';
|
|
91
|
+
}
|
|
92
|
+
if (type === 'lOD') {
|
|
93
|
+
return 'ngt-lod';
|
|
94
|
+
}
|
|
95
|
+
if (type === 'perspectiveCamera') {
|
|
96
|
+
return `ngts-perspective-camera`;
|
|
97
|
+
}
|
|
98
|
+
if (type === 'orthographicCamera') {
|
|
99
|
+
return `ngts-orthographic-camera`;
|
|
100
|
+
}
|
|
101
|
+
const kebabType = type.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
102
|
+
return `ngt-${kebabType}`;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.GenerateNGT = GenerateNGT;
|
|
106
|
+
// export async function generateNGT(
|
|
107
|
+
// // @ts-expect-error - type only import
|
|
108
|
+
// analyzedGLTF: import('@rosskevin/gltfjsx').AnalyzedGLTF,
|
|
109
|
+
// ) {}
|
|
110
|
+
//
|
|
111
|
+
// function generate(obj: Object3D) {}
|
|
112
|
+
//# sourceMappingURL=generate-ngt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-ngt.js","sourceRoot":"","sources":["../../../../../../../libs/plugin/src/generators/gltf/utils/generate-ngt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const variable = "<%= name %>";
|