@pacem/pacem-3d 1.0.0-abel

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.
@@ -0,0 +1,1084 @@
1
+ import { Behaviors } from '@pacem/pacem-core';
2
+ import { Components as Components_2 } from '@pacem/pacem-core';
3
+ import { CustomUIEvent } from '@pacem/pacem-core';
4
+ import { EventKeyModifier } from '@pacem/pacem-core';
5
+ import { Geometry } from '@pacem/pacem-numerical';
6
+ import { ItemsContainer } from '@pacem/pacem-core';
7
+ import { PacemEventTarget } from '@pacem/pacem-core';
8
+ import { Point } from '@pacem/pacem-foundation';
9
+ import { PropertyConverter } from '@pacem/pacem-core';
10
+ import { Rect } from '@pacem/pacem-foundation';
11
+ import { Rgba } from '@pacem/pacem-foundation';
12
+ import { Size } from '@pacem/pacem-foundation';
13
+
14
+ declare class AdapterUtils {
15
+ static isMeshGeometry(obj: any): obj is MeshGeometry;
16
+ static isVector3D(obj: any): obj is Vector3D;
17
+ static isRgba(obj: any): obj is Rgba;
18
+ static flattenVectorArray(array: Vector3D[] | UVMap | Rgba[]): number[];
19
+ static findCamera(items: Renderable[]): Camera;
20
+ clipPixel(viewportPoint: Point): Point;
21
+ clipPixel(evt: PointerEventLike, canvas: HTMLCanvasElement): Point;
22
+ clipPixel(evt: PointerEventLike, viewport: Rect): Point;
23
+ }
24
+
25
+ declare interface BasicMaterial extends Material {
26
+ readonly shader: KnownShader.Basic;
27
+ }
28
+
29
+ declare class BasicMaterialElement extends MaterialElement {
30
+ constructor();
31
+ }
32
+
33
+ declare const BooleanOrNumberConverter: PropertyConverter;
34
+
35
+ declare interface Box3D {
36
+ minX: number;
37
+ minY: number;
38
+ minZ: number;
39
+ maxX: number;
40
+ maxY: number;
41
+ maxZ: number;
42
+ }
43
+
44
+ declare interface Camera extends Renderable {
45
+ /** Target in world coordinates. */
46
+ lookAt: Vector3D;
47
+ /** Up vector in world coordinates. */
48
+ up: Vector3D;
49
+ near: number;
50
+ far: number;
51
+ }
52
+
53
+ export declare namespace Components {
54
+ export {
55
+ Drawing3D_2 as Drawing3D
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Computes the unit vector orthogonal to the plane identified by 3 points.
61
+ * @param a
62
+ * @param b
63
+ * @param c
64
+ */
65
+ declare function computePlaneNormal(a: Vector3D, b: Vector3D, c: Vector3D): Vector3D;
66
+
67
+ /**
68
+ * Sets the normals to a mesh geometry by computing each face's unit orthogonal vector.
69
+ * @param geometry
70
+ */
71
+ declare function computeSharpVertexNormals(geometry: MeshGeometry): void;
72
+
73
+ declare interface DiffuseMaterial extends Material {
74
+ /** Diffuse color, albedo. */
75
+ emissiveColor?: string;
76
+ /** Percentage of reflected light. */
77
+ reflectivity?: number;
78
+ /** Index of refraction. */
79
+ refractionRatio?: number;
80
+ }
81
+
82
+ declare class DragEvent_2 extends UI3DEvent<DragEventArgs> {
83
+ }
84
+
85
+ declare interface DragEventArgs {
86
+ readonly offset: Point;
87
+ readonly item: Renderable;
88
+ }
89
+
90
+ export declare namespace Drawing3D {
91
+ export {
92
+ isStage,
93
+ isRenderable,
94
+ isUi3DObject,
95
+ isCamera,
96
+ isPerspectiveCamera,
97
+ isOrthographicCamera,
98
+ isLight,
99
+ isMesh,
100
+ isGeometry,
101
+ isMeshGeometry,
102
+ isGroup,
103
+ computeSharpVertexNormals,
104
+ computePlaneNormal,
105
+ isInteraction,
106
+ Vector3D,
107
+ Matrix3D,
108
+ Quaternion,
109
+ UVMap,
110
+ Box3D,
111
+ Sphere3D,
112
+ Stage,
113
+ Renderable,
114
+ Ui3DObject,
115
+ Camera,
116
+ OrthographicCamera,
117
+ PerspectiveCamera,
118
+ Light,
119
+ Mesh,
120
+ Group,
121
+ DragEventArgs,
122
+ UI3DEvent,
123
+ DragEvent_2 as DragEvent,
124
+ RenderableEvent,
125
+ RaycastResult,
126
+ StalePropertyFlag,
127
+ Interaction,
128
+ RenderableElement,
129
+ Ui3DElement,
130
+ Pacem3DGroupElement,
131
+ Pacem3DMeshElement,
132
+ Pacem3DObjectElement,
133
+ Pacem3DLightElement,
134
+ Pacem3DCameraElement,
135
+ Pacem3DPerspectiveCameraElement,
136
+ Pacem3DOrthographicCameraElement,
137
+ Pacem3DAdapterElement,
138
+ NodeGeometry,
139
+ MeshGeometry,
140
+ LineGeometry,
141
+ NotifyChange,
142
+ Point3DConverter,
143
+ Point3DOrNumberConverter,
144
+ QuaternionConverter,
145
+ BooleanOrNumberConverter,
146
+ isMaterial,
147
+ isBasicMaterial,
148
+ isLineMaterial,
149
+ isLambertMaterial,
150
+ isPhongMaterial,
151
+ isStandardMaterial,
152
+ isShaderMaterial,
153
+ KnownShader,
154
+ Material,
155
+ BasicMaterial,
156
+ LineMaterial,
157
+ DiffuseMaterial,
158
+ LambertMaterial,
159
+ SpecularMaterial,
160
+ PhongMaterial,
161
+ StandardMaterial,
162
+ ShaderMaterial,
163
+ MaterialElement
164
+ }
165
+ }
166
+
167
+ export declare namespace Drawing3D_2 {
168
+ export {
169
+ isStage,
170
+ isRenderable,
171
+ isUi3DObject,
172
+ isCamera,
173
+ isPerspectiveCamera,
174
+ isOrthographicCamera,
175
+ isLight,
176
+ isMesh,
177
+ isGeometry,
178
+ isMeshGeometry,
179
+ isGroup,
180
+ computeSharpVertexNormals,
181
+ computePlaneNormal,
182
+ isInteraction,
183
+ Vector3D,
184
+ Matrix3D,
185
+ Quaternion,
186
+ UVMap,
187
+ Box3D,
188
+ Sphere3D,
189
+ Stage,
190
+ Renderable,
191
+ Ui3DObject,
192
+ Camera,
193
+ OrthographicCamera,
194
+ PerspectiveCamera,
195
+ Light,
196
+ Mesh,
197
+ Group,
198
+ DragEventArgs,
199
+ UI3DEvent,
200
+ DragEvent_2 as DragEvent,
201
+ RenderableEvent,
202
+ RaycastResult,
203
+ StalePropertyFlag,
204
+ Interaction,
205
+ RenderableElement,
206
+ Ui3DElement,
207
+ Pacem3DGroupElement,
208
+ Pacem3DMeshElement,
209
+ Pacem3DObjectElement,
210
+ Pacem3DLightElement,
211
+ Pacem3DCameraElement,
212
+ Pacem3DPerspectiveCameraElement,
213
+ Pacem3DOrthographicCameraElement,
214
+ Pacem3DAdapterElement,
215
+ Pacem3DDetector,
216
+ isMaterial,
217
+ isBasicMaterial,
218
+ isLineMaterial,
219
+ isLambertMaterial,
220
+ isPhongMaterial,
221
+ isStandardMaterial,
222
+ isShaderMaterial,
223
+ KnownShader,
224
+ Material,
225
+ BasicMaterial,
226
+ LineMaterial,
227
+ DiffuseMaterial,
228
+ LambertMaterial,
229
+ SpecularMaterial,
230
+ PhongMaterial,
231
+ StandardMaterial,
232
+ ShaderMaterial,
233
+ MaterialElement,
234
+ BasicMaterialElement,
235
+ LambertMaterialElement,
236
+ LineMaterialElement,
237
+ PhongMaterialElement,
238
+ StandardMaterialElement,
239
+ Pacem3DPrimitiveElement,
240
+ PacemBoxElement,
241
+ PacemConeElement,
242
+ PacemCylinderElement,
243
+ PacemLineElement,
244
+ PacemPlaneElement,
245
+ PolyhedronElement,
246
+ PacemTetrahedronElement,
247
+ PacemOctahedronElement,
248
+ PacemHexahedronElement,
249
+ PacemIcosahedronElement,
250
+ PacemDodecahedronElement,
251
+ PacemSphereElement,
252
+ PacemTorusElement,
253
+ AdapterUtils,
254
+ Pacem3DThreeAdapterElement,
255
+ Pacem3DWgslScriptElement,
256
+ Pacem3DWebgpuAdapterElement,
257
+ OrbitCameraBehavior,
258
+ PacemOrbitCameraBehaviorElement,
259
+ Pacem3DElement
260
+ }
261
+ }
262
+
263
+ declare type FragmentModifierDelegate = (...args: FragmentModifierDelegateArgs) => string;
264
+
265
+ declare type FragmentModifierDelegateArgs = [worldPositionRef: string, instanceIndexRef: string, timeRef: string, cursorRef: string, sizeRef: string];
266
+
267
+ declare interface Group extends Ui3DObject {
268
+ childRenderables: Renderable[];
269
+ }
270
+
271
+ declare interface Interaction {
272
+ time: number;
273
+ cursor: Point;
274
+ resolution: Size;
275
+ }
276
+
277
+ declare function isBasicMaterial(obj: any): obj is BasicMaterial;
278
+
279
+ declare function isCamera(object: any): object is Camera;
280
+
281
+ declare function isGeometry(object: any): object is NodeGeometry;
282
+
283
+ declare function isGroup(object: any): object is Group;
284
+
285
+ declare function isInteraction(object: any): object is Interaction;
286
+
287
+ declare function isLambertMaterial(obj: any): obj is LambertMaterial;
288
+
289
+ declare function isLight(object: any): object is Light;
290
+
291
+ declare function isLineMaterial(obj: any): obj is LineMaterial;
292
+
293
+ declare function isMaterial(obj: any): obj is Material;
294
+
295
+ declare function isMesh(object: any): object is Mesh;
296
+
297
+ declare function isMeshGeometry(object: any): object is MeshGeometry;
298
+
299
+ declare function isOrthographicCamera(object: any): object is OrthographicCamera;
300
+
301
+ declare function isPerspectiveCamera(object: any): object is PerspectiveCamera;
302
+
303
+ declare function isPhongMaterial(obj: any): obj is PhongMaterial;
304
+
305
+ declare function isRenderable(object: any): object is Renderable;
306
+
307
+ declare function isShaderMaterial(obj: any): obj is ShaderMaterial;
308
+
309
+ declare function isStage(object: any): object is Stage;
310
+
311
+ declare function isStandardMaterial(obj: any): obj is StandardMaterial;
312
+
313
+ declare function isUi3DObject(object: any): object is Ui3DObject;
314
+
315
+ declare enum KnownShader {
316
+ Basic = "basic",
317
+ Lambert = "lambert",
318
+ Phong = "phong",
319
+ Standard = "standard",
320
+ Line = "line",
321
+ Custom = "custom"
322
+ }
323
+
324
+ declare interface LambertMaterial extends DiffuseMaterial {
325
+ readonly shader: KnownShader.Lambert;
326
+ }
327
+
328
+ declare class LambertMaterialElement extends MaterialElement {
329
+ constructor();
330
+ protected createMaterial(): Promise<LambertMaterial>;
331
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
332
+ emissiveColor: string;
333
+ reflectivity: number;
334
+ refractionRatio: number;
335
+ }
336
+
337
+ declare interface Light extends Renderable {
338
+ intensity: number;
339
+ target?: Vector3D;
340
+ color: string;
341
+ type: 'spot' | 'direction' | 'omni' | 'ambient';
342
+ attenuationStart?: number;
343
+ attenuationEnd?: number;
344
+ angle?: number;
345
+ }
346
+
347
+ declare class LineGeometry extends NodeGeometry {
348
+ positions: Vector3D_2[];
349
+ }
350
+
351
+ declare interface LineMaterial extends Material {
352
+ readonly shader: KnownShader.Line;
353
+ lineWidth: number;
354
+ lineJoin?: CanvasLineJoin;
355
+ lineCap?: CanvasLineCap;
356
+ dashArray?: number[];
357
+ }
358
+
359
+ declare class LineMaterialElement extends MaterialElement {
360
+ constructor();
361
+ lineWidth: number;
362
+ lineJoin?: CanvasLineJoin;
363
+ lineCap?: CanvasLineCap;
364
+ dashArray?: number[];
365
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
366
+ protected createMaterial(): Promise<LineMaterial>;
367
+ }
368
+
369
+ declare interface Material {
370
+ opacity?: number;
371
+ wireframe?: boolean;
372
+ /** Object color. */
373
+ color?: string | Rgba;
374
+ visible?: boolean;
375
+ /** Texture map. */
376
+ map?: string;
377
+ texture?: ImageBitmap;
378
+ /** Renders each face as flat. */
379
+ flatShading?: boolean;
380
+ readonly shader: KnownShader;
381
+ flags: StalePropertyFlag[];
382
+ }
383
+
384
+ declare abstract class MaterialElement extends PacemEventTarget {
385
+ #private;
386
+ constructor(shader: KnownShader);
387
+ get shader(): KnownShader;
388
+ private _loadMap;
389
+ material: Material;
390
+ opacity: number;
391
+ wireframe: boolean;
392
+ color: string;
393
+ hide: boolean;
394
+ map?: string;
395
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
396
+ viewActivatedCallback(): void;
397
+ protected updateMaterial(): void;
398
+ protected createMaterial(): Promise<Material>;
399
+ }
400
+
401
+ declare type Matrix3D = Geometry.LinearAlgebra.Matrix3D;
402
+
403
+ declare interface Mesh extends Ui3DObject {
404
+ geometry: NodeGeometry;
405
+ material?: Material;
406
+ backMaterial?: Material;
407
+ }
408
+
409
+ declare interface MeshGeometry extends NodeGeometry {
410
+ triangleIndices: number[];
411
+ textureCoordinates: UVMap;
412
+ normals: Vector3D_2[];
413
+ }
414
+
415
+ declare class MeshGeometry extends NodeGeometry {
416
+ #private;
417
+ get barycenter(): Vector3D_2;
418
+ set barycenter(point: Vector3D_2);
419
+ get boundingBox(): Box3D;
420
+ set boundingBox(bbox: Box3D);
421
+ get boundingSphere(): Sphere3D;
422
+ set boundingSphere(sphere: Sphere3D);
423
+ constructor(positions: Vector3D_2[], triangleIndices: number[], textureCoordinates?: UVMap, normals?: Vector3D_2[]);
424
+ positions: Vector3D_2[];
425
+ triangleIndices: number[];
426
+ textureCoordinates: UVMap;
427
+ normals: Vector3D_2[];
428
+ }
429
+
430
+ declare interface NodeGeometry {
431
+ positions: Vector3D_2[];
432
+ boundingBox?: Box3D;
433
+ barycenter?: Vector3D_2;
434
+ boundingSphere?: Sphere3D;
435
+ flags: StalePropertyFlag[];
436
+ key?: string;
437
+ }
438
+
439
+ declare abstract class NodeGeometry {
440
+ constructor(positions?: Vector3D_2[]);
441
+ static barycenter(positions: Vector3D_2[]): Vector3D_2;
442
+ static boundingBox(positions: Vector3D_2[]): Box3D;
443
+ protected setAsDirty(): void;
444
+ }
445
+
446
+ declare function NotifyChange(callback: (property?: string, old?: any, val?: any) => void): (target: any, prop: string, descriptor?: PropertyDescriptor) => void;
447
+
448
+ declare class OrbitCameraBehavior {
449
+ #private;
450
+ private _config;
451
+ private readonly _canvas;
452
+ private readonly _camera;
453
+ private readonly _scene;
454
+ private readonly _initialState;
455
+ private _currentState;
456
+ private constructor();
457
+ private static _buildState;
458
+ /**
459
+ * Tries to attach a new {@link OrbitCameraBehavior} to the provided element, if the element is a proper renderable and it is ready.
460
+ * @param element
461
+ * @returns
462
+ */
463
+ static tryAttach(element: any, config?: OrbitCameraConfiguration): OrbitCameraBehavior | null;
464
+ /** State of the current configuration, obtained from the interaction inputs. */
465
+ private _input;
466
+ /** Sibling state of {@link _input} that comes helpful when inertia is involved. */
467
+ private _progress;
468
+ get configuration(): OrbitCameraConfiguration;
469
+ set configuration(v: OrbitCameraConfiguration);
470
+ private _startHandler;
471
+ private _avoidHandler;
472
+ private _endHandler;
473
+ private _zoomHandler;
474
+ private _moveHandler;
475
+ private _getSafeAzimuth;
476
+ private _getSafePolar;
477
+ private static _modAngle;
478
+ private static _getViewXYZ;
479
+ private _update;
480
+ private _renderHandler;
481
+ /** Detaches and removes handlers and resources. */
482
+ dispose(): void;
483
+ }
484
+
485
+ declare type OrbitCameraConfiguration = {
486
+ maxAzimuth: number;
487
+ minAzimuth: number;
488
+ minPolar: number;
489
+ maxPolar: number;
490
+ inertia: boolean | number;
491
+ pan: OrbitCameraControl;
492
+ rotation: OrbitCameraControl;
493
+ zoom: OrbitCameraControl;
494
+ };
495
+
496
+ declare type OrbitCameraControl = {
497
+ enabled: boolean;
498
+ button?: number;
499
+ modifiers?: EventKeyModifier[];
500
+ };
501
+
502
+ declare interface OrthographicCamera extends Camera {
503
+ type: "orthographic";
504
+ /** Top frustum coordinate (e.g. 1). */
505
+ top: number;
506
+ /** Left frustum coordinate (e.g. -1). */
507
+ left: number;
508
+ /** Bottom frustum coordinate (e.g. -1). */
509
+ bottom: number;
510
+ /** Right frustum coordinate (e.g. 1). */
511
+ right: number;
512
+ }
513
+
514
+ declare abstract class Pacem3DAdapterElement extends PacemEventTarget {
515
+ /**
516
+ * When implemented in a derived class, resizes the stage.
517
+ */
518
+ abstract invalidateSize(scene: Pacem3DElement, size: Size): void;
519
+ /**
520
+ * Initializes the 3d scene and returns its corresponding DOM element.
521
+ * @param scene {Pacem3DElement} Container for the stage/scene
522
+ */
523
+ abstract initialize(scene: Pacem3DElement): Promise<HTMLElement>;
524
+ /**
525
+ * When implemented in a derived class, renders the scene.
526
+ */
527
+ abstract render(scene: Pacem3DElement): void;
528
+ /**
529
+ * Processes the stage content and returns an image accordingly.
530
+ * */
531
+ abstract snapshot(scene: Pacem3DElement, bgColor?: string, type?: string, quality?: number): PromiseLike<Blob>;
532
+ /**
533
+ * When implemented in a derived class, retrieves the element casting the ray through the provided point (if any).
534
+ * @param point {Object} 2D to check.
535
+ */
536
+ abstract raycast(scene: Pacem3DElement, point: Point, size: Size, callback: (result: RaycastResult) => void): void;
537
+ /**
538
+ * When implemented in a derived class, adds a 3d element.
539
+ * @param item {Pacem3DObject} item to be added
540
+ */
541
+ abstract addItem(scene: Pacem3DElement, item: Renderable): void;
542
+ /**
543
+ * When implemented in a derived class, removes a 3d element.
544
+ * @param item {Pacem3DObject} item to be removed
545
+ */
546
+ abstract removeItem(scene: Pacem3DElement, item: Renderable): void;
547
+ /**
548
+ * Updates the object before the next rendering.
549
+ * @param item
550
+ * @param redraw Whether to completely redraw the object (not just its 3d transform) or not
551
+ */
552
+ abstract updateItem(scene: Pacem3DElement, item: Renderable): void;
553
+ /**
554
+ * Adjusts the camera to zoom-fit specific objects in the viewport.
555
+ * @param items
556
+ */
557
+ abstract zoomFit(scene: Pacem3DElement, ...items: Ui3DObject[]): Promise<void>;
558
+ abstract project(scene: Pacem3DElement, point3D: Vector3D): Point;
559
+ /** Gets the native scene instance */
560
+ abstract getScene(scene: Pacem3DElement): any;
561
+ /**
562
+ * Disposes the 2d scene resources.
563
+ * @param scene {Pacem3DElement} The stage/scene
564
+ */
565
+ abstract dispose(scene: Pacem3DElement): void;
566
+ }
567
+
568
+ declare abstract class Pacem3DCameraElement extends RenderableElement implements Camera {
569
+ #private;
570
+ near: number;
571
+ far: number;
572
+ up: Vector3D;
573
+ lookAt: Vector3D;
574
+ private _resetBoundingSphere;
575
+ get boundingSphere(): Sphere3D;
576
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
577
+ }
578
+
579
+ /** @deprecated*/
580
+ declare class Pacem3DDetector {
581
+ private _detected;
582
+ constructor();
583
+ get info(): {
584
+ main?: any;
585
+ bits?: any;
586
+ shader?: any;
587
+ tex?: any;
588
+ misc?: any;
589
+ };
590
+ get supported(): boolean;
591
+ }
592
+
593
+ declare class Pacem3DElement extends Components_2.PacemItemsContainerElement<RenderableElement> implements Stage {
594
+ #private;
595
+ validate(item: RenderableElement): boolean;
596
+ private _container;
597
+ private _resizer;
598
+ interactive: boolean;
599
+ transparent: boolean;
600
+ background: string;
601
+ adapter: Pacem3DAdapterElement;
602
+ datasource: Renderable[];
603
+ /** @deprecated */
604
+ orbit: boolean;
605
+ get stage(): HTMLElement;
606
+ get scene(): any;
607
+ register(item: RenderableElement): boolean;
608
+ unregister(item: RenderableElement): boolean;
609
+ private _refreshDatasource;
610
+ private _buildUpDatasourceFromDOM;
611
+ private _itemPropertyChangeHandler;
612
+ private _add;
613
+ private _erase;
614
+ private _initializeAdapter;
615
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
616
+ private _lastHitResult;
617
+ viewActivatedCallback(): void;
618
+ private _itemDispatch;
619
+ private _clickHandler;
620
+ private _hitTestCallback;
621
+ private _moveHandler;
622
+ disconnectedCallback(): void;
623
+ get size(): Size;
624
+ private _resizeHandler;
625
+ render(item?: Renderable, deepUpdate?: boolean, now?: number): void;
626
+ private _doRender;
627
+ }
628
+
629
+ declare class Pacem3DGroupElement extends Ui3DElement implements Group {
630
+ #private;
631
+ validate(child: RenderableElement): boolean;
632
+ datasource: Renderable[];
633
+ get childRenderables(): Renderable[];
634
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
635
+ }
636
+
637
+ declare class Pacem3DLightElement extends RenderableElement implements Light {
638
+ intensity: number;
639
+ target: Vector3D;
640
+ color: string;
641
+ type: 'spot' | 'direction' | 'omni';
642
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
643
+ }
644
+
645
+ declare class Pacem3DMeshElement extends Ui3DElement implements Mesh {
646
+ geometry: NodeGeometry;
647
+ material: Material;
648
+ backMaterial: Material;
649
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
650
+ }
651
+
652
+ declare class Pacem3DObjectElement extends Ui3DElement {
653
+ content: any;
654
+ type: string | "obj" | "fbx" | "native";
655
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
656
+ }
657
+
658
+ declare class Pacem3DOrthographicCameraElement extends Pacem3DCameraElement implements OrthographicCamera {
659
+ top: number;
660
+ left: number;
661
+ bottom: number;
662
+ right: number;
663
+ get type(): "orthographic";
664
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
665
+ }
666
+
667
+ declare class Pacem3DPerspectiveCameraElement extends Pacem3DCameraElement implements PerspectiveCamera {
668
+ fov: number;
669
+ aspect: number;
670
+ get type(): "perspective";
671
+ get aspectRatio(): number;
672
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
673
+ }
674
+
675
+ declare abstract class Pacem3DPrimitiveElement extends PacemEventTarget {
676
+ geometry: NodeGeometry;
677
+ viewActivatedCallback(): void;
678
+ protected abstract createDefaultGeometry(): NodeGeometry;
679
+ }
680
+
681
+ declare class Pacem3DThreeAdapterElement extends Pacem3DAdapterElement {
682
+ private _assertMonoStage;
683
+ dispose(scene: Pacem3DElement): void;
684
+ snapshot(scene: Pacem3DElement, background?: string, type?: string, quality?: number): PromiseLike<Blob>;
685
+ project(scene: Pacem3DElement, point3D: Vector3D): Point;
686
+ zoomFit(scene: Pacem3DElement, ...items: Ui3DObject[]): Promise<void>;
687
+ private _3d;
688
+ private _stage;
689
+ private _renderer;
690
+ private _camera;
691
+ private _scene;
692
+ private _orbitCtrls;
693
+ private _objects;
694
+ private _dict;
695
+ orbit: boolean;
696
+ getScene(scene: Pacem3DElement): any;
697
+ raycast(scene: Pacem3DElement, point: Point, size: Size, callback: (result: RaycastResult) => void): void;
698
+ initialize(container: Pacem3DElement): Promise<HTMLCanvasElement>;
699
+ private _setCamera;
700
+ private _orbitControlsDelegate;
701
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
702
+ private _initOrbitControls;
703
+ private _disposeOrbitControls;
704
+ private _updateRenderer;
705
+ invalidateSize(scene: Pacem3DElement, size?: Size): void;
706
+ removeItem(scene: Pacem3DElement, item: RenderableElement): void;
707
+ updateItem(scene: Pacem3DElement, item: RenderableElement): void;
708
+ addItem(scene: Pacem3DElement, item: RenderableElement): void;
709
+ private _ensureAndRefresh;
710
+ private _addOrUpdateItem;
711
+ render(): void;
712
+ }
713
+
714
+ declare class Pacem3DWebgpuAdapterElement extends Pacem3DAdapterElement implements ItemsContainer<Pacem3DWgslScriptElement> {
715
+ #private;
716
+ invalidateSize(stage: Pacem3DElement, size?: Size): void;
717
+ get items(): Pacem3DWgslScriptElement[];
718
+ register(item: Pacem3DWgslScriptElement): boolean;
719
+ unregister(item: Pacem3DWgslScriptElement): boolean;
720
+ private _scriptVersionChangeHandler;
721
+ get supported(): boolean;
722
+ get active(): boolean;
723
+ private _webGPUNotSupported;
724
+ initialize(scene: Pacem3DElement): Promise<HTMLCanvasElement | null>;
725
+ private _parseWgslModifiers;
726
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
727
+ disconnectedCallback(): void;
728
+ dispose(scene: Pacem3DElement): void;
729
+ private _reinitialize;
730
+ modifiers: WGSLModifierDelegates;
731
+ enableValidation: boolean;
732
+ private _ensureRenderer;
733
+ private _updatePipeline;
734
+ /**
735
+ * Called when scene datasource changes.
736
+ * @param scene
737
+ */
738
+ render(scene: Pacem3DElement): void;
739
+ snapshot(scene: Pacem3DElement, background?: string, type?: string, quality?: number): PromiseLike<Blob>;
740
+ raycast(stage: Pacem3DElement, point: Point, size: Size, callback: (result: RaycastResult) => void): void;
741
+ private _itemsChangedExec;
742
+ private _itemsChanged;
743
+ addItem(stage: Pacem3DElement, item: Renderable): void;
744
+ removeItem(stage: Pacem3DElement, item: Renderable): void;
745
+ updateItem(stage: Pacem3DElement, item?: Renderable): void;
746
+ zoomFit(stage: Pacem3DElement, ...items: Ui3DObject[]): Promise<void>;
747
+ project(stage: Pacem3DElement, point3D: Geometry.LinearAlgebra.Vector3D): Point;
748
+ getScene(stage: Pacem3DElement): any;
749
+ }
750
+
751
+ declare class Pacem3DWgslScriptElement extends Components_2.PacemItemElement {
752
+ #private;
753
+ protected findContainer(): ItemsContainer<Pacem3DWgslScriptElement>;
754
+ get version(): string;
755
+ type: WGSLModifierScriptType;
756
+ wgsl: string;
757
+ viewActivatedCallback(): void;
758
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
759
+ private _computeVersion;
760
+ disconnectedCallback(): void;
761
+ }
762
+
763
+ declare class PacemBoxElement extends Pacem3DPrimitiveElement {
764
+ width: number;
765
+ height: number;
766
+ depth: number;
767
+ widthSegments: number;
768
+ heightSegments: number;
769
+ depthSegments: number;
770
+ static createMeshGeometry(width?: number, height?: number, depth?: number, widthSegments?: number, heightSegments?: number, depthSegments?: number): MeshGeometry;
771
+ protected createDefaultGeometry(): MeshGeometry;
772
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
773
+ }
774
+
775
+ declare class PacemConeElement extends Pacem3DPrimitiveElement {
776
+ radius: number;
777
+ height: number;
778
+ sides: number;
779
+ heightSegments: number;
780
+ capSegments: number;
781
+ static createMeshGeometry(radius?: number, height?: number, sides?: number, heightSegments?: number, capSegments?: number): MeshGeometry;
782
+ protected createDefaultGeometry(): MeshGeometry;
783
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
784
+ }
785
+
786
+ declare class PacemCylinderElement extends Pacem3DPrimitiveElement {
787
+ radius: number;
788
+ height: number;
789
+ sides: number;
790
+ heightSegments: number;
791
+ capSegments: number;
792
+ static createMeshGeometry(radius?: number, height?: number, sides?: number, heightSegments?: number, capSegments?: number): MeshGeometry;
793
+ protected createDefaultGeometry(): MeshGeometry;
794
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
795
+ }
796
+
797
+ declare class PacemDodecahedronElement extends PolyhedronElement {
798
+ static createMeshGeometry(radius?: number): MeshGeometry;
799
+ protected createMeshGeometry(radius?: number): MeshGeometry;
800
+ }
801
+
802
+ declare class PacemHexahedronElement extends PolyhedronElement {
803
+ static createMeshGeometry(radius?: number): MeshGeometry;
804
+ protected createMeshGeometry(radius?: number): MeshGeometry;
805
+ }
806
+
807
+ declare class PacemIcosahedronElement extends PolyhedronElement {
808
+ static createMeshGeometry(radius?: number): MeshGeometry;
809
+ protected createMeshGeometry(radius?: number): MeshGeometry;
810
+ }
811
+
812
+ declare class PacemLineElement extends Pacem3DPrimitiveElement {
813
+ positions: Vector3D[];
814
+ static createLineGeometry(positions?: Vector3D[]): LineGeometry;
815
+ protected createDefaultGeometry(): LineGeometry;
816
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
817
+ }
818
+
819
+ declare class PacemOctahedronElement extends PolyhedronElement {
820
+ static createMeshGeometry(radius?: number): MeshGeometry;
821
+ protected createMeshGeometry(radius?: number): MeshGeometry;
822
+ }
823
+
824
+ declare class PacemOrbitCameraBehaviorElement extends Behaviors.PacemBehavior {
825
+ #private;
826
+ maxAzimuth: number;
827
+ maxPolar: number;
828
+ minAzimuth: number;
829
+ minPolar: number;
830
+ zoomControl: OrbitCameraControl;
831
+ rotationControl: OrbitCameraControl;
832
+ panControl: OrbitCameraControl;
833
+ inertia: boolean | number;
834
+ private _readyHandler;
835
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
836
+ disconnectedCallback(): void;
837
+ private _buildConfig;
838
+ private _decorateCore;
839
+ protected decorate(element: Element): void;
840
+ protected undecorate(element: Element): void;
841
+ }
842
+
843
+ declare class PacemPlaneElement extends Pacem3DPrimitiveElement {
844
+ width: number;
845
+ length: number;
846
+ widthSegments: number;
847
+ lengthSegments: number;
848
+ static createMeshGeometry(width?: number, length?: number, widthSegments?: number, lengthSegments?: number): MeshGeometry;
849
+ protected createDefaultGeometry(): MeshGeometry;
850
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
851
+ }
852
+
853
+ declare class PacemSphereElement extends Pacem3DPrimitiveElement {
854
+ radius: number;
855
+ segments: number;
856
+ static createMeshGeometry(radius?: number, segs?: number): MeshGeometry;
857
+ protected createDefaultGeometry(): MeshGeometry;
858
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
859
+ }
860
+
861
+ declare class PacemTetrahedronElement extends PolyhedronElement {
862
+ static createMeshGeometry(radius?: number): MeshGeometry;
863
+ protected createMeshGeometry(radius?: number): MeshGeometry;
864
+ }
865
+
866
+ declare class PacemTorusElement extends Pacem3DPrimitiveElement {
867
+ radius: number;
868
+ innerRadius: number;
869
+ segments: number;
870
+ sides: number;
871
+ static createMeshGeometry(radius?: number, innerRadius?: number, segments?: number, sides?: number): MeshGeometry;
872
+ protected createDefaultGeometry(): MeshGeometry;
873
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
874
+ }
875
+
876
+ declare interface PerspectiveCamera extends Camera {
877
+ type: "perspective";
878
+ /** Vertical field of view in degrees. */
879
+ fov: number;
880
+ aspectRatio: number;
881
+ }
882
+
883
+ declare interface PhongMaterial extends SpecularMaterial {
884
+ readonly shader: KnownShader.Phong;
885
+ }
886
+
887
+ declare class PhongMaterialElement extends MaterialElement {
888
+ constructor();
889
+ protected createMaterial(): Promise<PhongMaterial>;
890
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
891
+ emissiveColor: string;
892
+ reflectivity: number;
893
+ refractionRatio: number;
894
+ specularColor: string;
895
+ shininess: number;
896
+ flatShading: boolean;
897
+ }
898
+
899
+ declare const Point3DConverter: PropertyConverter;
900
+
901
+ declare const Point3DOrNumberConverter: PropertyConverter;
902
+
903
+ declare type PointerEventLike = MouseEvent | PointerEvent | TouchEvent;
904
+
905
+ declare abstract class PolyhedronElement extends Pacem3DPrimitiveElement {
906
+ radius: number;
907
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
908
+ private _assignMeshGeometry;
909
+ protected createDefaultGeometry(): MeshGeometry;
910
+ protected abstract createMeshGeometry(radius: number): MeshGeometry;
911
+ }
912
+
913
+ declare type Quaternion = Geometry.LinearAlgebra.Quaternion;
914
+
915
+ declare const QuaternionConverter: PropertyConverter;
916
+
917
+ declare type RaycastResult = {
918
+ object: Renderable;
919
+ point: Vector3D;
920
+ };
921
+
922
+ declare interface Renderable {
923
+ stage?: Stage;
924
+ position: Vector3D;
925
+ /** Gets or sets whether the drawable is hit-testable. */
926
+ inert?: boolean;
927
+ hide?: boolean;
928
+ tag?: any;
929
+ flags: StalePropertyFlag[];
930
+ key?: string;
931
+ /** @deprecated will be likely removed sooner or later to be handled outside the stage/adapter. */
932
+ draggable?: boolean;
933
+ }
934
+
935
+ declare abstract class RenderableElement extends Components_2.PacemCrossItemsContainerElement<RenderableElement> implements Renderable {
936
+ #private;
937
+ validate(_: RenderableElement): boolean;
938
+ protected findContainer(): Pacem3DElement | RenderableElement;
939
+ get stage(): Pacem3DElement;
940
+ get parent(): RenderableElement;
941
+ position: Vector3D;
942
+ tag: string;
943
+ inert: boolean;
944
+ disconnectedCallback(): void;
945
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
946
+ get flags(): StalePropertyFlag[];
947
+ /** Calls for a redraw of the current element in the next rendering process. */
948
+ protected setAsDirty(...flags: StalePropertyFlag[]): void;
949
+ }
950
+
951
+ declare class RenderableEvent extends UI3DEvent<Renderable> {
952
+ constructor(type: string, args: Renderable, originalEvent: MouseEvent | TouchEvent | KeyboardEvent, p: Vector3D);
953
+ }
954
+
955
+ declare interface ShaderMaterial extends Material {
956
+ readonly shader: KnownShader.Custom;
957
+ vertexShader?: string;
958
+ fragmentShader?: string;
959
+ }
960
+
961
+ declare interface SpecularMaterial extends DiffuseMaterial {
962
+ /** Specular color, defines the color of reflections. */
963
+ specularColor?: string;
964
+ /** Specular exponent, glossiness. */
965
+ shininess?: number;
966
+ }
967
+
968
+ declare interface Sphere3D {
969
+ center: Vector3D;
970
+ radius: number;
971
+ }
972
+
973
+ declare interface Stage extends EventTarget {
974
+ render(item?: Renderable): any;
975
+ readonly stage: HTMLElement;
976
+ readonly scene: any;
977
+ readonly size: Size;
978
+ transparent?: boolean;
979
+ background?: string | Rgba;
980
+ }
981
+
982
+ declare enum StalePropertyFlag {
983
+ Position = "position",
984
+ Transform = "transform",
985
+ Geometry = "geometry",
986
+ Children = "children",
987
+ Material = "material",
988
+ Light = "light",
989
+ Camera = "camera",
990
+ Visibility = "visibility"
991
+ }
992
+
993
+ declare interface StandardMaterial extends DiffuseMaterial {
994
+ readonly shader: KnownShader.Phong;
995
+ roughness?: number;
996
+ metalness?: number;
997
+ /** Percentage of reflected light at grazing angles. */
998
+ fresnel?: number;
999
+ }
1000
+
1001
+ declare class StandardMaterialElement extends MaterialElement {
1002
+ constructor();
1003
+ protected createMaterial(): Promise<PhongMaterial>;
1004
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
1005
+ emissiveColor: string;
1006
+ refractionRatio: number;
1007
+ roughness: number;
1008
+ metalness: number;
1009
+ flatShading: boolean;
1010
+ }
1011
+
1012
+ declare abstract class Ui3DElement extends RenderableElement implements Ui3DObject {
1013
+ rotate: Geometry.LinearAlgebra.Quaternion;
1014
+ scale: Geometry.LinearAlgebra.Point3D;
1015
+ offset: Geometry.LinearAlgebra.Point3D;
1016
+ /** Gets the local transform 3D matrix (4x4). */
1017
+ transformMatrix: Geometry.LinearAlgebra.Matrix3D;
1018
+ /** @deprecated*/
1019
+ scaleX: number;
1020
+ /** @deprecated*/
1021
+ scaleY: number;
1022
+ /** @deprecated*/
1023
+ scaleZ: number;
1024
+ /** @deprecated*/
1025
+ translateX: number;
1026
+ /** @deprecated*/
1027
+ translateY: number;
1028
+ /** @deprecated*/
1029
+ translateZ: number;
1030
+ propertyChangedCallback(name: string, old: any, val: any, first?: boolean): void;
1031
+ private _computeTransformMatrix;
1032
+ }
1033
+
1034
+ declare abstract class UI3DEvent<T> extends CustomUIEvent<T> {
1035
+ #private;
1036
+ constructor(type: string, eventInit: CustomEventInit<T>, originalEvent: MouseEvent | TouchEvent | KeyboardEvent, point: Vector3D);
1037
+ /** Gets the event's source position in 3d coordinates. */
1038
+ get point(): Vector3D;
1039
+ }
1040
+
1041
+ declare interface Ui3DObject extends Renderable {
1042
+ rotate?: Quaternion;
1043
+ scale?: Vector3D;
1044
+ offset?: Vector3D;
1045
+ transformMatrix: Matrix3D;
1046
+ /** Gets the plain (untransformed via {@link transformMatrix}) bounding sphere. */
1047
+ readonly boundingSphere?: Sphere3D;
1048
+ /** Gets the plain (untransformed via {@link transformMatrix}) bounding box. */
1049
+ readonly boundingBox?: Box3D;
1050
+ }
1051
+
1052
+ declare type UVMap = Point[];
1053
+
1054
+ declare type Vector3D = Geometry.LinearAlgebra.Vector3D;
1055
+
1056
+ declare type Vector3D_2 = Geometry.LinearAlgebra.Vector3D;
1057
+
1058
+ declare type VertexInputModifierDelegate = (...args: VertexInputModifierDelegateArgs) => string;
1059
+
1060
+ declare type VertexInputModifierDelegateArgs = [vertexInputRef: string, interactionDataRef: string];
1061
+
1062
+ declare type VertexOutputModifierDelegate = (...args: VertexOutputModifierDelegateArgs) => string;
1063
+
1064
+ declare type VertexOutputModifierDelegateArgs = [vertexOutputRef: string, interactionDataRef: string];
1065
+
1066
+ declare type WGSLModifierDelegates = {
1067
+ vertexInput?: string | VertexInputModifierDelegate;
1068
+ vertexOutput?: string | VertexOutputModifierDelegate;
1069
+ fragment?: string | FragmentModifierDelegate;
1070
+ version?: string;
1071
+ };
1072
+
1073
+ declare type WGSLModifierScriptType = 'vertex-input' | 'vertex-output' | 'fragment';
1074
+
1075
+
1076
+
1077
+ declare global {
1078
+ namespace Pacem {
1079
+ export {
1080
+ Components,
1081
+ Drawing3D
1082
+ };
1083
+ }
1084
+ }