lythreeframe 1.2.31 → 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();
@@ -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();
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lythreeframe",
3
- "version": "1.2.31",
3
+ "version": "1.2.32",
4
4
  "description": "Three.js 封装",
5
5
  "main": "dist/bundle.cjs.js",
6
6
  "module": "dist/bundle.esm.js",