lythreeframe 1.2.30 → 1.2.32

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.
@@ -1546,6 +1546,9 @@ class Viewport {
1546
1546
  if (viewportParam.isLabelRendererNeeded) {
1547
1547
  this.createLabelRenderer();
1548
1548
  }
1549
+ if (viewportParam.isUILayerNeeded) {
1550
+ this.createUILayer();
1551
+ }
1549
1552
  if (this._canvas) {
1550
1553
  this.resizeObserver = new ResizeObserver((entries) => {
1551
1554
  for (let entry of entries) {
@@ -1610,9 +1613,37 @@ class Viewport {
1610
1613
  element.appendChild(this.labelRenderer.domElement);
1611
1614
  }
1612
1615
  }
1616
+ createUILayer() {
1617
+ if (!this._canvas)
1618
+ return;
1619
+ // 检查是否已存在 UI 层,避免重复创建
1620
+ let uiLayer = this._canvas.querySelector('.scene-uiLayer');
1621
+ if (!uiLayer) {
1622
+ uiLayer = document.createElement('div');
1623
+ uiLayer.className = 'scene-uiLayer';
1624
+ uiLayer.style.position = 'absolute';
1625
+ uiLayer.style.left = '0';
1626
+ uiLayer.style.top = '0';
1627
+ uiLayer.style.width = '100%';
1628
+ uiLayer.style.height = '100%';
1629
+ uiLayer.style.pointerEvents = 'none'; // UI层默认不响应鼠标事件
1630
+ uiLayer.style.zIndex = '10'; // 保证在渲染层之上
1631
+ this._canvas.appendChild(uiLayer);
1632
+ }
1633
+ }
1613
1634
  init() {
1614
1635
  this.setupPostProcess();
1615
1636
  }
1637
+ addWidget(widget) {
1638
+ if (!this._canvas)
1639
+ return;
1640
+ let uiLayer = this._canvas.querySelector('.scene-uiLayer');
1641
+ if (!uiLayer) {
1642
+ console.warn("UI Layer not found, check your settings.");
1643
+ return;
1644
+ }
1645
+ uiLayer.appendChild(widget);
1646
+ }
1616
1647
  setupPostProcess() {
1617
1648
  if (this.postProcessParam.steps.length === 0) {
1618
1649
  this.destroyPostProcess();
@@ -2038,9 +2069,9 @@ class Orbital extends Pawn {
2038
2069
  const target = this.control.target.clone();
2039
2070
  const distance = position.distanceTo(target);
2040
2071
  return {
2041
- position,
2042
- quaternion,
2043
- distance
2072
+ position: target,
2073
+ quaternion: quaternion,
2074
+ distance: distance
2044
2075
  };
2045
2076
  }
2046
2077
  stopFocusing() {
@@ -2322,7 +2353,8 @@ const DefaultCameraParam = JSON.parse(JSON.stringify(DefaultPerspectiveCameraPar
2322
2353
 
2323
2354
  const DefaultViewportParam = {
2324
2355
  elementId: null,
2325
- isLabelRendererNeeded: false
2356
+ isLabelRendererNeeded: false,
2357
+ isUILayerNeeded: false,
2326
2358
  };
2327
2359
 
2328
2360
  const DefaultRendererParameters = {
@@ -1544,6 +1544,9 @@ class Viewport {
1544
1544
  if (viewportParam.isLabelRendererNeeded) {
1545
1545
  this.createLabelRenderer();
1546
1546
  }
1547
+ if (viewportParam.isUILayerNeeded) {
1548
+ this.createUILayer();
1549
+ }
1547
1550
  if (this._canvas) {
1548
1551
  this.resizeObserver = new ResizeObserver((entries) => {
1549
1552
  for (let entry of entries) {
@@ -1608,9 +1611,37 @@ class Viewport {
1608
1611
  element.appendChild(this.labelRenderer.domElement);
1609
1612
  }
1610
1613
  }
1614
+ createUILayer() {
1615
+ if (!this._canvas)
1616
+ return;
1617
+ // 检查是否已存在 UI 层,避免重复创建
1618
+ let uiLayer = this._canvas.querySelector('.scene-uiLayer');
1619
+ if (!uiLayer) {
1620
+ uiLayer = document.createElement('div');
1621
+ uiLayer.className = 'scene-uiLayer';
1622
+ uiLayer.style.position = 'absolute';
1623
+ uiLayer.style.left = '0';
1624
+ uiLayer.style.top = '0';
1625
+ uiLayer.style.width = '100%';
1626
+ uiLayer.style.height = '100%';
1627
+ uiLayer.style.pointerEvents = 'none'; // UI层默认不响应鼠标事件
1628
+ uiLayer.style.zIndex = '10'; // 保证在渲染层之上
1629
+ this._canvas.appendChild(uiLayer);
1630
+ }
1631
+ }
1611
1632
  init() {
1612
1633
  this.setupPostProcess();
1613
1634
  }
1635
+ addWidget(widget) {
1636
+ if (!this._canvas)
1637
+ return;
1638
+ let uiLayer = this._canvas.querySelector('.scene-uiLayer');
1639
+ if (!uiLayer) {
1640
+ console.warn("UI Layer not found, check your settings.");
1641
+ return;
1642
+ }
1643
+ uiLayer.appendChild(widget);
1644
+ }
1614
1645
  setupPostProcess() {
1615
1646
  if (this.postProcessParam.steps.length === 0) {
1616
1647
  this.destroyPostProcess();
@@ -2036,9 +2067,9 @@ class Orbital extends Pawn {
2036
2067
  const target = this.control.target.clone();
2037
2068
  const distance = position.distanceTo(target);
2038
2069
  return {
2039
- position,
2040
- quaternion,
2041
- distance
2070
+ position: target,
2071
+ quaternion: quaternion,
2072
+ distance: distance
2042
2073
  };
2043
2074
  }
2044
2075
  stopFocusing() {
@@ -2320,7 +2351,8 @@ const DefaultCameraParam = JSON.parse(JSON.stringify(DefaultPerspectiveCameraPar
2320
2351
 
2321
2352
  const DefaultViewportParam = {
2322
2353
  elementId: null,
2323
- isLabelRendererNeeded: false
2354
+ isLabelRendererNeeded: false,
2355
+ isUILayerNeeded: false,
2324
2356
  };
2325
2357
 
2326
2358
  const DefaultRendererParameters = {
@@ -1,5 +1,6 @@
1
1
  export interface ViewportParam {
2
2
  elementId: string | null;
3
3
  isLabelRendererNeeded: boolean;
4
+ isUILayerNeeded: boolean;
4
5
  }
5
6
  export declare const DefaultViewportParam: ViewportParam;
@@ -1,5 +1,4 @@
1
- import { Object3D } from 'three/src/Three.WebGPU.Nodes.js';
2
- import { ShadowMapType, ToneMapping, WebGPURenderer } from "three/webgpu";
1
+ import { ShadowMapType, ToneMapping, WebGPURenderer, Object3D } from "three/webgpu";
3
2
  import { ThreeJsApp } from "../ThreeJsApp";
4
3
  import { PostProcessParam, PostProcessStepParam } from './../PostProcess/PostProcessParam';
5
4
  import { RendererParameters } from './Parameters/RendererParameters';
@@ -20,7 +19,9 @@ export declare class Viewport {
20
19
  constructor(app: ThreeJsApp, viewportParam: ViewportParam, rendererParam: RendererParameters, postProcessParam: PostProcessParam);
21
20
  protected createRenderer(rendererParam: RendererParameters): void;
22
21
  protected createLabelRenderer(): void;
22
+ protected createUILayer(): void;
23
23
  init(): void;
24
+ addWidget(widget: HTMLElement): void;
24
25
  setupPostProcess(): void;
25
26
  updatePostProcess(steps: PostProcessStepParam[]): void;
26
27
  updateRendererSettings(data: RendererParameters): void;
@@ -15,7 +15,7 @@ export declare class Orbital extends Pawn {
15
15
  focusTo(targetPos: Vector3, targetQuat: Quaternion | Euler, distance: number, time: number, onGoing?: (() => void) | null, onFinished?: (() => void) | null): void;
16
16
  getFocuingData(): {
17
17
  position: Vector3;
18
- quaternion: Quaternion | Euler;
18
+ quaternion: Quaternion;
19
19
  distance: number;
20
20
  } | null;
21
21
  stopFocusing(): void;
@@ -15,7 +15,7 @@ export declare abstract class Pawn {
15
15
  stopFocusing(): void;
16
16
  getFocuingData(): {
17
17
  position: Vector3;
18
- quaternion: Quaternion | Euler;
18
+ quaternion: Quaternion;
19
19
  distance: number;
20
20
  } | null;
21
21
  destroy(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lythreeframe",
3
- "version": "1.2.30",
3
+ "version": "1.2.32",
4
4
  "description": "Three.js 封装",
5
5
  "main": "dist/bundle.cjs.js",
6
6
  "module": "dist/bundle.esm.js",