@anov/3d-ability 0.0.6 → 0.0.7
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/dist/camera/index.d.ts +11 -7
- package/dist/camera/index.js +48 -45
- package/dist/camera/index.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/poi/2D/index.d.ts +1 -0
- package/dist/poi/2D/index.js +10 -0
- package/dist/poi/2D/index.js.map +1 -1
- package/dist/poi/3D/index.d.ts +12 -18
- package/dist/poi/3D/index.js +159 -123
- package/dist/poi/3D/index.js.map +1 -1
- package/dist/poi/3D/index1.d.ts +19 -0
- package/dist/poi/3D/index1.js +144 -0
- package/dist/poi/3D/index1.js.map +1 -0
- package/dist/poi/Sprite/index.js +44 -51
- package/dist/poi/Sprite/index.js.map +1 -1
- package/dist/poi/index.d.ts +2 -1
- package/dist/poi/index.js +2 -1
- package/dist/poi/index.js.map +1 -1
- package/dist/poi/utils/type.d.ts +4 -4
- package/dist/poi/utils/type.js +2 -1
- package/dist/poi/utils/type.js.map +1 -1
- package/dist/postEffects/addACESFilmicToneMappingPass.d.ts +4 -0
- package/dist/postEffects/addACESFilmicToneMappingPass.js +28 -0
- package/dist/postEffects/addACESFilmicToneMappingPass.js.map +1 -0
- package/dist/postEffects/addBrightnessContrastPass.d.ts +4 -0
- package/dist/postEffects/addBrightnessContrastPass.js +28 -0
- package/dist/postEffects/addBrightnessContrastPass.js.map +1 -0
- package/dist/postEffects/bloomPass.d.ts +2 -2
- package/dist/postEffects/bloomPass.js +14 -19
- package/dist/postEffects/bloomPass.js.map +1 -1
- package/dist/postEffects/colorifyPass.d.ts +6 -0
- package/dist/postEffects/colorifyPass.js +33 -0
- package/dist/postEffects/colorifyPass.js.map +1 -0
- package/dist/postEffects/index.d.ts +7 -1
- package/dist/postEffects/index.js +16 -5
- package/dist/postEffects/index.js.map +1 -1
- package/dist/postEffects/shader/colorify.d.ts +17 -0
- package/dist/postEffects/shader/colorify.js +19 -0
- package/dist/postEffects/shader/colorify.js.map +1 -0
- package/dist/postEffects/shader/gammaCorrectionShader.d.ts +15 -0
- package/dist/postEffects/shader/gammaCorrectionShader.js +18 -0
- package/dist/postEffects/shader/gammaCorrectionShader.js.map +1 -0
- package/dist/postEffects/shader/mapping.d.ts +19 -0
- package/dist/postEffects/shader/mapping.js +22 -0
- package/dist/postEffects/shader/mapping.js.map +1 -0
- package/dist/postEffects/shader/thermalMaging.d.ts +17 -0
- package/dist/postEffects/shader/thermalMaging.js +18 -0
- package/dist/postEffects/shader/thermalMaging.js.map +1 -0
- package/package.json +3 -3
package/dist/poi/3D/index.js
CHANGED
|
@@ -1,144 +1,180 @@
|
|
|
1
1
|
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
2
4
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
3
5
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
4
6
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
7
|
+
function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }
|
|
8
|
+
function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
|
|
9
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
10
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
11
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
12
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
13
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
14
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
15
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
5
16
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
17
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
18
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
|
-
|
|
9
|
-
import { getLastValue } from "../../utils";
|
|
10
|
-
// 距离限制范围的值,用于计算缩放比例
|
|
11
|
-
var minDistance = 0.1;
|
|
12
|
-
var maxDistance = 1000000;
|
|
13
|
-
var Poi = /*#__PURE__*/function () {
|
|
14
|
-
function Poi() {
|
|
15
|
-
_classCallCheck(this, Poi);
|
|
16
|
-
_defineProperty(this, "cssObjects", []);
|
|
17
|
-
}
|
|
18
|
-
// 添加POI点信息
|
|
19
|
-
_createClass(Poi, [{
|
|
20
|
-
key: "create",
|
|
21
|
-
value: function create(option) {
|
|
22
|
-
var _use$useScene$orbitCo,
|
|
23
|
-
_this = this;
|
|
24
|
-
var visible = option.visible,
|
|
25
|
-
position = option.position,
|
|
26
|
-
name = option.name,
|
|
27
|
-
scale = option.scale;
|
|
28
|
-
var poiLabel = create3DLabel(getDom(option));
|
|
29
|
-
// 对象名称
|
|
30
|
-
poiLabel.name = getLastValue(name, 'poiLabel');
|
|
31
|
-
poiLabel.receiveShadow = true;
|
|
32
|
-
poiLabel.option = option;
|
|
33
|
-
// 是否可见
|
|
34
|
-
poiLabel.visible = getLastValue(visible, true);
|
|
35
|
-
// 设置poi局部位置
|
|
36
|
-
position && poiLabel.position.copy(new Vector3().fromArray(position));
|
|
37
|
-
// poiLabel.position.set(0, (200 * 0.023) / 2 + 3, 0);
|
|
19
|
+
/* eslint-disable no-case-declarations */
|
|
38
20
|
|
|
39
|
-
|
|
40
|
-
|
|
21
|
+
import gsap from 'gsap';
|
|
22
|
+
import { EAnimationType, EventType } from "../utils/type";
|
|
23
|
+
import { createContentElement, createTitleElement } from "../utils/element";
|
|
24
|
+
import Poi from "../Poi";
|
|
25
|
+
var _default = {
|
|
26
|
+
animation: {
|
|
27
|
+
type: EAnimationType.fadeIn,
|
|
28
|
+
duration: 0.3
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
var Css3DPoi = /*#__PURE__*/function (_Poi) {
|
|
32
|
+
_inherits(Css3DPoi, _Poi);
|
|
33
|
+
var _super = _createSuper(Css3DPoi);
|
|
34
|
+
function Css3DPoi(data) {
|
|
35
|
+
var _this;
|
|
36
|
+
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
37
|
+
_classCallCheck(this, Css3DPoi);
|
|
38
|
+
_this = _super.call(this, data, option);
|
|
39
|
+
_defineProperty(_assertThisInitialized(_this), "element", void 0);
|
|
40
|
+
_defineProperty(_assertThisInitialized(_this), "isCSS3DObject", void 0);
|
|
41
|
+
_defineProperty(_assertThisInitialized(_this), "center", void 0);
|
|
42
|
+
_this.option = _objectSpread(_objectSpread({}, _default), option);
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (child.name === objectName) {
|
|
61
|
-
// 找到了匹配的对象,可以对其进行操作或者保存引用
|
|
62
|
-
console.log('Found object with name:', objectName);
|
|
63
|
-
cube = child;
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
if (cube) {
|
|
68
|
-
// 根据目标物体的位置和相机的位置,更新 POI 点的位置
|
|
69
|
-
var cubeWorldPosition = new Vector3();
|
|
70
|
-
cube.getWorldPosition(cubeWorldPosition);
|
|
71
|
-
// console.log('cubeWorldPosition:', cubeWorldPosition)
|
|
44
|
+
// 创建容器
|
|
45
|
+
_this.element = _this.getElement();
|
|
46
|
+
if (!_this.element) throw new Error('Cannot generate HTMLElement element');
|
|
47
|
+
_this.option.animation && _this.setAnimation(_this.option.animation);
|
|
48
|
+
// 执行动画
|
|
49
|
+
_this.play();
|
|
50
|
+
_this.isCSS3DObject = true;
|
|
51
|
+
_this.element.style.position = 'absolute';
|
|
52
|
+
_this.element.style.pointerEvents = 'auto';
|
|
53
|
+
_this.element.style.userSelect = 'none';
|
|
54
|
+
_this.element.setAttribute('draggable', 'false');
|
|
55
|
+
_this.addEventListener('removed', function () {
|
|
56
|
+
this.traverse(function (object) {
|
|
57
|
+
if (object.element instanceof Element && object.element.parentNode !== null) object.element.parentNode.removeChild(object.element);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
return _this;
|
|
61
|
+
}
|
|
72
62
|
|
|
73
|
-
|
|
63
|
+
// 创建2D容器
|
|
64
|
+
_createClass(Css3DPoi, [{
|
|
65
|
+
key: "getElement",
|
|
66
|
+
value: function getElement() {
|
|
67
|
+
var _this2 = this;
|
|
68
|
+
var element;
|
|
69
|
+
// 直接传递DOM元素
|
|
70
|
+
if (this.data instanceof HTMLElement) {
|
|
71
|
+
element = this.data;
|
|
72
|
+
} else {
|
|
73
|
+
if (typeof this.data === 'string') {
|
|
74
|
+
element = createTitleElement(this.data, this.option);
|
|
75
|
+
} else if (_typeof(this.data) === 'object') {
|
|
76
|
+
var _this$data = this.data,
|
|
77
|
+
title = _this$data.title,
|
|
78
|
+
content = _this$data.content;
|
|
79
|
+
if (title && content) element = createContentElement(this.data, this.option);else if (title) element = createTitleElement(title, this.option);
|
|
74
80
|
}
|
|
81
|
+
}
|
|
82
|
+
EventType.forEach(function (type) {
|
|
83
|
+
element && element.addEventListener(type.name, function (event) {
|
|
84
|
+
(_this2._listeners[type.name] || []).forEach(function (cb) {
|
|
85
|
+
cb(event);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
75
88
|
});
|
|
76
|
-
|
|
77
|
-
option.lockAxis && _this.updateAxis(poiLabel);
|
|
78
|
-
if ('autoSize' in option && !option.autoSize) _this.updateScale(poiLabel);
|
|
79
|
-
});
|
|
80
|
-
return {
|
|
81
|
-
id: poiLabel.id,
|
|
82
|
-
name: name,
|
|
83
|
-
visible: visible,
|
|
84
|
-
position: position
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* 是否锁定镜头,标牌一直面向镜头
|
|
90
|
-
*/
|
|
91
|
-
}, {
|
|
92
|
-
key: "updateAxis",
|
|
93
|
-
value: function updateAxis(object) {
|
|
94
|
-
var _use$useScene2 = use.useScene(),
|
|
95
|
-
camera = _use$useScene2.camera;
|
|
96
|
-
// 获取原有的旋转角度
|
|
97
|
-
var oriEuler = object.rotation;
|
|
98
|
-
// 根据锁定的轴进行旋转
|
|
99
|
-
camera && object.rotation.copy(camera.rotation);
|
|
89
|
+
return element;
|
|
100
90
|
}
|
|
101
91
|
|
|
102
|
-
|
|
103
|
-
/// 按照距离缩放,距离越远,缩放越大
|
|
104
|
-
/// </summary>
|
|
92
|
+
// 播放动画
|
|
105
93
|
}, {
|
|
106
|
-
key: "
|
|
107
|
-
value: function
|
|
108
|
-
var
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
94
|
+
key: "play",
|
|
95
|
+
value: function play() {
|
|
96
|
+
var _this3 = this;
|
|
97
|
+
this.animation.forEach(function (item) {
|
|
98
|
+
switch (item.type) {
|
|
99
|
+
case EAnimationType.fadeIn:
|
|
100
|
+
_this3.element.style.opacity = '0';
|
|
101
|
+
break;
|
|
102
|
+
case EAnimationType.grow:
|
|
103
|
+
_this3.element.style.scale = '.2';
|
|
104
|
+
break;
|
|
105
|
+
case EAnimationType.print:
|
|
106
|
+
var contentElement = _this3.element.querySelector('[tag="content"]');
|
|
107
|
+
if (contentElement) contentElement.innerHTML = '';else _this3.element.innerHTML = '';
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
var hasExecuted = false;
|
|
112
|
+
this.onAfterRender = function () {
|
|
113
|
+
if (hasExecuted) return;
|
|
114
|
+
_this3.animation.forEach(function (item) {
|
|
115
|
+
switch (item.type) {
|
|
116
|
+
case EAnimationType.fadeIn:
|
|
117
|
+
gsap.fromTo(_this3.element, {
|
|
118
|
+
opacity: 0
|
|
119
|
+
}, {
|
|
120
|
+
opacity: 1,
|
|
121
|
+
duration: item.duration,
|
|
122
|
+
repeat: 0,
|
|
123
|
+
ease: 'none'
|
|
124
|
+
});
|
|
125
|
+
break;
|
|
126
|
+
case EAnimationType.grow:
|
|
127
|
+
gsap.fromTo(_this3.element, {
|
|
128
|
+
scale: 0.2
|
|
129
|
+
}, {
|
|
130
|
+
scale: 1,
|
|
131
|
+
duration: item.duration,
|
|
132
|
+
repeat: 0,
|
|
133
|
+
ease: 'power2.out'
|
|
134
|
+
});
|
|
135
|
+
break;
|
|
136
|
+
case EAnimationType.print:
|
|
137
|
+
var element = _this3.element.querySelector('[tag="content"]');
|
|
138
|
+
var text;
|
|
139
|
+
if (element) {
|
|
140
|
+
text = _this3.data.content;
|
|
141
|
+
} else {
|
|
142
|
+
element = _this3.element;
|
|
143
|
+
text = _this3.data.title || _this3.data;
|
|
144
|
+
}
|
|
145
|
+
var index = 0;
|
|
146
|
+
var print = function print() {
|
|
147
|
+
// 添加当前字符到文本元素
|
|
148
|
+
element.innerHTML += text.charAt(index);
|
|
149
|
+
index++;
|
|
150
|
+
// 使用GSAP创建动画
|
|
151
|
+
gsap.to(element, {
|
|
152
|
+
duration: item.duration,
|
|
153
|
+
// 每个字符的持续时间
|
|
154
|
+
ease: 'power1.inOut',
|
|
155
|
+
// 缓动函数
|
|
156
|
+
onComplete: function onComplete() {
|
|
157
|
+
return index < text.length ? print() : null;
|
|
158
|
+
} // 如果还有字符,则继续打印,否则完成动画
|
|
159
|
+
});
|
|
160
|
+
};
|
|
119
161
|
|
|
120
|
-
|
|
121
|
-
|
|
162
|
+
print();
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
hasExecuted = true;
|
|
167
|
+
};
|
|
122
168
|
}
|
|
123
|
-
|
|
124
|
-
// 删除POI点信息
|
|
125
169
|
}, {
|
|
126
|
-
key: "
|
|
127
|
-
value: function
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (this.cssObjects[i].id === option.id) {
|
|
132
|
-
scene === null || scene === void 0 ? void 0 : scene.remove(this.cssObjects[i]);
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
170
|
+
key: "copy",
|
|
171
|
+
value: function copy(source, recursive) {
|
|
172
|
+
_get(_getPrototypeOf(Css3DPoi.prototype), "copy", this).call(this, source, recursive);
|
|
173
|
+
this.element = source.element.cloneNode(true);
|
|
174
|
+
return this;
|
|
136
175
|
}
|
|
137
|
-
}, {
|
|
138
|
-
key: "update",
|
|
139
|
-
value: function update(option) {}
|
|
140
176
|
}]);
|
|
141
|
-
return
|
|
142
|
-
}();
|
|
143
|
-
export default
|
|
177
|
+
return Css3DPoi;
|
|
178
|
+
}(Poi);
|
|
179
|
+
export default Css3DPoi;
|
|
144
180
|
//# sourceMappingURL=index.js.map
|
package/dist/poi/3D/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["gsap","EAnimationType","EventType","createContentElement","createTitleElement","Poi","_default","animation","type","fadeIn","duration","Css3DPoi","data","option","element","getElement","Error","setAnimation","play","isCSS3DObject","style","position","pointerEvents","userSelect","setAttribute","addEventListener","traverse","object","Element","parentNode","removeChild","HTMLElement","title","content","forEach","name","event","_listeners","cb","item","opacity","grow","scale","print","contentElement","querySelector","innerHTML","hasExecuted","onAfterRender","fromTo","repeat","ease","text","index","charAt","to","onComplete","length","source","recursive","cloneNode"],"sources":["../../../src/poi/3D/index.ts"],"sourcesContent":["/* eslint-disable no-case-declarations */\nimport type { Vector2 } from '@anov/3d-core'\nimport gsap from 'gsap'\nimport { EAnimationType, EventType } from '../utils/type'\nimport type { IEventType, IOption } from '../utils/type'\nimport { createContentElement, createTitleElement } from '../utils/element'\nimport Poi from '../Poi'\n\nconst _default = {\n animation: {\n type: EAnimationType.fadeIn,\n duration: 0.3,\n },\n}\n\nclass Css3DPoi extends Poi {\n element!: HTMLElement\n isCSS3DObject!: boolean\n center!: Vector2\n\n constructor(data: any, option: IOption = {}) {\n super(data, option)\n\n this.option = { ..._default, ...option }\n\n // 创建容器\n this.element = this.getElement()\n\n if (!this.element)\n throw new Error('Cannot generate HTMLElement element')\n\n this.option.animation && this.setAnimation(this.option.animation)\n // 执行动画\n this.play()\n\n this.isCSS3DObject = true\n\n this.element.style.position = 'absolute'\n this.element.style.pointerEvents = 'auto'\n this.element.style.userSelect = 'none'\n\n this.element.setAttribute('draggable', 'false')\n\n this.addEventListener('removed', function () {\n this.traverse((object) => {\n if (object.element instanceof Element && object.element.parentNode !== null)\n\n object.element.parentNode.removeChild(object.element)\n })\n })\n }\n\n // 创建2D容器\n getElement() {\n let element!: HTMLElement\n // 直接传递DOM元素\n if (this.data instanceof HTMLElement) {\n element = this.data\n }\n else {\n if (typeof this.data === 'string') {\n element = createTitleElement(this.data, this.option)\n }\n else if (typeof this.data === 'object') {\n const { title, content } = this.data\n if (title && content)\n element = createContentElement(this.data, this.option)\n else if (title)\n element = createTitleElement(title, this.option)\n }\n }\n\n EventType.forEach((type: IEventType) => {\n element && element.addEventListener(type.name, (event) => {\n (this._listeners[type.name] || []).forEach((cb: Function) => {\n cb(event)\n })\n })\n })\n return element\n }\n\n // 播放动画\n play() {\n this.animation.forEach((item) => {\n switch (item.type) {\n case EAnimationType.fadeIn:\n this.element.style.opacity = '0'\n break\n case EAnimationType.grow:\n this.element.style.scale = '.2'\n break\n case EAnimationType.print:\n const contentElement = this.element.querySelector('[tag=\"content\"]')\n if (contentElement)\n contentElement.innerHTML = ''\n else\n this.element.innerHTML = ''\n break\n }\n })\n\n let hasExecuted = false\n this.onAfterRender = () => {\n if (hasExecuted)\n return\n this.animation.forEach((item) => {\n switch (item.type) {\n case EAnimationType.fadeIn:\n gsap.fromTo(this.element, { opacity: 0 }, {\n opacity: 1,\n duration: item.duration,\n repeat: 0,\n ease: 'none',\n })\n break\n case EAnimationType.grow:\n gsap.fromTo(this.element, { scale: 0.2 }, {\n scale: 1,\n duration: item.duration,\n repeat: 0,\n ease: 'power2.out',\n })\n break\n case EAnimationType.print:\n\n let element = this.element.querySelector('[tag=\"content\"]') as HTMLElement\n let text: string\n if (element) {\n text = this.data.content\n }\n else {\n element = this.element\n text = this.data.title || this.data\n }\n\n let index = 0\n const print = () => {\n // 添加当前字符到文本元素\n element.innerHTML += text.charAt(index)\n index++\n // 使用GSAP创建动画\n gsap.to(element, {\n duration: item.duration, // 每个字符的持续时间\n ease: 'power1.inOut', // 缓动函数\n onComplete: () => index < text.length ? print() : null, // 如果还有字符,则继续打印,否则完成动画\n })\n }\n print()\n break\n }\n })\n hasExecuted = true\n }\n }\n\n copy(source: any, recursive: boolean) {\n super.copy(source, recursive)\n\n this.element = source.element.cloneNode(true)\n\n return this\n }\n}\n\nexport default Css3DPoi"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IPOIOption } from './type';
|
|
2
|
+
declare class Poi {
|
|
3
|
+
private cssObjects;
|
|
4
|
+
constructor();
|
|
5
|
+
create(option: IPOIOption): {
|
|
6
|
+
id: number;
|
|
7
|
+
name: string | undefined;
|
|
8
|
+
visible: boolean | undefined;
|
|
9
|
+
position: number[] | undefined;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* 是否锁定镜头,标牌一直面向镜头
|
|
13
|
+
*/
|
|
14
|
+
private updateAxis;
|
|
15
|
+
private updateScale;
|
|
16
|
+
delete(option: IPOIOption): void;
|
|
17
|
+
update(option: IPOIOption): void;
|
|
18
|
+
}
|
|
19
|
+
export default Poi;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
2
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
3
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
4
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
|
+
import { Vector3, create3DLabel, use } from '@anov/3d-core';
|
|
9
|
+
import { getLastValue } from "../../utils";
|
|
10
|
+
// 距离限制范围的值,用于计算缩放比例
|
|
11
|
+
var minDistance = 0.1;
|
|
12
|
+
var maxDistance = 1000000;
|
|
13
|
+
var Poi = /*#__PURE__*/function () {
|
|
14
|
+
function Poi() {
|
|
15
|
+
_classCallCheck(this, Poi);
|
|
16
|
+
_defineProperty(this, "cssObjects", []);
|
|
17
|
+
}
|
|
18
|
+
// 添加POI点信息
|
|
19
|
+
_createClass(Poi, [{
|
|
20
|
+
key: "create",
|
|
21
|
+
value: function create(option) {
|
|
22
|
+
var _use$useScene$orbitCo,
|
|
23
|
+
_this = this;
|
|
24
|
+
var visible = option.visible,
|
|
25
|
+
position = option.position,
|
|
26
|
+
name = option.name,
|
|
27
|
+
scale = option.scale;
|
|
28
|
+
var poiLabel = create3DLabel(getDom(option));
|
|
29
|
+
// 对象名称
|
|
30
|
+
poiLabel.name = getLastValue(name, 'poiLabel');
|
|
31
|
+
poiLabel.receiveShadow = true;
|
|
32
|
+
poiLabel.option = option;
|
|
33
|
+
// 是否可见
|
|
34
|
+
poiLabel.visible = getLastValue(visible, true);
|
|
35
|
+
// 设置poi局部位置
|
|
36
|
+
position && poiLabel.position.copy(new Vector3().fromArray(position));
|
|
37
|
+
// poiLabel.position.set(0, (200 * 0.023) / 2 + 3, 0);
|
|
38
|
+
|
|
39
|
+
var devicePixelRatio = window.devicePixelRatio || 1;
|
|
40
|
+
// 调整场景中对象的缩放比例
|
|
41
|
+
|
|
42
|
+
var vScale = new Vector3(0.023, 0.023, 0.023);
|
|
43
|
+
vScale.multiplyScalar(scale);
|
|
44
|
+
poiLabel.scale.copy(vScale.clone());
|
|
45
|
+
var _use$useScene = use.useScene(),
|
|
46
|
+
scene = _use$useScene.scene,
|
|
47
|
+
camera = _use$useScene.camera;
|
|
48
|
+
console.log('scene:', scene);
|
|
49
|
+
// 添加到场景
|
|
50
|
+
scene === null || scene === void 0 ? void 0 : scene.add(poiLabel);
|
|
51
|
+
this.cssObjects.push(poiLabel);
|
|
52
|
+
var cube;
|
|
53
|
+
use.useframe(function () {
|
|
54
|
+
if (!cube) {
|
|
55
|
+
// 假设需要查找的对象名称为 'myObject'
|
|
56
|
+
var objectName = 'GY_zj_gangjiegou_01';
|
|
57
|
+
// 遍历场景中的所有对象
|
|
58
|
+
scene.traverse(function (child) {
|
|
59
|
+
// 检查对象的名称是否匹配所需名称
|
|
60
|
+
if (child.name === objectName) {
|
|
61
|
+
// 找到了匹配的对象,可以对其进行操作或者保存引用
|
|
62
|
+
console.log('Found object with name:', objectName);
|
|
63
|
+
cube = child;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (cube) {
|
|
68
|
+
// 根据目标物体的位置和相机的位置,更新 POI 点的位置
|
|
69
|
+
var cubeWorldPosition = new Vector3();
|
|
70
|
+
cube.getWorldPosition(cubeWorldPosition);
|
|
71
|
+
// console.log('cubeWorldPosition:', cubeWorldPosition)
|
|
72
|
+
|
|
73
|
+
poiLabel.position.copy(cubeWorldPosition.clone());
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
(_use$useScene$orbitCo = use.useScene().orbitControls) === null || _use$useScene$orbitCo === void 0 ? void 0 : _use$useScene$orbitCo.addEventListener('change', function () {
|
|
77
|
+
option.lockAxis && _this.updateAxis(poiLabel);
|
|
78
|
+
if ('autoSize' in option && !option.autoSize) _this.updateScale(poiLabel);
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
id: poiLabel.id,
|
|
82
|
+
name: name,
|
|
83
|
+
visible: visible,
|
|
84
|
+
position: position
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* 是否锁定镜头,标牌一直面向镜头
|
|
90
|
+
*/
|
|
91
|
+
}, {
|
|
92
|
+
key: "updateAxis",
|
|
93
|
+
value: function updateAxis(object) {
|
|
94
|
+
var _use$useScene2 = use.useScene(),
|
|
95
|
+
camera = _use$useScene2.camera;
|
|
96
|
+
// 获取原有的旋转角度
|
|
97
|
+
var oriEuler = object.rotation;
|
|
98
|
+
// 根据锁定的轴进行旋转
|
|
99
|
+
camera && object.rotation.copy(camera.rotation);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// <summary>
|
|
103
|
+
/// 按照距离缩放,距离越远,缩放越大
|
|
104
|
+
/// </summary>
|
|
105
|
+
}, {
|
|
106
|
+
key: "updateScale",
|
|
107
|
+
value: function updateScale(object) {
|
|
108
|
+
var _use$useScene3 = use.useScene(),
|
|
109
|
+
camera = _use$useScene3.camera;
|
|
110
|
+
// 获取相机和物体的世界坐标位置
|
|
111
|
+
var cameraPosition = camera === null || camera === void 0 ? void 0 : camera.position;
|
|
112
|
+
var objectPosition = object.position;
|
|
113
|
+
|
|
114
|
+
// 计算相机和物体之间的距离
|
|
115
|
+
var distance = (cameraPosition === null || cameraPosition === void 0 ? void 0 : cameraPosition.distanceTo(objectPosition)) || 0.1;
|
|
116
|
+
|
|
117
|
+
// 使用 Math.min() 和 Math.max() 方法限制 resultDistance 的范围
|
|
118
|
+
var clampedDistance = Math.max(minDistance, Math.min(maxDistance, distance));
|
|
119
|
+
|
|
120
|
+
// 按照缩放系数和距离进行缩放,缩放系数应该约定好一个固定值
|
|
121
|
+
object.scale.copy(new Vector3(1, 1, 1).multiplyScalar(clampedDistance * 0.0012));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// 删除POI点信息
|
|
125
|
+
}, {
|
|
126
|
+
key: "delete",
|
|
127
|
+
value: function _delete(option) {
|
|
128
|
+
var _use$useScene4 = use.useScene(),
|
|
129
|
+
scene = _use$useScene4.scene;
|
|
130
|
+
for (var i = 0; i < this.cssObjects.length; i++) {
|
|
131
|
+
if (this.cssObjects[i].id === option.id) {
|
|
132
|
+
scene === null || scene === void 0 ? void 0 : scene.remove(this.cssObjects[i]);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}, {
|
|
138
|
+
key: "update",
|
|
139
|
+
value: function update(option) {}
|
|
140
|
+
}]);
|
|
141
|
+
return Poi;
|
|
142
|
+
}();
|
|
143
|
+
export default Poi;
|
|
144
|
+
//# sourceMappingURL=index1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Vector3","create3DLabel","use","getLastValue","minDistance","maxDistance","Poi","option","visible","position","name","scale","poiLabel","getDom","receiveShadow","copy","fromArray","devicePixelRatio","window","vScale","multiplyScalar","clone","useScene","scene","camera","console","log","add","cssObjects","push","cube","useframe","objectName","traverse","child","cubeWorldPosition","getWorldPosition","orbitControls","addEventListener","lockAxis","updateAxis","autoSize","updateScale","id","object","oriEuler","rotation","cameraPosition","objectPosition","distance","distanceTo","clampedDistance","Math","max","min","i","length","remove"],"sources":["../../../src/poi/3D/index1.ts"],"sourcesContent":["import {\n Vector3,\n create3DLabel,\n use,\n} from '@anov/3d-core'\nimport { getLastValue } from '../../utils'\nimport type { CustomCssObjec, IPOIOption } from './type'\n\n// 距离限制范围的值,用于计算缩放比例\nconst minDistance = 0.1\nconst maxDistance = 1000000\n\nclass Poi {\n private cssObjects: CustomCssObjec[] = []\n\n constructor() { }\n // 添加POI点信息\n public create(option: IPOIOption) {\n const { visible, position, name, scale } = option\n\n const poiLabel = create3DLabel(getDom(option)) as CustomCssObjec\n // 对象名称\n poiLabel.name = getLastValue(name, 'poiLabel')\n poiLabel.receiveShadow = true\n poiLabel.option = option\n // 是否可见\n poiLabel.visible = getLastValue(visible, true)\n // 设置poi局部位置\n position && poiLabel.position.copy(new Vector3().fromArray(position))\n // poiLabel.position.set(0, (200 * 0.023) / 2 + 3, 0);\n\n const devicePixelRatio = window.devicePixelRatio || 1\n // 调整场景中对象的缩放比例\n\n const vScale = new Vector3(0.023, 0.023, 0.023)\n vScale.multiplyScalar(scale)\n poiLabel.scale.copy(vScale.clone())\n const { scene, camera } = use.useScene()\n console.log('scene:', scene)\n // 添加到场景\n scene?.add(poiLabel)\n this.cssObjects.push(poiLabel)\n let cube\n use.useframe(() => {\n if (!cube) {\n // 假设需要查找的对象名称为 'myObject'\n const objectName = 'GY_zj_gangjiegou_01'\n // 遍历场景中的所有对象\n scene.traverse((child) => {\n // 检查对象的名称是否匹配所需名称\n if (child.name === objectName) {\n // 找到了匹配的对象,可以对其进行操作或者保存引用\n console.log('Found object with name:', objectName)\n cube = child\n }\n })\n }\n if (cube) {\n // 根据目标物体的位置和相机的位置,更新 POI 点的位置\n const cubeWorldPosition = new Vector3()\n cube.getWorldPosition(cubeWorldPosition)\n // console.log('cubeWorldPosition:', cubeWorldPosition)\n\n poiLabel.position.copy(cubeWorldPosition.clone())\n }\n })\n\n use.useScene().orbitControls?.addEventListener('change', () => {\n option.lockAxis && this.updateAxis(poiLabel)\n if ('autoSize' in option && !option.autoSize)\n this.updateScale(poiLabel)\n })\n\n return {\n id: poiLabel.id,\n name,\n visible,\n position,\n }\n }\n\n /**\n * 是否锁定镜头,标牌一直面向镜头\n */\n private updateAxis(object: CustomCssObjec) {\n const { camera } = use.useScene()\n // 获取原有的旋转角度\n const oriEuler = object.rotation\n // 根据锁定的轴进行旋转\n camera && object.rotation.copy(camera.rotation)\n }\n\n /// <summary>\n /// 按照距离缩放,距离越远,缩放越大\n /// </summary>\n private updateScale(object: CustomCssObjec) {\n const { camera } = use.useScene()\n // 获取相机和物体的世界坐标位置\n const cameraPosition = camera?.position\n const objectPosition = object.position\n\n // 计算相机和物体之间的距离\n const distance = cameraPosition?.distanceTo(objectPosition) || 0.1\n\n // 使用 Math.min() 和 Math.max() 方法限制 resultDistance 的范围\n const clampedDistance = Math.max(minDistance, Math.min(maxDistance, distance))\n\n // 按照缩放系数和距离进行缩放,缩放系数应该约定好一个固定值\n object.scale.copy(new Vector3(1, 1, 1).multiplyScalar(clampedDistance * 0.0012))\n }\n\n // 删除POI点信息\n public delete(option: IPOIOption) {\n const { scene } = use.useScene()\n for (let i = 0; i < this.cssObjects.length; i++) {\n if (this.cssObjects[i].id === option.id) {\n scene?.remove(this.cssObjects[i])\n break\n }\n }\n }\n\n public update(option: IPOIOption) { }\n}\n\nexport default Poi\n"],"mappings":"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"}
|