angular-three-plugin 4.0.0-next.29 → 4.0.0-next.31
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 +19 -0
- package/src/generators/gltf/utils/generate-ngt.js +143 -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,19 @@
|
|
|
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
|
+
generate(): Promise<string>;
|
|
10
|
+
print(obj: Object3D): Promise<string>;
|
|
11
|
+
private handleAngularInputs;
|
|
12
|
+
private getType;
|
|
13
|
+
/**
|
|
14
|
+
* Transforms a type like "mesh" into "ngt-mesh".
|
|
15
|
+
* @param {string} type
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
private getAngularThreeElement;
|
|
19
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
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 generate() {
|
|
16
|
+
return this.analyzedGLTF.gltf.scene.children.map((child) => this.print(child)).join('\n');
|
|
17
|
+
}
|
|
18
|
+
async print(obj) {
|
|
19
|
+
const { nodeName, isRemoved, isTargetedLight, isInstancedMesh, sanitizeName } = await import('@rosskevin/gltfjsx');
|
|
20
|
+
let result = '';
|
|
21
|
+
let children = '';
|
|
22
|
+
// Children
|
|
23
|
+
if (obj.children)
|
|
24
|
+
obj.children.forEach((child) => (children += this.print(child)));
|
|
25
|
+
// Bail out if the object was pruned
|
|
26
|
+
if (isRemoved(obj))
|
|
27
|
+
return children;
|
|
28
|
+
const { bones } = this.options;
|
|
29
|
+
const node = nodeName(obj);
|
|
30
|
+
const type = this.getType(obj);
|
|
31
|
+
// Bail out on bones
|
|
32
|
+
if (!bones && type === 'bone') {
|
|
33
|
+
this.args = true;
|
|
34
|
+
return `<ngt-primitive *args=[gltf.${node}] />\n`;
|
|
35
|
+
}
|
|
36
|
+
const ngtType = this.getAngularThreeElement(type);
|
|
37
|
+
if (isTargetedLight(obj)) {
|
|
38
|
+
this.args = true;
|
|
39
|
+
return `<${ngtType} ${this.handleAngularInputs(obj)} [target]="gltf.${node}.target">
|
|
40
|
+
<ngt-primitive *args="[gltf.${node}.target]" ${this.handleAngularInputs(obj.target)} />
|
|
41
|
+
</${ngtType}>`;
|
|
42
|
+
}
|
|
43
|
+
// TODO: Instances are currently not supported for NGT components
|
|
44
|
+
//
|
|
45
|
+
if (isInstancedMesh(obj)) {
|
|
46
|
+
const geo = `gltf.${node}.geometry`;
|
|
47
|
+
const mat = 'name' in obj.material ? `gltf.materials${sanitizeName(obj.material.name)}` : `gltf.${node}.material`;
|
|
48
|
+
this.args = true;
|
|
49
|
+
result = `<ngt-instanced-mesh *args="[${geo}, ${mat}, ${!obj.count ? `gltf.${node}.count` : obj.count}]" `;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
if (type === 'bone') {
|
|
53
|
+
this.args = true;
|
|
54
|
+
result = `<ngt-primitive *args="[gltf.${node}]" `;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
result = `<${this.getAngularThreeElement(type)} `;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
let shoudSkipName = false;
|
|
61
|
+
if (obj.name.length &&
|
|
62
|
+
'morphTargetDictionary' in obj &&
|
|
63
|
+
!!obj.morphTargetDictionary &&
|
|
64
|
+
this.analyzedGLTF.hasAnimations()) {
|
|
65
|
+
shoudSkipName = true;
|
|
66
|
+
result += `name="${obj.name}" `;
|
|
67
|
+
}
|
|
68
|
+
result += this.handleAngularInputs(obj, shoudSkipName);
|
|
69
|
+
if (children.length) {
|
|
70
|
+
// Add children and close the element's tag
|
|
71
|
+
result += `>
|
|
72
|
+
${children}
|
|
73
|
+
</${ngtType}>`;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// Close this element's tag
|
|
77
|
+
result += `/>`;
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
handleAngularInputs(obj, skipName = false) {
|
|
82
|
+
const properties = this.analyzedGLTF.calculateProps(obj);
|
|
83
|
+
let propertiesString = '';
|
|
84
|
+
for (const key in properties) {
|
|
85
|
+
const value = properties[key];
|
|
86
|
+
if (key === 'name') {
|
|
87
|
+
if (skipName)
|
|
88
|
+
continue;
|
|
89
|
+
propertiesString += `name="${value}" `;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (value === true) {
|
|
93
|
+
// i.e: castShadow, receiveShadow
|
|
94
|
+
propertiesString += `${key} `;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
propertiesString += `[${key}]="${value}" `;
|
|
98
|
+
}
|
|
99
|
+
return propertiesString;
|
|
100
|
+
}
|
|
101
|
+
getType(obj) {
|
|
102
|
+
let type = obj.type.charAt(0).toLowerCase() + obj.type.slice(1);
|
|
103
|
+
if (type === 'object3D') {
|
|
104
|
+
type = 'group';
|
|
105
|
+
this.ngtTypes.add('Group');
|
|
106
|
+
}
|
|
107
|
+
if (type === 'perspectiveCamera')
|
|
108
|
+
type = 'PerspectiveCamera';
|
|
109
|
+
if (type === 'orthographicCamera')
|
|
110
|
+
type = 'OrthographicCamera';
|
|
111
|
+
this.ngtTypes.add(obj.type);
|
|
112
|
+
return type;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Transforms a type like "mesh" into "ngt-mesh".
|
|
116
|
+
* @param {string} type
|
|
117
|
+
* @returns
|
|
118
|
+
*/
|
|
119
|
+
getAngularThreeElement(type) {
|
|
120
|
+
if (type === 'object3D') {
|
|
121
|
+
return 'ngt-object3D';
|
|
122
|
+
}
|
|
123
|
+
if (type === 'lOD') {
|
|
124
|
+
return 'ngt-lod';
|
|
125
|
+
}
|
|
126
|
+
if (type === 'perspectiveCamera') {
|
|
127
|
+
return `ngts-perspective-camera`;
|
|
128
|
+
}
|
|
129
|
+
if (type === 'orthographicCamera') {
|
|
130
|
+
return `ngts-orthographic-camera`;
|
|
131
|
+
}
|
|
132
|
+
const kebabType = type.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
133
|
+
return `ngt-${kebabType}`;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.GenerateNGT = GenerateNGT;
|
|
137
|
+
// export async function generateNGT(
|
|
138
|
+
// // @ts-expect-error - type only import
|
|
139
|
+
// analyzedGLTF: import('@rosskevin/gltfjsx').AnalyzedGLTF,
|
|
140
|
+
// ) {}
|
|
141
|
+
//
|
|
142
|
+
// function generate(obj: Object3D) {}
|
|
143
|
+
//# 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":";;;AAGA,MAAa,WAAW;IAMd;IACA;IANT,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,IAAI,GAAG,KAAK,CAAC;IAEb;IACC,sCAAsC;IAC9B,YAAuD,EACvD,OAA4B;QAD5B,iBAAY,GAAZ,YAAY,CAA2C;QACvD,YAAO,GAAP,OAAO,CAAqB;IAClC,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAa;QACxB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAC3F,oBAAoB,CACpB,CAAC;QAEF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,WAAW;QACX,IAAI,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEnF,oCAAoC;QACpC,IAAI,SAAS,CAAC,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;QAEpC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE/B,oBAAoB;QACpB,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,OAAO,8BAA8B,IAAI,QAAQ,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,OAAO,IAAI,OAAO,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,mBAAmB,IAAI;gCAC7C,IAAI,aAAa,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;IACjF,OAAO,GAAG,CAAC;QACb,CAAC;QAED,iEAAiE;QACjE,EAAE;QACF,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,QAAQ,IAAI,WAAW,CAAC;YACpC,MAAM,GAAG,GACR,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC;YACvG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,MAAM,GAAG,+BAA+B,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;QAC5G,CAAC;aAAM,CAAC;YACP,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,MAAM,GAAG,+BAA+B,IAAI,KAAK,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACP,MAAM,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;YACnD,CAAC;QACF,CAAC;QAED,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IACC,GAAG,CAAC,IAAI,CAAC,MAAM;YACf,uBAAuB,IAAI,GAAG;YAC9B,CAAC,CAAC,GAAG,CAAC,qBAAqB;YAC3B,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,EAChC,CAAC;YACF,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,IAAI,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC;QACjC,CAAC;QAED,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAEvD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,2CAA2C;YAC3C,MAAM,IAAI;QACL,QAAQ;UACN,OAAO,GAAG,CAAC;QACnB,CAAC;aAAM,CAAC;YACP,2BAA2B;YAC3B,MAAM,IAAI,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,mBAAmB,CAAC,GAAa,EAAE,QAAQ,GAAG,KAAK;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAEzD,IAAI,gBAAgB,GAAG,EAAE,CAAC;QAE1B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACpB,IAAI,QAAQ;oBAAE,SAAS;gBACvB,gBAAgB,IAAI,SAAS,KAAK,IAAI,CAAC;gBACvC,SAAS;YACV,CAAC;YAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACpB,iCAAiC;gBACjC,gBAAgB,IAAI,GAAG,GAAG,GAAG,CAAC;gBAC9B,SAAS;YACV,CAAC;YAED,gBAAgB,IAAI,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;QAC5C,CAAC;QAED,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAEO,OAAO,CAAC,GAAa;QAC5B,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhE,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACzB,IAAI,GAAG,OAAO,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,KAAK,mBAAmB;YAAE,IAAI,GAAG,mBAAmB,CAAC;QAC7D,IAAI,IAAI,KAAK,oBAAoB;YAAE,IAAI,GAAG,oBAAoB,CAAC;QAE/D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE5B,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;OAIG;IACK,sBAAsB,CAAC,IAAY;QAC1C,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACzB,OAAO,cAAc,CAAC;QACvB,CAAC;QAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;YAClC,OAAO,yBAAyB,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;YACnC,OAAO,0BAA0B,CAAC;QACnC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAChE,OAAO,OAAO,SAAS,EAAE,CAAC;IAC3B,CAAC;CACD;AA5JD,kCA4JC;AAED,qCAAqC;AACrC,0CAA0C;AAC1C,4DAA4D;AAC5D,OAAO;AACP,EAAE;AACF,sCAAsC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const variable = "<%= name %>";
|