x_ite 8.12.0 → 8.12.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.
Files changed (49) hide show
  1. package/README.md +1 -9
  2. package/dist/assets/components/Annotation.js +13 -13
  3. package/dist/assets/components/Annotation.min.js +1 -1
  4. package/dist/assets/components/CADGeometry.js +14 -14
  5. package/dist/assets/components/CADGeometry.min.js +1 -1
  6. package/dist/assets/components/CubeMapTexturing.js +25 -25
  7. package/dist/assets/components/CubeMapTexturing.min.js +1 -1
  8. package/dist/assets/components/DIS.js +13 -13
  9. package/dist/assets/components/DIS.min.js +1 -1
  10. package/dist/assets/components/EventUtilities.js +9 -9
  11. package/dist/assets/components/EventUtilities.min.js +1 -1
  12. package/dist/assets/components/Geometry2D.js +19 -19
  13. package/dist/assets/components/Geometry2D.min.js +1 -1
  14. package/dist/assets/components/Geospatial.js +33 -33
  15. package/dist/assets/components/Geospatial.min.js +1 -1
  16. package/dist/assets/components/HAnim.js +23 -23
  17. package/dist/assets/components/HAnim.min.js +1 -1
  18. package/dist/assets/components/KeyDeviceSensor.js +8 -8
  19. package/dist/assets/components/KeyDeviceSensor.min.js +1 -1
  20. package/dist/assets/components/Layout.js +26 -26
  21. package/dist/assets/components/Layout.min.js +1 -1
  22. package/dist/assets/components/NURBS.js +24 -24
  23. package/dist/assets/components/NURBS.min.js +1 -1
  24. package/dist/assets/components/ParticleSystems.js +23 -23
  25. package/dist/assets/components/ParticleSystems.min.js +1 -1
  26. package/dist/assets/components/Picking.js +18 -18
  27. package/dist/assets/components/Picking.min.js +1 -1
  28. package/dist/assets/components/RigidBodyPhysics.js +17 -17
  29. package/dist/assets/components/RigidBodyPhysics.min.js +1 -1
  30. package/dist/assets/components/Scripting.js +38 -38
  31. package/dist/assets/components/Scripting.min.js +1 -1
  32. package/dist/assets/components/Text.js +24 -24
  33. package/dist/assets/components/Text.min.js +1 -1
  34. package/dist/assets/components/TextureProjector.js +14 -14
  35. package/dist/assets/components/TextureProjector.min.js +1 -1
  36. package/dist/assets/components/Texturing3D.js +30 -30
  37. package/dist/assets/components/Texturing3D.min.js +1 -1
  38. package/dist/assets/components/VolumeRendering.js +18 -18
  39. package/dist/assets/components/VolumeRendering.min.js +1 -1
  40. package/dist/assets/components/X_ITE.js +9 -9
  41. package/dist/assets/components/X_ITE.min.js +1 -1
  42. package/dist/x_ite.css +1 -1
  43. package/dist/x_ite.d.ts +2096 -0
  44. package/dist/x_ite.js +95 -74
  45. package/dist/x_ite.min.js +1 -1
  46. package/dist/x_ite.min.mjs +1 -1
  47. package/dist/x_ite.mjs +95 -74
  48. package/dist/x_ite.zip +0 -0
  49. package/package.json +5 -1
