@lijuhong1981/cesium.utils 0.0.0-stage → 0.1.1
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/README.md +62 -2
- package/package.json +45 -4
- package/src/additions/Geographic.js +603 -0
- package/src/additions/GeographicTransform.js +291 -0
- package/src/additions/GeometryInstanceAttributes.js +164 -0
- package/src/additions/ModelMatrixTransforms.js +822 -0
- package/src/additions/PropertyChangedListener.js +72 -0
- package/src/additions/PropertyType.js +30 -0
- package/src/additions/StTransforms.js +266 -0
- package/src/additions/TranslationRotationScaleTransform.js +809 -0
- package/src/additions/index.js +8 -0
- package/src/index.js +4 -0
- package/src/parses/index.js +46 -0
- package/src/parses/parseAltitude.js +32 -0
- package/src/parses/parseArcType.js +26 -0
- package/src/parses/parseAttitudeToHeadingPitchRoll.js +26 -0
- package/src/parses/parseAttitudeToMatrix3.js +17 -0
- package/src/parses/parseAttitudeToQuaternion.js +21 -0
- package/src/parses/parseCartographicToCartesian.js +21 -0
- package/src/parses/parseCartographicsToPositions.js +20 -0
- package/src/parses/parseClassificationType.js +24 -0
- package/src/parses/parseClockRange.js +26 -0
- package/src/parses/parseColorBlendMode.js +26 -0
- package/src/parses/parseCornerType.js +24 -0
- package/src/parses/parseCullFace.js +28 -0
- package/src/parses/parseEulerToHeadingPitchRoll.js +21 -0
- package/src/parses/parseEulerToQuaternion.js +18 -0
- package/src/parses/parseGeographicToCartesian.js +21 -0
- package/src/parses/parseGeographicsToPositions.js +20 -0
- package/src/parses/parseHeading.js +28 -0
- package/src/parses/parseHeightReference.js +24 -0
- package/src/parses/parseHorizontalOrigin.js +26 -0
- package/src/parses/parseLabelStyle.js +26 -0
- package/src/parses/parseLatitude.js +28 -0
- package/src/parses/parseLongitude.js +28 -0
- package/src/parses/parsePitch.js +26 -0
- package/src/parses/parseRoll.js +26 -0
- package/src/parses/parseRotationToHeadingPitchRoll.js +40 -0
- package/src/parses/parseRotationToMatrix3.js +25 -0
- package/src/parses/parseRotationToQuaternion.js +27 -0
- package/src/parses/parseShadowMode.js +26 -0
- package/src/parses/parseToBoundingRectangle.js +33 -0
- package/src/parses/parseToCartesian2.js +35 -0
- package/src/parses/parseToCartesian3.js +37 -0
- package/src/parses/parseToCartesian3Array.js +21 -0
- package/src/parses/parseToCartesian4.js +39 -0
- package/src/parses/parseToCartographic.js +31 -0
- package/src/parses/parseToColor.js +33 -0
- package/src/parses/parseToDistanceDisplayCondition.js +41 -0
- package/src/parses/parseToGeographic.js +31 -0
- package/src/parses/parseToHeadingPitchRange.js +45 -0
- package/src/parses/parseToJulianDate.js +23 -0
- package/src/parses/parseToNearFarScalar.js +33 -0
- package/src/parses/parseToPlane.js +37 -0
- package/src/parses/parseToPolygonHierarchy.js +48 -0
- package/src/parses/parseToRange.js +26 -0
- package/src/parses/parseToRectangle.js +32 -0
- package/src/parses/parseToTimeInterval.js +45 -0
- package/src/parses/parseVerticalOrigin.js +28 -0
- package/src/revisions/BoundingSphere.revise.js +107 -0
- package/src/revisions/Camera.revise.js +366 -0
- package/src/revisions/Cartesian.revise.js +313 -0
- package/src/revisions/Cartographic.revise.js +443 -0
- package/src/revisions/Check.revise.js +164 -0
- package/src/revisions/Color.revise.js +271 -0
- package/src/revisions/DistanceDisplayCondition.revise.js +37 -0
- package/src/revisions/Ellipsoid.revise.js +64 -0
- package/src/revisions/Geometry.revise.js +79 -0
- package/src/revisions/Globe.revise.js +92 -0
- package/src/revisions/HeadingPitchRoll.revise.js +328 -0
- package/src/revisions/JulianDate.revise.js +28 -0
- package/src/revisions/Material.revise.js +308 -0
- package/src/revisions/Math.revise.js +98 -0
- package/src/revisions/Matrix.revise.js +578 -0
- package/src/revisions/POI.revise.js +178 -0
- package/src/revisions/Plane.revise.js +43 -0
- package/src/revisions/PolylinePipeline.revise.js +54 -0
- package/src/revisions/PostProcessStageLibrary.revise.js +1143 -0
- package/src/revisions/Primitive.revise.js +83 -0
- package/src/revisions/Property.revise.js +37 -0
- package/src/revisions/Quaternion.revise.js +66 -0
- package/src/revisions/Rectangle.revise.js +570 -0
- package/src/revisions/SceneTransforms.revise.js +82 -0
- package/src/revisions/Spherical.revise.js +35 -0
- package/src/revisions/index.js +25 -0
- package/src/utils/Scratch.js +165 -0
- package/src/utils/computeCirclePositions.js +48 -0
- package/src/utils/computeCircleRadius.js +19 -0
- package/src/utils/computeModelMatrix.js +109 -0
- package/src/utils/computeStTransform.js +57 -0
- package/src/utils/createGeometry.js +114 -0
- package/src/utils/createPointCloudGeometry.js +79 -0
- package/src/utils/getGeometryInstanceAttributes.js +43 -0
- package/src/utils/getPositionFromTarget.js +29 -0
- package/src/utils/getRenderState.js +35 -0
- package/src/utils/index.js +13 -0
- package/src/utils/isColorMaterial.js +13 -0
- package/src/utils/isTranslucent.js +13 -0
- package/src/utils/resolveModelMatrixByFixedFrame.js +30 -0
|
@@ -0,0 +1,822 @@
|
|
|
1
|
+
import { Cartesian3, Check, Event, Matrix4 } from "cesium";
|
|
2
|
+
import PropertyType from "./PropertyType.js";
|
|
3
|
+
import computeModelMatrix from "../utils/computeModelMatrix.js";
|
|
4
|
+
import resolveModelMatrixByFixedFrame from "../utils/resolveModelMatrixByFixedFrame.js";
|
|
5
|
+
import GeographicTransform from "./GeographicTransform.js";
|
|
6
|
+
import PropertyChangedListener from "./PropertyChangedListener.js";
|
|
7
|
+
import TranslationRotationScaleTransform from "./TranslationRotationScaleTransform.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 模型矩阵变换类,继承自 PropertyChangedListener。
|
|
11
|
+
* 组合地理坐标变换(GeographicTransform)与平移-旋转-缩放变换(TranslationRotationScaleTransform),
|
|
12
|
+
* 通过固定坐标系矩阵与本地变换矩阵计算最终模型矩阵,并支持前置/后置变换矩阵,变化时触发相应事件。
|
|
13
|
+
*/
|
|
14
|
+
class ModelMatrixTransforms extends PropertyChangedListener {
|
|
15
|
+
/**
|
|
16
|
+
* 创建模型矩阵变换实例。
|
|
17
|
+
* @param {object} [options={}] 配置项
|
|
18
|
+
* @param {object} [options.owner] 宿主对象,未提供时默认为当前实例
|
|
19
|
+
* @param {Ellipsoid} [options.ellipsoid] 参考椭球体,未提供时取宿主对象的 ellipsoid
|
|
20
|
+
* @param {boolean} [options.updateByPerFrame=true] 是否逐帧自动更新矩阵
|
|
21
|
+
* @param {function} [options.onModelMatrixChanged] 模型矩阵变更回调函数
|
|
22
|
+
* @param {function} [options.onPropertyValueChanged] 属性变更回调函数
|
|
23
|
+
*/
|
|
24
|
+
constructor(options = {}) {
|
|
25
|
+
super(options.onPropertyValueChanged);
|
|
26
|
+
|
|
27
|
+
this.owner = options.owner ?? this;
|
|
28
|
+
this.ellipsoid = options.ellipsoid ?? this.owner.ellipsoid;
|
|
29
|
+
this._updateByPerFrame = options.updateByPerFrame ?? true;
|
|
30
|
+
this.onModelMatrixChanged = options.onModelMatrixChanged ?? this.onModelMatrixChanged.bind(this.owner);
|
|
31
|
+
// this.updateByPerFrame = options.updateByPerFrame;
|
|
32
|
+
|
|
33
|
+
this._modelMatrix = Matrix4.IDENTITY.clone(new Matrix4());
|
|
34
|
+
this._modelMatrixChanged = new Event();
|
|
35
|
+
|
|
36
|
+
this._geographicTransform = new GeographicTransform({
|
|
37
|
+
owner: this.owner,
|
|
38
|
+
ellipsoid: this.ellipsoid,
|
|
39
|
+
updateByPerFrame: this.updateByPerFrame,
|
|
40
|
+
});
|
|
41
|
+
this._geographicTransform.undeletable = true;
|
|
42
|
+
this._geographicTransform.propertyChanged.addEventListener((raiser, name, value, type) => {
|
|
43
|
+
if (!this.isDestroyed()) {
|
|
44
|
+
this.raisePropertyChangeEvent(name, value, type);
|
|
45
|
+
this.needsUpdateModelMatrix = true;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
this._trsTransform = new TranslationRotationScaleTransform({
|
|
49
|
+
owner: this.owner,
|
|
50
|
+
ellipsoid: this.ellipsoid,
|
|
51
|
+
updateByPerFrame: this.updateByPerFrame,
|
|
52
|
+
});
|
|
53
|
+
this._trsTransform.undeletable = true;
|
|
54
|
+
this._trsTransform.propertyChanged.addEventListener((raiser, name, value, type) => {
|
|
55
|
+
if (!this.isDestroyed()) {
|
|
56
|
+
this.raisePropertyChangeEvent(name, value, type);
|
|
57
|
+
this.needsUpdateModelMatrix = true;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
this.setTransforms(options);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* 根据传入的配置对象设置位置、变换矩阵等参数。
|
|
66
|
+
* @param {object} transforms 变换配置
|
|
67
|
+
* @returns {void}
|
|
68
|
+
*/
|
|
69
|
+
setTransforms(transforms) {
|
|
70
|
+
if (!transforms)
|
|
71
|
+
return;
|
|
72
|
+
|
|
73
|
+
this._geographicTransform.setTransforms(transforms);
|
|
74
|
+
this._trsTransform.setTransforms(transforms);
|
|
75
|
+
if (transforms.beforeTransformMatrix)
|
|
76
|
+
this.beforeTransformMatrix = transforms.beforeTransformMatrix;
|
|
77
|
+
if (transforms.afterTransformMatrix)
|
|
78
|
+
this.afterTransformMatrix = transforms.afterTransformMatrix;
|
|
79
|
+
if (transforms.modelMatrix)
|
|
80
|
+
this.modelMatrix = transforms.modelMatrix;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* 设置是否逐帧自动更新矩阵,并同步到内部的坐标与变换对象。
|
|
85
|
+
* @param {boolean} value 是否逐帧自动更新
|
|
86
|
+
* @returns {void}
|
|
87
|
+
*/
|
|
88
|
+
set updateByPerFrame(value) {
|
|
89
|
+
Check.typeOf.bool('updateByPerFrame', value);
|
|
90
|
+
if (this._updateByPerFrame !== value) {
|
|
91
|
+
this._updateByPerFrame = value;
|
|
92
|
+
this._geographicTransform.updateByPerFrame = value;
|
|
93
|
+
this._trsTransform.updateByPerFrame = value;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 获取是否逐帧自动更新矩阵。
|
|
99
|
+
* @returns {boolean} 是否逐帧自动更新
|
|
100
|
+
*/
|
|
101
|
+
get updateByPerFrame() {
|
|
102
|
+
return this._updateByPerFrame;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 获取模型矩阵变更事件对象。
|
|
107
|
+
* @returns {Event} 模型矩阵变更事件对象
|
|
108
|
+
*/
|
|
109
|
+
get modelMatrixChanged() {
|
|
110
|
+
return this._modelMatrixChanged;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* @deprecated use modelMatrixChanged instead
|
|
115
|
+
*/
|
|
116
|
+
get modelMatrixChangeEvent() {
|
|
117
|
+
console.warn("modelMatrixChangeEvent is deprecated. Use modelMatrixChanged instead.");
|
|
118
|
+
return this.modelMatrixChanged;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* 模型矩阵发生变更时的回调钩子,子类可重写。
|
|
123
|
+
* @param {Matrix4} modelMatrix 变更后的模型矩阵
|
|
124
|
+
* @returns {void}
|
|
125
|
+
*/
|
|
126
|
+
onModelMatrixChanged(modelMatrix) { }
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* 触发模型矩阵变更事件并调用对应回调。
|
|
130
|
+
* @param {Matrix4} modelMatrix 变更后的模型矩阵
|
|
131
|
+
* @returns {void}
|
|
132
|
+
*/
|
|
133
|
+
raiseModelMatrixChangeEvent(modelMatrix) {
|
|
134
|
+
this._modelMatrixChanged.raiseEvent(this.owner, modelMatrix);
|
|
135
|
+
this.onModelMatrixChanged(modelMatrix);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* 设置世界坐标位置(委托给内部地理坐标变换对象)。
|
|
140
|
+
* @param {Cartesian3|object} value 世界坐标位置
|
|
141
|
+
* @returns {void}
|
|
142
|
+
*/
|
|
143
|
+
set position(value) {
|
|
144
|
+
this._geographicTransform.position = value;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* 获取世界坐标位置。
|
|
149
|
+
* @returns {Cartesian3} 世界坐标位置
|
|
150
|
+
*/
|
|
151
|
+
get position() {
|
|
152
|
+
return this._geographicTransform.position;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* 设置世界坐标位置,支持传入 Cartesian3 对象或 x、y、z 分量。
|
|
157
|
+
* @param {Cartesian3|number} x Cartesian3 对象或 x 分量
|
|
158
|
+
* @param {number} [y] y 分量
|
|
159
|
+
* @param {number} [z] z 分量
|
|
160
|
+
* @returns {void}
|
|
161
|
+
*/
|
|
162
|
+
setPosition(x, y, z) {
|
|
163
|
+
this._geographicTransform.setPosition(x, y, z);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* 获取世界坐标位置的克隆。
|
|
168
|
+
* @param {Cartesian3} [result] 用于存储结果的 Cartesian3 实例
|
|
169
|
+
* @returns {Cartesian3} 世界坐标位置副本
|
|
170
|
+
*/
|
|
171
|
+
getPosition(result) {
|
|
172
|
+
return this._geographicTransform.getPosition(result);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* 设置地理坐标(经纬高)。
|
|
177
|
+
* @param {Geographic|object} value 地理坐标
|
|
178
|
+
* @returns {void}
|
|
179
|
+
*/
|
|
180
|
+
set geographic(value) {
|
|
181
|
+
this._geographicTransform.geographic = value;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* 获取地理坐标。
|
|
186
|
+
* @returns {Geographic} 地理坐标
|
|
187
|
+
*/
|
|
188
|
+
get geographic() {
|
|
189
|
+
return this._geographicTransform.geographic;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* 设置地理坐标,支持传入 Geographic 对象或经纬高数值。
|
|
194
|
+
* @param {Geographic|number} longitude Geographic 对象或经度
|
|
195
|
+
* @param {number} [latitude] 纬度
|
|
196
|
+
* @param {number} [altitude] 高度,单位米
|
|
197
|
+
* @param {boolean} [degrees=true] 传入的经纬度是否为角度制
|
|
198
|
+
* @returns {void}
|
|
199
|
+
*/
|
|
200
|
+
setGeographic(longitude, latitude, altitude, degrees) {
|
|
201
|
+
this._geographicTransform.setGeographic(longitude, latitude, altitude, degrees);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* 获取地理坐标的克隆。
|
|
206
|
+
* @param {Geographic} [result] 用于存储结果的 Geographic 实例
|
|
207
|
+
* @returns {Geographic} 地理坐标副本
|
|
208
|
+
*/
|
|
209
|
+
getGeographic(result) {
|
|
210
|
+
return this._geographicTransform.getGeographic(result);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* 沿经度方向平移指定数值。
|
|
215
|
+
* @param {number} value 平移量
|
|
216
|
+
* @param {boolean} [degrees=true] 是否为角度制,false 表示弧度制
|
|
217
|
+
* @returns {void}
|
|
218
|
+
*/
|
|
219
|
+
translateLongitude(value, degrees) {
|
|
220
|
+
this._geographicTransform.translateLongitude(value, degrees);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* 沿纬度方向平移指定数值。
|
|
225
|
+
* @param {number} value 平移量
|
|
226
|
+
* @param {boolean} [degrees=true] 是否为角度制,false 表示弧度制
|
|
227
|
+
* @returns {void}
|
|
228
|
+
*/
|
|
229
|
+
translateLatitude(value, degrees) {
|
|
230
|
+
this._geographicTransform.translateLatitude(value, degrees);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* 平移高度(海拔)。
|
|
235
|
+
* @param {number} value 高度平移量,单位米
|
|
236
|
+
* @param {boolean} [degrees=true] 是否为角度制,false 时会将 value 由弧度换算为角度
|
|
237
|
+
* @returns {void}
|
|
238
|
+
*/
|
|
239
|
+
translateAltitude(value, degrees) {
|
|
240
|
+
this._geographicTransform.translateAltitude(value, degrees);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* 获取固定坐标系(东-北-天)变换矩阵。
|
|
245
|
+
* @returns {Matrix4} 固定坐标系变换矩阵
|
|
246
|
+
*/
|
|
247
|
+
get fixedFrameMatrix() {
|
|
248
|
+
return this._geographicTransform.matrix;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* 设置相对于本地坐标系的平移分量。
|
|
253
|
+
* @param {Cartesian3|Array|object} value 平移分量
|
|
254
|
+
* @returns {void}
|
|
255
|
+
*/
|
|
256
|
+
set translation(value) {
|
|
257
|
+
this._trsTransform.translation = value;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* 获取相对于本地坐标系的平移分量。
|
|
262
|
+
* @returns {Cartesian3} 平移分量
|
|
263
|
+
*/
|
|
264
|
+
get translation() {
|
|
265
|
+
return this._trsTransform.translation;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* 设置平移分量,支持传入 Cartesian3 对象或 x、y、z 分量。
|
|
270
|
+
* @param {Cartesian3|number} x Cartesian3 对象或 x 分量
|
|
271
|
+
* @param {number} [y] y 分量
|
|
272
|
+
* @param {number} [z] z 分量
|
|
273
|
+
* @returns {void}
|
|
274
|
+
*/
|
|
275
|
+
setTranslation(x, y, z) {
|
|
276
|
+
this._trsTransform.setTranslation(x, y, z);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* 获取平移分量的克隆。
|
|
281
|
+
* @param {Cartesian3} [result] 用于存储结果的 Cartesian3 实例
|
|
282
|
+
* @returns {Cartesian3} 平移分量副本
|
|
283
|
+
*/
|
|
284
|
+
getTranslation(result) {
|
|
285
|
+
return this._trsTransform.getTranslation(result);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* 平移变换,支持传入 Cartesian3 对象或 x、y、z 分量。
|
|
290
|
+
* @param {Cartesian3|number} x Cartesian3 对象或 x 分量
|
|
291
|
+
* @param {number|boolean} [y] y 分量;当 x 为对象时表示 local
|
|
292
|
+
* @param {number} [z] z 分量
|
|
293
|
+
* @param {boolean} [local=true] 是否在本地坐标系平移
|
|
294
|
+
* @returns {void}
|
|
295
|
+
*/
|
|
296
|
+
translate(x, y, z, local) {
|
|
297
|
+
this._trsTransform.translate(x, y, z, local);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* 沿指定轴平移指定距离。
|
|
302
|
+
* @param {Cartesian3} axis 平移轴方向
|
|
303
|
+
* @param {number} distance 平移距离
|
|
304
|
+
* @param {boolean} [local=true] 是否在本地坐标系平移
|
|
305
|
+
* @returns {void}
|
|
306
|
+
*/
|
|
307
|
+
translateOnAxis(axis, distance, local) {
|
|
308
|
+
this._trsTransform.translateOnAxis(axis, distance, local);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* 沿 X 轴平移指定距离。
|
|
313
|
+
* @param {number} value 平移距离
|
|
314
|
+
* @param {boolean} [local=true] 是否在本地坐标系平移
|
|
315
|
+
* @returns {void}
|
|
316
|
+
*/
|
|
317
|
+
translateX(value, local) {
|
|
318
|
+
this._trsTransform.translateX(value, local);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* 沿 Y 轴平移指定距离。
|
|
323
|
+
* @param {number} value 平移距离
|
|
324
|
+
* @param {boolean} [local=true] 是否在本地坐标系平移
|
|
325
|
+
* @returns {void}
|
|
326
|
+
*/
|
|
327
|
+
translateY(value, local) {
|
|
328
|
+
this._trsTransform.translateY(value, local);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* 沿 Z 轴平移指定距离。
|
|
333
|
+
* @param {number} value 平移距离
|
|
334
|
+
* @param {boolean} [local=true] 是否在本地坐标系平移
|
|
335
|
+
* @returns {void}
|
|
336
|
+
*/
|
|
337
|
+
translateZ(value, local) {
|
|
338
|
+
this._trsTransform.translateZ(value, local);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* 设置旋转参考系类型。
|
|
343
|
+
* @param {number} value 旋转参考系类型,取值参考 RotationFrameType
|
|
344
|
+
* @returns {void}
|
|
345
|
+
*/
|
|
346
|
+
set rotationFrameType(value) {
|
|
347
|
+
this._trsTransform.rotationFrameType = value;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* 获取旋转参考系类型。
|
|
352
|
+
* @returns {number} 旋转参考系类型,取值参考 RotationFrameType
|
|
353
|
+
*/
|
|
354
|
+
get rotationFrameType() {
|
|
355
|
+
return this._trsTransform.rotationFrameType;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* 以 HeadingPitchRoll 形式设置旋转量。
|
|
360
|
+
* @param {HeadingPitchRoll|Array|object} value 旋转量
|
|
361
|
+
* @returns {void}
|
|
362
|
+
*/
|
|
363
|
+
set rotation(value) {
|
|
364
|
+
this._trsTransform.rotation = value;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* 获取旋转量(HeadingPitchRoll 形式)。
|
|
369
|
+
* @returns {HeadingPitchRoll} 旋转量
|
|
370
|
+
*/
|
|
371
|
+
get rotation() {
|
|
372
|
+
return this._trsTransform.rotation;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* 以角度制设置旋转量。
|
|
377
|
+
* @param {HeadingPitchRoll|Array|object} value 旋转量(角度制)
|
|
378
|
+
* @returns {void}
|
|
379
|
+
*/
|
|
380
|
+
set rotationDegrees(value) {
|
|
381
|
+
this._trsTransform.rotationDegrees = value;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* 获取角度制表示的旋转量。
|
|
386
|
+
* @returns {HeadingPitchRoll} 旋转量(角度制)
|
|
387
|
+
*/
|
|
388
|
+
get rotationDegrees() {
|
|
389
|
+
return this._trsTransform.rotationDegrees;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* 设置旋转量,支持传入 HeadingPitchRoll 对象或 heading、pitch、roll 分量。
|
|
394
|
+
* @param {HeadingPitchRoll|number} heading HeadingPitchRoll 对象或朝向角
|
|
395
|
+
* @param {number|boolean} [pitch] 俯仰角;当 heading 为对象时表示 degrees
|
|
396
|
+
* @param {number} [roll] 翻滚角
|
|
397
|
+
* @param {boolean} [degrees] 旋转量是否为角度制
|
|
398
|
+
* @returns {void}
|
|
399
|
+
*/
|
|
400
|
+
setRotation(heading, pitch, roll, degrees) {
|
|
401
|
+
this._trsTransform.setRotation(heading, pitch, roll, degrees);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* 获取旋转量的克隆。
|
|
406
|
+
* @param {HeadingPitchRoll} [result] 用于存储结果的实例
|
|
407
|
+
* @returns {HeadingPitchRoll} 旋转量副本
|
|
408
|
+
*/
|
|
409
|
+
getRotation(result) {
|
|
410
|
+
return this._trsTransform.getRotation(result);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* 以姿态(yaw、pitch、roll)设置旋转量。
|
|
415
|
+
* @param {Array|object} value 姿态数据
|
|
416
|
+
* @returns {void}
|
|
417
|
+
*/
|
|
418
|
+
set attitude(value) {
|
|
419
|
+
this._trsTransform.attitude = value;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* 获取姿态(yaw、pitch、roll,角度制)。
|
|
424
|
+
* @returns {HeadingPitchRoll} 姿态数据
|
|
425
|
+
*/
|
|
426
|
+
get attitude() {
|
|
427
|
+
return this._trsTransform.attitude;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* 设置姿态,支持传入对象或数值。
|
|
432
|
+
* @param {object|number} yaw 姿态对象或 yaw 分量
|
|
433
|
+
* @param {number} [pitch] pitch 分量
|
|
434
|
+
* @param {number} [roll] roll 分量
|
|
435
|
+
* @returns {void}
|
|
436
|
+
*/
|
|
437
|
+
setAttitude(yaw, pitch, roll) {
|
|
438
|
+
this._trsTransform.setAttitude(yaw, pitch, roll);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* 获取姿态(yaw、pitch、roll,角度制)。
|
|
443
|
+
* @param {HeadingPitchRoll} [result] 用于存储结果的实例
|
|
444
|
+
* @returns {HeadingPitchRoll} 姿态数据
|
|
445
|
+
*/
|
|
446
|
+
getAttitude(result) {
|
|
447
|
+
return this._trsTransform.getAttitude(result);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* 以欧拉角(弧度制)设置旋转量。
|
|
452
|
+
* @param {Cartesian3|Array|object} value 欧拉角(弧度制)
|
|
453
|
+
* @returns {void}
|
|
454
|
+
*/
|
|
455
|
+
set euler(value) {
|
|
456
|
+
this._trsTransform.euler = value;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* 获取欧拉角(弧度制)表示的旋转量。
|
|
461
|
+
* @returns {Cartesian3} 欧拉角(弧度制)
|
|
462
|
+
*/
|
|
463
|
+
get euler() {
|
|
464
|
+
return this._trsTransform.euler;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* 以欧拉角(角度制)设置旋转量。
|
|
469
|
+
* @param {Cartesian3|Array|object} value 欧拉角(角度制)
|
|
470
|
+
* @returns {void}
|
|
471
|
+
*/
|
|
472
|
+
set eulerDegrees(value) {
|
|
473
|
+
this._trsTransform.eulerDegrees = value;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* 获取欧拉角(角度制)表示的旋转量。
|
|
478
|
+
* @returns {Cartesian3} 欧拉角(角度制)
|
|
479
|
+
*/
|
|
480
|
+
get eulerDegrees() {
|
|
481
|
+
return this._trsTransform.eulerDegrees;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* 设置欧拉角,支持传入 Cartesian3 对象或 x、y、z 分量。
|
|
486
|
+
* @param {Cartesian3|number} x Cartesian3 对象或 x 分量
|
|
487
|
+
* @param {number|boolean} [y] y 分量;当 x 为对象时表示 degrees
|
|
488
|
+
* @param {number} [z] z 分量
|
|
489
|
+
* @param {boolean} [degrees] 欧拉角是否为角度制
|
|
490
|
+
* @returns {void}
|
|
491
|
+
*/
|
|
492
|
+
setEuler(x, y, z, degrees) {
|
|
493
|
+
this._trsTransform.setEuler(x, y, z, degrees);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* 获取欧拉角。
|
|
498
|
+
* @param {Cartesian3} [result] 用于存储结果的实例
|
|
499
|
+
* @returns {Cartesian3} 欧拉角
|
|
500
|
+
*/
|
|
501
|
+
getEuler(result) {
|
|
502
|
+
return this._trsTransform.getEuler(result);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* 旋转,支持传入 HeadingPitchRoll 对象或 heading、pitch、roll 分量。
|
|
507
|
+
* @param {HeadingPitchRoll|number} heading HeadingPitchRoll 对象或朝向角
|
|
508
|
+
* @param {number|boolean} [pitch] 俯仰角;当 heading 为对象时表示 degrees
|
|
509
|
+
* @param {number} [roll] 翻滚角
|
|
510
|
+
* @param {boolean} [degrees] 旋转量是否为角度制
|
|
511
|
+
* @returns {void}
|
|
512
|
+
*/
|
|
513
|
+
rotate(heading, pitch, roll, degrees) {
|
|
514
|
+
this._trsTransform.rotate(heading, pitch, roll, degrees);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* 按欧拉角旋转,支持传入 Cartesian3 对象或 x、y、z 分量。
|
|
519
|
+
* @param {Cartesian3|number} x Cartesian3 对象或 x 分量
|
|
520
|
+
* @param {number|boolean} [y] y 分量;当 x 为对象时表示 degrees
|
|
521
|
+
* @param {number} [z] z 分量
|
|
522
|
+
* @param {boolean} [degrees] 欧拉角是否为角度制
|
|
523
|
+
* @returns {void}
|
|
524
|
+
*/
|
|
525
|
+
rotateByEuler(x, y, z, degrees) {
|
|
526
|
+
this._trsTransform.rotateByEuler(x, y, z, degrees);
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* 绕指定轴旋转指定角度。
|
|
531
|
+
* @param {Cartesian3} axis 旋转轴方向
|
|
532
|
+
* @param {number} value 旋转角度
|
|
533
|
+
* @param {boolean} [degrees] 旋转角度是否为角度制
|
|
534
|
+
* @returns {void}
|
|
535
|
+
*/
|
|
536
|
+
rotateOnAxis(axis, value, degrees) {
|
|
537
|
+
this._trsTransform.rotateOnAxis(axis, value, degrees);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* 绕朝向(Heading)轴旋转。
|
|
542
|
+
* @param {number} value 旋转角度
|
|
543
|
+
* @param {boolean} [degrees] 旋转角度是否为角度制
|
|
544
|
+
* @returns {void}
|
|
545
|
+
*/
|
|
546
|
+
rotateHeading(value, degrees) {
|
|
547
|
+
this._trsTransform.rotateHeading(value, degrees);
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* 绕俯仰(Pitch)轴旋转。
|
|
552
|
+
* @param {number} value 旋转角度
|
|
553
|
+
* @param {boolean} [degrees] 旋转角度是否为角度制
|
|
554
|
+
* @returns {void}
|
|
555
|
+
*/
|
|
556
|
+
rotatePitch(value, degrees) {
|
|
557
|
+
this._trsTransform.rotatePitch(value, degrees);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* 绕翻滚(Roll)轴旋转。
|
|
562
|
+
* @param {number} value 旋转角度
|
|
563
|
+
* @param {boolean} [degrees] 旋转角度是否为角度制
|
|
564
|
+
* @returns {void}
|
|
565
|
+
*/
|
|
566
|
+
rotateRoll(value, degrees) {
|
|
567
|
+
this._trsTransform.rotateRoll(value, degrees);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* 绕 X 轴旋转。
|
|
572
|
+
* @param {number} value 旋转角度
|
|
573
|
+
* @param {boolean} [degrees] 旋转角度是否为角度制
|
|
574
|
+
* @returns {void}
|
|
575
|
+
*/
|
|
576
|
+
rotateX(value, degrees) {
|
|
577
|
+
this._trsTransform.rotateX(value, degrees);
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* 绕 Y 轴旋转。
|
|
582
|
+
* @param {number} value 旋转角度
|
|
583
|
+
* @param {boolean} [degrees] 旋转角度是否为角度制
|
|
584
|
+
* @returns {void}
|
|
585
|
+
*/
|
|
586
|
+
rotateY(value, degrees) {
|
|
587
|
+
this._trsTransform.rotateY(value, degrees);
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* 绕 Z 轴旋转。
|
|
592
|
+
* @param {number} value 旋转角度
|
|
593
|
+
* @param {boolean} [degrees] 旋转角度是否为角度制
|
|
594
|
+
* @returns {void}
|
|
595
|
+
*/
|
|
596
|
+
rotateZ(value, degrees) {
|
|
597
|
+
this._trsTransform.rotateZ(value, degrees);
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* 以四元数设置旋转量。
|
|
602
|
+
* @param {Quaternion} value 四元数
|
|
603
|
+
* @returns {void}
|
|
604
|
+
*/
|
|
605
|
+
set quaternion(value) {
|
|
606
|
+
this._trsTransform.quaternion = value;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
/**
|
|
610
|
+
* 获取四元数表示的旋转量。
|
|
611
|
+
* @returns {Quaternion} 四元数
|
|
612
|
+
*/
|
|
613
|
+
get quaternion() {
|
|
614
|
+
return this._trsTransform.quaternion;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/**
|
|
618
|
+
* 设置缩放分量。
|
|
619
|
+
* @param {Cartesian3|Array|object} value 缩放分量
|
|
620
|
+
* @returns {void}
|
|
621
|
+
*/
|
|
622
|
+
set scale(value) {
|
|
623
|
+
this._trsTransform.scale = value;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/**
|
|
627
|
+
* 获取缩放分量。
|
|
628
|
+
* @returns {Cartesian3} 缩放分量
|
|
629
|
+
*/
|
|
630
|
+
get scale() {
|
|
631
|
+
return this._trsTransform.scale;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* 设置缩放分量,支持传入 Cartesian3 对象或 x、y、z 分量。
|
|
636
|
+
* @param {Cartesian3|number} x Cartesian3 对象或 x 分量
|
|
637
|
+
* @param {number} [y] y 分量
|
|
638
|
+
* @param {number} [z] z 分量
|
|
639
|
+
* @returns {void}
|
|
640
|
+
*/
|
|
641
|
+
setScale(x, y, z) {
|
|
642
|
+
this._trsTransform.setScale(x, y, z);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/**
|
|
646
|
+
* 获取缩放分量的克隆。
|
|
647
|
+
* @param {Cartesian3} [result] 用于存储结果的 Cartesian3 实例
|
|
648
|
+
* @returns {Cartesian3} 缩放分量副本
|
|
649
|
+
*/
|
|
650
|
+
getScale(result) {
|
|
651
|
+
return this._trsTransform.getScale(result);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/**
|
|
655
|
+
* 获取本地坐标系下的变换矩阵。
|
|
656
|
+
* @returns {Matrix4} 本地变换矩阵
|
|
657
|
+
*/
|
|
658
|
+
get localTransformMatrix() {
|
|
659
|
+
return this._trsTransform.matrix;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* 设置前置变换矩阵,在本地变换之前应用;传入 undefined 表示清除。
|
|
664
|
+
* @param {Matrix4} value 前置变换矩阵
|
|
665
|
+
* @returns {void}
|
|
666
|
+
*/
|
|
667
|
+
set beforeTransformMatrix(value) {
|
|
668
|
+
if (defined(value)) {
|
|
669
|
+
Check.instanceOf('beforeTransformMatrix', value, Matrix4);
|
|
670
|
+
if (!Matrix4.equals(value, this._beforeTransformMatrix)) {
|
|
671
|
+
this._beforeTransformMatrix = Matrix4.clone(value, this._beforeTransformMatrix);
|
|
672
|
+
this.needsUpdateModelMatrix = true;
|
|
673
|
+
this.raisePropertyChangeEvent('beforeTransformMatrix', value);
|
|
674
|
+
}
|
|
675
|
+
} else if (defined(this._beforeTransformMatrix)) {
|
|
676
|
+
this._beforeTransformMatrix = undefined;
|
|
677
|
+
this.needsUpdateModelMatrix = true;
|
|
678
|
+
this.raisePropertyChangeEvent('beforeTransformMatrix', value);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* 获取前置变换矩阵。
|
|
684
|
+
* @returns {Matrix4} 前置变换矩阵
|
|
685
|
+
*/
|
|
686
|
+
get beforeTransformMatrix() {
|
|
687
|
+
return this._beforeTransformMatrix;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
/**
|
|
691
|
+
* 设置后置变换矩阵,在本地变换之后应用;传入 undefined 表示清除。
|
|
692
|
+
* @param {Matrix4} value 后置变换矩阵
|
|
693
|
+
* @returns {void}
|
|
694
|
+
*/
|
|
695
|
+
set afterTransformMatrix(value) {
|
|
696
|
+
if (defined(value)) {
|
|
697
|
+
Check.instanceOf('afterTransformMatrix', value, Matrix4);
|
|
698
|
+
if (!Matrix4.equals(value, this._afterTransformMatrix)) {
|
|
699
|
+
this._afterTransformMatrix = Matrix4.clone(value, this._afterTransformMatrix);
|
|
700
|
+
this.needsUpdateModelMatrix = true;
|
|
701
|
+
this.raisePropertyChangeEvent('afterTransformMatrix', value);
|
|
702
|
+
}
|
|
703
|
+
} else if (defined(this._afterTransformMatrix)) {
|
|
704
|
+
this._afterTransformMatrix = undefined;
|
|
705
|
+
this.needsUpdateModelMatrix = true;
|
|
706
|
+
this.raisePropertyChangeEvent('afterTransformMatrix', value);
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* 获取后置变换矩阵。
|
|
712
|
+
* @returns {Matrix4} 后置变换矩阵
|
|
713
|
+
*/
|
|
714
|
+
get afterTransformMatrix() {
|
|
715
|
+
return this._afterTransformMatrix;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/**
|
|
719
|
+
* 通过完整模型矩阵反解出位置、旋转、缩放并应用到各变换分量。
|
|
720
|
+
* @param {Matrix4} value 模型矩阵
|
|
721
|
+
* @returns {void}
|
|
722
|
+
*/
|
|
723
|
+
set modelMatrix(value) {
|
|
724
|
+
Check.instanceOf('modelMatrix', value, Matrix4);
|
|
725
|
+
if (!Matrix4.equals(value, this._modelMatrix)) {
|
|
726
|
+
const result = resolveModelMatrixByFixedFrame(value, this.ellipsoid);
|
|
727
|
+
this.position = result.position;
|
|
728
|
+
this.translation = Cartesian3.ZERO;
|
|
729
|
+
this.rotation = result.rotation;
|
|
730
|
+
this.scale = result.scale;
|
|
731
|
+
this.beforeTransformMatrix = undefined;
|
|
732
|
+
this.afterTransformMatrix = undefined;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* 获取当前的模型矩阵。
|
|
738
|
+
* @returns {Matrix4} 模型矩阵
|
|
739
|
+
*/
|
|
740
|
+
get modelMatrix() {
|
|
741
|
+
return this._modelMatrix;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
/**
|
|
745
|
+
* 异步获取模型矩阵中的实际世界坐标位置,会等待位置与模型矩阵更新完成后返回。
|
|
746
|
+
* @param {Cartesian3} [result] 用于存储结果的 Cartesian3 实例
|
|
747
|
+
* @returns {Promise<Cartesian3>} 解析为实际世界坐标位置的 Promise
|
|
748
|
+
*/
|
|
749
|
+
getActualPosition(result) {
|
|
750
|
+
return new Promise((resolve, reject) => {
|
|
751
|
+
|
|
752
|
+
const doGetActualPosition = () => {
|
|
753
|
+
if (this._geographicTransform.positionChanged || this._geographicTransform.geographicChanged || this.needsUpdateModelMatrix) {
|
|
754
|
+
setTimeout(doGetActualPosition, 10);
|
|
755
|
+
return;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
if (!result)
|
|
759
|
+
result = new Cartesian3();
|
|
760
|
+
Matrix4.getTranslation(this.modelMatrix, result);
|
|
761
|
+
resolve(result);
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
doGetActualPosition();
|
|
765
|
+
});
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/**
|
|
769
|
+
* 根据固定坐标系矩阵与各级变换矩阵重新计算模型矩阵,并触发相应变更事件。
|
|
770
|
+
* @param {boolean} [force] 是否强制更新模型矩阵
|
|
771
|
+
* @returns {boolean|undefined} 更新成功返回 true,无需更新时返回 undefined
|
|
772
|
+
*/
|
|
773
|
+
updateModelMatrix(force) {
|
|
774
|
+
if (force || this.needsUpdateModelMatrix) {
|
|
775
|
+
this._modelMatrix = computeModelMatrix({
|
|
776
|
+
fixedFrameMatrix: this.fixedFrameMatrix,
|
|
777
|
+
beforeTransformMatrix: this.beforeTransformMatrix,
|
|
778
|
+
localTransformMatrix: this.localTransformMatrix,
|
|
779
|
+
afterTransformMatrix: this.afterTransformMatrix,
|
|
780
|
+
ellipsoid: this.ellipsoid,
|
|
781
|
+
}, this._modelMatrix);
|
|
782
|
+
this.raisePropertyChangeEvent('modelMatrix', this._modelMatrix, PropertyType.MODELMATRIX);
|
|
783
|
+
this.raiseModelMatrixChangeEvent(this._modelMatrix);
|
|
784
|
+
this.needsUpdateModelMatrix = false;
|
|
785
|
+
// console.log('computeModelMatrix:', this._modelMatrix);
|
|
786
|
+
return true;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
/**
|
|
791
|
+
* 每帧更新,先更新内部坐标与变换对象,再按需更新模型矩阵。
|
|
792
|
+
* @param {object} [frameState] 帧状态对象
|
|
793
|
+
* @returns {boolean|undefined} 模型矩阵更新结果
|
|
794
|
+
*/
|
|
795
|
+
update(frameState) {
|
|
796
|
+
if (this.isDestroyed())
|
|
797
|
+
return;
|
|
798
|
+
if (frameState)
|
|
799
|
+
this.ellipsoid = frameState.scene.ellipsoid;
|
|
800
|
+
if (this._geographicTransform.update(frameState)) {
|
|
801
|
+
this.needsUpdateModelMatrix = true;
|
|
802
|
+
}
|
|
803
|
+
if (this._trsTransform.update(frameState)) {
|
|
804
|
+
this.needsUpdateModelMatrix = true;
|
|
805
|
+
}
|
|
806
|
+
return this.updateModelMatrix();
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/**
|
|
810
|
+
* 销毁实例时清理资源,清空事件并销毁内部坐标与变换对象。
|
|
811
|
+
* @returns {void}
|
|
812
|
+
*/
|
|
813
|
+
onDestroy() {
|
|
814
|
+
this._modelMatrixChanged.clear();
|
|
815
|
+
this._geographicTransform.destroy();
|
|
816
|
+
this._trsTransform.destroy();
|
|
817
|
+
super.onDestroy();
|
|
818
|
+
}
|
|
819
|
+
};
|
|
820
|
+
|
|
821
|
+
export default ModelMatrixTransforms;
|
|
822
|
+
export { ModelMatrixTransforms };
|