@realsee/dnalogel 0.1.0 → 0.1.4
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/data/8054djM0oR6ky3Ey8e.d.ts +55 -0
- package/data/8054djM0oR6ky3Ey8e.js +348 -0
- package/data/PrXel3aqGbp34JQn.js +10 -2
- package/data/XJ6NMLWnkAY3Rdx8.d.ts +843 -0
- package/data/XJ6NMLWnkAY3Rdx8.js +7987 -0
- package/data/jd6oMOzPxnQ3BvxY_B7yw51J9rXlhYhjhGTOgRVqu6WeEqjNX.d.ts +85 -0
- package/data/jd6oMOzPxnQ3BvxY_B7yw51J9rXlhYhjhGTOgRVqu6WeEqjNX.js +509 -0
- package/data/vLykj3NWrllMrG06.d.ts +2 -0
- package/data/vLykj3NWrllMrG06.js +197 -2
- package/data/zxMawr9raSg8LYjG.d.ts +53 -0
- package/data/zxMawr9raSg8LYjG.js +588 -0
- package/package.json +3 -3
- package/plugins/AutoPreloadPlugin/index.d.ts +23 -0
- package/plugins/AutoPreloadPlugin/index.js +85 -0
- package/plugins/CSS3DRenderPlugin/index.d.ts +11 -11
- package/plugins/CSS3DRenderPlugin/index.js +170 -120
- package/plugins/ModelChassisCompassPlugin/index.d.ts +7 -3
- package/plugins/ModelChassisCompassPlugin/index.js +13 -26
- package/plugins/ModelEntryDoorGuidePlugin/index.d.ts +13 -1
- package/plugins/ModelEntryDoorGuidePlugin/index.js +212 -2
- package/plugins/ModelRoomLabelPlugin/Controller.d.ts +35 -0
- package/plugins/ModelRoomLabelPlugin/Controller.js +147 -0
- package/plugins/ModelRoomLabelPlugin/RoomLabelItem.d.ts +8 -0
- package/plugins/ModelRoomLabelPlugin/RoomLabelItem.js +48 -0
- package/plugins/ModelRoomLabelPlugin/RoomLabelItems.d.ts +7 -0
- package/plugins/ModelRoomLabelPlugin/RoomLabelItems.js +149 -0
- package/plugins/ModelRoomLabelPlugin/index.d.ts +8 -0
- package/plugins/ModelRoomLabelPlugin/index.js +16 -0
- package/plugins/ModelRoomLabelPlugin/typings.d.ts +35 -0
- package/plugins/ModelRoomLabelPlugin/typings.js +5 -0
- package/plugins/ModelRoomLabelPlugin/utils/parseData.d.ts +3 -0
- package/plugins/ModelRoomLabelPlugin/utils/parseData.js +29 -0
- package/plugins/PanoMaskSelectorPlugin/compare.d.ts +1 -0
- package/plugins/PanoMaskSelectorPlugin/compare.js +15 -0
- package/plugins/PanoMaskSelectorPlugin/createBox.d.ts +7 -0
- package/plugins/PanoMaskSelectorPlugin/createBox.js +61 -0
- package/plugins/PanoMaskSelectorPlugin/createTextures.d.ts +3 -0
- package/plugins/PanoMaskSelectorPlugin/createTextures.js +29 -0
- package/plugins/PanoMaskSelectorPlugin/fragmentShader.d.ts +1 -0
- package/plugins/PanoMaskSelectorPlugin/fragmentShader.js +8 -0
- package/plugins/PanoMaskSelectorPlugin/index.d.ts +49 -0
- package/plugins/PanoMaskSelectorPlugin/index.js +272 -0
- package/plugins/PanoMaskSelectorPlugin/vertexShader.d.ts +1 -0
- package/plugins/PanoMaskSelectorPlugin/vertexShader.js +8 -0
- package/plugins/TreasurePlugin/Controller.d.ts +53 -12
- package/plugins/TreasurePlugin/Controller.js +129 -60
- package/plugins/TreasurePlugin/TreasureFaceAnime.d.ts +8 -6
- package/plugins/TreasurePlugin/TreasureFaceAnime.js +4 -4
- package/plugins/TreasurePlugin/TreasureObject.d.ts +30 -12
- package/plugins/TreasurePlugin/TreasureObject.js +269 -53
- package/plugins/TreasurePlugin/TreasureOpenAnime.d.ts +4 -2
- package/plugins/TreasurePlugin/TreasureOpenAnime.js +10 -5
- package/plugins/TreasurePlugin/constants.d.ts +32 -11
- package/plugins/TreasurePlugin/constants.js +52 -17
- package/plugins/TreasurePlugin/index.d.ts +5 -5
- package/plugins/TreasurePlugin/index.js +8 -0
- package/plugins/floorplan/ModelFloorplanPlugin/components/Camera.js +4 -2
- package/plugins/floorplan/ModelFloorplanPlugin/components/Compass.js +2 -1
- package/plugins/floorplan/ModelFloorplanPlugin/components/NowFloor/RoomLabels.js +5 -2
- package/plugins/floorplan/ModelFloorplanPlugin/components/index.js +1 -1
- package/plugins/floorplan/typings/floorplanData.d.ts +5 -1
- package/plugins/floorplan/utils/formatData.js +1 -22
- package/plugins/floorplan/utils/formatPosition.d.ts +4 -4
- package/shared-utils/createCanvasTextTexture.d.ts +8 -0
- package/shared-utils/createCanvasTextTexture.js +29 -0
- package/shared-utils/isNil.d.ts +10 -0
- package/shared-utils/isNil.js +24 -0
- package/shared-utils/three/getExtraModelLoader.d.ts +6 -0
- package/shared-utils/three/getExtraModelLoader.js +31 -0
- package/shared-utils/three/getTextureLoader.d.ts +6 -0
- package/shared-utils/three/getTextureLoader.js +34 -0
- package/shared-utils/three/loadFbxObj.d.ts +1 -2
- package/shared-utils/three/loadFbxObj.js +6 -2
- package/shared-utils/three/transformPositionToVector3.d.ts +7 -0
- package/shared-utils/three/{vecror3.js → transformPositionToVector3.js} +2 -2
- package/shared-utils/three/transfromToMeshBasicMaterial.d.ts +2 -0
- package/shared-utils/three/transfromToMeshBasicMaterial.js +27 -0
- package/shared-utils/to.d.ts +0 -1
- package/shared-utils/to.js +45 -7
- package/typedoc/plugins.d.ts +3 -1
- package/typedoc/plugins.js +63 -13
- package/typedoc/typings.d.ts +1 -1
- package/typings/math.type.d.ts +2 -2
- package/data/wYnRjQ4KZoV1yPoG.d.ts +0 -114
- package/data/wYnRjQ4KZoV1yPoG.js +0 -512
- package/plugins/PanoCursorRaycasterPlugin/utils/vecror3.d.ts +0 -7
- package/plugins/PanoCursorRaycasterPlugin/utils/vecror3.js +0 -18
- package/plugins/TreasurePlugin/treasureDataMap.d.ts +0 -7
- package/plugins/TreasurePlugin/treasureDataMap.js +0 -20
- package/plugins/TreasurePlugin/utils/loadTreasureTextures.d.ts +0 -7
- package/plugins/TreasurePlugin/utils/loadTreasureTextures.js +0 -115
- package/shared-utils/three/vecror3.d.ts +0 -7
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
|
|
8
|
+
var _nextFrame = require("../../shared-utils/nextFrame");
|
|
9
|
+
|
|
10
|
+
/** 优化首点位加载的逻辑
|
|
11
|
+
*
|
|
12
|
+
* 1.进入 VR 时,如果 Five 默认的配置图片像素超过了 1024,先用 1024 加载
|
|
13
|
+
* 第一个点位加载完成之后,再使用业务上配置的图片像素重复加载一遍当前点位
|
|
14
|
+
*
|
|
15
|
+
* 2.在走点时,会预载距离当前点位最近的 preloadPanoIndexNumber 个数的点
|
|
16
|
+
* @description
|
|
17
|
+
* 预载周围的点时,不会一次性全部预载。而是每隔1s,预载其中的一个点
|
|
18
|
+
*/
|
|
19
|
+
var AutoPreloadPlugin = function AutoPreloadPlugin(five, parameters) {
|
|
20
|
+
var _parameters$preloadIm, _parameters$preloadPa;
|
|
21
|
+
|
|
22
|
+
var preloadImageSize = (_parameters$preloadIm = parameters === null || parameters === void 0 ? void 0 : parameters.preloadImageSize) !== null && _parameters$preloadIm !== void 0 ? _parameters$preloadIm : 1024;
|
|
23
|
+
var preloadPanoIndexNumber = (_parameters$preloadPa = parameters === null || parameters === void 0 ? void 0 : parameters.preloadPanoIndexNumber) !== null && _parameters$preloadPa !== void 0 ? _parameters$preloadPa : 4;
|
|
24
|
+
var lastSize = five.imageOptions.size;
|
|
25
|
+
var timer = void 0;
|
|
26
|
+
|
|
27
|
+
var doPreload = function doPreload(quene) {
|
|
28
|
+
if (quene.length === 0) return;
|
|
29
|
+
five.preloadPano(quene[0]);
|
|
30
|
+
if (quene.length === 1) return;
|
|
31
|
+
timer = setTimeout(function () {
|
|
32
|
+
return doPreload(quene.splice(1));
|
|
33
|
+
}, 1000);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
var onPanoArrived = function onPanoArrived(panoIndex) {
|
|
37
|
+
if (parameters !== null && parameters !== void 0 && parameters.shouldPreloadAroundPanoImage) {
|
|
38
|
+
var shouldPreload = parameters.shouldPreloadAroundPanoImage(panoIndex);
|
|
39
|
+
if (!shouldPreload) return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (timer) clearTimeout(timer);
|
|
43
|
+
var currentIndex = panoIndex;
|
|
44
|
+
var currentObserver = five.work.observers[currentIndex];
|
|
45
|
+
var preloadIndexArray = Array.from(new Set(five.work.observers.filter(function (observer) {
|
|
46
|
+
return observer.floorIndex === currentObserver.floorIndex;
|
|
47
|
+
}).map(function (observer) {
|
|
48
|
+
var distance = observer.standingPosition.clone().distanceTo(currentObserver.standingPosition);
|
|
49
|
+
return {
|
|
50
|
+
observer: observer,
|
|
51
|
+
distance: distance
|
|
52
|
+
};
|
|
53
|
+
}).sort(function (a, b) {
|
|
54
|
+
return a.distance - b.distance;
|
|
55
|
+
}).slice(0, preloadPanoIndexNumber).map(function (_ref) {
|
|
56
|
+
var observer = _ref.observer;
|
|
57
|
+
return observer.panoIndex;
|
|
58
|
+
})));
|
|
59
|
+
doPreload(preloadIndexArray);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
var onFirstPanoArrived = function onFirstPanoArrived(panoIndex) {
|
|
63
|
+
// 在第一次点位加载之后再做周围点位的预载,防止第一个点位周围的点预载两次
|
|
64
|
+
// 同时也防止阻塞第一个点的低分辨率图快速加载
|
|
65
|
+
five.on('panoArrived', onPanoArrived);
|
|
66
|
+
var shouldPreloadFirstPanoImage = five.imageOptions.size !== lastSize;
|
|
67
|
+
if (!shouldPreloadFirstPanoImage) return;
|
|
68
|
+
(0, _nextFrame.nextFrame)(function () {
|
|
69
|
+
five.imageOptions.size = lastSize;
|
|
70
|
+
five.moveToPano(panoIndex);
|
|
71
|
+
}, 5);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
five.imageOptions.size = lastSize && lastSize > preloadImageSize ? preloadImageSize : lastSize;
|
|
75
|
+
if (five.imageOptions.size !== lastSize) five.once('panoArrived', onFirstPanoArrived);
|
|
76
|
+
return {
|
|
77
|
+
dispose: function dispose() {
|
|
78
|
+
five.off('panoArrived', onFirstPanoArrived);
|
|
79
|
+
five.off('panoArrived', onPanoArrived);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
var _default = AutoPreloadPlugin;
|
|
85
|
+
exports["default"] = _default;
|
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import { FivePlugin } from '@realsee/five';
|
|
2
2
|
import { Vector3 } from 'three';
|
|
3
3
|
import { CSS3DObject } from 'three/examples/jsm/renderers/CSS3DRenderer';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { Vector3Position } from '../../typings/math.type';
|
|
5
|
+
export declare type CSS3DRenderPluginParameterType = undefined;
|
|
6
6
|
export interface CSS3DRenderPluginExportType {
|
|
7
7
|
/**
|
|
8
8
|
* @description: 根据传入的四个点位创建一个3d dom容器,可以通过ReactDom.render()的方式将react组件放到容器中
|
|
9
9
|
* @param {Five} five
|
|
10
|
-
* @param {Vector3[]} points: 矩形四个点坐标
|
|
11
|
-
* @param {HTMLElement} container: HTMLElement
|
|
10
|
+
* @param {Vector3[] | Vector3Position[]} points: 矩形四个点坐标
|
|
12
11
|
* @param {number} config.ratio: 1px对应多少米,默认为 0.002,即1px对应2mm
|
|
13
12
|
* @param {number} config.dpr: dpr, 默认为1
|
|
13
|
+
* @param {HTMLElement} config.container: HTMLElement
|
|
14
14
|
* @param {number} config.autoRender: 默认为true,如果需要手动render则传false
|
|
15
15
|
* @param {'front' | 'behind'} config.mode: 两种模式
|
|
16
|
-
* @param {HTMLElement} config.behindFiveContainer: 如果config.mode为'behind'
|
|
16
|
+
* @param {HTMLElement} config.behindFiveContainer: 如果config.mode为'behind',需要传入容器,并确保此容器位five下方,且中间没有其他dom元素遮挡
|
|
17
17
|
* @return {{ container: HTMLElement; dispose: () => void }}: container: dom容器, dispose: 清理函数
|
|
18
18
|
*/
|
|
19
|
-
create3DDomContainer: (points: [
|
|
19
|
+
create3DDomContainer: (points: Vector3[] | Vector3Position[], config?: {
|
|
20
20
|
ratio?: number;
|
|
21
21
|
dpr?: number;
|
|
22
22
|
autoRender?: boolean;
|
|
23
|
+
container?: HTMLElement;
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
} & ({
|
|
23
26
|
mode?: 'front';
|
|
24
27
|
} | {
|
|
25
|
-
ratio?: number;
|
|
26
|
-
dpr?: number;
|
|
27
|
-
autoRender?: boolean;
|
|
28
28
|
mode: 'behind';
|
|
29
29
|
behindFiveContainer: HTMLElement;
|
|
30
|
-
}) => {
|
|
30
|
+
})) => {
|
|
31
31
|
container: HTMLElement;
|
|
32
32
|
dispose: () => void;
|
|
33
|
-
|
|
33
|
+
css3DObject: CSS3DObject;
|
|
34
34
|
render?: () => void;
|
|
35
35
|
} | void;
|
|
36
36
|
/**
|
|
@@ -15,61 +15,195 @@ var _evenNumber = _interopRequireDefault(require("../../shared-utils/math/evenNu
|
|
|
15
15
|
|
|
16
16
|
var _centerPoint = _interopRequireDefault(require("../../shared-utils/three/centerPoint"));
|
|
17
17
|
|
|
18
|
+
var _transformPositionToVector = _interopRequireDefault(require("../../shared-utils/three/transformPositionToVector3"));
|
|
19
|
+
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
19
21
|
|
|
20
22
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
23
|
|
|
22
24
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
25
|
|
|
24
|
-
function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure undefined"); }
|
|
25
|
-
|
|
26
26
|
/**
|
|
27
27
|
* **CSS3DRenderPlugin** 提供矩形区域(三维空间四个坐标点),你可以在此矩形区域中渲染 DOM 内容。
|
|
28
28
|
* 实现原理参考[CSS3DRenderer](https://threejs.org/docs/index.html?q=CSS3D#examples/en/renderers/CSS3DRenderer)。
|
|
29
29
|
*
|
|
30
30
|
* @returns
|
|
31
31
|
*/
|
|
32
|
-
var CSS3DRenderPlugin = function CSS3DRenderPlugin(five
|
|
33
|
-
_objectDestructuringEmpty(_ref);
|
|
34
|
-
|
|
32
|
+
var CSS3DRenderPlugin = function CSS3DRenderPlugin(five) {
|
|
35
33
|
var state = {
|
|
36
34
|
disposeCallbacks: []
|
|
37
35
|
};
|
|
38
36
|
|
|
39
|
-
var create3DDomContainer = function create3DDomContainer(
|
|
40
|
-
var _five$model;
|
|
37
|
+
var create3DDomContainer = function create3DDomContainer() {
|
|
38
|
+
var _five$model, _five$model2, _config$autoRender;
|
|
41
39
|
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
41
|
+
params[_key] = arguments[_key];
|
|
44
42
|
}
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
var points = params[0].map(function (point) {
|
|
45
|
+
return point instanceof THREE.Vector3 ? point : (0, _transformPositionToVector["default"])(point);
|
|
46
|
+
});
|
|
47
|
+
var config = params[1];
|
|
48
|
+
if ((points === null || points === void 0 ? void 0 : points.length) < 4) return console.error('points must be equal or greater than than 4');
|
|
49
|
+
if (!(five !== null && five !== void 0 && (_five$model = five.model) !== null && _five$model !== void 0 && _five$model.loaded)) return console.error('five.model.loaded is: ', five === null || five === void 0 ? void 0 : (_five$model2 = five.model) === null || _five$model2 === void 0 ? void 0 : _five$model2.loaded);
|
|
50
|
+
var fiveElement = five.getElement();
|
|
51
|
+
if (!fiveElement) return console.error('five.getElement() is ' + fiveElement);
|
|
52
|
+
var disposers = [];
|
|
53
|
+
var ratio = (config === null || config === void 0 ? void 0 : config.ratio) || 0.00216;
|
|
54
|
+
if (ratio <= 0.00215) console.warn('if you need click css3DElement on safari, ratio must be greater than 0.00215');
|
|
55
|
+
var dpr = (config === null || config === void 0 ? void 0 : config.dpr) || 1;
|
|
56
|
+
var mode = (config === null || config === void 0 ? void 0 : config.mode) || 'front';
|
|
57
|
+
var autoRender = (_config$autoRender = config === null || config === void 0 ? void 0 : config.autoRender) !== null && _config$autoRender !== void 0 ? _config$autoRender : true;
|
|
58
|
+
var behindFiveContainer = (config === null || config === void 0 ? void 0 : config.behindFiveContainer) || fiveElement.parentElement || document.body;
|
|
59
|
+
var container = (config === null || config === void 0 ? void 0 : config.container) || document.createElement('div');
|
|
60
|
+
container.classList.add('__Dnalogel-plugin--CSS3DRenderPlugin'); // 获取css3DObject, 如果mode为behind的话,一起获取mesh
|
|
61
|
+
|
|
62
|
+
var _createObject = createObject(points, {
|
|
63
|
+
ratio: ratio,
|
|
64
|
+
dpr: dpr,
|
|
65
|
+
container: container,
|
|
66
|
+
mode: mode
|
|
67
|
+
}),
|
|
68
|
+
css3DObject = _createObject.css3DObject,
|
|
69
|
+
mesh = _createObject.mesh; // ======= INIT START =======
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
var resizeObserver;
|
|
73
|
+
var frontModeUnInited = mode === 'front' && !state.frontMode;
|
|
74
|
+
var behindModeUnInited = mode === 'behind' && !state.behindMode;
|
|
75
|
+
var inited = !(frontModeUnInited || behindModeUnInited);
|
|
76
|
+
var stopRenderFlag = false;
|
|
77
|
+
var requestAnimationFrameId = null;
|
|
48
78
|
|
|
49
|
-
|
|
79
|
+
if (behindModeUnInited) {
|
|
80
|
+
state.behindMode = {
|
|
81
|
+
scene: new THREE.Scene(),
|
|
82
|
+
css3DRenderer: new _CSS3DRenderer.CSS3DRenderer()
|
|
83
|
+
};
|
|
50
84
|
}
|
|
51
85
|
|
|
52
|
-
|
|
86
|
+
if (frontModeUnInited) {
|
|
87
|
+
state.frontMode = {
|
|
88
|
+
scene: new THREE.Scene(),
|
|
89
|
+
css3DRenderer: new _CSS3DRenderer.CSS3DRenderer()
|
|
90
|
+
};
|
|
91
|
+
}
|
|
53
92
|
|
|
54
|
-
|
|
55
|
-
|
|
93
|
+
var _ref = mode === 'behind' ? state.behindMode : state.frontMode,
|
|
94
|
+
scene = _ref.scene,
|
|
95
|
+
css3DRenderer = _ref.css3DRenderer;
|
|
96
|
+
|
|
97
|
+
var render = function () {
|
|
98
|
+
if (!inited) {
|
|
99
|
+
var css3DRendererSetSize = function css3DRendererSetSize() {
|
|
100
|
+
var rendererWidth = (0, _evenNumber["default"])(fiveElement.clientWidth);
|
|
101
|
+
var rendererHeight = (0, _evenNumber["default"])(fiveElement.clientHeight);
|
|
102
|
+
css3DRenderer.setSize(rendererWidth, rendererHeight);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
css3DRendererSetSize();
|
|
106
|
+
resizeObserver = new ResizeObserver(css3DRendererSetSize);
|
|
107
|
+
css3DRenderer.domElement.style.position = 'absolute';
|
|
108
|
+
css3DRenderer.domElement.style.top = '0';
|
|
109
|
+
css3DRenderer.domElement.style.userSelect = 'none';
|
|
110
|
+
css3DRenderer.domElement.style.pointerEvents = 'none';
|
|
111
|
+
|
|
112
|
+
var renderEveryFrame = function renderEveryFrame() {
|
|
113
|
+
if (stopRenderFlag) return;
|
|
114
|
+
requestAnimationFrameId = requestAnimationFrame(renderEveryFrame);
|
|
115
|
+
css3DRenderer.render(scene, five.camera);
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
return function () {
|
|
119
|
+
var _resizeObserver;
|
|
120
|
+
|
|
121
|
+
scene.add(css3DObject);
|
|
122
|
+
(_resizeObserver = resizeObserver) === null || _resizeObserver === void 0 ? void 0 : _resizeObserver.observe(fiveElement);
|
|
123
|
+
renderEveryFrame();
|
|
124
|
+
|
|
125
|
+
if (mode === 'behind' && mesh) {
|
|
126
|
+
five.scene.add(mesh);
|
|
127
|
+
disposers.push(function () {
|
|
128
|
+
return mesh && five.scene.remove(mesh);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
} else {
|
|
133
|
+
return function () {
|
|
134
|
+
scene.add(css3DObject);
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}();
|
|
138
|
+
|
|
139
|
+
if (frontModeUnInited) {
|
|
140
|
+
var wrapper = fiveElement.parentElement || document.body;
|
|
141
|
+
wrapper.appendChild(css3DRenderer.domElement);
|
|
56
142
|
}
|
|
57
143
|
|
|
58
|
-
|
|
59
|
-
|
|
144
|
+
if (behindModeUnInited) {
|
|
145
|
+
var _wrapper = behindFiveContainer;
|
|
60
146
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
147
|
+
_wrapper.appendChild(css3DRenderer.domElement);
|
|
148
|
+
} // ======= INIT END =======
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
var dispose = function dispose() {
|
|
152
|
+
stopRenderFlag = true;
|
|
153
|
+
disposers.forEach(function (d) {
|
|
154
|
+
return d === null || d === void 0 ? void 0 : d();
|
|
155
|
+
});
|
|
156
|
+
scene.remove(css3DObject);
|
|
157
|
+
if (typeof requestAnimationFrameId === 'number') cancelAnimationFrame(requestAnimationFrameId);
|
|
158
|
+
|
|
159
|
+
if (scene.children.length === 0) {
|
|
160
|
+
css3DRenderer.domElement.remove();
|
|
161
|
+
if (mode === 'front') state.frontMode = undefined;
|
|
162
|
+
if (mode === 'behind') state.behindMode = undefined;
|
|
163
|
+
|
|
164
|
+
if (!state.behindMode && !state.frontMode) {
|
|
165
|
+
var _resizeObserver2;
|
|
166
|
+
|
|
167
|
+
(_resizeObserver2 = resizeObserver) === null || _resizeObserver2 === void 0 ? void 0 : _resizeObserver2.unobserve(fiveElement);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return true;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
var idx = state.disposeCallbacks.findIndex(function (item) {
|
|
175
|
+
return item === dispose;
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
if (idx !== -1) {
|
|
179
|
+
state.disposeCallbacks.splice(idx, 1);
|
|
180
|
+
} else {
|
|
181
|
+
state.disposeCallbacks.push(dispose);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
console.log({
|
|
185
|
+
autoRender: autoRender
|
|
186
|
+
});
|
|
187
|
+
if (autoRender) render();
|
|
188
|
+
return {
|
|
189
|
+
container: container,
|
|
190
|
+
dispose: dispose,
|
|
191
|
+
css3DObject: css3DObject,
|
|
192
|
+
render: autoRender ? undefined : render
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
var createObject = function createObject(points, config) {
|
|
197
|
+
var ratio = config.ratio,
|
|
198
|
+
dpr = config.dpr,
|
|
199
|
+
element = config.container,
|
|
200
|
+
mode = config.mode;
|
|
65
201
|
var planeWidth = points[0].distanceTo(points[1]);
|
|
66
202
|
var planeHeight = points[1].distanceTo(points[2]);
|
|
67
203
|
var domWidthPx = (0, _evenNumber["default"])(planeWidth / ratio * dpr);
|
|
68
204
|
var domHeightPx = (0, _evenNumber["default"])(planeHeight / ratio * dpr);
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
var object = new _CSS3DRenderer.CSS3DObject(element);
|
|
72
|
-
object.scale.set(ratio, ratio, ratio);
|
|
205
|
+
var css3DObject = new _CSS3DRenderer.CSS3DObject(element);
|
|
206
|
+
css3DObject.scale.set(ratio, ratio, ratio);
|
|
73
207
|
element.style.width = domWidthPx + 'px';
|
|
74
208
|
element.style.height = domHeightPx + 'px';
|
|
75
209
|
element.style.pointerEvents = 'none';
|
|
@@ -91,14 +225,13 @@ var CSS3DRenderPlugin = function CSS3DRenderPlugin(five, _ref) {
|
|
|
91
225
|
var rolateX = (vector12.z > 0 ? 1 : -1) * rotateXAngle;
|
|
92
226
|
var rolateY = (vector01.z < 0 ? 1 : -1) * rotateYAngle;
|
|
93
227
|
var rolateZ = (vector01.x > 0 && vector01.y < 0 || vector01.x < 0 && vector01.y > 0 ? -1 : 1) * rotateZAngle;
|
|
94
|
-
|
|
228
|
+
css3DObject.rotateOnWorldAxis(new THREE.Vector3(1, 0, 0), rolateX); // x
|
|
95
229
|
|
|
96
|
-
|
|
230
|
+
css3DObject.rotateOnWorldAxis(new THREE.Vector3(0, 1, 0), rolateY); // y
|
|
97
231
|
|
|
98
|
-
|
|
232
|
+
css3DObject.rotateOnWorldAxis(new THREE.Vector3(0, 0, 1), rolateZ); // z
|
|
99
233
|
|
|
100
|
-
|
|
101
|
-
css3DScene.add(object);
|
|
234
|
+
css3DObject.position.set(centerPosition.x, centerPosition.y, centerPosition.z);
|
|
102
235
|
var mesh;
|
|
103
236
|
|
|
104
237
|
if (mode === 'behind') {
|
|
@@ -110,105 +243,22 @@ var CSS3DRenderPlugin = function CSS3DRenderPlugin(five, _ref) {
|
|
|
110
243
|
var geometry = new THREE.PlaneGeometry(domWidthPx, domHeightPx);
|
|
111
244
|
mesh = new THREE.Mesh(geometry, material);
|
|
112
245
|
mesh.name = 'CSS3DRenderPlugin-mesh';
|
|
113
|
-
mesh.position.copy(
|
|
114
|
-
mesh.rotation.copy(
|
|
115
|
-
mesh.scale.copy(
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
var css3DRenderer = new _CSS3DRenderer.CSS3DRenderer();
|
|
119
|
-
|
|
120
|
-
var css3DRendererSetSize = function css3DRendererSetSize() {
|
|
121
|
-
var rendererWidth = (0, _evenNumber["default"])(fiveElement.clientWidth);
|
|
122
|
-
var rendererHeight = (0, _evenNumber["default"])(fiveElement.clientHeight);
|
|
123
|
-
css3DRenderer.setSize(rendererWidth, rendererHeight);
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
css3DRendererSetSize();
|
|
127
|
-
var resizeObserver = new ResizeObserver(css3DRendererSetSize);
|
|
128
|
-
css3DRenderer.domElement.style.position = 'absolute';
|
|
129
|
-
css3DRenderer.domElement.style.top = '0';
|
|
130
|
-
css3DRenderer.domElement.style.userSelect = 'none';
|
|
131
|
-
css3DRenderer.domElement.style.pointerEvents = 'none';
|
|
132
|
-
|
|
133
|
-
if (mode === 'front') {
|
|
134
|
-
var wrapper = fiveElement.parentElement || document.body;
|
|
135
|
-
wrapper.appendChild(css3DRenderer.domElement);
|
|
136
|
-
} else {
|
|
137
|
-
var _wrapper = behindFiveContainer;
|
|
138
|
-
|
|
139
|
-
_wrapper.appendChild(css3DRenderer.domElement);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
var stopRenderFlag = false;
|
|
143
|
-
var requestAnimationFrameId = null;
|
|
144
|
-
|
|
145
|
-
var dispose = function dispose() {
|
|
146
|
-
stopRenderFlag = true;
|
|
147
|
-
|
|
148
|
-
try {
|
|
149
|
-
disposers.forEach(function (d) {
|
|
150
|
-
return d === null || d === void 0 ? void 0 : d();
|
|
151
|
-
});
|
|
152
|
-
element.remove();
|
|
153
|
-
|
|
154
|
-
if (typeof requestAnimationFrameId === 'number') {
|
|
155
|
-
cancelAnimationFrame(requestAnimationFrameId);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
css3DScene.remove(object);
|
|
159
|
-
css3DScene.dispose();
|
|
160
|
-
css3DRenderer.domElement.remove();
|
|
161
|
-
resizeObserver.unobserve(fiveElement);
|
|
162
|
-
return true;
|
|
163
|
-
} catch (e) {
|
|
164
|
-
console.warn('error:', e);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return false;
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
var idx = state.disposeCallbacks.findIndex(function (item) {
|
|
171
|
-
return item === dispose;
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
if (idx !== -1) {
|
|
175
|
-
state.disposeCallbacks.splice(idx, 1);
|
|
176
|
-
} else {
|
|
177
|
-
state.disposeCallbacks.push(dispose);
|
|
246
|
+
mesh.position.copy(css3DObject.position);
|
|
247
|
+
mesh.rotation.copy(css3DObject.rotation);
|
|
248
|
+
mesh.scale.copy(css3DObject.scale);
|
|
178
249
|
}
|
|
179
250
|
|
|
180
|
-
var renderEveryFrame = function renderEveryFrame() {
|
|
181
|
-
if (stopRenderFlag) return;
|
|
182
|
-
requestAnimationFrameId = requestAnimationFrame(renderEveryFrame);
|
|
183
|
-
css3DRenderer.render(css3DScene, five.camera);
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
var render = function render() {
|
|
187
|
-
resizeObserver.observe(fiveElement);
|
|
188
|
-
renderEveryFrame();
|
|
189
|
-
|
|
190
|
-
if (mode === 'behind' && mesh) {
|
|
191
|
-
five.scene.add(mesh);
|
|
192
|
-
disposers.push(function () {
|
|
193
|
-
return mesh && five.scene.remove(mesh);
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
if (autoRender) render();
|
|
199
251
|
return {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
object: object,
|
|
203
|
-
render: autoRender ? undefined : render
|
|
252
|
+
css3DObject: css3DObject,
|
|
253
|
+
mesh: mesh
|
|
204
254
|
};
|
|
205
255
|
};
|
|
206
256
|
|
|
207
257
|
return {
|
|
208
258
|
create3DDomContainer: create3DDomContainer,
|
|
209
259
|
disposeAll: function disposeAll() {
|
|
210
|
-
state.disposeCallbacks.forEach(function (
|
|
211
|
-
return
|
|
260
|
+
state.disposeCallbacks.forEach(function (d) {
|
|
261
|
+
return d === null || d === void 0 ? void 0 : d();
|
|
212
262
|
});
|
|
213
263
|
state.disposeCallbacks = [];
|
|
214
264
|
}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import type { FivePlugin } from '@realsee/five';
|
|
2
2
|
export interface ModelChassisCompassPluginParameterType {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
north_rad?: number;
|
|
4
|
+
fbx_url?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ModelChassisCompassPluginData {
|
|
7
|
+
north_rad?: number;
|
|
8
|
+
fbx_url?: string;
|
|
5
9
|
}
|
|
6
10
|
export interface ModelChassisCompassPluginExportType {
|
|
7
11
|
enable: () => void;
|
|
8
12
|
disable: () => void;
|
|
9
|
-
load: (
|
|
13
|
+
load: (data?: ModelChassisCompassPluginData) => Promise<boolean>;
|
|
10
14
|
}
|
|
11
15
|
/**
|
|
12
16
|
* 模型底盘指南针插件
|
|
@@ -13,6 +13,8 @@ var _FBXLoader = require("three/examples/jsm/loaders/FBXLoader");
|
|
|
13
13
|
|
|
14
14
|
var _object3d2LocalMatrix = _interopRequireDefault(require("../../shared-utils/object3d2LocalMatrix"));
|
|
15
15
|
|
|
16
|
+
var _transfromToMeshBasicMaterial = _interopRequireDefault(require("../../shared-utils/three/transfromToMeshBasicMaterial"));
|
|
17
|
+
|
|
16
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
17
19
|
|
|
18
20
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -27,21 +29,21 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar
|
|
|
27
29
|
* 模型底盘指南针插件
|
|
28
30
|
*/
|
|
29
31
|
var ModelChassisCompassPlugin = function ModelChassisCompassPlugin(five, params) {
|
|
30
|
-
var defaultFbxUrl = params.
|
|
31
|
-
var defaultNorthRad = params.
|
|
32
|
+
var defaultFbxUrl = params.fbx_url || '//vrlab-static.ljcdn.com/release/web/v3/dipan3/dipan.FBX';
|
|
33
|
+
var defaultNorthRad = params.north_rad || undefined; // 局部状态
|
|
32
34
|
|
|
33
35
|
var state = {};
|
|
34
36
|
|
|
35
37
|
var load = /*#__PURE__*/function () {
|
|
36
|
-
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(
|
|
37
|
-
var bounding, xOffset, zOffset, maxOffset, fbxLoader, object, rotation, _five$model$bounding, _five$model$bounding$, xMax, zMax, _five$model$bounding$2, xMin, yMin, zMin, position, scale;
|
|
38
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(data) {
|
|
39
|
+
var fbxUrl, northRad, bounding, xOffset, zOffset, maxOffset, fbxLoader, object, rotation, _five$model$bounding, _five$model$bounding$, xMax, zMax, _five$model$bounding$2, xMin, yMin, zMin, position, scale;
|
|
38
40
|
|
|
39
41
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
40
42
|
while (1) {
|
|
41
43
|
switch (_context.prev = _context.next) {
|
|
42
44
|
case 0:
|
|
43
|
-
fbxUrl =
|
|
44
|
-
northRad =
|
|
45
|
+
fbxUrl = (data === null || data === void 0 ? void 0 : data.fbx_url) || defaultFbxUrl;
|
|
46
|
+
northRad = (data === null || data === void 0 ? void 0 : data.north_rad) || defaultNorthRad;
|
|
45
47
|
|
|
46
48
|
if (northRad) {
|
|
47
49
|
_context.next = 4;
|
|
@@ -61,25 +63,10 @@ var ModelChassisCompassPlugin = function ModelChassisCompassPlugin(five, params)
|
|
|
61
63
|
|
|
62
64
|
case 11:
|
|
63
65
|
object = _context.sent;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
var mesh = ele;
|
|
69
|
-
var materialConf = Object.assign({
|
|
70
|
-
map: mesh.material.map || {}
|
|
71
|
-
}, {
|
|
72
|
-
transparent: true,
|
|
73
|
-
side: THREE.DoubleSide,
|
|
74
|
-
blending: THREE.AdditiveBlending
|
|
75
|
-
});
|
|
76
|
-
mesh.material = new THREE.MeshBasicMaterial(materialConf);
|
|
77
|
-
mesh.renderOrder = 1;
|
|
78
|
-
|
|
79
|
-
if (((_ele$parent = ele.parent) === null || _ele$parent === void 0 ? void 0 : _ele$parent.type) === 'Mesh') {
|
|
80
|
-
ele.renderOrder = ele.parent.renderOrder + 1;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
66
|
+
(0, _transfromToMeshBasicMaterial["default"])(object, {
|
|
67
|
+
transparent: true,
|
|
68
|
+
side: THREE.DoubleSide,
|
|
69
|
+
blending: THREE.AdditiveBlending
|
|
83
70
|
});
|
|
84
71
|
rotation = [0, northRad - Math.PI / 2, 0];
|
|
85
72
|
_five$model$bounding = five.model.bounding, _five$model$bounding$ = _five$model$bounding.max, xMax = _five$model$bounding$.x, zMax = _five$model$bounding$.z, _five$model$bounding$2 = _five$model$bounding.min, xMin = _five$model$bounding$2.x, yMin = _five$model$bounding$2.y, zMin = _five$model$bounding$2.z;
|
|
@@ -106,7 +93,7 @@ var ModelChassisCompassPlugin = function ModelChassisCompassPlugin(five, params)
|
|
|
106
93
|
}, _callee);
|
|
107
94
|
}));
|
|
108
95
|
|
|
109
|
-
return function load(_x
|
|
96
|
+
return function load(_x) {
|
|
110
97
|
return _ref.apply(this, arguments);
|
|
111
98
|
};
|
|
112
99
|
}();
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
import type { FivePlugin } from '@realsee/five';
|
|
2
|
-
|
|
2
|
+
import { Vector3Position } from '../../typings/math.type';
|
|
3
|
+
export interface ModelEntryDoorGuidePluginData {
|
|
4
|
+
position: Vector3Position;
|
|
5
|
+
rad: number;
|
|
6
|
+
fbx_url?: string;
|
|
3
7
|
}
|
|
8
|
+
export declare type ModelEntryDoorGuidePluginParameterType = {
|
|
9
|
+
animationEnabled?: boolean;
|
|
10
|
+
} & ModelEntryDoorGuidePluginData;
|
|
4
11
|
export interface ModelEntryDoorGuidePluginExportType {
|
|
12
|
+
enable: (config?: {
|
|
13
|
+
animationEnable?: boolean;
|
|
14
|
+
}) => boolean;
|
|
15
|
+
disable: () => boolean;
|
|
16
|
+
load: (data?: Partial<ModelEntryDoorGuidePluginData>) => Promise<boolean>;
|
|
5
17
|
}
|
|
6
18
|
/**
|
|
7
19
|
* 模型入户门引导插件
|