@realsee/five-webgpu 1.0.0-alpha.4 → 1.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai_guides/api.md +9 -8
- package/ai_guides/features/camera-animation.md +1 -1
- package/ai_guides/features/event.md +0 -1
- package/ai_guides/features/five.md +8 -8
- package/ai_guides/features/gesture.md +1 -1
- package/ai_guides/features/load-external-model.md +6 -6
- package/ai_guides/features/load-progress.md +2 -2
- package/ai_guides/features/mode.md +3 -23
- package/ai_guides/features/model.md +1 -1
- package/ai_guides/features/state.md +2 -2
- package/ai_guides/features/ultra-hdr.md +41 -32
- package/ai_guides/quick-start.md +2 -2
- package/ai_guides/release_notes/6.8.md +2 -2
- package/ai_guides/support.md +0 -4
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/index.AdaptiveLuminancePass.html +1 -1
- package/docs/classes/index.BoundingMesh.html +1 -1
- package/docs/classes/index.Camera.html +1 -1
- package/docs/classes/index.EffectComposer.html +1 -1
- package/docs/classes/index.EyeDomeLightingPass.html +1 -1
- package/docs/classes/index.Five.html +68 -67
- package/docs/classes/index.FivePass.html +1 -1
- package/docs/classes/index.FlowingFireworks3DPass.html +1 -1
- package/docs/classes/index.FlowingLight2DPass.html +1 -1
- package/docs/classes/index.FlowingLight3DPass.html +1 -1
- package/docs/classes/index.GaussianBlurPass.html +1 -1
- package/docs/classes/index.InternalWebGPURenderer.html +14 -3
- package/docs/classes/index.Model.html +1 -1
- package/docs/classes/index.ModelScene.html +1 -1
- package/docs/classes/index.NetworkSubscribe.html +1 -1
- package/docs/classes/index.PBMCustomNode.html +57 -0
- package/docs/classes/index.PBMGaussianSplattingNodeMaterial.html +8 -6
- package/docs/classes/index.PBMGaussianSplattingObject.html +10 -4
- package/docs/classes/index.PBMGaussianSplattingRenderMesh.html +26 -15
- package/docs/classes/index.PBMGroup.html +1 -1
- package/docs/classes/index.PBMMesh.html +1 -1
- package/docs/classes/index.PBMMeshBasicMaterial.html +16 -5
- package/docs/classes/index.PBMMeshBasicNodeMaterial.html +28 -7
- package/docs/classes/index.PBMMeshPanoOnlyMaterial.html +16 -5
- package/docs/classes/index.PBMMeshPanoOnlyNodeMaterial.html +28 -7
- package/docs/classes/index.PBMMeshPhongMaterial.html +16 -5
- package/docs/classes/index.PBMMeshPhongNodeMaterial.html +28 -7
- package/docs/classes/index.PBMMeshPhysicalMaterial.html +16 -5
- package/docs/classes/index.PBMMeshPhysicalNodeMaterial.html +28 -7
- package/docs/classes/index.PBMPanoFilter.html +8 -8
- package/docs/classes/index.PBMPointCloud.html +1 -1
- package/docs/classes/index.PBMSkinnedMesh.html +1 -1
- package/docs/classes/index.PBMUpdateable.html +1 -1
- package/docs/classes/index.PanoCircleMesh.html +1 -1
- package/docs/classes/index.PanoCircleMeshCustom.html +5 -5
- package/docs/classes/index.PanoCircleMeshSolid.html +1 -1
- package/docs/classes/index.Parameter.html +57 -52
- package/docs/classes/index.Scene.html +1 -1
- package/docs/classes/index.Subscribe.html +1 -1
- package/docs/classes/index.TextureLoader.html +4 -1
- package/docs/classes/index.Tile3D.html +23 -21
- package/docs/classes/index.TileNode.html +1 -1
- package/docs/classes/index.Tileset.html +4 -4
- package/docs/classes/index.TrajectoryNode.html +3 -3
- package/docs/classes/index.Work.html +20 -18
- package/docs/classes/index.WorkResolvedObserver.html +22 -22
- package/docs/documents/api.html +11 -10
- package/docs/documents/features_camera-animation.html +1 -1
- package/docs/documents/features_event.html +0 -1
- package/docs/documents/features_five.html +7 -7
- package/docs/documents/features_gesture.html +1 -1
- package/docs/documents/features_load-external-model.html +6 -6
- package/docs/documents/features_load-progress.html +1 -1
- package/docs/documents/features_mode.html +5 -15
- package/docs/documents/features_model.html +1 -1
- package/docs/documents/features_state.html +1 -1
- package/docs/documents/features_ultra-hdr.html +50 -44
- package/docs/documents/quick-start.html +1 -1
- package/docs/documents/release_notes_6.8.html +2 -2
- package/docs/documents/support.html +1 -3
- package/docs/functions/index.customNodesCacheKey.html +3 -0
- package/docs/functions/index.parseWork.html +1 -1
- package/docs/functions/index.workToJson.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/index.AddableObject.html +1 -1
- package/docs/interfaces/index.AjaxOptions.html +1 -1
- package/docs/interfaces/index.BaseEvent.html +2 -2
- package/docs/interfaces/index.Clock.html +24 -0
- package/docs/interfaces/index.EventCallback.html +49 -47
- package/docs/interfaces/index.FiveInitArgs.html +49 -40
- package/docs/interfaces/index.GainmapCfgData.html +15 -0
- package/docs/interfaces/index.GestureEvent.html +2 -2
- package/docs/interfaces/index.IPBMMaterial.html +15 -4
- package/docs/interfaces/index.ImageOptions.html +1 -1
- package/docs/interfaces/index.IntersectEvent.html +2 -2
- package/docs/interfaces/index.IntersectMesh.html +1 -1
- package/docs/interfaces/index.IntersectMeshInterface.html +1 -1
- package/docs/interfaces/index.Intersection.html +1 -1
- package/docs/interfaces/index.LoosePanoWork.html +2 -2
- package/docs/interfaces/index.LooseWork.html +2 -2
- package/docs/interfaces/index.LooseWorkInitial.html +2 -2
- package/docs/interfaces/index.LooseWorkModel.html +2 -2
- package/docs/interfaces/index.LooseWorkObserver.html +2 -2
- package/docs/interfaces/index.LooseWorkPanorama.html +4 -3
- package/docs/interfaces/index.LooseWorkWithExtrinsics.html +15 -9
- package/docs/interfaces/index.ModeChangeEvent.html +2 -2
- package/docs/interfaces/index.ModelControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.ModelEvent.html +2 -2
- package/docs/interfaces/index.ModelSceneEvent.html +2 -2
- package/docs/interfaces/index.ModelTileEvent.html +2 -2
- package/docs/interfaces/index.MovePanoOptions.html +1 -1
- package/docs/interfaces/index.NetworkAbortError.html +1 -1
- package/docs/interfaces/index.NetworkFirbiddenError.html +1 -1
- package/docs/interfaces/index.NetworkOptions.html +1 -1
- package/docs/interfaces/index.NetworkProxyError.html +1 -1
- package/docs/interfaces/index.NetworkResourceEvent.html +2 -2
- package/docs/interfaces/index.NetworkResponseError.html +1 -1
- package/docs/interfaces/index.NetworkTimeoutError.html +1 -1
- package/docs/interfaces/index.ObjectEvent.html +2 -2
- package/docs/interfaces/index.PBMClipperParameter.html +2 -2
- package/docs/interfaces/index.PBMCustomNodeContext.html +87 -0
- package/docs/interfaces/index.PBMCustomNodeOptions.html +10 -0
- package/docs/interfaces/index.PBMCustomNodePanoContext.html +20 -0
- package/docs/interfaces/index.PBMCustomNodeSlots.html +31 -0
- package/docs/interfaces/index.PBMPanoDepth.html +5 -5
- package/docs/interfaces/index.PBMPanoFilterValue.html +2 -2
- package/docs/interfaces/index.PBMPanoGainmap.html +6 -0
- package/docs/interfaces/index.PBMPanoPicture.html +9 -8
- package/docs/interfaces/index.PBMRefinedScreen.html +2 -2
- package/docs/interfaces/index.PanoCircleMeshCustomOptions.html +2 -2
- package/docs/interfaces/index.PanoCircleMeshInterface.html +1 -1
- package/docs/interfaces/index.PanoEvent.html +2 -2
- package/docs/interfaces/index.PanoTextureEvent.html +2 -2
- package/docs/interfaces/index.PanoramaControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/index.PanoramaLikeControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.ParameterMaterialValue.html +42 -37
- package/docs/interfaces/index.ParameterTilesetValue.html +15 -15
- package/docs/interfaces/index.ParameterValue.html +56 -51
- package/docs/interfaces/index.Pose.html +1 -1
- package/docs/interfaces/index.RenderEvent.html +2 -2
- package/docs/interfaces/index.ResolvedParameterValue.html +56 -51
- package/docs/interfaces/index.State.html +1 -1
- package/docs/interfaces/index.StateEvent.html +2 -2
- package/docs/interfaces/index.TextureOptions.html +1 -1
- package/docs/interfaces/index.TilesetOptions.html +7 -2
- package/docs/interfaces/index.TopviewControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/index.VRPanoramaControllerCustomInitArgs.html +37 -0
- package/docs/interfaces/index.ViewLayer.html +23 -21
- package/docs/interfaces/index.WorkCubeHdrGainmapImage.html +10 -0
- package/docs/interfaces/index.WorkCubeImage.html +5 -9
- package/docs/interfaces/index.WorkImage.html +8 -12
- package/docs/interfaces/index.WorkInitial.html +8 -8
- package/docs/interfaces/index.WorkModel.html +8 -8
- package/docs/interfaces/index.WorkModelLayer.html +6 -6
- package/docs/interfaces/index.WorkObserver.html +23 -23
- package/docs/interfaces/index.WorkPanoramaJson.html +3 -2
- package/docs/interfaces/index.WorkTile.html +8 -12
- package/docs/interfaces/index.WorksEvent.html +2 -2
- package/docs/interfaces/index.XRControllerEvent.html +2 -2
- package/docs/interfaces/index.XRGestureEvent.html +2 -2
- package/docs/interfaces/index.XRSessionEvent.html +2 -2
- package/docs/modules/index.html +1 -1
- package/docs/types/index.ControllerCustomInitTypes.html +3 -2
- package/docs/types/index.ControllerEventTypes.html +25 -23
- package/docs/types/index.EventTypes.html +26 -26
- package/docs/types/index.Mode.html +2 -1
- package/docs/types/index.PBMCustomNodeTargetType.html +2 -0
- package/docs/types/index.ParseOptions.html +14 -8
- package/docs/variables/index.GSPLAT_PIPELINE_AUTO.html +2 -0
- package/docs/variables/index.GSPLAT_PIPELINE_RASTER_CPU_SORT.html +2 -0
- package/docs/variables/index.GSPLAT_PIPELINE_RASTER_GPU_SORT.html +2 -0
- package/docs/variables/index.PROXY_CONTROLLER_EVENT_NAMES.html +1 -1
- package/docs/variables/index.controllersDefaultInitArgs.html +1 -1
- package/five/application/controllers.d.ts +4 -0
- package/five/application/events.d.ts +1 -1
- package/five/application/five.d.ts +4 -1
- package/five/application/fiveInitArgs.d.ts +13 -0
- package/five/application/mode.d.ts +2 -0
- package/five/cardboard/helper.d.ts +2 -0
- package/five/cardboard/index.d.ts +13 -0
- package/five/cardboard/sensor.d.ts +158 -0
- package/five/controllers/base.d.ts +3 -0
- package/five/controllers/events.d.ts +5 -3
- package/five/controllers/panorama.d.ts +2 -2
- package/five/controllers/vrPanorama.d.ts +56 -0
- package/five/core/internalWebGPURenderer.d.ts +16 -0
- package/five/core/panoVideo.d.ts +4 -1
- package/five/core/tiling.d.ts +40 -9
- package/five/gaussian-splatting/gpu-sort/prefixSumKernel.d.ts +65 -0
- package/five/gaussian-splatting/gpu-sort/radixSortModule.d.ts +128 -0
- package/five/gaussian-splatting/gpu-sort/shaders/prefixSum.d.ts +2 -0
- package/five/gaussian-splatting/gpu-sort/shaders/radixHistogram.d.ts +2 -0
- package/five/gaussian-splatting/gpu-sort/shaders/radixReorder.d.ts +2 -0
- package/five/gaussian-splatting/gpu-sort/shaders/sortKeygen.d.ts +2 -0
- package/five/gaussian-splatting/gpu-sort/sortAdapter.d.ts +234 -0
- package/five/gaussian-splatting/pipelines/cpuSortPipeline.d.ts +159 -0
- package/five/gaussian-splatting/pipelines/gpuSortPipeline.d.ts +98 -0
- package/five/gaussian-splatting/pipelines/gsplatPipeline.d.ts +104 -0
- package/five/gaussian-splatting/pipelines/pipelineMode.d.ts +42 -0
- package/five/gaussian-splatting/pipelines/sortThrottle.d.ts +45 -0
- package/five/index.d.ts +4 -1
- package/five/index.js +272 -269
- package/five/index.mjs +7183 -4546
- package/five/meshes/panoCircleMeshCustom.d.ts +1 -0
- package/five/model/index.d.ts +1 -1
- package/five/model/materials/nodes/pbmMeshBasicNodeMaterial.d.ts +2 -0
- package/five/model/materials/nodes/pbmMeshPanoOnlyNodeMaterial.d.ts +2 -0
- package/five/model/materials/nodes/pbmMeshPhongNodeMaterial.d.ts +2 -0
- package/five/model/materials/nodes/pbmMeshPhysicalNodeMaterial.d.ts +2 -0
- package/five/model/materials/pbmGaussianSplattingNodeMaterial.d.ts +4 -0
- package/five/model/materials/pbmMaterial.d.ts +268 -5
- package/five/model/materials/tsl/defines.d.ts +8 -2
- package/five/model/materials/tsl/outputBuilder.d.ts +8 -15
- package/five/model/materials/tsl/panoColor.d.ts +8 -2
- package/five/model/materials/tsl/utils.d.ts +13 -0
- package/five/model/objects/pbmGaussianSplattingObject.d.ts +9 -0
- package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +67 -101
- package/five/model/parameter.d.ts +13 -1
- package/five/model/tile3d/index.d.ts +2 -0
- package/five/model/tile3d/tileset.d.ts +5 -0
- package/five/model/tile3d/trajectory-content.d.ts +53 -0
- package/five/texture/loader.d.ts +6 -0
- package/five/types/cube.d.ts +0 -1
- package/five/utils/detector.d.ts +11 -1
- package/five/utils/error.d.ts +1 -0
- package/five/utils/event.d.ts +17 -1
- package/five/utils/gainmap-data.d.ts +23 -0
- package/five/work/index.d.ts +1 -1
- package/five/work/looseWorkType.d.ts +2 -1
- package/five/work/work.d.ts +30 -7
- package/five/work/workJsonType.d.ts +2 -1
- package/gltf-loader/gltf-object.d.ts +17 -0
- package/gltf-loader/index.d.ts +45 -0
- package/gltf-loader/index.js +255 -0
- package/gltf-loader/index.mjs +302 -0
- package/package.json +6 -1
- package/plugins/BackgroundPlugin/Controller.d.ts +20 -0
- package/plugins/BackgroundPlugin/index.d.ts +5 -0
- package/plugins/BackgroundPlugin/typings.d.ts +44 -0
- package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
- package/plugins/CSS2DPlugin/index.d.ts +5 -0
- package/plugins/CSS2DPlugin/typing.d.ts +31 -0
- package/plugins/CSS3DPlugin/Controller.d.ts +64 -0
- package/plugins/CSS3DPlugin/index.d.ts +5 -0
- package/plugins/CSS3DPlugin/typing.d.ts +33 -0
- package/plugins/FloorplanPlugin/Controller.d.ts +100 -0
- package/plugins/FloorplanPlugin/index.d.ts +5 -0
- package/plugins/FloorplanPlugin/render/assets.d.ts +9 -0
- package/plugins/FloorplanPlugin/render/index.d.ts +35 -0
- package/plugins/FloorplanPlugin/render/isPointInPolygon.d.ts +5 -0
- package/plugins/FloorplanPlugin/render/renderFloor.d.ts +22 -0
- package/plugins/FloorplanPlugin/render/roomLabelVisibility.d.ts +10 -0
- package/plugins/FloorplanPlugin/typing.d.ts +156 -0
- package/plugins/FloorplanPlugin/typings/floorplanData.d.ts +112 -0
- package/plugins/FloorplanPlugin/typings/floorplanServerData.d.ts +78 -0
- package/plugins/FloorplanPlugin/typings/index.d.ts +2 -0
- package/plugins/FloorplanPlugin/utils/changeMode.d.ts +5 -0
- package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.d.ts +6 -0
- package/plugins/FloorplanPlugin/utils/correctFiveState.d.ts +11 -0
- package/plugins/FloorplanPlugin/utils/equal.d.ts +9 -0
- package/plugins/FloorplanPlugin/utils/filter.d.ts +8 -0
- package/plugins/FloorplanPlugin/utils/fiveModelLoad.d.ts +6 -0
- package/plugins/FloorplanPlugin/utils/formatData.d.ts +6 -0
- package/plugins/FloorplanPlugin/utils/formatPosition.d.ts +33 -0
- package/plugins/FloorplanPlugin/utils/getDistanceFromModel.d.ts +6 -0
- package/plugins/FloorplanPlugin/utils/getPxmm.d.ts +19 -0
- package/plugins/FloorplanPlugin/utils/isTruelyObject.d.ts +4 -0
- package/plugins/FloorplanPlugin/utils/nearlyEqual.d.ts +8 -0
- package/plugins/FloorplanPlugin/utils/to.d.ts +5 -0
- package/plugins/Object3DHelperPlugin/Controller.d.ts +99 -0
- package/plugins/Object3DHelperPlugin/Controllers/BaseController.d.ts +142 -0
- package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.d.ts +16 -0
- package/plugins/Object3DHelperPlugin/Controllers/MoveController.d.ts +66 -0
- package/plugins/Object3DHelperPlugin/Controllers/RotateController.d.ts +61 -0
- package/plugins/Object3DHelperPlugin/FiveControllerWrapper.d.ts +17 -0
- package/plugins/Object3DHelperPlugin/Helper/BaseHelper.d.ts +97 -0
- package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.d.ts +16 -0
- package/plugins/Object3DHelperPlugin/Helper/MoveHelper.d.ts +37 -0
- package/plugins/Object3DHelperPlugin/Helper/RotateHelper.d.ts +93 -0
- package/plugins/Object3DHelperPlugin/constant.d.ts +27 -0
- package/plugins/Object3DHelperPlugin/index.d.ts +6 -0
- package/plugins/Object3DHelperPlugin/typing.d.ts +143 -0
- package/plugins/Object3DHelperPlugin/utils/ArrowGroup.d.ts +22 -0
- package/plugins/Object3DHelperPlugin/utils/CenterHandle.d.ts +23 -0
- package/plugins/Object3DHelperPlugin/utils/PlaneHandle.d.ts +19 -0
- package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.d.ts +5 -0
- package/plugins/Object3DHelperPlugin/utils/cameraHooks.d.ts +3 -0
- package/plugins/Object3DHelperPlugin/utils/direction.d.ts +14 -0
- package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.d.ts +5 -0
- package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.d.ts +8 -0
- package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.d.ts +8 -0
- package/plugins/Object3DHelperPlugin/utils/solidGuide.d.ts +27 -0
- package/plugins/Object3DHelperPlugin/utils/tipsDom.d.ts +8 -0
- package/plugins/PanoAnimePlugin/Controller.d.ts +49 -0
- package/plugins/PanoAnimePlugin/index.d.ts +5 -0
- package/plugins/PanoAnimePlugin/typing.d.ts +37 -0
- package/plugins/index.d.ts +6 -0
- package/plugins/index.js +393 -3
- package/plugins/index.mjs +3421 -92
- package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
- package/plugins/thirdParty/CSS3DRenderer.d.ts +45 -0
- package/plugins/thirdParty/OrbitControls.d.ts +78 -0
- package/plugins/thirdParty/domevents.d.ts +36 -0
- package/plugins/utils/clamp.d.ts +2 -0
- package/plugins/utils/uuid.d.ts +2 -0
- package/react/index.js +2 -2
- package/react/index.mjs +2 -2
- package/umd/five-gltf-loader.js +255 -0
- package/umd/five-plugins.js +461 -3
- package/umd/five-react.js +2 -2
- package/umd/five.js +350 -347
- package/docs/interfaces/index.PBMHDRConfig.html +0 -12
- package/five/gaussian-splatting/worker/dataWorker.d.ts +0 -1
- package/five/three-version-check.d.ts +0 -1
- package/five/utils/hdr-data.d.ts +0 -13
- package/five/utils/shaderContentFix.d.ts +0 -7
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Five } from '@realsee/five-webgpu';
|
|
2
|
+
import { BasePlugin } from '../BasePlugin';
|
|
3
|
+
import * as THREE from 'three/webgpu';
|
|
4
|
+
import { CSS2DRenderer, CSS2DObject } from '../thirdParty/CSS2DRenderer.js';
|
|
5
|
+
import type * as PluginType from './typing';
|
|
6
|
+
export declare class Controller extends BasePlugin.Controller<PluginType.State, PluginType.EventMap, PluginType.ServerData, PluginType.PluginData> {
|
|
7
|
+
/** 当前使用的数据 */
|
|
8
|
+
data?: PluginType.PluginData;
|
|
9
|
+
/** 插件当前状态 */
|
|
10
|
+
state: PluginType.State;
|
|
11
|
+
/** CSS2D 渲染器实例 */
|
|
12
|
+
renderer: CSS2DRenderer;
|
|
13
|
+
scene: THREE.Scene;
|
|
14
|
+
styleSheet: CSSStyleSheet;
|
|
15
|
+
camera: THREE.PerspectiveCamera;
|
|
16
|
+
private resizeObserver?;
|
|
17
|
+
private updateState;
|
|
18
|
+
constructor(five: Five, params?: PluginType.Params);
|
|
19
|
+
load(data: PluginType.ServerData): Promise<void>;
|
|
20
|
+
createCSS2DObject: ({ id, name, innerHTML, center, position, visible, timeout, }: PluginType.CreateCSS2DObjectType) => CSS2DObject;
|
|
21
|
+
render: () => void;
|
|
22
|
+
private _addEventListener;
|
|
23
|
+
private _removeEventListener;
|
|
24
|
+
/**
|
|
25
|
+
* 将插件 DOM 挂载到指定容器
|
|
26
|
+
*/
|
|
27
|
+
appendToFiveContainer(): void;
|
|
28
|
+
add(...object: THREE.Object3D[]): void;
|
|
29
|
+
remove(object: THREE.Object3D): void;
|
|
30
|
+
removeAll(): void;
|
|
31
|
+
/**
|
|
32
|
+
* 淡入指定的 CSS2DObject
|
|
33
|
+
*/
|
|
34
|
+
fadeInObjects(...objects: THREE.Object3D[]): void;
|
|
35
|
+
/**
|
|
36
|
+
* 淡出指定的 CSS2DObject
|
|
37
|
+
*/
|
|
38
|
+
fadeOutObjects(...objects: THREE.Object3D[]): void;
|
|
39
|
+
private _enable;
|
|
40
|
+
private _disable;
|
|
41
|
+
/**
|
|
42
|
+
* 启用插件
|
|
43
|
+
*/
|
|
44
|
+
enable(options?: BasePlugin.BaseOptions): void;
|
|
45
|
+
/**
|
|
46
|
+
* 禁用插件
|
|
47
|
+
*/
|
|
48
|
+
disable(options?: BasePlugin.BaseOptions): void;
|
|
49
|
+
/**
|
|
50
|
+
* 显示场景
|
|
51
|
+
*/
|
|
52
|
+
show(options?: BasePlugin.BaseOptions): void;
|
|
53
|
+
/**
|
|
54
|
+
* 隐藏场景
|
|
55
|
+
*/
|
|
56
|
+
hide(options?: BasePlugin.BaseOptions): void;
|
|
57
|
+
/** 销毁插件 */
|
|
58
|
+
dispose: () => void;
|
|
59
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Five } from '@realsee/five-webgpu';
|
|
2
|
+
import type * as CSS2DPluginType from './typing';
|
|
3
|
+
import { Controller } from './Controller';
|
|
4
|
+
export declare const CSS2DPlugin: (five: Five, params?: CSS2DPluginType.Params) => Controller;
|
|
5
|
+
export type { CSS2DPluginType, Controller as CSS2DPluginController };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type * as THREE from 'three/webgpu';
|
|
2
|
+
import type { BasePlugin } from '../BasePlugin';
|
|
3
|
+
export type PluginData = any;
|
|
4
|
+
export type ServerData = any;
|
|
5
|
+
export interface CreateCSS2DObjectType {
|
|
6
|
+
id?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
innerHTML: string;
|
|
9
|
+
center?: THREE.Vector2;
|
|
10
|
+
position?: THREE.Vector3;
|
|
11
|
+
visible?: boolean;
|
|
12
|
+
timeout?: number;
|
|
13
|
+
}
|
|
14
|
+
/** 插件配置 */
|
|
15
|
+
export interface Config {
|
|
16
|
+
}
|
|
17
|
+
/** 插件初始化参数 */
|
|
18
|
+
export interface Params {
|
|
19
|
+
config?: Partial<Config>;
|
|
20
|
+
initialState?: Partial<State>;
|
|
21
|
+
}
|
|
22
|
+
/** 插件状态 */
|
|
23
|
+
export interface State extends BasePlugin.State {
|
|
24
|
+
/** 插件是否启用 */
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
/** 插件整体是否可见 */
|
|
27
|
+
visible: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** 插件事件 */
|
|
30
|
+
export interface EventMap extends BasePlugin.EventMap<State, ServerData> {
|
|
31
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { Five } from '@realsee/five-webgpu';
|
|
2
|
+
import { BasePlugin } from '../BasePlugin';
|
|
3
|
+
import * as THREE from 'three/webgpu';
|
|
4
|
+
import { CSS3DRenderer, CSS3DObject } from '../thirdParty/CSS3DRenderer.js';
|
|
5
|
+
import type * as PluginType from './typing';
|
|
6
|
+
export declare class Controller extends BasePlugin.Controller<PluginType.State, PluginType.EventMap, PluginType.ServerData, PluginType.PluginData> {
|
|
7
|
+
/** 当前使用的数据 */
|
|
8
|
+
data?: PluginType.PluginData;
|
|
9
|
+
/** 插件当前状态 */
|
|
10
|
+
state: PluginType.State;
|
|
11
|
+
/** CSS3D 渲染器实例 */
|
|
12
|
+
renderer: CSS3DRenderer;
|
|
13
|
+
scene: THREE.Scene;
|
|
14
|
+
styleSheet: CSSStyleSheet;
|
|
15
|
+
camera: THREE.PerspectiveCamera;
|
|
16
|
+
cacheMap: WeakMap<object, any>;
|
|
17
|
+
private resizeObserver?;
|
|
18
|
+
private updateState;
|
|
19
|
+
constructor(five: Five, params?: PluginType.Params);
|
|
20
|
+
load(data: PluginType.ServerData): Promise<void>;
|
|
21
|
+
createCSS3DObject: ({ id, name, innerHTML, sprite, normal, position, scalar, visible, timeout, }: PluginType.CreateCSS3DObjectType) => CSS3DObject;
|
|
22
|
+
render: () => void;
|
|
23
|
+
/**
|
|
24
|
+
* 强制标脏并重新渲染所有 objects
|
|
25
|
+
*/
|
|
26
|
+
forceRender: () => void;
|
|
27
|
+
private _addEventListener;
|
|
28
|
+
private _removeEventListener;
|
|
29
|
+
/**
|
|
30
|
+
* 将插件 DOM 挂载到指定容器
|
|
31
|
+
*/
|
|
32
|
+
appendToFiveContainer(): void;
|
|
33
|
+
add(...object: THREE.Object3D[]): void;
|
|
34
|
+
remove(object: THREE.Object3D): void;
|
|
35
|
+
removeAll(): void;
|
|
36
|
+
/**
|
|
37
|
+
* 淡入指定的 CSS3DObject,设置 object.userData.visible = true
|
|
38
|
+
*/
|
|
39
|
+
fadeInObjects(...objects: THREE.Object3D[]): void;
|
|
40
|
+
/**
|
|
41
|
+
* 淡出指定的 CSS3DObject,设置 object.userData.visible = false
|
|
42
|
+
*/
|
|
43
|
+
fadeOutObjects(...objects: THREE.Object3D[]): void;
|
|
44
|
+
private _enable;
|
|
45
|
+
private _disable;
|
|
46
|
+
/**
|
|
47
|
+
* 启用插件,让插件能够响应交互
|
|
48
|
+
*/
|
|
49
|
+
enable(options?: BasePlugin.BaseOptions): void;
|
|
50
|
+
/**
|
|
51
|
+
* 禁用插件,让插件停止响应交互
|
|
52
|
+
*/
|
|
53
|
+
disable(options?: BasePlugin.BaseOptions): void;
|
|
54
|
+
/**
|
|
55
|
+
* 显示场景,设置 scene.visible = true
|
|
56
|
+
*/
|
|
57
|
+
show(options?: BasePlugin.BaseOptions): void;
|
|
58
|
+
/**
|
|
59
|
+
* 隐藏场景,设置 scene.visible = false
|
|
60
|
+
*/
|
|
61
|
+
hide(options?: BasePlugin.BaseOptions): void;
|
|
62
|
+
/** 销毁插件,移除所有副作用 */
|
|
63
|
+
dispose: () => void;
|
|
64
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Five } from '@realsee/five-webgpu';
|
|
2
|
+
import type * as CSS3DPluginType from './typing';
|
|
3
|
+
import { Controller } from './Controller';
|
|
4
|
+
export declare const CSS3DPlugin: (five: Five, params?: CSS3DPluginType.Params) => Controller;
|
|
5
|
+
export type { CSS3DPluginType, Controller as CSS3DPluginController };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type * as THREE from 'three/webgpu';
|
|
2
|
+
import type { BasePlugin } from '../BasePlugin';
|
|
3
|
+
export type PluginData = any;
|
|
4
|
+
export type ServerData = any;
|
|
5
|
+
export interface CreateCSS3DObjectType {
|
|
6
|
+
id?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
innerHTML: string;
|
|
9
|
+
sprite?: boolean;
|
|
10
|
+
normal?: THREE.Vector3;
|
|
11
|
+
position?: THREE.Vector3;
|
|
12
|
+
scalar?: number;
|
|
13
|
+
visible?: boolean;
|
|
14
|
+
timeout?: number;
|
|
15
|
+
}
|
|
16
|
+
/** 插件配置 */
|
|
17
|
+
export interface Config {
|
|
18
|
+
}
|
|
19
|
+
/** 插件初始化参数 */
|
|
20
|
+
export interface Params {
|
|
21
|
+
config?: Partial<Config>;
|
|
22
|
+
initialState?: Partial<State>;
|
|
23
|
+
}
|
|
24
|
+
/** 插件状态 */
|
|
25
|
+
export interface State extends BasePlugin.State {
|
|
26
|
+
/** 插件是否启用 */
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
/** 插件整体是否可见 */
|
|
29
|
+
visible: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** 插件事件 */
|
|
32
|
+
export interface EventMap extends BasePlugin.EventMap<State, ServerData> {
|
|
33
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { Five } from '@realsee/five-webgpu';
|
|
2
|
+
import { BasePlugin } from '../BasePlugin';
|
|
3
|
+
import type { State, Config, Params, EventMap, PluginData, PluginServerData, ShowState, ShowOptions, HideOptions, HighlightData } from './typing';
|
|
4
|
+
export declare class Controller extends BasePlugin.Controller<State, EventMap, PluginServerData, PluginData> {
|
|
5
|
+
name: string;
|
|
6
|
+
state: State;
|
|
7
|
+
protected data?: PluginData;
|
|
8
|
+
/** 展示户型图时,five 需要处于的相机状态 */
|
|
9
|
+
protected showState: ShowState;
|
|
10
|
+
/** show 动画的公共 Promise */
|
|
11
|
+
protected showPromise?: Promise<void>;
|
|
12
|
+
/** show 过程中的 reject 方法,用于被 hide/disable 打断时抛出 */
|
|
13
|
+
private showRejection?;
|
|
14
|
+
private renderer;
|
|
15
|
+
private styleSheet;
|
|
16
|
+
private panoIndex;
|
|
17
|
+
private floorIndex;
|
|
18
|
+
/** 户型图父容器 */
|
|
19
|
+
private wrapper?;
|
|
20
|
+
/** five.addExtraElement 的解绑函数:户型图 DOM 与 five 画布是兄弟节点而非子节点,
|
|
21
|
+
* wheel/pan/tap 等原生事件不会冒泡到 five 绑定监听的画布元素上,
|
|
22
|
+
* 必须显式注册为 extraElement 才能让 hover 在户型图 DOM(如房间高亮层)上时鼠标滚轮缩放等手势仍然生效 */
|
|
23
|
+
private removeExtraElement?;
|
|
24
|
+
/** 展示户型图前,Five 的 Panorama Longitude(用于相机图标朝向) */
|
|
25
|
+
private lastPanoramaLongitude;
|
|
26
|
+
/** 户型图 DOM 大小 */
|
|
27
|
+
private size;
|
|
28
|
+
/** 是否已经执行过事件监听 */
|
|
29
|
+
private hasAddedEventListener;
|
|
30
|
+
/** 上一次隐藏是否是用户调用了 hide 导致的(用于阻止随后的自动展示) */
|
|
31
|
+
private isHiddenByHideFunc;
|
|
32
|
+
/** 高亮区域 */
|
|
33
|
+
private highlightData;
|
|
34
|
+
/** 当前 hover 的房间,供 handleClick 读取 */
|
|
35
|
+
private store;
|
|
36
|
+
private resizeObserver?;
|
|
37
|
+
constructor(five: Five, params?: Params);
|
|
38
|
+
/** 加载户型图服务端数据 */
|
|
39
|
+
load(serverData: PluginServerData, state?: Partial<State>, userAction?: boolean): Promise<void>;
|
|
40
|
+
/** 把楼层数据里的家具数组填充进 floorDatas[i].items(数据结构与业务约定的家具数据源对齐,此处保留扩展点,调用方自行传入格式化后的数组) */
|
|
41
|
+
loadItems(itemsByFloor: PluginData['floorDatas'][number]['items'][]): void;
|
|
42
|
+
/** 把插件渲染 DOM 挂载到指定容器 */
|
|
43
|
+
appendTo(wrapper: Element): void;
|
|
44
|
+
enable(options?: BasePlugin.BaseOptions): void;
|
|
45
|
+
disable(options?: BasePlugin.BaseOptions): void;
|
|
46
|
+
dispose: () => void;
|
|
47
|
+
/**
|
|
48
|
+
* 展示户型图
|
|
49
|
+
* @description 多次调用只会触发一次 showAnimationEnded;如果参数不一致,上一次 show 的 Promise 会被 reject
|
|
50
|
+
*/
|
|
51
|
+
show: (options?: Omit<Partial<ShowOptions>, "isAutoShow">) => Promise<void>;
|
|
52
|
+
/** 隐藏户型图 */
|
|
53
|
+
hide: (options?: Partial<HideOptions>) => Promise<void>;
|
|
54
|
+
setState(state: Partial<State>, options?: BasePlugin.BaseOptions): void;
|
|
55
|
+
changeConfigs(config: Partial<Config>, userAction?: boolean): void;
|
|
56
|
+
/** 更新户型图展示大小(根据吸附高度换算的 pxmm 计算 DOM 尺寸) */
|
|
57
|
+
updateSize(): boolean;
|
|
58
|
+
/** 更新户型图位置(跟随模型包围盒中心的屏幕投影) */
|
|
59
|
+
updatePosition(): void;
|
|
60
|
+
highlight: (highlightData: HighlightData) => void;
|
|
61
|
+
unhighlight: () => void;
|
|
62
|
+
/** 更新展示状态(longitude/latitude/offset 等),可用于自定义户型图展示角度 */
|
|
63
|
+
updateShowState: (showState: Partial<ShowState>) => void;
|
|
64
|
+
private getPxmmWithRotation;
|
|
65
|
+
private updateState;
|
|
66
|
+
private initContainer;
|
|
67
|
+
private registerExtraElement;
|
|
68
|
+
private observeResize;
|
|
69
|
+
/** 帧节流:把 resize 触发的 updateSize/updatePosition 合并到下一帧执行,避开与 five.refresh() 的调用顺序竞态 */
|
|
70
|
+
private pendingResizeFrame?;
|
|
71
|
+
private scheduleResizeUpdate;
|
|
72
|
+
private renderCurrent;
|
|
73
|
+
private onRoomHover;
|
|
74
|
+
private handleClick;
|
|
75
|
+
private addEventListener;
|
|
76
|
+
private removeEventListener;
|
|
77
|
+
private onFiveModelLoaded;
|
|
78
|
+
/** 模式切换后自动隐藏户型图 */
|
|
79
|
+
private onFiveModeChange;
|
|
80
|
+
/** 惯性结束后,判断能否自动展示户型图 */
|
|
81
|
+
private onFiveInertiaPan;
|
|
82
|
+
private onFivePanoArrived;
|
|
83
|
+
/** 相机变化时判断户型图是否应该自动隐藏 */
|
|
84
|
+
private onFiveCameraUpdate;
|
|
85
|
+
/** 帧节流:把 updatePosition/updateSize 合并到下一帧执行,避免逐帧触发同步重排 */
|
|
86
|
+
private pendingCameraUpdateFrame?;
|
|
87
|
+
private scheduleCameraUpdate;
|
|
88
|
+
private getRelativePose;
|
|
89
|
+
/** 户型图展示中转动模型,结束时自动修复模型状态 */
|
|
90
|
+
private onFiveWantsPanGesture;
|
|
91
|
+
private onFiveWantsTapGesture;
|
|
92
|
+
private onFiveWantsChangeMode;
|
|
93
|
+
/** 模型楼层高亮改变时,自动进行楼层切换 */
|
|
94
|
+
private onModelShownFloorChange;
|
|
95
|
+
private _enable;
|
|
96
|
+
private _disable;
|
|
97
|
+
private _show;
|
|
98
|
+
private _hide;
|
|
99
|
+
private renderWithDuration;
|
|
100
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Five } from '@realsee/five-webgpu';
|
|
2
|
+
import type * as FloorplanPluginType from './typing';
|
|
3
|
+
import { Controller } from './Controller';
|
|
4
|
+
export declare const FloorplanPlugin: (five: Five, params?: FloorplanPluginType.Params) => Controller;
|
|
5
|
+
export type { FloorplanPluginType, Controller as FloorplanPluginController };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 相机(点位)朝向图标:一个指向朝向的扇形箭头,中心为当前点位
|
|
3
|
+
* 用轻量内联 SVG 代替原 dnalogelSDK 的位图资源,保留相近的视觉语义
|
|
4
|
+
*/
|
|
5
|
+
export declare const CAMERA_IMAGE = "data:image/png;base64,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";
|
|
6
|
+
/**
|
|
7
|
+
* 指北针图标:一个简单的指针 + N 字标记
|
|
8
|
+
*/
|
|
9
|
+
export declare const COMPASS_IMAGE = "data:image/png;base64,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";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Config, FloorplanData, FloorplanRoomItem, HighlightData } from '../typing';
|
|
2
|
+
export interface RenderProps {
|
|
3
|
+
visible: boolean;
|
|
4
|
+
duration: number;
|
|
5
|
+
panoIndex: number;
|
|
6
|
+
floorIndex: number;
|
|
7
|
+
floorplanData: FloorplanData;
|
|
8
|
+
lastPanoramaLongitude: number;
|
|
9
|
+
config: Config;
|
|
10
|
+
highlightData: HighlightData;
|
|
11
|
+
store: {
|
|
12
|
+
roomOnMouse: FloorplanRoomItem | null;
|
|
13
|
+
};
|
|
14
|
+
onRoomHover: (room: FloorplanRoomItem | null) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 户型图纯 DOM/SVG 渲染器
|
|
18
|
+
* @description 替代 dnalogelSDK 的 Svelte 版本渲染层,管理每个楼层的 DOM 复用与展示态切换
|
|
19
|
+
*/
|
|
20
|
+
export declare class FloorplanRenderer {
|
|
21
|
+
readonly rootElement: HTMLElement;
|
|
22
|
+
/** floorIndex -> 楼层 DOM,缓存以避免每次 render 都重建整棵树 */
|
|
23
|
+
private floorElements;
|
|
24
|
+
private currentFloorIndex;
|
|
25
|
+
private isVisible;
|
|
26
|
+
constructor();
|
|
27
|
+
/**
|
|
28
|
+
* 根据最新的 props 全量刷新渲染结果
|
|
29
|
+
* @description 楼层 DOM 会被复用(数据没变时不重建),只有当前楼层可见(opacity/pointer-events 切换)
|
|
30
|
+
*/
|
|
31
|
+
render(props: RenderProps): void;
|
|
32
|
+
/** 重新计算当前楼层房间标签的可见性(容器 resize 后调用) */
|
|
33
|
+
updateLabelsVisibility(floorplanData: FloorplanData, floorIndex: number, adaptiveEnable: boolean): void;
|
|
34
|
+
dispose(): void;
|
|
35
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Config, FloorplanData, FloorplanRoomItem, HighlightData } from '../typing';
|
|
2
|
+
export interface RenderFloorContext {
|
|
3
|
+
floorplanData: FloorplanData;
|
|
4
|
+
floorIndex: number;
|
|
5
|
+
panoIndex: number;
|
|
6
|
+
lastPanoramaLongitude: number;
|
|
7
|
+
config: Config;
|
|
8
|
+
highlightData: HighlightData;
|
|
9
|
+
/** 当前 hover 的房间,供外部(Controller.handleClick)读取 */
|
|
10
|
+
store: {
|
|
11
|
+
roomOnMouse: FloorplanRoomItem | null;
|
|
12
|
+
};
|
|
13
|
+
onRoomHover: (room: FloorplanRoomItem | null) => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 渲染单个楼层的完整 DOM 树(材质 -> 高亮 -> 线框 -> 家具 -> 标签 -> 相机 -> 指北针)
|
|
17
|
+
*/
|
|
18
|
+
export declare function renderFloor(ctx: RenderFloorContext): HTMLElement;
|
|
19
|
+
/**
|
|
20
|
+
* 根据房间标签 DOM 的实际尺寸和 pxmm,更新标签的自适应显隐(需要在 DOM 挂载并有真实宽度后调用)
|
|
21
|
+
*/
|
|
22
|
+
export declare function updateRoomLabelsVisibility(floorEl: HTMLElement, floorplanData: FloorplanData, floorIndex: number, adaptiveEnable: boolean): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FloorplanRoomItem } from '../typings';
|
|
2
|
+
/**
|
|
3
|
+
* 判断房间标签 DOM(给定宽高,中心点对齐 room.roomLabel.position)在 pxmm 缩放下
|
|
4
|
+
* 是否整体落在房间轮廓内(四个角都在多边形内才算通过)
|
|
5
|
+
* @description 与 dnalogelSDK RoomLabel.svelte 的 isLabelInRoomCurry 等价
|
|
6
|
+
*/
|
|
7
|
+
export declare function isLabelInRoom(room: FloorplanRoomItem, labelSize: {
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
}, pxmm: number): boolean;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type * as THREE from 'three/webgpu';
|
|
2
|
+
import type { BasePlugin } from '../BasePlugin';
|
|
3
|
+
import type { FloorplanData, FloorplanServerData, FloorplanRoomItem, FloorplanItem } from './typings';
|
|
4
|
+
export * from './typings';
|
|
5
|
+
/** 户型图在垂直方向上吸附的高度基准 */
|
|
6
|
+
export declare const enum FLOOR_PLAN_ATTACHED_TO {
|
|
7
|
+
/** 吸附到楼层地面 */
|
|
8
|
+
FLOOR = 1,
|
|
9
|
+
/** 吸附到楼层天花板 */
|
|
10
|
+
CEILING = 2,
|
|
11
|
+
/** 吸附到模型整体包围盒中心高度 */
|
|
12
|
+
BOUNDING_CENTER = 3
|
|
13
|
+
}
|
|
14
|
+
export declare const enum FloorplanErrorType {
|
|
15
|
+
UnknownError = "UnknownError",
|
|
16
|
+
DataNotLoaded = "DataNotLoaded",
|
|
17
|
+
UpdateSizeError = "UpdateSizeError",
|
|
18
|
+
BreakOffByHide = "BreakOffByHide",
|
|
19
|
+
BreakOffByDisable = "BreakOffByDisable",
|
|
20
|
+
ModelNotLoaded = "ModelNotLoaded",
|
|
21
|
+
ChangeModeError = "ChangeModeError",
|
|
22
|
+
UpdateCameraError = "UpdateCameraError"
|
|
23
|
+
}
|
|
24
|
+
export type PluginData = FloorplanData;
|
|
25
|
+
export type PluginServerData = FloorplanServerData | {
|
|
26
|
+
version: number;
|
|
27
|
+
data: FloorplanServerData;
|
|
28
|
+
};
|
|
29
|
+
export type ShowMode = 'Topview' | 'Mapview' | 'Floorplan';
|
|
30
|
+
/** 展示户型图时,需要 five 处于的相机状态 */
|
|
31
|
+
export interface ShowState {
|
|
32
|
+
latitude: number;
|
|
33
|
+
longitude: number;
|
|
34
|
+
fov?: number;
|
|
35
|
+
mode: ShowMode;
|
|
36
|
+
offset?: THREE.Vector3;
|
|
37
|
+
distance?: number;
|
|
38
|
+
}
|
|
39
|
+
export interface MissingFloorConfig {
|
|
40
|
+
imageURL: string;
|
|
41
|
+
imageWidth: number;
|
|
42
|
+
imageHeight: number;
|
|
43
|
+
text: string;
|
|
44
|
+
textFontSize: number;
|
|
45
|
+
}
|
|
46
|
+
export interface Config {
|
|
47
|
+
/** 指北针文字 */
|
|
48
|
+
northDesc: string;
|
|
49
|
+
/** 展示户型图时,模型/全景画面的透明度 */
|
|
50
|
+
modelOpacity: number;
|
|
51
|
+
/** 是否展示相机(点位)图标 */
|
|
52
|
+
cameraEnable: boolean;
|
|
53
|
+
/** 是否允许房间高亮 */
|
|
54
|
+
highlightEnable: boolean;
|
|
55
|
+
/** 鼠标 hover 房间时是否高亮 */
|
|
56
|
+
hoverEnable: boolean;
|
|
57
|
+
/** 是否展示指北针 */
|
|
58
|
+
compassEnable: boolean;
|
|
59
|
+
/** 相机静止一段时间后是否自动展示户型图 */
|
|
60
|
+
autoShowEnable: boolean;
|
|
61
|
+
/** 是否展示外墙标尺 */
|
|
62
|
+
ruleLabelsEnable: boolean;
|
|
63
|
+
/** 是否展示房间标签(名称/面积/尺寸的总开关) */
|
|
64
|
+
roomLabelsEnable: boolean;
|
|
65
|
+
/** 是否展示房间面积 */
|
|
66
|
+
roomAreaEnable: boolean;
|
|
67
|
+
/** 是否展示房间名称 */
|
|
68
|
+
roomNameEnable: boolean;
|
|
69
|
+
/** 其它类型房间是否展示名称 */
|
|
70
|
+
roomNameOtherTypeEnable: boolean;
|
|
71
|
+
/** 是否展示房间尺寸标注 */
|
|
72
|
+
roomDimensionEnable: boolean;
|
|
73
|
+
/** 相机(点位)图标使用的图片地址 */
|
|
74
|
+
cameraImageUrl: string;
|
|
75
|
+
/** 户型图在垂直方向上的吸附基准 */
|
|
76
|
+
attachedTo: FLOOR_PLAN_ATTACHED_TO;
|
|
77
|
+
/** 自定义房间标签渲染,返回值将替代默认的名称/面积/尺寸 DOM */
|
|
78
|
+
getLabelElement?: (room: FloorplanRoomItem) => HTMLElement | undefined;
|
|
79
|
+
/** 房间标签是否根据房间大小自适应显隐 */
|
|
80
|
+
adaptiveRoomLabelVisibleEnable: boolean;
|
|
81
|
+
/** 无楼层数据时的占位配置 */
|
|
82
|
+
missingFloorConfig: Partial<MissingFloorConfig>;
|
|
83
|
+
/** 国际化转换函数 */
|
|
84
|
+
i18n: (key: string) => string;
|
|
85
|
+
/** 面积文案格式化 */
|
|
86
|
+
getRoomAreaText: (size: number) => string;
|
|
87
|
+
/** 尺寸文案格式化 */
|
|
88
|
+
getRoomDimensionText: (width: number, height: number) => string;
|
|
89
|
+
/** 标尺距离文案格式化 */
|
|
90
|
+
getRuleDistanceText: (distance: number) => string;
|
|
91
|
+
}
|
|
92
|
+
/** 插件初始化参数 */
|
|
93
|
+
export interface Params {
|
|
94
|
+
config?: Partial<Config>;
|
|
95
|
+
initialState?: Partial<State>;
|
|
96
|
+
/** 展示户型图时期望 five 处于的相机状态,可通过 updateShowState 更新 */
|
|
97
|
+
showState?: Partial<ShowState>;
|
|
98
|
+
}
|
|
99
|
+
export interface State extends BasePlugin.State {
|
|
100
|
+
enabled: boolean;
|
|
101
|
+
visible: boolean;
|
|
102
|
+
config: Config;
|
|
103
|
+
}
|
|
104
|
+
export interface ShowOptions {
|
|
105
|
+
/** 展示的楼层 */
|
|
106
|
+
floorIndex: number;
|
|
107
|
+
/** 展示户型图时,模型 / 全景画面的透明度 */
|
|
108
|
+
modelOpacity: number;
|
|
109
|
+
/** 是否立即展示(不做渐显动画) */
|
|
110
|
+
immediately: boolean;
|
|
111
|
+
/** 是否是自动展示(惯性停止后触发),内部使用 */
|
|
112
|
+
isAutoShow: boolean;
|
|
113
|
+
/** 是否是用户行为 */
|
|
114
|
+
userAction: boolean;
|
|
115
|
+
}
|
|
116
|
+
export interface HideOptions {
|
|
117
|
+
userAction: boolean;
|
|
118
|
+
/** 是否是自动隐藏(相机大幅转动触发),内部使用 */
|
|
119
|
+
isAutoHide: boolean;
|
|
120
|
+
}
|
|
121
|
+
/** 高亮数据,key 为 `${floorIndex}_${roomId}` */
|
|
122
|
+
export type HighlightData = Record<string, {
|
|
123
|
+
fill?: string;
|
|
124
|
+
opacity?: number;
|
|
125
|
+
disabled?: boolean;
|
|
126
|
+
} | undefined>;
|
|
127
|
+
export interface EventMap extends BasePlugin.EventMap<State, PluginData> {
|
|
128
|
+
/** enabled 从 false 到 true 的回调 */
|
|
129
|
+
enable: (event: {
|
|
130
|
+
userAction: boolean;
|
|
131
|
+
}) => void;
|
|
132
|
+
/** enabled 从 true 到 false 的回调 */
|
|
133
|
+
disable: (event: {
|
|
134
|
+
userAction: boolean;
|
|
135
|
+
}) => void;
|
|
136
|
+
/** 插件 dispose */
|
|
137
|
+
dispose: () => void;
|
|
138
|
+
/** 开始展示户型图 */
|
|
139
|
+
show: (event: {
|
|
140
|
+
userAction: boolean;
|
|
141
|
+
auto: boolean;
|
|
142
|
+
}) => void;
|
|
143
|
+
/** 户型图展示动画结束 */
|
|
144
|
+
showAnimationEnded: (event: {
|
|
145
|
+
userAction: boolean;
|
|
146
|
+
auto: boolean;
|
|
147
|
+
}) => void;
|
|
148
|
+
/** 隐藏户型图 */
|
|
149
|
+
hide: (event: {
|
|
150
|
+
auto: boolean;
|
|
151
|
+
userAction: boolean;
|
|
152
|
+
}) => void;
|
|
153
|
+
/** 点击房间,返回 false 可阻止默认的分间跳转行为 */
|
|
154
|
+
click: (room: FloorplanRoomItem | null) => void | false;
|
|
155
|
+
}
|
|
156
|
+
export type { FloorplanRoomItem, FloorplanItem };
|