@@ -0,0 +1,2096 @@
1
+ declare const X3D: X3D;
2
+ export default X3D;
3
+ export interface X3D {
4
+ (callback?: () => void, fallback?: (error: Error) => void): Promise<void>;
5
+ createBrowser(): X3DCanvasElement;
6
+ getBrowser(via?: string | X3DCanvasElement): X3DBrowser;
7
+ noConflict(): X3D;
8
+ X3DConstants: X3DConstants;
9
+ SFBool(arg: unknown): boolean;
10
+ // NB. in all of the following `typeof Class` is an expression that
11
+ // extracts the type of the constructor for Class.
12
+ SFColor: typeof SFColor;
13
+ SFColorRGBA: typeof SFColorRGBA;
14
+ // Doubles and floats not different in JavaScript:
15
+ SFDouble: typeof SFDouble;
16
+ SFFloat: typeof SFDouble;
17
+
18
+ SFImage: typeof SFImage;
19
+ SFInt32: typeof SFInt32;
20
+
21
+ // Doubles and floats same:
22
+ SFMatrix3d: typeof SFMatrix3;
23
+ SFMatrix3f: typeof SFMatrix3;
24
+ SFMatrix4d: typeof SFMatrix4;
25
+ SFMatrix4f: typeof SFMatrix4;
26
+
27
+ // SFNode: typeof SFNode; // no working constructors, just one that throws
28
+ SFRotation: typeof SFRotation;
29
+ SFString: typeof SFString;
30
+ SFTime: typeof SFTime;
31
+
32
+ // Doubles and floats same:
33
+ SFVec2d: typeof SFVec2;
34
+ SFVec2f: typeof SFVec2;
35
+ SFVec3d: typeof SFVec3;
36
+ SFVec3f: typeof SFVec3;
37
+ SFVec4d: typeof SFVec4;
38
+ SFVec4f: typeof SFVec4;
39
+
40
+ // All the array types:
41
+ MFBool: typeof X3DArrayField<boolean>;
42
+ MFColor: typeof X3DArrayField<SFColor>;
43
+ MFColorRGBA: typeof X3DArrayField<SFColorRGBA>;
44
+ MFDouble: typeof X3DArrayField<number>;
45
+ MFFloat: typeof X3DArrayField<number>;
46
+ MFImage: typeof X3DArrayField<SFImage>;
47
+ MFMatrix3d: typeof X3DArrayField<SFMatrix3>;
48
+ MFMatrix3f: typeof X3DArrayField<SFMatrix3>;
49
+ MFMatrix4d: typeof X3DArrayField<SFMatrix4>;
50
+ MFMatrix4f: typeof X3DArrayField<SFMatrix4>;
51
+ MFInt32: typeof X3DArrayField<number>;
52
+ MFNode: typeof X3DArrayField<SFNode>;
53
+ MFRotation: typeof X3DArrayField<SFRotation>;
54
+ MFString: typeof X3DArrayField<string>;
55
+ MFTime: typeof X3DArrayField<SFTime>;
56
+ MFVec2d: typeof X3DArrayField<SFVec2>;
57
+ MFVec2f: typeof X3DArrayField<SFVec2>;
58
+ MFVec3d: typeof X3DArrayField<SFVec3>;
59
+ MFVec3f: typeof X3DArrayField<SFVec3>;
60
+ MFVec4d: typeof X3DArrayField<SFVec4>;
61
+ MFVec4f: typeof X3DArrayField<SFVec4>;
62
+ }
63
+
64
+ export interface X3DCanvasElement extends HTMLElement {
65
+ readonly browser: string;
66
+ }
67
+
68
+ type JSONValue =
69
+ | string
70
+ | number
71
+ | boolean
72
+ | null
73
+ | JSONValue[]
74
+ | {[key: string]: JSONValue}
75
+
76
+ interface JSONObject {
77
+ [k: string]: JSONValue
78
+ }
79
+
80
+ type BrowserProperty = 'ABSTRACT_NODES'
81
+ | 'CONCRETE_NODES'
82
+ | 'EXTERNAL_INTERACTIONS'
83
+ | 'PROTOTYPE_CREATE'
84
+ | 'DOM_IMPORT'
85
+ | 'XML_ENCODING'
86
+ | 'CLASSIC_VRML_ENCODING'
87
+ | 'BINARY_ENCOIDING';
88
+
89
+ type QualityLevels = 'LOW' | 'MEDIUM' | 'HIGH';
90
+ type BrowserOption = {
91
+ Antialiased: boolean,
92
+ Dashboard: boolean,
93
+ Rubberband: boolean,
94
+ EnableInlineViewpoints: boolean,
95
+ MotionBlur: boolean,
96
+ PrimitiveQuality: QualityLevels,
97
+ QualityWhenMoving: QualityLevels | 'SAME',
98
+ Shading: 'POINT' | 'WIREFRAME' | 'FLAT'
99
+ | 'GOURAUD' | 'PHONG',
100
+ SplashScreen: boolean,
101
+ TextureQuality: QualityLevels,
102
+ AutoUpdate: boolean,
103
+ Cache: boolean,
104
+ ContentScale: number,
105
+ ContextMenu: boolean,
106
+ Debug: boolean,
107
+ Gravity: number,
108
+ LogarithmicDepthBuffer: boolean,
109
+ Multisampling: number,
110
+ Notifications: boolean,
111
+ OrderIndependentTransparency: boolean,
112
+ StraightenHorizon: boolean,
113
+ Timings: boolean
114
+ }
115
+ export type RenderingProperty = {
116
+ Shading: BrowserOption['Shading'],
117
+ MaxTextureSize: number,
118
+ TextureUnits: number,
119
+ MaxLights: number,
120
+ Antialiased: boolean,
121
+ ColorDepth: number,
122
+ TextureMemory: number,
123
+ ContentScale: number,
124
+ MaxSamples: number,
125
+ Multisampling: number,
126
+ LogarithmicDepthBuffer: boolean
127
+ }
128
+
129
+ type BrowserCallback = (
130
+ event: number) => void; // event is a Browser Event Constant
131
+
132
+ export interface X3DBrowser {
133
+ name: string;
134
+ version: string;
135
+ providerURL: string;
136
+ currentSpeed: number;
137
+ currentFrameRate: number;
138
+ description: string;
139
+ readonly supportedComponents: ComponentInfoArray;
140
+ readonly supportedProfiles: ProfileInfoArray;
141
+ baseURL: string;
142
+ currentScene: X3DScene;
143
+
144
+ replaceWorld(scene: X3DScene): Promise<void>;
145
+ createX3DFromString(x3dSyntax: string): Promise<X3DScene>;
146
+ createX3DFromURL(url: X3DArrayField<string>): Promise<X3DScene>;
147
+ createX3DFromURL(url: X3DArrayField<string>,
148
+ node: SFNode, fieldName: string): void;
149
+ loadURL(url: X3DArrayField<string>,
150
+ parameter?: X3DArrayField<string>): Promise<void>;
151
+ importDocument(dom: HTMLElement | string): Promise<X3DScene>;
152
+ importJS(json: string | JSONObject): Promise<X3DScene>;
153
+ getBrowserProperty(prop: BrowserProperty): boolean;
154
+ getBrowserOption<T extends keyof BrowserOption>(op: T): BrowserOption[T];
155
+ setBrowserOption<T extends keyof BrowserOption>(
156
+ op: T, value: BrowserOption[T]): void;
157
+ getRenderingProperty<T extends keyof RenderingProperty>(
158
+ prop: T): RenderingProperty[T];
159
+ getContextMenu(): XiteContextMenu;
160
+ addBrowserCallback(key: unknown, cb?: BrowserCallback): void;
161
+ addBrowserCallback(
162
+ key: unknown, event: number, // A Browser Event Constant
163
+ cb?: BrowserCallback): void;
164
+ removeBrowserCallback(key: unknown, event?: number): void;
165
+ viewAll(layer?: SFNode, transitionTime?: number): void;
166
+ nextViewpoint(layer?: SFNode): void;
167
+ previousViewpoint(layer?: SFNode): void;
168
+ firstViewpoint(layer?: SFNode): void;
169
+ lastViewpoint(layer?: SFNode): void;
170
+ changeViewpoint(name: string): void;
171
+ changeViewpoint(layer: SFNode, name: string): void;
172
+ print(thing: unknown): void;
173
+ printLn(thing: unknown): void;
174
+ // VRML methods
175
+ getName(): string;
176
+ getVersion(): string;
177
+ getCurrentSpeed(): number;
178
+ getCurrentFrameRate(): number;
179
+ getWorldURL(): string;
180
+ replaceWorld(nodes: X3DArrayField<SFNode>): string;
181
+ createVrmlFromString(vrmlSyntax: string): X3DArrayField<SFNode>;
182
+ createVrmlFromURL(url: X3DArrayField<string>,
183
+ node: SFNode, fieldName: string): void;
184
+ addRoute(sourceNode: SFNode, sourceField: string,
185
+ destinationNode: SFNode, destinationField: string): void;
186
+ deleteRoute(sourceNode: SFNode, sourceField: string,
187
+ destinationNode: SFNode, destinationField: string): void;
188
+ loadURL(url: X3DArrayField<string>,
189
+ parameter?: X3DArrayField<string>): void;
190
+ setDescription(description: string): void;
191
+ }
192
+
193
+ type MinimalArray<T> = {[index: number]: T, length: number}
194
+
195
+ type ComponentInfoArray = MinimalArray<ComponentInfo>;
196
+ interface ComponentInfo {
197
+ readonly name: string;
198
+ readonly level: number;
199
+ readonly title: string;
200
+ readonly providerURL: string;
201
+ }
202
+
203
+ type ProfileInfoArray = MinimalArray<ProfileInfo>;
204
+ interface ProfileInfo {
205
+ readonly name: string;
206
+ readonly title: string;
207
+ readonly providerURL: string;
208
+ readonly components: ComponentInfoArray
209
+ }
210
+
211
+ type JQueryCtxMenuOpts = {
212
+ selector: string,
213
+ items: UserMenuItems,
214
+ appendTo?: string | HTMLElement,
215
+ triggers: string,
216
+ hideOnSecondTrigger?: boolean,
217
+ selectableSubMenu?: boolean,
218
+ reposition?: boolean,
219
+ delay?: number,
220
+ autoHide?: boolean,
221
+ zindex?: number | (($trigger: string, opt: JQueryCtxMenuOpts) => number)
222
+ className?: string,
223
+ classNames?: Record<string, string>,
224
+ animation?: {duration: number, show: string, hide: string},
225
+ events?: Record<string, (opt: JQueryCtxMenuOpts) => boolean>,
226
+ position?: (opt: unknown, x?: number|string, y?: number|string) => void,
227
+ determinePosition?: (menu: unknown) => void,
228
+ callback?: MenuCallback,
229
+ build?: ($triggerElement: unknown, e: Event) => JQueryCtxMenuOpts,
230
+ itemClickEvent?: string
231
+ }
232
+
233
+ type UserMenuCallback = () => UserMenuItems
234
+ type UserMenuItems = Record<string, UserMenuItem>
235
+ type MenuCallback = (
236
+ itemKey: string, opt: JQueryCtxMenuOpts, event: Event) => (boolean | void)
237
+ type MenuIconCallback = (
238
+ opt: JQueryCtxMenuOpts, $itemElement: HTMLElement,
239
+ itemKey: string, item: unknown) => string
240
+ type MenuBoolCallback = (itemKey: string, opt: JQueryCtxMenuOpts) => boolean
241
+ type UserMenuItem = {
242
+ name: string,
243
+ isHtmlName?: boolean,
244
+ callback: MenuCallback,
245
+ className?: string,
246
+ icon?: string | MenuIconCallback,
247
+ disabled?: boolean | MenuBoolCallback,
248
+ visible?: boolean | MenuBoolCallback,
249
+ type?: string,
250
+ events?: Record<string, unknown>,
251
+ value?: string,
252
+ selected?: boolean | string,
253
+ radio?: string,
254
+ options?: Record<string|number, string>,
255
+ height?: number,
256
+ items?: UserMenuItems,
257
+ accesskey?: string,
258
+ dataAttr?: Record<string, string>
259
+ }
260
+
261
+ interface XiteContextMenu {
262
+ getUserMenu(): UserMenuCallback;
263
+ setUserMenu(cb: UserMenuCallback): void;
264
+ }
265
+
266
+ export interface X3DScene {
267
+ readonly specificationVersion: string;
268
+ readonly encoding: 'ASCII' | 'VRML' | 'XML' | 'BINARY'
269
+ | 'SCRIPTED' | 'BIFS' | 'NONE';
270
+ readonly profile: ProfileInfo;
271
+ readonly components: ComponentInfoArray;
272
+ readonly units: UnitInfoArray;
273
+ readonly worldURL: string;
274
+ readonly baseURL: string;
275
+ rootNodes: X3DArrayField<SFNode>;
276
+ readonly protos: ProtoDeclarationArray;
277
+ readonly externprotos: ExternProtoDeclarationArray;
278
+ readonly routes: RouteArray;
279
+
280
+ // ExecutionContext methods. I didn't split these out because I
281
+ // didn't see a place in the interface where it mattered, but
282
+ // perhaps there should be a base class with just these...
283
+ createNode<T extends keyof SpecializeNodeType>(
284
+ spec: T): SpecializeNodeType[T];
285
+ createProto(protoName: string): SFNode;
286
+ getNamedNode(name: string): SFNode;
287
+ updateNamedNode(name: string, node: SFNode): void;
288
+ removeNamedNode(name: string): void;
289
+ getImportedNode(importedName: string): SFNode;
290
+ updateImportedNode(
291
+ inlineNode: SFNode, exportedName: string, importedName: string): void;
292
+ removeImportedNode(importedName: string): void;
293
+ addRoute(sourceNode: SFNode, sourceField: string,
294
+ destinationNode: SFNode, destinationField: string): X3DRoute;
295
+ deleteRoute(route: X3DRoute): void;
296
+
297
+ // X3DScene methods:
298
+ getMetaData(name: string): string[];
299
+ setMetaData(name: string, value: string | string[]): void;
300
+ addMetaData(name: string, value: string): void;
301
+ removeMetaData(name: string): void;
302
+ addRootNode(node: SFNode): void;
303
+ removeRootNode(node: SFNode): void;
304
+ getExportedNode(exportedName: string): SFNode;
305
+ updateExportedNode(exportedName: string, node: SFNode): void;
306
+ removeExportedNode(exportedName: string): void;
307
+ toVRMLString(options?: VRMLOptions): string;
308
+ toXMLString(options?: VRMLOptions): string;
309
+ toJSONString(options?: VRMLOptions): string;
310
+ }
311
+
312
+ type UnitInfoArray = MinimalArray<UnitInfo>;
313
+ interface UnitInfo {
314
+ readonly category: string;
315
+ readonly name: string;
316
+ readonly conversionFactor: number;
317
+ }
318
+
319
+ type ProtoDeclarationArray = MinimalArray<X3DProtoDeclaration>;
320
+ export interface X3DProtoDeclaration {
321
+ readonly name: string;
322
+ readonly fields: FieldDefinitionArray;
323
+ isExternProto: false;
324
+ newInstance(): SFNode;
325
+ toVRMLString(options?: VRMLOptions): string;
326
+ toXMLString(options?: VRMLOptions): string;
327
+ toJSONString(options?: VRMLOptions): string;
328
+ }
329
+
330
+ type ExternProtoDeclarationArray = MinimalArray<X3DExternProtoDeclaration>;
331
+ export interface X3DExternProtoDeclaration {
332
+ readonly name: string;
333
+ readonly fields: FieldDefinitionArray;
334
+ readonly urls: X3DArrayField<string>;
335
+ isExternProto: false;
336
+ readonly loadState: number; // A Load State Constant from X3DConstants
337
+ newInstance(): SFNode;
338
+ loadNow(): Promise<void>;
339
+ toVRMLString(options?: VRMLOptions): string;
340
+ toXMLString(options?: VRMLOptions): string;
341
+ toJSONString(options?: VRMLOptions): string;
342
+ }
343
+
344
+ type RouteArray = MinimalArray<X3DRoute>;
345
+ export interface X3DRoute {
346
+ sourceNode: SFNode;
347
+ sourceField: string;
348
+ destinationNode: SFNode;
349
+ destinationField: string;
350
+ }
351
+
352
+ type FieldCallback = (value: unknown) => void
353
+
354
+ declare class X3DField {
355
+ equals(other: X3DField): boolean;
356
+ assign(other: X3DField): void;
357
+ setValue(value: unknown): void;
358
+ getValue(): unknown;
359
+ getType(): number; // one of the Field Type Constants from X3DConstants
360
+ getAccessType(): number; // one of the Access Type Constants
361
+ isInitializable(): boolean;
362
+ isInput(): boolean;
363
+ isOutput(): boolean;
364
+ isReadable(): boolean;
365
+ isWritable(): boolean;
366
+ getUnit(): string;
367
+ hasReferences(): boolean;
368
+ isReference(accessType: number): boolean;
369
+ addReferencesCallback(key: unknown, callback: FieldCallback): void;
370
+ removeReferencesCallback(key: unknown): void;
371
+ getReferencesCallbacks(): Map<unknown, FieldCallback>;
372
+ addFieldInterest(other: X3DField): void;
373
+ removeFieldInterest(other: X3DField): void;
374
+ getFieldInterest(): Set<X3DField>
375
+ addFieldCallback(key: unknown, callback: FieldCallback): void;
376
+ removeFieldCallback(key: unknown): void;
377
+ getFieldCallbacks(): Map<unknown, FieldCallback>;
378
+ addInputRoute(route: X3DRoute): void;
379
+ removeInputRoute(route: X3DRoute): void;
380
+ getInputRoutes(): Set<X3DRoute>;
381
+ addOutputRoute(route: X3DRoute): void;
382
+ removeOutputRoute(route: X3DRoute): void;
383
+ getOutputRoutes(): Set<X3DRoute>;
384
+ addRouteCallback(key: unknown, callback: FieldCallback): void;
385
+ removeRouteCallback(key: unknown): void;
386
+ getRouteCallbacks(): Map<unknown, FieldCallback>;
387
+ dispose(): void;
388
+ }
389
+
390
+ export class SFColor extends X3DField {
391
+ constructor(r?: number, g?: number, b?: number);
392
+ r: number;
393
+ g: number;
394
+ b: number;
395
+ copy(): SFColor;
396
+ isDefaultValue(): boolean;
397
+ set(r: number, g: number, b: number): SFColor;
398
+ getHSV(result: number[]): number[];
399
+ setHSV(h: number, s: number, v: number): void;
400
+ lerp(destination: SFColor, t: number): SFColor;
401
+ static typeName: 'SFColor';
402
+ }
403
+
404
+ export class SFColorRGBA extends X3DField {
405
+ constructor(r?: number, g?: number, b?: number, a?: number);
406
+ r: number;
407
+ g: number;
408
+ b: number;
409
+ a: number;
410
+ copy(): SFColorRGBA;
411
+ isDefaultValue(): boolean;
412
+ set(r: number, g: number, b: number): SFColorRGBA;
413
+ getHSVA(result: number[]): number[];
414
+ setHSVA(h: number, s: number, v: number): void;
415
+ lerp(destination: SFColor, t: number): SFColorRGBA;
416
+ static typeName: 'SFColorRGBA';
417
+ }
418
+
419
+ export class SFDouble extends X3DField {
420
+ constructor(arg?: unknown);
421
+ copy(): SFDouble;
422
+ isDefaultValue(): boolean;
423
+ set(arg: unknown): void;
424
+ valueOf(): number;
425
+ }
426
+
427
+ export class SFImage extends X3DField {
428
+ constructor(width?: number, height?: number,
429
+ num_components?: number, array?: number[]);
430
+ x: number;
431
+ y: number;
432
+ width: number;
433
+ height: number;
434
+ comp: number;
435
+ array: number[];
436
+ copy(): SFImage;
437
+ isDefaultValue(): boolean;
438
+ set(other: SFImage): void;
439
+ }
440
+
441
+ export class SFInt32 extends X3DField {
442
+ constructor(val?: number);
443
+ copy(): SFInt32;
444
+ set(val?: number): void;
445
+ valueOf(): number;
446
+ }
447
+
448
+ export class SFMatrix3 extends X3DField {
449
+ constructor();
450
+ constructor(r1: SFVec3, r2: SFVec3, r3: SFVec3);
451
+ constructor(a: number, b: number, c: number,
452
+ d: number, e: number, f: number,
453
+ g: number, h: number, i: number);
454
+ copy(): SFMatrix3;
455
+ isDefaultValue(): boolean;
456
+ set(other: SFMatrix3): void;
457
+ setTransform(translation: SFVec2, rotation: number, scaleFactor: SFVec2,
458
+ scaleOrientation: number, center: SFVec2): void;
459
+ getTransform(translation: SFVec2, rotation: SFDouble, scaleFactor: SFVec2,
460
+ scaleOrientation: SFDouble, center: SFVec2): void;
461
+ determinant(): number;
462
+ inverse(): SFMatrix3;
463
+ transpose(): SFMatrix3;
464
+ multLeft(A: SFMatrix3): SFMatrix3;
465
+ multRight(B: SFMatrix3): SFMatrix3;
466
+ multVecMatrix(row: SFVec2): SFVec2;
467
+ multVecMatrix(row: SFVec3): SFVec3;
468
+ multMatrixVec(col: SFVec2): SFVec2;
469
+ multMatrixVec(col: SFVec3): SFVec3;
470
+ multDirMatrix(row: SFVec2): SFVec2;
471
+ multMatrixDir(col: SFVec2): SFVec2;
472
+ }
473
+
474
+ export class SFMatrix4 extends X3DField {
475
+ constructor();
476
+ constructor(r1: SFVec4, r2: SFVec4, r3: SFVec4, r4: SFVec4);
477
+ constructor(a: number, b: number, c: number, d: number,
478
+ e: number, f: number, g: number, h: number,
479
+ i: number, j: number, k: number, l: number,
480
+ m: number, n: number, o: number, p: number);
481
+ copy(): SFMatrix4;
482
+ isDefaultValue(): boolean;
483
+ set(other: SFMatrix4): void;
484
+ setTransform(translation: SFVec3, rotation: SFRotation,
485
+ scaleFactor: SFVec3, scaleOrientation: SFRotation,
486
+ center: SFVec3): void;
487
+ getTransform(translation: SFVec3, rotation: SFRotation,
488
+ scaleFactor: SFVec3, scaleOrientation: SFRotation,
489
+ center: SFVec3): void;
490
+ determinant(): number;
491
+ inverse(): SFMatrix4;
492
+ transpose(): SFMatrix4;
493
+ multLeft(A: SFMatrix4): SFMatrix4;
494
+ multRight(B: SFMatrix4): SFMatrix4;
495
+ multVecMatrix(row: SFVec4): SFVec4;
496
+ multVecMatrix(row: SFVec3): SFVec3;
497
+ multMatrixVec(col: SFVec4): SFVec4;
498
+ multMatrixVec(col: SFVec3): SFVec3;
499
+ multDirMatrix(row: SFVec3): SFVec3;
500
+ multMatrixDir(col: SFVec3): SFVec3;
501
+ }
502
+
503
+ export interface SFNode extends X3DField {
504
+ // constructor(vrmlSyntax: string); // throws error, anyway
505
+
506
+ // Each subclass of SFNode for the different node types
507
+ // has various properties, that will be defined for
508
+ // each one below. But as far as I can see, they all have metadata
509
+ // properties:
510
+ metadata: SFNode;
511
+
512
+ copy(instance?: unknown): SFNode; // not sure what argument does...
513
+ isDefaultValue(): boolean;
514
+ set(other: SFNode): void;
515
+ dispose(): void;
516
+ // stupid WET TypeScript won't just overload the base class method:
517
+ addFieldCallback(key: unknown, callback: FieldCallback): void;
518
+ addFieldCallback(name: string, key: unknown,
519
+ callback: (value: unknown) => void): void;
520
+ getFieldDefinitions(): FieldDefinitionArray;
521
+ getField(name: string): X3DField;
522
+ getNodeName(): string;
523
+ getNodeDisplayName(): string;
524
+ getNodeType(): number[]; // Array of Node Type constants from X3DConstants
525
+ getNodeTypeName(): string;
526
+ getNodeUserData(key: unknown): unknown;
527
+ removeFieldCallback(key: unknown): void;
528
+ removeFieldCallback(name: string, key: unknown): void;
529
+ removeNodeUserData(key: unknown): void;
530
+ setNodeUserData(key: unknown, data: unknown): unknown;
531
+ toVRMLString(options?: VRMLOptions): string;
532
+ toXMLString(options?: VRMLOptions): string;
533
+ toJSONString(options?: VRMLOptions): string;
534
+ valueOf(): unknown; // what is proper type? May depend on what kind...
535
+ }
536
+
537
+ interface SFNodeAcousticProperties extends SFNode {
538
+ description: string;
539
+ enabled: boolean;
540
+ absorption: number;
541
+ refraction: number;
542
+ diffuse: number;
543
+ specular: number;
544
+ }
545
+
546
+ interface SFNodeAnalyser extends SFNode {
547
+ description: string;
548
+ enabled: boolean;
549
+ gain: number;
550
+ fftSize: number;
551
+ minDecibels: number;
552
+ maxDecibels: number;
553
+ smoothingTimeConstant: number;
554
+ tailTime: SFTime;
555
+ }
556
+
557
+ interface Positioner extends SFNode {
558
+ visible: boolean;
559
+ bboxDisplay: boolean;
560
+ bboxSize: SFVec3;
561
+ bboxCenter: SFVec3;
562
+ }
563
+
564
+ interface GroupingFields {
565
+ addChildren: X3DArrayField<SFNode>;
566
+ removeChildren: X3DArrayField<SFNode>;
567
+ children: X3DArrayField<SFNode>;
568
+ }
569
+
570
+ interface X3DGroupingNode extends Positioner, GroupingFields { }
571
+
572
+ interface URLFields {
573
+ description: string;
574
+ load: boolean;
575
+ url: X3DArrayField<string>;
576
+ autoRefresh: SFTime;
577
+ autoRefreshTimeLimit: SFTime;
578
+ }
579
+
580
+ interface SFNodeAnchor extends X3DGroupingNode {
581
+ parameter: X3DArrayField<string>;
582
+ }
583
+
584
+ interface SFNodeAppearance extends SFNode {
585
+ acousticProperties: SFNodeAcousticProperties;
586
+ alphaMode: 'AUTO' | 'OPAQUE' | 'MASK' | 'BLEND';
587
+ alphaCutoff: number;
588
+ pointProperties: SFNodePointProperties;
589
+ lineProperties: SFNodeLineProperties;
590
+ fillProperties: SFNodeFillProperties;
591
+ material: SFNodeMaterial;
592
+ backMaterial: SFNodeMaterial;
593
+ texture: SFNode;
594
+ textureTransform: SFNodeTextureTransform;
595
+ shaders: X3DArrayField<SFNode>;
596
+ blendMode: SFNodeBlendMode;
597
+ }
598
+
599
+ interface X3DTimeDependentNode extends SFNode {
600
+ startTime: SFTime;
601
+ resumeTime: SFTime;
602
+ pauseTime: SFTime;
603
+ stopTime: SFTime;
604
+ isPaused: boolean;
605
+ isActive: boolean;
606
+ elapsedTime: SFTime;
607
+ }
608
+
609
+ interface SFNodeAudioClip extends X3DTimeDependentNode, URLFields {
610
+ enabled: boolean;
611
+ gain: number;
612
+ pitch: number;
613
+ loop: boolean;
614
+ duration_changed: SFTime;
615
+ }
616
+
617
+ interface ChannelFields extends SFNode {
618
+ description: string;
619
+ enabled: boolean;
620
+ gain: number;
621
+ channelCount: number;
622
+ channelCountMode: 'MAX' | 'CLAMPED-MAX' | 'EXPLICIT';
623
+ channelInterpretation: 'SPEAKERS' | 'DISCRETE';
624
+ }
625
+
626
+ interface X3DSoundDestinationNode extends ChannelFields {
627
+ mediaDeviceId: string;
628
+ isActive: boolean;
629
+ children: X3DArrayField<SFNode>;
630
+ }
631
+
632
+ interface SFNodeAudioDestination extends X3DSoundDestinationNode {
633
+ maxChannelCount: number;
634
+ }
635
+
636
+ interface X3DBindableNode extends SFNode {
637
+ set_bind: boolean;
638
+ isBound: boolean;
639
+ bindTime: SFTime;
640
+ }
641
+
642
+ interface X3DBackgroundNode extends X3DBindableNode {
643
+ skyAngle: X3DArrayField<number>;
644
+ skyColor: X3DArrayField<SFColor>;
645
+ groundAngle: X3DArrayField<number>;
646
+ groundColor: X3DArrayField<SFColor>;
647
+ transparency: number;
648
+ }
649
+
650
+ interface SFNodeBackground extends X3DBackgroundNode {
651
+ frontUrl: X3DArrayField<string>;
652
+ backUrl: X3DArrayField<string>;
653
+ leftUrl: X3DArrayField<string>;
654
+ rightUrl: X3DArrayField<string>;
655
+ topUrl: X3DArrayField<string>;
656
+ bottomUrl: X3DArrayField<string>;
657
+ }
658
+
659
+ interface SFNodeBillboard extends X3DGroupingNode {
660
+ axisOfRotation: SFVec3;
661
+ }
662
+
663
+ interface SFNodeBiquadFilter extends X3DTimeDependentNode, ChannelFields {
664
+ frequency: number;
665
+ detune: number;
666
+ type: 'LOWPASS' | 'HIGHPASS' | 'BANDPASS'
667
+ | 'LOWSHELF' | 'HIGHSHELF' | 'PEAKING' | 'NOTCH' | 'ALLPASS';
668
+ qualityFactor: number;
669
+ tailTime: SFTime;
670
+ children: X3DArrayField<SFNode>;
671
+ }
672
+
673
+ type BlendFactor = 'ZERO' | 'ONE'
674
+ | 'SRC_COLOR' | 'ONE_MINUS_SRC_COLOR'
675
+ | 'DST_COLOR' | 'ONE_MINUS_DST_COLOR'
676
+ | 'SRC_ALPHA' | 'ONE_MINUS_SRC_ALPHA'
677
+ | 'DST_ALPHA' | 'ONE_MINUS_DST_ALPHA'
678
+ | 'CONSTANT_COLOR' | 'ONE_MINUS_CONSTANT_COLOR'
679
+ | 'CONSTANT_ALPHA' | 'ONE_MINUS_CONSTANT_ALPHA'
680
+
681
+ type BlendEquation = 'FUNC_ADD' | 'FUNC_SUBTRACT' | 'FUNC_REVERSE_SUBTRACT'
682
+
683
+ interface SFNodeBlendMode extends SFNode {
684
+ blendColor: SFColorRGBA;
685
+ sourceColorFactor: BlendFactor;
686
+ sourceAlphaFactor: BlendFactor;
687
+ destinationColorFactor: BlendFactor;
688
+ destinationAlphaFactor: BlendFactor;
689
+ colorEquation: BlendEquation;
690
+ alphaEquation: BlendEquation;
691
+ }
692
+
693
+ interface SFNodeBox extends SFNode {
694
+ size: SFVec3;
695
+ solid: boolean;
696
+ }
697
+
698
+ interface SFNodeBufferAudioSource
699
+ extends X3DTimeDependentNode, ChannelFields, URLFields {
700
+ detune: number;
701
+ buffer: X3DArrayField<number>;
702
+ bufferDuration: SFTime;
703
+ bufferLength: number;
704
+ numberOfChannels: number;
705
+ sampleRate: number;
706
+ playbackRate: number;
707
+ loopStart: SFTime;
708
+ loopEnd: SFTime;
709
+ loop: boolean;
710
+ }
711
+
712
+ interface SFNodeChannelMerger extends ChannelFields {
713
+ children: X3DArrayField<SFNode>;
714
+ }
715
+
716
+ interface SFNodeChannelSelector extends ChannelFields {
717
+ channelSelection: number;
718
+ children: X3DArrayField<SFNode>;
719
+ }
720
+
721
+ interface SFNodeChannelSplitter extends ChannelFields {
722
+ children: X3DArrayField<SFNode>;
723
+ outputs: X3DArrayField<SFNode>;
724
+ }
725
+
726
+ interface SFNodeClipPlane extends SFNode {
727
+ enabled: boolean;
728
+ plane: SFVec4;
729
+ }
730
+
731
+ interface SFNodeCollision extends X3DGroupingNode {
732
+ enabled: boolean;
733
+ isActive: boolean;
734
+ collideTime: SFTime;
735
+ proxy: SFNode;
736
+ }
737
+
738
+ interface SFNodeColor extends SFNode {
739
+ color: X3DArrayField<SFColor>;
740
+ }
741
+
742
+ interface SFNodeColorRGBA extends SFNode {
743
+ color: X3DArrayField<SFColorRGBA>;
744
+ }
745
+
746
+ interface X3DChaserNode<T> extends SFNode {
747
+ set_value: T;
748
+ set_destination: T;
749
+ initialValue: T;
750
+ initialDestination: T;
751
+ duration: SFTime;
752
+ isActive: boolean;
753
+ value_changed: T;
754
+ }
755
+
756
+ interface X3DDamperNode<T> extends SFNode {
757
+ set_value: T;
758
+ set_destination: T;
759
+ initialValue: T;
760
+ initialDestination: T;
761
+ order: number;
762
+ tau: SFTime;
763
+ tolerance: number;
764
+ isActive: boolean;
765
+ value_changed: T;
766
+ }
767
+
768
+ interface X3DInterpolatorNode<T,V> extends SFNode {
769
+ set_fraction: number;
770
+ key: X3DArrayField<number>;
771
+ keyValue: X3DArrayField<T>;
772
+ value_changed: V;
773
+ }
774
+
775
+ interface X3DShaderNode extends SFNode {
776
+ activate: boolean;
777
+ isSelected: boolean;
778
+ isValid: boolean;
779
+ language: string;
780
+ }
781
+
782
+ interface SFNodeComposedShader extends X3DShaderNode {
783
+ parts: X3DArrayField<SFNodeShaderPart>;
784
+ }
785
+
786
+ interface SFNodeCone extends SFNode {
787
+ side: boolean;
788
+ bottom: boolean;
789
+ height: number;
790
+ bottomRadius: number;
791
+ solid: boolean;
792
+ }
793
+
794
+ interface SFNodeConvolver extends X3DTimeDependentNode, ChannelFields {
795
+ buffer: X3DArrayField<number>;
796
+ normalize: boolean;
797
+ tailTime: SFTime;
798
+ children: X3DArrayField<SFNode>;
799
+ }
800
+
801
+ interface SFNodeCoordinate extends SFNode {
802
+ point: X3DArrayField<SFVec3>;
803
+ }
804
+
805
+ interface SFNodeCylinder extends SFNode {
806
+ top: boolean;
807
+ side: boolean;
808
+ bottom: boolean;
809
+ height: number;
810
+ radius: number;
811
+ solid: boolean;
812
+ }
813
+
814
+ interface X3DPointingDeviceSensorNode extends SFNode {
815
+ description: string;
816
+ enabled: boolean;
817
+ isOver: boolean;
818
+ isActive: boolean;
819
+ }
820
+
821
+ interface X3DDragSensorNode extends X3DPointingDeviceSensorNode {
822
+ offset: number;
823
+ autoOffset: boolean;
824
+ trackPoint_changed: SFVec3;
825
+ }
826
+
827
+ interface SFNodeCylinderSensor extends X3DDragSensorNode {
828
+ axisRotation: SFRotation,
829
+ diskAngle: number;
830
+ minAngle: number;
831
+ maxAngle: number;
832
+ rotation_changed: SFRotation;
833
+ }
834
+
835
+ interface SFNodeDelay extends X3DTimeDependentNode, ChannelFields {
836
+ delayTime: SFTime;
837
+ maxDelayTime: SFTime;
838
+ tailTime: SFTime;
839
+ children: X3DArrayField<SFNode>;
840
+ }
841
+
842
+ interface X3DLightNode extends SFNode {
843
+ global: boolean;
844
+ on: boolean;
845
+ color: SFColor;
846
+ intensity: number;
847
+ ambientIntensity: number;
848
+ shadows: boolean;
849
+ shadowColor: SFColor;
850
+ shadowIntensity: number;
851
+ shadowBias: number;
852
+ shadowMapSize: number;
853
+ }
854
+
855
+ interface SFNodeDirectionalLight extends X3DLightNode {
856
+ direction: SFVec3;
857
+ }
858
+
859
+ interface SFNodeDynamicsCompressor
860
+ extends X3DTimeDependentNode, ChannelFields {
861
+ attack: number;
862
+ knee: number;
863
+ ratio: number;
864
+ reduction: number;
865
+ release: SFTime;
866
+ threshold: number;
867
+ tailTime: SFTime;
868
+ children: X3DArrayField<SFNode>;
869
+ }
870
+
871
+ interface SFNodeEaseInEaseOut extends SFNode {
872
+ set_fraction: number;
873
+ key: X3DArrayField<number>;
874
+ easeInEaseOut: X3DArrayField<SFVec2>;
875
+ modifiedFraction_changed: number;
876
+ }
877
+
878
+ interface GeometrySubnodes {
879
+ attrib: X3DArrayField<SFNodeFloatVertexAttribute>;
880
+ fogCoord: SFNodeFogCoordinate;
881
+ color: SFNodeColor | SFNodeColorRGBA;
882
+ normal: SFNodeNormal;
883
+ }
884
+
885
+ interface SFNodeElevationGrid extends SFNode, GeometrySubnodes {
886
+ set_height: X3DArrayField<number>;
887
+ xDimension: number;
888
+ zDimension: number;
889
+ xSpacing: number;
890
+ zSpacing: number;
891
+ solid: boolean;
892
+ ccw: boolean;
893
+ creaseAngle: number;
894
+ colorPerVertex: boolean;
895
+ normalPerVertex: boolean;
896
+ texCoord: SFNode;
897
+ height: X3DArrayField<number>;
898
+ }
899
+
900
+ interface SFNodeEnvironmentLight extends X3DLightNode {
901
+ rotation: SFRotation;
902
+ diffuseCoefficients: X3DArrayField<number>;
903
+ diffuse: SFNode;
904
+ diffuseTexture: SFNode;
905
+ specularTexture: SFNode;
906
+ }
907
+
908
+ interface SFNodeExtrusion extends SFNode {
909
+ set_crossSection: X3DArrayField<SFVec2>;
910
+ set_orientation: X3DArrayField<SFRotation>;
911
+ set_scale: X3DArrayField<SFVec2>;
912
+ set_spine: X3DArrayField<SFVec3>;
913
+ beginCap: boolean;
914
+ endCap: boolean;
915
+ solid: boolean;
916
+ ccw: boolean;
917
+ convex: boolean;
918
+ creaseAngle: number;
919
+ crossSection: X3DArrayField<SFVec2>;
920
+ orientation: X3DArrayField<SFRotation>;
921
+ scale: X3DArrayField<SFVec2>;
922
+ spine: X3DArrayField<SFVec3>;
923
+ }
924
+
925
+ interface SFNodeFillProperties extends SFNode {
926
+ filled: boolean;
927
+ hatched: boolean;
928
+ hatchStyle: number;
929
+ hatchColor: SFColor;
930
+ }
931
+
932
+ interface SFNodeFloatVertexAttribute extends SFNode {
933
+ name: string;
934
+ numComponents: number;
935
+ value: X3DArrayField<number>;
936
+ }
937
+
938
+ interface FogCommon extends SFNode {
939
+ fogType: 'LINEAR' | 'EXPONENTIAL';
940
+ color: SFColor;
941
+ visibilityRange: number;
942
+ }
943
+
944
+ interface SFNodeFog extends X3DBindableNode, FogCommon { }
945
+
946
+ interface SFNodeFogCoordinate extends SFNode {
947
+ depth: X3DArrayField<number>;
948
+ }
949
+
950
+ interface SFNodeFontStyle extends SFNode {
951
+ language: string;
952
+ family: X3DArrayField<string>;
953
+ style: 'PLAIN' | 'BOLD' | 'ITALIC' | 'BOLDITALIC' | '';
954
+ size: number;
955
+ spacing: number;
956
+ horizontal: boolean;
957
+ leftToRight: boolean;
958
+ topToBottom: boolean;
959
+ justify: X3DArrayField<'BEGIN' | 'END' | 'FIRST' | 'MIDDLE' | ''>;
960
+ }
961
+
962
+ interface SFNodeGain extends X3DTimeDependentNode, ChannelFields {
963
+ tailTime: SFTime;
964
+ children: X3DArrayField<SFNode>;
965
+ }
966
+
967
+ interface Texture2DFields {
968
+ repeatS: boolean;
969
+ repeatT: boolean;
970
+ textureProperties: SFNodeTextureProperties;
971
+ }
972
+
973
+ interface SFNodeImageTexture extends SFNode, URLFields, Texture2DFields { }
974
+
975
+ interface IndexedColorCoord {
976
+ set_colorIndex: X3DArrayField<number>;
977
+ set_coordIndex: X3DArrayField<number>;
978
+ colorIndex: X3DArrayField<number>;
979
+ coordIndex: X3DArrayField<number>;
980
+ color: SFNodeColor | SFNodeColorRGBA;
981
+ coord: SFNodeCoordinate;
982
+ }
983
+
984
+ interface SFNodeIndexedFaceSet extends SFNodeIndexedLineSet {
985
+ set_texCoordIndex: X3DArrayField<number>;
986
+ set_normalIndex: X3DArrayField<number>;
987
+ solid: boolean;
988
+ ccw: boolean;
989
+ convex: boolean;
990
+ creaseAngle: number;
991
+ normalPerVertex: boolean;
992
+ texCoordIndex: X3DArrayField<number>;
993
+ normalIndex: X3DArrayField<number>;
994
+ texCoord: SFNode;
995
+ }
996
+
997
+ interface SFNodeIndexedLineSet
998
+ extends SFNode, GeometrySubnodes, IndexedColorCoord {
999
+ colorPerVertex: boolean;
1000
+ }
1001
+
1002
+ interface SFNodeTriangleSet extends SFNode, GeometrySubnodes {
1003
+ solid: boolean;
1004
+ ccw: boolean;
1005
+ colorPerVertex: boolean;
1006
+ normalPerVertex: boolean;
1007
+ texCoord: SFNode;
1008
+ coord: SFNodeCoordinate;
1009
+ }
1010
+
1011
+ interface IndexedTriangles extends SFNodeTriangleSet {
1012
+ set_index: X3DArrayField<number>;
1013
+ index: X3DArrayField<number>;
1014
+ }
1015
+
1016
+ interface SFNodeInline extends Positioner, URLFields {
1017
+ global: boolean;
1018
+ }
1019
+
1020
+ interface SFNodeLOD extends X3DGroupingNode {
1021
+ forceTransitions: boolean;
1022
+ center: SFVec3;
1023
+ range: X3DArrayField<number>;
1024
+ level_changed: number;
1025
+ }
1026
+
1027
+ interface SFNodeLayer extends SFNode, GroupingFields {
1028
+ pickable: boolean;
1029
+ objectType: X3DArrayField<string>;
1030
+ visible: boolean;
1031
+ viewport: SFNodeViewport;
1032
+ }
1033
+
1034
+ interface SFNodeLayerSet extends SFNode {
1035
+ activeLayer: number;
1036
+ order: X3DArrayField<number>;
1037
+ layers: X3DArrayField<SFNodeLayer>;
1038
+ }
1039
+
1040
+ interface SFNodeLineProperties extends SFNode {
1041
+ applied: boolean;
1042
+ linetype: number;
1043
+ linewidthScaleFactor: number;
1044
+ }
1045
+
1046
+ interface SFNodeLineSet extends SFNode, GeometrySubnodes {
1047
+ vertexCount: X3DArrayField<number>;
1048
+ coord: SFNodeCoordinate;
1049
+ }
1050
+
1051
+ interface SFNodeListenerPointSource extends X3DTimeDependentNode {
1052
+ description: string;
1053
+ enabled: boolean;
1054
+ orientation: SFRotation;
1055
+ gain: number;
1056
+ dopplerEnabled: boolean;
1057
+ interauralDistance: number;
1058
+ trackCurrentView: boolean;
1059
+ }
1060
+
1061
+ interface SFNodeLoadSensor extends SFNode {
1062
+ enabled: boolean;
1063
+ timeOut: SFTime;
1064
+ isActive: boolean;
1065
+ isLoaded: boolean;
1066
+ progress: number;
1067
+ loadTime: SFTime;
1068
+ children: X3DArrayField<SFNode>;
1069
+ }
1070
+
1071
+ interface SFNodeLocalFog extends FogCommon {
1072
+ enabled: boolean;
1073
+ }
1074
+
1075
+ interface SFNodeUnlitMaterial extends SFNode {
1076
+ emissiveColor: SFColor;
1077
+ emissiveTextureMapping: string;
1078
+ emissiveTexture: SFNode;
1079
+ normalScale: number;
1080
+ normalTextureMapping: string;
1081
+ normalTexture: SFNode;
1082
+ transparency: number;
1083
+ }
1084
+
1085
+ interface MaterialCommon extends SFNodeUnlitMaterial {
1086
+ occlusionStrength: number;
1087
+ occlusionTextureMapping: string;
1088
+ occlusionTexture: SFNode;
1089
+ }
1090
+
1091
+ interface SFNodeMaterial extends MaterialCommon {
1092
+ ambientIntensity: number;
1093
+ ambientTextureMapping: string;
1094
+ ambientTexture: SFNode;
1095
+ diffuseColor: SFColor;
1096
+ diffuseTextureMapping: string;
1097
+ diffuseTexture: SFNode;
1098
+ specularColor: SFColor;
1099
+ specularTextureMapping: string;
1100
+ specularTexture: SFNode;
1101
+ shininess: number;
1102
+ shininessTextureMapping: string;
1103
+ shininessTexture: SFNode;
1104
+ }
1105
+
1106
+ interface SFNodeMatrix3VertexAttribute extends SFNode {
1107
+ name: string;
1108
+ value: X3DArrayField<SFMatrix3>;
1109
+ }
1110
+
1111
+ interface SFNodeMatrix4VertexAttribute extends SFNode {
1112
+ name: string;
1113
+ value: X3DArrayField<SFMatrix4>;
1114
+ }
1115
+
1116
+ interface X3DMetadataNode extends SFNode {
1117
+ name: string;
1118
+ reference: string;
1119
+ }
1120
+
1121
+ interface MetadataInstance<T> extends X3DMetadataNode {
1122
+ value: X3DArrayField<T>;
1123
+ }
1124
+
1125
+ interface SFNodeMicrophoneSource extends X3DTimeDependentNode {
1126
+ description: string;
1127
+ enabled: boolean;
1128
+ gain: number;
1129
+ mediaDeviceId: string;
1130
+ }
1131
+
1132
+ interface SFNodeMovieTexture extends SFNodeAudioClip, Texture2DFields {
1133
+ speed: number;
1134
+ }
1135
+
1136
+ interface SFNodeMultiTexture extends SFNode {
1137
+ description: string;
1138
+ color: SFColor;
1139
+ alpha: number;
1140
+ mode: X3DArrayField<string>;
1141
+ source: X3DArrayField<string>;
1142
+ function: X3DArrayField<string>;
1143
+ texture: X3DArrayField<SFNode>;
1144
+ }
1145
+
1146
+ interface SFNodeMultiTextureCoordinate extends SFNode {
1147
+ texCoord: X3DArrayField<SFNodeTextureCoordinate>;
1148
+ }
1149
+
1150
+ interface SFNodeMultiTextureTransform extends SFNode {
1151
+ textureTransform: X3DArrayField<SFNodeTextureTransform>;
1152
+ }
1153
+
1154
+ interface SFNodeNavigationInfo extends X3DBindableNode {
1155
+ type: X3DArrayField<
1156
+ 'EXAMINE' | 'WALK' | 'FLY' | 'PLANE' | 'PLANE_create3000.github.io'
1157
+ | 'PLANE_create3000.de' | 'LOOKAT' | 'EXPLORE' | 'ANY' | 'NONE'>;
1158
+ avatarSize: X3DArrayField<number>;
1159
+ speed: number;
1160
+ headlight: boolean;
1161
+ visibilityLimit: number;
1162
+ transitionType: X3DArrayField<'TELEPORT' | 'LINEAR' | 'ANIMATE'>;
1163
+ transitionTime: SFTime;
1164
+ transitionComplete: boolean;
1165
+ }
1166
+
1167
+ interface SFNodeNormal extends SFNode {
1168
+ vector: X3DArrayField<SFVec3>;
1169
+ }
1170
+
1171
+ interface X3DViewpointNode extends X3DBindableNode {
1172
+ description: string;
1173
+ position: SFVec3;
1174
+ orientation: SFRotation;
1175
+ centerOfRotation: SFVec3;
1176
+ fieldOfView: number;
1177
+ nearDistance: number;
1178
+ farDistance: number;
1179
+ viewAll: boolean;
1180
+ jump: boolean;
1181
+ retainUserOffsets: boolean;
1182
+ navigationInfo: SFNodeNavigationInfo;
1183
+ }
1184
+
1185
+ interface SFNodeOscillatorSource extends X3DTimeDependentNode {
1186
+ description: string;
1187
+ enabled: boolean;
1188
+ gain: number;
1189
+ frequency: number;
1190
+ detune: number;
1191
+ periodicWave: SFNodePeriodicWave;
1192
+ }
1193
+
1194
+ interface SFNodePackagedShader extends X3DShaderNode, URLFields { }
1195
+
1196
+ interface SFNodePeriodicWave extends SFNode {
1197
+ description: string;
1198
+ enabled: boolean;
1199
+ type: 'SINE' | 'SQUARE' | 'SAWTOOTH' | 'TRIANGLE' | 'CUSTOM'
1200
+ optionsReal: X3DArrayField<number>;
1201
+ optionsImag: X3DArrayField<number>;
1202
+ }
1203
+
1204
+ interface SFNodePhysicalMaterial extends MaterialCommon {
1205
+ baseColor: SFColor;
1206
+ baseTextureMapping: String;
1207
+ baseTexture: SFNode;
1208
+ metallic: number;
1209
+ roughness: number;
1210
+ metallicRoughnessTextureMapping: string;
1211
+ metallicRoughnessTexture: SFNode;
1212
+ }
1213
+
1214
+ interface SFNodePixelTexture extends SFNode, Texture2DFields {
1215
+ description: string;
1216
+ image: SFImage;
1217
+ }
1218
+
1219
+ interface SFNodePlaneSensor extends X3DDragSensorNode {
1220
+ axisRotation: SFRotation;
1221
+ minPosition: SFVec2;
1222
+ maxPosition: SFVec2;
1223
+ translation_changed: SFVec3;
1224
+ }
1225
+
1226
+ interface SFNodePointLight extends X3DLightNode {
1227
+ attenuation: SFVec3;
1228
+ location: SFVec3;
1229
+ radius: number;
1230
+ }
1231
+
1232
+ interface SFNodePointProperties extends SFNode {
1233
+ pointSizeScaleFactor: number;
1234
+ pointSizeMinValue: number;
1235
+ pointSizeMaxValue: number;
1236
+ attenuation: SFVec3;
1237
+ }
1238
+
1239
+ interface SFNodePointSet extends SFNode, GeometrySubnodes {
1240
+ coord: SFNodeCoordinate;
1241
+ }
1242
+
1243
+ interface SFNodeProgramShader extends X3DShaderNode {
1244
+ programs: X3DArrayField<SFNodeShaderProgram>
1245
+ }
1246
+
1247
+ interface X3DEnvironmentalSensorNode extends SFNode {
1248
+ enabled: boolean;
1249
+ size: SFVec3;
1250
+ center: SFVec3;
1251
+ enterTime: SFTime;
1252
+ exitTime: SFTime;
1253
+ isActive: boolean;
1254
+ }
1255
+
1256
+ interface SFNodeProximitySensor extends X3DEnvironmentalSensorNode {
1257
+ position_changed: SFVec3;
1258
+ orientation_changed: SFRotation;
1259
+ centerOfRotation_changed: SFVec3;
1260
+ }
1261
+
1262
+ interface SFNodeScript extends SFNode, URLFields {
1263
+ directOutput: boolean;
1264
+ mustEvaluate: boolean;
1265
+ }
1266
+
1267
+ interface SFNodeShaderPart extends SFNode, URLFields {
1268
+ type: 'VERTEX' | 'FRAGMENT';
1269
+ }
1270
+
1271
+ type SFNodeShaderProgram = SFNodeShaderPart; // Why are there two node types?
1272
+
1273
+ interface SFNodeShape extends Positioner {
1274
+ castShadow: boolean;
1275
+ appearance: SFNodeAppearance;
1276
+ geometry: SFNode;
1277
+ }
1278
+
1279
+ interface SoundCommon extends SFNode {
1280
+ description: string;
1281
+ enabled: boolean;
1282
+ spatialize: boolean;
1283
+ location: SFVec3;
1284
+ direction: SFVec3;
1285
+ intensity: number;
1286
+ priority: number;
1287
+ children: X3DArrayField<SFNode>;
1288
+ }
1289
+
1290
+ interface SFNodeSound extends SFNode {
1291
+ minBack: number;
1292
+ minFront: number;
1293
+ maxBack: number;
1294
+ maxFront: number;
1295
+ source: SFNode;
1296
+ }
1297
+
1298
+ interface SFNodeSpatialSound extends SFNode {
1299
+ coneInnerAngle: number;
1300
+ coneOuterAngle: number;
1301
+ coneOuterGain: number;
1302
+ distanceModel: 'LINEAR' | 'INVERSE' | 'EXPONENTIAL';
1303
+ dopplerEnabled: boolean;
1304
+ enableHRTF: boolean;
1305
+ gain: number;
1306
+ maxDistance: number;
1307
+ referenceDistance: number;
1308
+ rolloffFactor: number;
1309
+ }
1310
+
1311
+ interface SFNodeSphere extends SFNode {
1312
+ radius: number;
1313
+ solid: boolean;
1314
+ }
1315
+
1316
+ interface SFNodeSphereSensor extends X3DPointingDeviceSensorNode {
1317
+ rotation_changed: SFRotation;
1318
+ }
1319
+
1320
+ interface SplineInterpolator<U> extends X3DInterpolatorNode<U,U> {
1321
+ closed: boolean;
1322
+ keyVelocity: X3DArrayField<U>;
1323
+ normalizeVelocity: boolean;
1324
+ }
1325
+
1326
+ interface SFNodeSpotLight extends SFNodePointLight {
1327
+ direction: SFVec3;
1328
+ beamWidth: number;
1329
+ cutOffAngle: number;
1330
+ }
1331
+
1332
+ interface SFNodeSquadOrientationInterpolator
1333
+ extends X3DInterpolatorNode<SFRotation, SFRotation> {
1334
+ closed: boolean;
1335
+ }
1336
+
1337
+ interface SFNodeStaticGroup extends Positioner {
1338
+ children: X3DArrayField<SFNode>;
1339
+ }
1340
+
1341
+ interface SFNodeStreamAudioDestination extends X3DSoundDestinationNode {
1342
+ streamIdentifier: X3DArrayField<string>;
1343
+ }
1344
+
1345
+ interface SFNodeStreamAudioSource extends X3DTimeDependentNode {
1346
+ description: string;
1347
+ enabled: boolean;
1348
+ gain: number;
1349
+ streamIdentifier: X3DArrayField<string>;
1350
+ }
1351
+
1352
+ interface SFNodeSwitch extends X3DGroupingNode {
1353
+ whichChoice: number;
1354
+ }
1355
+
1356
+ interface SFNodeText extends SFNode {
1357
+ string: X3DArrayField<string>;
1358
+ length: X3DArrayField<number>;
1359
+ maxExtent: number;
1360
+ solid: boolean;
1361
+ origin: SFVec3;
1362
+ textBounds: SFVec2;
1363
+ lineBounds: X3DArrayField<SFVec2>;
1364
+ fontStyle: SFNodeFontStyle;
1365
+ }
1366
+
1367
+ interface SFNodeTextureBackground extends X3DBackgroundNode {
1368
+ frontTexture: SFNode;
1369
+ backTexture: SFNode;
1370
+ leftTexture: SFNode;
1371
+ rightTexture: SFNode;
1372
+ topTexture: SFNode;
1373
+ bottomTexture: SFNode;
1374
+ }
1375
+
1376
+ interface SFNodeTextureCoordinate extends SFNode {
1377
+ mapping: string;
1378
+ point: X3DArrayField<SFVec2>;
1379
+ }
1380
+
1381
+ interface SFNodeTextureCoordinateGenerator extends SFNode {
1382
+ mapping: string;
1383
+ mode: 'SPHERE' | 'SPHERE-LOCAL' | 'SPHERE-REFLECT' | 'SPHERE-REFLECT-LOCAL'
1384
+ | 'COORD' | 'COORD-EYE' | 'NOISE' | 'NOISE-EYE' | 'CAMERASPACENORMAL'
1385
+ | 'CAMERASPACEPOSITION' | 'CAMERASPACEREFLECTIONVECTOR' ;
1386
+ parameter: X3DArrayField<number>;
1387
+ }
1388
+
1389
+ interface SFNodeTextureProperties extends SFNode {
1390
+ borderColor: SFColorRGBA;
1391
+ borderWidth: number;
1392
+ anisotropicDegree: number;
1393
+ generateMipMaps: boolean;
1394
+ minificationFilter: string;
1395
+ magnificationFilter: string;
1396
+ boundaryModeS: string;
1397
+ boundaryModeT: string;
1398
+ boundaryModeR: string;
1399
+ textureCompression: string;
1400
+ texturePriority: number;
1401
+ }
1402
+
1403
+ interface SFNodeTextureTransform extends SFNode {
1404
+ mapping: string;
1405
+ translation: SFVec2;
1406
+ rotation: number;
1407
+ scale: SFVec2;
1408
+ center: SFVec2;
1409
+ }
1410
+
1411
+ interface SFNodeTimeSensor extends X3DTimeDependentNode {
1412
+ description: string;
1413
+ enabled: boolean;
1414
+ cycleInterval: SFTime;
1415
+ loop: boolean;
1416
+ cycleTime: SFTime;
1417
+ fraction_changed: number;
1418
+ time: SFTime;
1419
+ }
1420
+
1421
+ interface SFNodeTouchSensor extends X3DPointingDeviceSensorNode {
1422
+ hitTexCoord_changed: SFVec2;
1423
+ hitNormal_changed: SFVec3;
1424
+ hitPoint_changed: SFVec3;
1425
+ touchTime: SFTime;
1426
+ }
1427
+
1428
+ interface SFNodeTransform extends X3DGroupingNode {
1429
+ translation: SFVec3;
1430
+ rotation: SFRotation;
1431
+ scale: SFVec3;
1432
+ scaleOrientation: SFRotation;
1433
+ center: SFVec3;
1434
+ }
1435
+
1436
+ interface SFNodeTransformSensor extends X3DEnvironmentalSensorNode {
1437
+ position_changed: SFVec3;
1438
+ orientation_changed: SFRotation;
1439
+ targetObject: SFNode;
1440
+ }
1441
+
1442
+ interface SFNodeTriangleFanSet extends SFNodeTriangleSet {
1443
+ fanCount: X3DArrayField<number>;
1444
+ }
1445
+
1446
+ interface SFNodeTriangleStripSet extends SFNodeTriangleSet {
1447
+ stripCount: X3DArrayField<number>;
1448
+ }
1449
+
1450
+ interface SFNodeTwoSidedMaterial extends SFNode {
1451
+ ambientIntensity: number;
1452
+ backAmbientIntensity: number;
1453
+ backDiffuseColor: SFColor;
1454
+ backEmissiveColor: SFColor;
1455
+ backShininess: number;
1456
+ backSpecularColor: SFColor;
1457
+ backTransparency: number;
1458
+ diffuseColor: SFColor;
1459
+ emissiveColor: SFColor;
1460
+ shininess: number;
1461
+ separateBackColor: boolean;
1462
+ specularColor: SFColor;
1463
+ transparency: number;
1464
+ }
1465
+
1466
+ interface SFNodeViewpointGroup extends SFNode {
1467
+ description: string;
1468
+ displayed: boolean;
1469
+ retainUserOffsets: boolean;
1470
+ size: SFVec3;
1471
+ center: SFVec3;
1472
+ children: X3DArrayField<SFNode>;
1473
+ }
1474
+
1475
+ interface SFNodeViewport extends X3DGroupingNode {
1476
+ clipBoundary: X3DArrayField<number>;
1477
+ }
1478
+
1479
+ interface SFNodeWaveShaper extends X3DTimeDependentNode, ChannelFields {
1480
+ curve: X3DArrayField<number>;
1481
+ oversample: 'NONE' | '2x' | '4x';
1482
+ tailTime: SFTime;
1483
+ children: X3DArrayField<SFNode>;
1484
+ }
1485
+
1486
+ interface SFNodeWorldInfo extends SFNode {
1487
+ title: string;
1488
+ info: X3DArrayField<string>;
1489
+ }
1490
+
1491
+ export type SpecializeNodeType = {
1492
+ AcousticProperties: SFNodeAcousticProperties,
1493
+ Analyser: SFNodeAnalyser,
1494
+ Anchor: SFNodeAnchor,
1495
+ Appearance: SFNodeAppearance,
1496
+ AudioClip: SFNodeAudioClip,
1497
+ AudioDestination: SFNodeAudioDestination,
1498
+ Background: SFNodeBackground,
1499
+ Billboard: SFNodeBillboard,
1500
+ BiquadFilter: SFNodeBiquadFilter,
1501
+ BlendMode: SFNodeBlendMode,
1502
+ Box: SFNodeBox,
1503
+ BufferAudioSource: SFNodeBufferAudioSource,
1504
+ ChannelMerger: SFNodeChannelMerger,
1505
+ ChannelSelector: SFNodeChannelSelector,
1506
+ ChannelSplitter: SFNodeChannelSplitter,
1507
+ ClipPlane: SFNodeClipPlane,
1508
+ Collision: SFNodeCollision,
1509
+ Color: SFNodeColor,
1510
+ ColorRGBA: SFNodeColorRGBA,
1511
+ ColorChaser: X3DChaserNode<SFColor>,
1512
+ ColorDamper: X3DDamperNode<SFColor>,
1513
+ ColorInterpolator: X3DInterpolatorNode<SFColor, SFColor>,
1514
+ ComposedShader: SFNodeComposedShader,
1515
+ Cone: SFNodeCone,
1516
+ Convolver: SFNodeConvolver,
1517
+ Coordinate: SFNodeCoordinate,
1518
+ CoordinateChaser: X3DChaserNode<X3DArrayField<SFVec3>>,
1519
+ CoordinateDamper: X3DDamperNode<X3DArrayField<SFVec3>>,
1520
+ CoordinateInterpolator: X3DInterpolatorNode<SFVec3, X3DArrayField<SFVec3>>,
1521
+ CoordinateInterpolator2D:
1522
+ X3DInterpolatorNode<SFVec2, X3DArrayField<SFVec2>>,
1523
+ Cylinder: SFNodeCylinder,
1524
+ CylinderSensor: SFNodeCylinderSensor,
1525
+ Delay: SFNodeDelay,
1526
+ DirectionalLight: SFNodeDirectionalLight,
1527
+ DynamicsCompressor: SFNodeDynamicsCompressor,
1528
+ EaseInEaseOut: SFNodeEaseInEaseOut,
1529
+ ElevationGrid: SFNodeElevationGrid,
1530
+ EnvironmentLight: SFNodeEnvironmentLight,
1531
+ Extrusion: SFNodeExtrusion,
1532
+ FillProperties: SFNodeFillProperties,
1533
+ FloatVertexAttribute: SFNodeFloatVertexAttribute,
1534
+ Fog: SFNodeFog,
1535
+ FogCoordinate: SFNodeFogCoordinate,
1536
+ FontStyle: SFNodeFontStyle,
1537
+ Gain: SFNodeGain,
1538
+ Group: X3DGroupingNode,
1539
+ ImageTexture: SFNodeImageTexture,
1540
+ IndexedFaceSet: SFNodeIndexedFaceSet,
1541
+ IndexedLineSet: SFNodeIndexedLineSet,
1542
+ IndexedTriangleFanSet: IndexedTriangles,
1543
+ IndexedTriangleSet: IndexedTriangles,
1544
+ IndexedTriangleStripSet: IndexedTriangles,
1545
+ Inline: SFNodeInline,
1546
+ LOD: SFNodeLOD,
1547
+ Layer: SFNodeLayer,
1548
+ LayerSet: SFNodeLayerSet,
1549
+ LineProperties: SFNodeLineProperties,
1550
+ LineSet: SFNodeLineSet,
1551
+ ListenerPointSource: SFNodeListenerPointSource,
1552
+ LoadSensor: SFNodeLoadSensor,
1553
+ LocalFog: SFNodeLocalFog,
1554
+ Material: SFNodeMaterial,
1555
+ Matrix3VertexAttribute: SFNodeMatrix3VertexAttribute,
1556
+ Matrix4VertexAttribute: SFNodeMatrix4VertexAttribute,
1557
+ MetadataBoolean: MetadataInstance<boolean>,
1558
+ MetadataDouble: MetadataInstance<number>,
1559
+ MetadataFloat: MetadataInstance<number>,
1560
+ MetadataInteger: MetadataInstance<number>,
1561
+ MetadataSet: MetadataInstance<X3DMetadataNode>,
1562
+ MetadataString: MetadataInstance<string>,
1563
+ MicrophoneSource: SFNodeMicrophoneSource,
1564
+ MovieTexture: SFNodeMovieTexture,
1565
+ MultiTexture: SFNodeMultiTexture,
1566
+ MultiTextureCoordinate: SFNodeMultiTextureCoordinate,
1567
+ MultiTextureTransform: SFNodeMultiTextureTransform,
1568
+ NavigationInfo: SFNodeNavigationInfo,
1569
+ Normal: SFNodeNormal,
1570
+ NormalInterpolator: X3DInterpolatorNode<SFVec3, X3DArrayField<SFVec3>>,
1571
+ OrientationChaser: X3DChaserNode<SFRotation>,
1572
+ OrientationDamper: X3DDamperNode<SFRotation>,
1573
+ OrientationInterpolator: X3DInterpolatorNode<SFRotation, SFRotation>,
1574
+ OrthoViewpoint: X3DViewpointNode,
1575
+ OscillatorSource: SFNodeOscillatorSource,
1576
+ PackagedShader: SFNodePackagedShader,
1577
+ PeriodicWave: SFNodePeriodicWave,
1578
+ PhysicalMaterial: SFNodePhysicalMaterial,
1579
+ PixelTexture: SFNodePixelTexture,
1580
+ PlaneSensor: SFNodePlaneSensor,
1581
+ PointLight: SFNodePointLight,
1582
+ PointProperties: SFNodePointProperties,
1583
+ PointSet: SFNodePointSet,
1584
+ PositionChaser: X3DChaserNode<SFVec3>,
1585
+ PositionChaser2D: X3DChaserNode<SFVec2>,
1586
+ PositionDamper: X3DDamperNode<SFVec3>,
1587
+ PositionDamper2D: X3DDamperNode<SFVec2>,
1588
+ PositionInterpolator: X3DInterpolatorNode<SFVec3, SFVec3>,
1589
+ PositionInterpolator2D: X3DInterpolatorNode<SFVec2, SFVec2>,
1590
+ ProgramShader: SFNodeProgramShader,
1591
+ ProximitySensor: SFNodeProximitySensor,
1592
+ ScalarChaser: X3DChaserNode<number>,
1593
+ ScalarDamper: X3DDamperNode<number>,
1594
+ ScalarInterpolator: X3DInterpolatorNode<number, number>,
1595
+ Script: SFNodeScript,
1596
+ ShaderPart: SFNodeShaderPart,
1597
+ ShaderProgram: SFNodeShaderProgram,
1598
+ Shape: SFNodeShape,
1599
+ Sound: SFNodeSound,
1600
+ SpatialSound: SFNodeSpatialSound,
1601
+ Sphere: SFNodeSphere,
1602
+ SphereSensor: SFNodeSphereSensor,
1603
+ SplinePositionInterpolator: SplineInterpolator<SFVec3>,
1604
+ SplinePositionInterpolator2D: SplineInterpolator<SFVec2>,
1605
+ SplineScalarInterpolator: SplineInterpolator<number>,
1606
+ SpotLight: SFNodePointLight,
1607
+ SquadOrientationInterpolator: SFNodeSquadOrientationInterpolator,
1608
+ StaticGroup: SFNodeStaticGroup,
1609
+ StreamAudioDestination: SFNodeStreamAudioDestination,
1610
+ StreamAudioSource: SFNodeStreamAudioSource,
1611
+ Switch: SFNodeSwitch,
1612
+ TexCoordChaser2D: X3DChaserNode<X3DArrayField<SFVec2>>,
1613
+ TexCoordDamper2D: X3DDamperNode<X3DArrayField<SFVec2>>,
1614
+ Text: SFNodeText,
1615
+ TextureBackground: SFNodeTextureBackground,
1616
+ TextureCoordinate: SFNodeTextureCoordinate,
1617
+ TextureCoordinateGenerator: SFNodeTextureCoordinateGenerator,
1618
+ TextureProperties: SFNodeTextureProperties,
1619
+ TextureTransform: SFNodeTextureTransform,
1620
+ TimeSensor: SFNodeTimeSensor,
1621
+ TouchSensor: SFNodeTouchSensor,
1622
+ Transform: SFNodeTransform,
1623
+ TransformSensor: SFNodeTransformSensor,
1624
+ TriangleFanSet: SFNodeTriangleFanSet,
1625
+ TriangleSet: SFNodeTriangleSet,
1626
+ TriangleStripSet: SFNodeTriangleStripSet,
1627
+ TwoSidedMaterial: SFNodeTwoSidedMaterial,
1628
+ UnlitMaterial: SFNodeUnlitMaterial,
1629
+ Viewpoint: X3DViewpointNode,
1630
+ ViewpointGroup: SFNodeViewpointGroup,
1631
+ Viewport: SFNodeViewport,
1632
+ VisibilitySensor: X3DEnvironmentalSensorNode,
1633
+ WaveShaper: SFNodeWaveShaper,
1634
+ WorldInfo: SFNodeWorldInfo,
1635
+ [name: string]: SFNode // catchall
1636
+ }
1637
+
1638
+ type FieldDefinitionArray = Map<unknown, X3DFieldDefinition>;
1639
+ export type X3DFieldDefinition = {
1640
+ accessType: number, // that's a guess
1641
+ dataType: string,
1642
+ name: string,
1643
+ value: unknown // I don't think we can do better without parsing the
1644
+ // possible values for dataType...
1645
+ }
1646
+ type VRMLOptions = {
1647
+ style?: string,
1648
+ indent?: string,
1649
+ precision?: number,
1650
+ doublePrecision?: number,
1651
+ html?: boolean,
1652
+ closingTags?: boolean
1653
+ }
1654
+
1655
+ export class SFRotation extends X3DField {
1656
+ constructor();
1657
+ constructor(x: number, y: number, z: number, angle: number);
1658
+ constructor(axis: SFVec3, angle: number);
1659
+ constructor(from: SFVec3, to: SFVec3);
1660
+ constructor(matrix: SFMatrix3);
1661
+ x: number;
1662
+ y: number;
1663
+ z: number;
1664
+ angle: number;
1665
+
1666
+ copy(): SFRotation;
1667
+ isDefaultValue(): boolean;
1668
+ set(other: SFRotation): void;
1669
+
1670
+ getAxis(): SFVec3;
1671
+ getMatrix(): SFMatrix3;
1672
+ inverse(): SFRotation;
1673
+ multiply(other: SFRotation): SFRotation;
1674
+ multVec(subject: SFVec3): SFVec3;
1675
+ setAxis(axis: SFVec3): void;
1676
+ setMatrix(matrix: SFMatrix3): void;
1677
+ slerp(destination: SFRotation, t: number): SFRotation;
1678
+ }
1679
+
1680
+ export class SFString extends X3DField {
1681
+ constructor(arg?: unknown);
1682
+ copy(): SFString;
1683
+ isDefaultValue(): boolean;
1684
+ set(arg: unknown): void;
1685
+ valueOf(): string;
1686
+ length: number;
1687
+ }
1688
+
1689
+ export class SFTime extends X3DField {
1690
+ constructor(arg?: unknown);
1691
+ copy(): SFTime;
1692
+ isDefaultValue(): boolean;
1693
+ set(arg: unknown): void;
1694
+ valueOf(): number; // I think that's the right type...
1695
+ }
1696
+
1697
+ export class SFVec2 extends X3DField {
1698
+ constructor(x?: number, y?: number);
1699
+ x: number;
1700
+ y: number;
1701
+
1702
+ copy(): SFVec2;
1703
+ isDefaultValue(): boolean;
1704
+ set(other: SFVec2): void;
1705
+
1706
+ abs(): SFVec2;
1707
+ add(other: SFVec2): SFVec2;
1708
+ distance(other: SFVec2): number;
1709
+ divide(denominator: number): SFVec2;
1710
+ divVec(other: SFVec2): SFVec2;
1711
+ dot(other: SFVec2): number;
1712
+ inverse(): SFVec2;
1713
+ length(): number;
1714
+ lerp(destination: SFVec2, t: number): SFVec2;
1715
+ min(other: SFVec2): SFVec2;
1716
+ max(other: SFVec2): SFVec2;
1717
+ multiply(factor: number): SFVec2;
1718
+ multVec(other: SFVec2): SFVec2;
1719
+ negate(): SFVec2;
1720
+ normalize(): SFVec2;
1721
+ subtract(other: SFVec2): SFVec2;
1722
+ }
1723
+
1724
+ export class SFVec3 extends X3DField {
1725
+ constructor(x?: number, y?: number, z?: number);
1726
+ x: number;
1727
+ y: number;
1728
+ z: number;
1729
+
1730
+ copy(): SFVec3;
1731
+ isDefaultValue(): boolean;
1732
+ set(other: SFVec3): void;
1733
+
1734
+ abs(): SFVec3;
1735
+ add(other: SFVec3): SFVec3;
1736
+ cross(other: SFVec3): SFVec3;
1737
+ distance(other: SFVec3): number;
1738
+ divide(denominator: number): SFVec3;
1739
+ divVec(other: SFVec3): SFVec3;
1740
+ dot(other: SFVec3): number;
1741
+ inverse(): SFVec3;
1742
+ length(): number;
1743
+ lerp(destination: SFVec3, t: number): SFVec3;
1744
+ min(other: SFVec3): SFVec3;
1745
+ max(other: SFVec3): SFVec3;
1746
+ multiply(factor: number): SFVec3;
1747
+ multVec(other: SFVec3): SFVec3;
1748
+ negate(): SFVec3;
1749
+ normalize(): SFVec3;
1750
+ subtract(other: SFVec3): SFVec3;
1751
+ }
1752
+
1753
+ export class SFVec4 extends X3DField {
1754
+ constructor(x?: number, y?: number, z?: number, w?: number);
1755
+ x: number;
1756
+ y: number;
1757
+ z: number;
1758
+ w: number;
1759
+
1760
+ copy(): SFVec4;
1761
+ isDefaultValue(): boolean;
1762
+ set(other: SFVec4): void;
1763
+
1764
+ abs(): SFVec4;
1765
+ add(other: SFVec4): SFVec4;
1766
+ distance(other: SFVec4): number;
1767
+ divide(denominator: number): SFVec4;
1768
+ divVec(other: SFVec4): SFVec4;
1769
+ dot(other: SFVec4): number;
1770
+ inverse(): SFVec4;
1771
+ length(): number;
1772
+ lerp(destination: SFVec4, t: number): SFVec4;
1773
+ min(other: SFVec4): SFVec4;
1774
+ max(other: SFVec4): SFVec4;
1775
+ multiply(factor: number): SFVec4;
1776
+ multVec(other: SFVec4): SFVec4;
1777
+ negate(): SFVec4;
1778
+ normalize(): SFVec4;
1779
+ subtract(other: SFVec4): SFVec4;
1780
+ }
1781
+
1782
+ type ArrayTest<T> = (elt: T, ix: boolean, arr: X3DArrayField<T>) => boolean
1783
+ type ArrayAction<T> = (elt: T, ix: boolean, arr: X3DArrayField<T>) => void
1784
+ type ArrayReducer<T,U> =
1785
+ (acc: U, elt: T, ix: number, arr: X3DArrayField<T>) => U
1786
+ export class X3DArrayField<T> extends X3DField {
1787
+ constructor(...elts: T[]);
1788
+ [index: number]: T;
1789
+ length: number;
1790
+ at(index: number): T;
1791
+ entries(): IterableIterator<[number, T]>;
1792
+ every(predicate: ArrayTest<T>): boolean;
1793
+ fill(val: T, start?: number, end?: number): X3DArrayField<T>;
1794
+ filter(predicate: ArrayTest<T>): X3DArrayField<T>;
1795
+ find(test: ArrayTest<T>): T | undefined;
1796
+ findIndex(test: ArrayTest<T>): number;
1797
+ findLast(test: ArrayTest<T>): T | undefined;
1798
+ findLastIndex(test: ArrayTest<T>): number;
1799
+ forEach(action: ArrayAction<T>): void;
1800
+ includes(needle: T): boolean;
1801
+ indexOf(needle: T): number;
1802
+ join(separator?: string): string;
1803
+ keys(): number[];
1804
+ lastIndexOf(needle: T): number;
1805
+ map<U>(f: (elt: T, ix: number, arr: X3DArrayField<T>) => U): U[];
1806
+ pop(): T;
1807
+ push(...elts: T[]): number;
1808
+ reduce<U>(f: ArrayReducer<T,U>, initial?: U): U;
1809
+ reduceRight<U>(f: ArrayReducer<T,U>, initial?: U): U;
1810
+ reverse(): X3DArrayField<T>;
1811
+ shift(): T;
1812
+ slice(start?: number, end?: number): X3DArrayField<T>;
1813
+ some(predicate: ArrayTest<T>): boolean;
1814
+ sort(comparator?: (a: T, b: T) => number): X3DArrayField<T>;
1815
+ splice(start: number, deleteCount: number,
1816
+ ...rest: T[]) : X3DArrayField<T>;
1817
+ toReversed(): X3DArrayField<T>;
1818
+ toSorted(comparator?: (a: T, b: T) => number): X3DArrayField<T>;
1819
+ toSpliced(start: number, deleteCount: number,
1820
+ ...rest: T[]) : X3DArrayField<T>;
1821
+ unshift(...elts: T[]): number;
1822
+ values(): IterableIterator<T>;
1823
+ with(index: number, value: T): X3DArrayField<T>;
1824
+ }
1825
+
1826
+ // would be better to make these enums...
1827
+ export interface X3DConstants {
1828
+ // Browser Event Constants
1829
+ CONNECTION_ERROR: 0;
1830
+ BROWSER_EVENT: 1;
1831
+ INITIALIZED_EVENT: 2;
1832
+ SHUTDOWN_EVENT: 3;
1833
+ INITIALIZED_ERROR: 4;
1834
+ // Load State Constants
1835
+ NOT_STARTED_STATE: 0;
1836
+ IN_PROGRESS_STATE: 1;
1837
+ COMPLETE_STATE: 2;
1838
+ FAILED_STATE: 3;
1839
+ // Access Type Constants
1840
+ initializeOnly: 1;
1841
+ inputOnly: 2;
1842
+ outputOnly: 4;
1843
+ inputOutput: 7;
1844
+ // Field Type Constants
1845
+ SFBool: 0;
1846
+ SFColor: 1;
1847
+ SFColorRGBA: 2;
1848
+ SFDouble: 3;
1849
+ SFFloat: 4;
1850
+ SFImage: 5;
1851
+ SFInt32: 6;
1852
+ SFMatrix3d: 7;
1853
+ SFMatrix3f: 8;
1854
+ SFMatrix4d: 9;
1855
+ SFMatrix4f: 10;
1856
+ SFNode: 11;
1857
+ SFRotation: 12;
1858
+ SFString: 13;
1859
+ SFTime: 14;
1860
+ SFVec2d: 15;
1861
+ SFVec2f: 16;
1862
+ SFVec3d: 17;
1863
+ SFVec3f: 18;
1864
+ SFVec4d: 19;
1865
+ SFVec4f: 20;
1866
+ MFBool: 22;
1867
+ MFColor: 23;
1868
+ MFColorRGBA: 24;
1869
+ MFDouble: 25;
1870
+ MFFloat: 26;
1871
+ MFImage: 27;
1872
+ MFInt32: 28;
1873
+ MFMatrix3d: 29;
1874
+ MFMatrix3f: 30;
1875
+ MFMatrix4d: 31;
1876
+ MFMatrix4f: 32;
1877
+ MFNode: 33;
1878
+ MFRotation: 34;
1879
+ MFString: 35;
1880
+ MFTime: 36;
1881
+ MFVec2d: 37;
1882
+ MFVec2f: 38;
1883
+ MFVec3d: 39;
1884
+ MFVec3f: 40;
1885
+ MFVec4d: 41;
1886
+ MFVec4f: 42;
1887
+ // Concrete Node Types
1888
+ AcousticProperties: 140;
1889
+ Analyser: 155;
1890
+ Anchor: 96;
1891
+ Appearance: 141;
1892
+ AudioClip: 156;
1893
+ AudioDestination: 157;
1894
+ Background: 21;
1895
+ Billboard: 88;
1896
+ BiquadFilter: 158;
1897
+ Box: 49;
1898
+ BufferAudioSource: 159;
1899
+ ChannelMerger: 160;
1900
+ ChannelSelector: 161;
1901
+ ChannelSplitter: 162;
1902
+ ClipPlane: 108;
1903
+ Collision: 89;
1904
+ Color: 109;
1905
+ ColorChaser: 32;
1906
+ ColorDamper: 33;
1907
+ ColorInterpolator: 64;
1908
+ ColorRGBA: 110;
1909
+ ComposedShader: 129;
1910
+ Cone: 50;
1911
+ Convolver: 163;
1912
+ Coordinate: 111;
1913
+ CoordinateChaser: 34;
1914
+ CoordinateDamper: 35;
1915
+ CoordinateInterpolator: 65;
1916
+ CoordinateInterpolator2D: 66;
1917
+ Cylinder: 51;
1918
+ CylinderSensor: 101;
1919
+ Delay: 164;
1920
+ DirectionalLight: 83;
1921
+ DynamicsCompressor: 165;
1922
+ EaseInEaseOut: 67;
1923
+ ElevationGrid: 52;
1924
+ EnvironmentLight: 84;
1925
+ Extrusion: 53;
1926
+ FillProperties: 142;
1927
+ FloatVertexAttribute: 130;
1928
+ Fog: 22;
1929
+ FogCoordinate: 23;
1930
+ FontStyle: 203;
1931
+ Gain: 166;
1932
+ Group: 56;
1933
+ ImageTexture: 181;
1934
+ IndexedFaceSet: 54;
1935
+ IndexedLineSet: 112;
1936
+ IndexedTriangleFanSet: 113;
1937
+ IndexedTriangleSet: 114;
1938
+ IndexedTriangleStripSet: 115;
1939
+ Inline: 97;
1940
+ LOD: 90;
1941
+ Layer: 78;
1942
+ LayerSet: 79;
1943
+ LineProperties: 143;
1944
+ LineSet: 116;
1945
+ ListenerPointSource: 167;
1946
+ LoadSensor: 98;
1947
+ LocalFog: 24;
1948
+ Material: 144;
1949
+ Matrix3VertexAttribute: 131;
1950
+ Matrix4VertexAttribute: 132;
1951
+ MetadataBoolean: 7;
1952
+ MetadataDouble: 8;
1953
+ MetadataFloat: 9;
1954
+ MetadataInteger: 10;
1955
+ MetadataSet: 11;
1956
+ MetadataString: 12;
1957
+ MicrophoneSource: 168;
1958
+ MovieTexture: 182;
1959
+ MultiTexture: 183;
1960
+ MultiTextureCoordinate: 184;
1961
+ MultiTextureTransform: 185;
1962
+ NavigationInfo: 91;
1963
+ Normal: 117;
1964
+ NormalInterpolator: 68;
1965
+ OrientationChaser: 36;
1966
+ OrientationDamper: 37;
1967
+ OrientationInterpolator: 69;
1968
+ OrthoViewpoint: 92;
1969
+ OscillatorSource: 169;
1970
+ PackagedShader: 133;
1971
+ PeriodicWave: 170;
1972
+ PhysicalMaterial: 145;
1973
+ PixelTexture: 186;
1974
+ PlaneSensor: 102;
1975
+ PointLight: 85;
1976
+ PointProperties: 146;
1977
+ PointSet: 118;
1978
+ PositionChaser: 38;
1979
+ PositionChaser2D: 39;
1980
+ PositionDamper: 40;
1981
+ PositionDamper2D: 41;
1982
+ PositionInterpolator: 70;
1983
+ PositionInterpolator2D: 71;
1984
+ ProgramShader: 134;
1985
+ ProximitySensor: 28;
1986
+ ScalarChaser: 42;
1987
+ ScalarDamper: 43;
1988
+ ScalarInterpolator: 72;
1989
+ Script: 201;
1990
+ ShaderPart: 135;
1991
+ ShaderProgram: 136;
1992
+ Shape: 147;
1993
+ Sound: 171;
1994
+ SpatialSound: 172;
1995
+ Sphere: 55;
1996
+ SphereSensor: 103;
1997
+ SplinePositionInterpolator: 73;
1998
+ SplinePositionInterpolator2D: 74;
1999
+ SplineScalarInterpolator: 75;
2000
+ SpotLight: 86;
2001
+ SquadOrientationInterpolator: 76;
2002
+ StaticGroup: 57;
2003
+ StreamAudioDestination: 173;
2004
+ StreamAudioSource: 174;
2005
+ Switch: 58;
2006
+ TexCoordChaser2D: 44;
2007
+ TexCoordDamper2D: 45;
2008
+ Text: 204;
2009
+ TextureBackground: 25;
2010
+ TextureCoordinate: 187;
2011
+ TextureCoordinateGenerator: 188;
2012
+ TextureProperties: 189;
2013
+ TextureTransform: 190;
2014
+ TimeSensor: 198;
2015
+ TouchSensor: 104;
2016
+ Transform: 59;
2017
+ TransformSensor: 29;
2018
+ TriangleFanSet: 119;
2019
+ TriangleSet: 120;
2020
+ TriangleStripSet: 121;
2021
+ TwoSidedMaterial: 148;
2022
+ UnlitMaterial: 149;
2023
+ Viewpoint: 93;
2024
+ ViewpointGroup: 94;
2025
+ Viewport: 80;
2026
+ VisibilitySensor: 30;
2027
+ VrmlMatrix: 21;
2028
+ WaveShaper: 175;
2029
+ WorldInfo: 13;
2030
+ // Abstract Node Types
2031
+ X3DAppearanceChildNode: 150;
2032
+ X3DAppearanceNode: 151;
2033
+ X3DBackgroundNode: 26;
2034
+ X3DBaseNode: 0;
2035
+ X3DBindableNode: 14;
2036
+ X3DBoundedObject: 60;
2037
+ X3DBrowser: 200;
2038
+ X3DChaserNode: 46;
2039
+ X3DChildNode: 15;
2040
+ X3DColorNode: 122;
2041
+ X3DComposedGeometryNode: 123;
2042
+ X3DCoordinateNode: 124;
2043
+ X3DDamperNode: 47;
2044
+ X3DDragSensorNode: 105;
2045
+ X3DEnvironmentalSensorNode: 31;
2046
+ X3DExecutionContext: 5;
2047
+ X3DExternProtoDeclaration: 4;
2048
+ X3DFogObject: 27;
2049
+ X3DFollowerNode: 48;
2050
+ X3DFontStyleNode: 205;
2051
+ X3DGeometricPropertyNode: 125;
2052
+ X3DGeometryNode: 126;
2053
+ X3DGroupingNode: 61;
2054
+ X3DInfoNode: 16;
2055
+ X3DInterpolatorNode: 77;
2056
+ X3DLayerNode: 81;
2057
+ X3DLightNode: 87;
2058
+ X3DLineGeometryNode: 127;
2059
+ X3DMaterialNode: 152;
2060
+ X3DMetadataObject: 17;
2061
+ X3DNetworkSensorNode: 99;
2062
+ X3DNode: 18;
2063
+ X3DNormalNode: 128;
2064
+ X3DOneSidedMaterialNode: 153;
2065
+ X3DPointingDeviceSensorNode: 106;
2066
+ X3DProgrammableShaderObject: 137;
2067
+ X3DProtoDeclaration: 2;
2068
+ X3DProtoDeclarationNode: 1;
2069
+ X3DPrototypeInstance: 19;
2070
+ X3DScene: 6;
2071
+ X3DScriptNode: 202;
2072
+ X3DSensorNode: 20;
2073
+ X3DShaderNode: 138;
2074
+ X3DShapeNode: 154;
2075
+ X3DSingleTextureCoordinateNode: 191;
2076
+ X3DSingleTextureNode: 192;
2077
+ X3DSingleTextureTransformNode: 193;
2078
+ X3DSoundChannelNode: 176;
2079
+ X3DSoundDestinationNode: 177;
2080
+ X3DSoundNode: 178;
2081
+ X3DSoundProcessingNode: 179;
2082
+ X3DSoundSourceNode: 180;
2083
+ X3DTexture2DNode: 194;
2084
+ X3DTextureCoordinateNode: 195;
2085
+ X3DTextureNode: 196;
2086
+ X3DTextureTransformNode: 197;
2087
+ X3DTimeDependentNode: 199;
2088
+ X3DTouchSensorNode: 107;
2089
+ X3DTransformMatrix3DNode: 62;
2090
+ X3DTransformNode: 63;
2091
+ X3DUrlObject: 100;
2092
+ X3DVertexAttributeNode: 139;
2093
+ X3DViewpointNode: 95;
2094
+ X3DViewportNode: 82;
2095
+ X3DWorld: 3;
2096
+ }