@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.
Files changed (99) hide show
  1. package/README.md +62 -2
  2. package/package.json +45 -4
  3. package/src/additions/Geographic.js +603 -0
  4. package/src/additions/GeographicTransform.js +291 -0
  5. package/src/additions/GeometryInstanceAttributes.js +164 -0
  6. package/src/additions/ModelMatrixTransforms.js +822 -0
  7. package/src/additions/PropertyChangedListener.js +72 -0
  8. package/src/additions/PropertyType.js +30 -0
  9. package/src/additions/StTransforms.js +266 -0
  10. package/src/additions/TranslationRotationScaleTransform.js +809 -0
  11. package/src/additions/index.js +8 -0
  12. package/src/index.js +4 -0
  13. package/src/parses/index.js +46 -0
  14. package/src/parses/parseAltitude.js +32 -0
  15. package/src/parses/parseArcType.js +26 -0
  16. package/src/parses/parseAttitudeToHeadingPitchRoll.js +26 -0
  17. package/src/parses/parseAttitudeToMatrix3.js +17 -0
  18. package/src/parses/parseAttitudeToQuaternion.js +21 -0
  19. package/src/parses/parseCartographicToCartesian.js +21 -0
  20. package/src/parses/parseCartographicsToPositions.js +20 -0
  21. package/src/parses/parseClassificationType.js +24 -0
  22. package/src/parses/parseClockRange.js +26 -0
  23. package/src/parses/parseColorBlendMode.js +26 -0
  24. package/src/parses/parseCornerType.js +24 -0
  25. package/src/parses/parseCullFace.js +28 -0
  26. package/src/parses/parseEulerToHeadingPitchRoll.js +21 -0
  27. package/src/parses/parseEulerToQuaternion.js +18 -0
  28. package/src/parses/parseGeographicToCartesian.js +21 -0
  29. package/src/parses/parseGeographicsToPositions.js +20 -0
  30. package/src/parses/parseHeading.js +28 -0
  31. package/src/parses/parseHeightReference.js +24 -0
  32. package/src/parses/parseHorizontalOrigin.js +26 -0
  33. package/src/parses/parseLabelStyle.js +26 -0
  34. package/src/parses/parseLatitude.js +28 -0
  35. package/src/parses/parseLongitude.js +28 -0
  36. package/src/parses/parsePitch.js +26 -0
  37. package/src/parses/parseRoll.js +26 -0
  38. package/src/parses/parseRotationToHeadingPitchRoll.js +40 -0
  39. package/src/parses/parseRotationToMatrix3.js +25 -0
  40. package/src/parses/parseRotationToQuaternion.js +27 -0
  41. package/src/parses/parseShadowMode.js +26 -0
  42. package/src/parses/parseToBoundingRectangle.js +33 -0
  43. package/src/parses/parseToCartesian2.js +35 -0
  44. package/src/parses/parseToCartesian3.js +37 -0
  45. package/src/parses/parseToCartesian3Array.js +21 -0
  46. package/src/parses/parseToCartesian4.js +39 -0
  47. package/src/parses/parseToCartographic.js +31 -0
  48. package/src/parses/parseToColor.js +33 -0
  49. package/src/parses/parseToDistanceDisplayCondition.js +41 -0
  50. package/src/parses/parseToGeographic.js +31 -0
  51. package/src/parses/parseToHeadingPitchRange.js +45 -0
  52. package/src/parses/parseToJulianDate.js +23 -0
  53. package/src/parses/parseToNearFarScalar.js +33 -0
  54. package/src/parses/parseToPlane.js +37 -0
  55. package/src/parses/parseToPolygonHierarchy.js +48 -0
  56. package/src/parses/parseToRange.js +26 -0
  57. package/src/parses/parseToRectangle.js +32 -0
  58. package/src/parses/parseToTimeInterval.js +45 -0
  59. package/src/parses/parseVerticalOrigin.js +28 -0
  60. package/src/revisions/BoundingSphere.revise.js +107 -0
  61. package/src/revisions/Camera.revise.js +366 -0
  62. package/src/revisions/Cartesian.revise.js +313 -0
  63. package/src/revisions/Cartographic.revise.js +443 -0
  64. package/src/revisions/Check.revise.js +164 -0
  65. package/src/revisions/Color.revise.js +271 -0
  66. package/src/revisions/DistanceDisplayCondition.revise.js +37 -0
  67. package/src/revisions/Ellipsoid.revise.js +64 -0
  68. package/src/revisions/Geometry.revise.js +79 -0
  69. package/src/revisions/Globe.revise.js +92 -0
  70. package/src/revisions/HeadingPitchRoll.revise.js +328 -0
  71. package/src/revisions/JulianDate.revise.js +28 -0
  72. package/src/revisions/Material.revise.js +308 -0
  73. package/src/revisions/Math.revise.js +98 -0
  74. package/src/revisions/Matrix.revise.js +578 -0
  75. package/src/revisions/POI.revise.js +178 -0
  76. package/src/revisions/Plane.revise.js +43 -0
  77. package/src/revisions/PolylinePipeline.revise.js +54 -0
  78. package/src/revisions/PostProcessStageLibrary.revise.js +1143 -0
  79. package/src/revisions/Primitive.revise.js +83 -0
  80. package/src/revisions/Property.revise.js +37 -0
  81. package/src/revisions/Quaternion.revise.js +66 -0
  82. package/src/revisions/Rectangle.revise.js +570 -0
  83. package/src/revisions/SceneTransforms.revise.js +82 -0
  84. package/src/revisions/Spherical.revise.js +35 -0
  85. package/src/revisions/index.js +25 -0
  86. package/src/utils/Scratch.js +165 -0
  87. package/src/utils/computeCirclePositions.js +48 -0
  88. package/src/utils/computeCircleRadius.js +19 -0
  89. package/src/utils/computeModelMatrix.js +109 -0
  90. package/src/utils/computeStTransform.js +57 -0
  91. package/src/utils/createGeometry.js +114 -0
  92. package/src/utils/createPointCloudGeometry.js +79 -0
  93. package/src/utils/getGeometryInstanceAttributes.js +43 -0
  94. package/src/utils/getPositionFromTarget.js +29 -0
  95. package/src/utils/getRenderState.js +35 -0
  96. package/src/utils/index.js +13 -0
  97. package/src/utils/isColorMaterial.js +13 -0
  98. package/src/utils/isTranslucent.js +13 -0
  99. package/src/utils/resolveModelMatrixByFixedFrame.js +30 -0
@@ -0,0 +1,291 @@
1
+ import parseNumber from "@lijuhong1981/jsmath/src/parseNumber.js";
2
+ import { Cartesian3, Math as CesiumMath, Check, Event, Matrix4, Transforms } from "cesium";
3
+ import parseToCartesian3 from "../parses/parseToCartesian3.js";
4
+ import parseToGeographic from "../parses/parseToGeographic.js";
5
+ import Scratch from "../utils/Scratch.js";
6
+ import Geographic from "./Geographic.js";
7
+ import PropertyChangedListener from "./PropertyChangedListener.js";
8
+
9
+ /**
10
+ * 地理坐标变换类,继承自 PropertyChangedListener。
11
+ * 通过经纬高(Geographic)或世界坐标(Cartesian3)设置位置,维护东-北-天(ENU)固定坐标系变换矩阵,
12
+ * 支持逐帧自动更新,并在位置或地理坐标变化时触发属性变更事件。
13
+ */
14
+ class GeographicTransform 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.onPropertyValueChanged] 属性变更回调函数
22
+ * @param {Cartesian3|object} [options.position] 初始世界坐标位置
23
+ * @param {Geographic|object} [options.geographic] 初始地理坐标
24
+ */
25
+ constructor(options = {}) {
26
+ super(options.onPropertyValueChanged);
27
+
28
+ this.owner = options.owner ?? this;
29
+ this.ellipsoid = options.ellipsoid ?? this.owner.ellipsoid;
30
+ this.updateByPerFrame = options.updateByPerFrame ?? true;
31
+
32
+ this._matrix = Matrix4.IDENTITY.clone();
33
+ this._position = new Cartesian3();
34
+ this._geographic = undefined;
35
+ this._matrixChangeEvent = new Event();
36
+
37
+ this.setTransforms(options);
38
+ }
39
+
40
+ /**
41
+ * 根据传入的配置对象设置位置或地理坐标。
42
+ * @param {object} transforms 变换配置,可包含 position 或 geographic
43
+ * @returns {void}
44
+ */
45
+ setTransforms(transforms) {
46
+ if (!transforms)
47
+ return;
48
+
49
+ if (transforms.position)
50
+ this.position = transforms.position;
51
+ else if (transforms.geographic)
52
+ this.geographic = transforms.geographic;
53
+ }
54
+
55
+ /**
56
+ * 获取矩阵变更事件对象,矩阵更新时触发。
57
+ * @returns {Event} 矩阵变更事件对象
58
+ */
59
+ get matrixChangeEvent() {
60
+ return this._matrixChangeEvent;
61
+ }
62
+
63
+ /**
64
+ * 设置世界坐标位置,位置发生变化时触发属性变更事件,并同步更新地理坐标状态。
65
+ * @param {Cartesian3|object} value 世界坐标位置
66
+ * @returns {void}
67
+ */
68
+ set position(value) {
69
+ Check.typeOf.object('position', value);
70
+ value = parseToCartesian3(value, Scratch.scratchPositionWC, 0.0);
71
+ if (!Cartesian3.equals(value, this._position)) {
72
+ this._position = value.clone(this._position);
73
+ this.positionChanged = true;
74
+ this.geographicChanged = false;
75
+ this.raisePropertyChangeEvent('position', this._position);
76
+ if (!this.updateByPerFrame)
77
+ this.updateMatrix(true);
78
+ }
79
+ }
80
+
81
+ /**
82
+ * 获取当前世界坐标位置。
83
+ * @returns {Cartesian3} 当前世界坐标位置
84
+ */
85
+ get position() {
86
+ return this._position;
87
+ }
88
+
89
+ /**
90
+ * 设置世界坐标位置,支持传入 Cartesian3 对象或 x、y、z 分量。
91
+ * @param {Cartesian3|number} x Cartesian3 对象或 x 分量
92
+ * @param {number} [y] y 分量
93
+ * @param {number} [z] z 分量
94
+ * @returns {void}
95
+ */
96
+ setPosition(x, y, z) {
97
+ if (typeof x === 'object')
98
+ this.position = x;
99
+ else
100
+ this.position = Cartesian3.fromElements(x, y, z, Scratch.scratchPositionWC);
101
+ }
102
+
103
+ /**
104
+ * 获取当前世界坐标位置的克隆。
105
+ * @param {Cartesian3} [result] 用于存储结果的 Cartesian3 实例
106
+ * @returns {Cartesian3} 当前世界坐标位置的副本
107
+ */
108
+ getPosition(result) {
109
+ return this._position.clone(result);
110
+ }
111
+
112
+ /**
113
+ * 设置地理坐标(经纬高),发生变化时触发属性变更事件,并同步更新世界坐标状态。
114
+ * @param {Geographic|object} value 地理坐标
115
+ * @returns {void}
116
+ */
117
+ set geographic(value) {
118
+ Check.typeOf.object('geographic', value);
119
+ value = parseToGeographic(value, Scratch.scratchGeographic);
120
+ if (!Geographic.equals(value, this._geographic)) {
121
+ this._geographic = value.clone(this._geographic);
122
+ this.geographicChanged = true;
123
+ this.positionChanged = false;
124
+ this.raisePropertyChangeEvent('geographic', this._geographic);
125
+ if (!this.updateByPerFrame)
126
+ this.updateMatrix(true);
127
+ }
128
+ }
129
+
130
+ /**
131
+ * 获取当前地理坐标。
132
+ * @returns {Geographic} 当前地理坐标
133
+ */
134
+ get geographic() {
135
+ return this._geographic;
136
+ }
137
+
138
+ /**
139
+ * 设置地理坐标,支持传入 Geographic 对象或经纬高数值。
140
+ * @param {Geographic|number} longitude Geographic 对象或经度
141
+ * @param {number} [latitude] 纬度
142
+ * @param {number} [altitude] 高度,单位米
143
+ * @param {boolean} [degrees=true] 传入的经纬度是否为角度制,false 表示弧度制
144
+ * @returns {void}
145
+ */
146
+ setGeographic(longitude, latitude, altitude, degrees = true) {
147
+ if (typeof longitude === 'object')
148
+ this.geographic = longitude;
149
+ else if (degrees)
150
+ this.geographic = Geographic.fromDegrees(longitude, latitude, altitude, Scratch.scratchGeographic);
151
+ else
152
+ this.geographic = Geographic.fromRadians(longitude, latitude, altitude, Scratch.scratchGeographic);
153
+ }
154
+
155
+ /**
156
+ * 获取当前地理坐标的克隆。
157
+ * @param {Geographic} [result] 用于存储结果的 Geographic 实例
158
+ * @returns {Geographic} 当前地理坐标的副本
159
+ */
160
+ getGeographic(result) {
161
+ return this._geographic.clone(result);
162
+ }
163
+
164
+ /**
165
+ * 沿经度方向平移指定数值,并自动将经度限制在 [-180, 180] 范围内。
166
+ * @param {number} value 平移量,正数向东、负数向西
167
+ * @param {boolean} [degrees=true] 是否为角度制,false 表示弧度制
168
+ * @returns {void}
169
+ */
170
+ translateLongitude(value, degrees = true) {
171
+ value = parseNumber(value);
172
+ if (value !== 0) {
173
+ if (degrees === false)
174
+ value = CesiumMath.toDegrees(value);
175
+ let longitude = this._geographic.longitude + value;
176
+ if (longitude > 180)
177
+ longitude -= 360;
178
+ else if (longitude < -180)
179
+ longitude += 360;
180
+ this._geographic.longitude = longitude;
181
+ this.geographicChanged = true;
182
+ this.positionChanged = false;
183
+ this.raisePropertyChangeEvent('geographic', this._geographic);
184
+ }
185
+ }
186
+
187
+ /**
188
+ * 沿纬度方向平移指定数值,并自动将纬度限制在 [-90, 90] 范围内。
189
+ * @param {number} value 平移量,正数向北、负数向南
190
+ * @param {boolean} [degrees=true] 是否为角度制,false 表示弧度制
191
+ * @returns {void}
192
+ */
193
+ translateLatitude(value, degrees = true) {
194
+ value = parseNumber(value);
195
+ if (value !== 0) {
196
+ if (degrees === false)
197
+ value = CesiumMath.toDegrees(value);
198
+ let latitude = this._geographic.latitude + value;
199
+ if (latitude > 90)
200
+ latitude = 90;
201
+ else if (latitude < -90)
202
+ latitude = -90;
203
+ this._geographic.latitude = latitude;
204
+ this.geographicChanged = true;
205
+ this.positionChanged = false;
206
+ this.raisePropertyChangeEvent('geographic', this._geographic);
207
+ }
208
+ }
209
+
210
+ /**
211
+ * 平移高度(海拔)。
212
+ * @param {number} value 高度平移量,单位米
213
+ * @param {boolean} [degrees=true] 是否为角度制,false 时会将 value 由弧度换算为角度
214
+ * @returns {void}
215
+ */
216
+ translateAltitude(value, degrees = true) {
217
+ value = parseNumber(value);
218
+ if (value !== 0) {
219
+ if (degrees === false)
220
+ value = CesiumMath.toDegrees(value);
221
+ this._geographic.altitude += value;
222
+ this.geographicChanged = true;
223
+ this.positionChanged = false;
224
+ this.raisePropertyChangeEvent('geographic', this._geographic);
225
+ }
226
+ }
227
+
228
+ /**
229
+ * 获取当前的固定坐标系变换矩阵。
230
+ * @returns {Matrix4} 东-北-天固定坐标系变换矩阵
231
+ */
232
+ get matrix() {
233
+ return this._matrix;
234
+ }
235
+
236
+ // getMatrix(result) {
237
+ // return this._matrix.clone(result);
238
+ // }
239
+
240
+ /**
241
+ * 根据当前状态重新计算变换矩阵。
242
+ * 若地理坐标或位置发生变化则先同步二者,随后在需要或强制时重建东-北-天矩阵并触发变更事件。
243
+ * @param {boolean} [force] 是否强制更新矩阵
244
+ * @returns {boolean|undefined} 更新成功返回 true,无需更新时返回 undefined
245
+ */
246
+ updateMatrix(force) {
247
+ if (this.geographicChanged) {
248
+ this._position = this._geographic.toCartesian(this.ellipsoid, this._position);
249
+ this.geographicChanged = false;
250
+ this.needsUpdate = true;
251
+ } else if (this.positionChanged) {
252
+ this._geographic = this._position.toGeographic(this.ellipsoid, this._geographic);
253
+ this.positionChanged = false;
254
+ this.needsUpdate = true;
255
+ }
256
+ if (force || this.needsUpdate) {
257
+ this._matrix = Transforms.eastNorthUpToFixedFrame(this._position, this.ellipsoid, this._matrix);
258
+ this._matrixChangeEvent.raiseEvent(this.owner, this._matrix);
259
+ this.needsUpdate = false;
260
+ return true;
261
+ }
262
+ }
263
+
264
+ /**
265
+ * 每帧更新,同步场景椭球体信息并按需更新矩阵。
266
+ * @param {object} [frameState] 帧状态对象
267
+ * @returns {boolean|undefined} 逐帧更新时返回矩阵更新结果
268
+ */
269
+ update(frameState) {
270
+ if (this.isDestroyed())
271
+ return;
272
+ if (frameState)
273
+ this.ellipsoid = frameState.scene.ellipsoid;
274
+ // else
275
+ // this.ellipsoid = this.owner.ellipsoid;
276
+ if (this.updateByPerFrame)
277
+ return this.updateMatrix();
278
+ }
279
+
280
+ /**
281
+ * 销毁实例时清理资源,清空矩阵变更事件并调用父类销毁逻辑。
282
+ * @returns {void}
283
+ */
284
+ onDestroy() {
285
+ this._matrixChangeEvent.clear();
286
+ super.onDestroy();
287
+ }
288
+ };
289
+
290
+ export default GeographicTransform;
291
+ export { GeographicTransform };
@@ -0,0 +1,164 @@
1
+ import { Check, ComponentDatatype, DeveloperError, defined } from "cesium";
2
+
3
+ /**
4
+ * 以下三个类是从 Cesium 源码(packages/engine/Source/Core/)中恢复的
5
+ * `GeometryInstanceAttribute` 派生类。它们在 npm 版 `cesium` 中已被移除,
6
+ * 但 pci-map-3d 的定制 Cesium 构建仍保留,故在此作为库的扩展提供。
7
+ */
8
+
9
+ /**
10
+ * 布尔型几何体实例属性,以无符号字节(Uint8Array)存储布尔值。
11
+ * 该类从 Cesium 源码恢复,npm 版 cesium 中已移除。
12
+ * @param {boolean} [value=true] 初始布尔值
13
+ */
14
+ function BooleanGeometryInstanceAttribute(value = true) {
15
+ this.value = BooleanGeometryInstanceAttribute.toValue(value);
16
+ }
17
+ Object.defineProperties(BooleanGeometryInstanceAttribute.prototype, {
18
+ /** 组件数据类型,固定为无符号字节 */
19
+ componentDatatype: { get: function () { return ComponentDatatype.UNSIGNED_BYTE; } },
20
+ /** 每个属性的组件数量,固定为 1 */
21
+ componentsPerAttribute: { get: function () { return 1; } },
22
+ /** 是否归一化,固定为 false */
23
+ normalize: { get: function () { return false; } },
24
+ });
25
+ /**
26
+ * 从布尔值创建布尔型几何体实例属性(静态方法)。
27
+ * @param {boolean} value 布尔值
28
+ * @returns {BooleanGeometryInstanceAttribute} 新的布尔型几何体实例属性
29
+ */
30
+ BooleanGeometryInstanceAttribute.fromBoolean = function (value) {
31
+ if (!defined(value))
32
+ throw new DeveloperError("value is required.");
33
+ return new BooleanGeometryInstanceAttribute(value);
34
+ };
35
+ /**
36
+ * 将布尔值转换为无符号字节数组(静态方法)。
37
+ * @param {boolean} value 布尔值
38
+ * @param {Uint8Array} [result] 用于存储结果的数组,未提供则新建
39
+ * @returns {Uint8Array} 转换后的无符号字节数组
40
+ */
41
+ BooleanGeometryInstanceAttribute.toValue = function (value, result) {
42
+ if (!defined(value))
43
+ throw new DeveloperError("value is required.");
44
+ if (!defined(result))
45
+ return new Uint8Array([value]);
46
+ result[0] = value;
47
+ return result;
48
+ };
49
+ /**
50
+ * 判断两个布尔型几何体实例属性是否相等(静态方法)。
51
+ * @param {BooleanGeometryInstanceAttribute} left 第一个属性
52
+ * @param {BooleanGeometryInstanceAttribute} right 第二个属性
53
+ * @returns {boolean} 是否相等
54
+ */
55
+ BooleanGeometryInstanceAttribute.equals = function (left, right) {
56
+ return left === right || defined(left) && defined(right) && left.value[0] === right.value[0];
57
+ };
58
+
59
+ /**
60
+ * 三维向量型几何体实例属性,以 Float32Array 存储 x、y、z 分量。
61
+ * 该类从 Cesium 源码恢复,npm 版 cesium 中已移除。
62
+ * @param {number} [x=0] x 分量
63
+ * @param {number} [y=0] y 分量
64
+ * @param {number} [z=0] z 分量
65
+ */
66
+ function Cartesian3GeometryInstanceAttribute(x = 0, y = 0, z = 0) {
67
+ this.value = new Float32Array([x, y, z]);
68
+ }
69
+ Object.defineProperties(Cartesian3GeometryInstanceAttribute.prototype, {
70
+ /** 组件数据类型,固定为浮点型 */
71
+ componentDatatype: { get: function () { return ComponentDatatype.FLOAT; } },
72
+ /** 每个属性的组件数量,固定为 3 */
73
+ componentsPerAttribute: { get: function () { return 3; } },
74
+ /** 是否归一化,固定为 false */
75
+ normalize: { get: function () { return false; } },
76
+ });
77
+ /**
78
+ * 从 Cartesian3 创建三维向量型几何体实例属性(静态方法)。
79
+ * @param {Cartesian3} cartesian Cartesian3 实例
80
+ * @returns {Cartesian3GeometryInstanceAttribute} 新的三维向量型几何体实例属性
81
+ */
82
+ Cartesian3GeometryInstanceAttribute.fromCartesian3 = function (cartesian) {
83
+ Check.defined("cartesian", cartesian);
84
+ return new Cartesian3GeometryInstanceAttribute(cartesian.x, cartesian.y, cartesian.z);
85
+ };
86
+ /**
87
+ * 将 Cartesian3 转换为 Float32Array(静态方法)。
88
+ * @param {Cartesian3} cartesian Cartesian3 实例
89
+ * @param {Float32Array|Array} [result] 用于存储结果的数组,未提供则新建
90
+ * @returns {Float32Array|Array} 转换后的浮点数组
91
+ */
92
+ Cartesian3GeometryInstanceAttribute.toValue = function (cartesian, result) {
93
+ Check.defined("cartesian", cartesian);
94
+ if (!defined(result))
95
+ return new Float32Array([cartesian.x, cartesian.y, cartesian.z]);
96
+ result[0] = cartesian.x;
97
+ result[1] = cartesian.y;
98
+ result[2] = cartesian.z;
99
+ return result;
100
+ };
101
+ /**
102
+ * 判断两个三维向量型几何体实例属性是否相等(静态方法)。
103
+ * @param {Cartesian3GeometryInstanceAttribute} left 第一个属性
104
+ * @param {Cartesian3GeometryInstanceAttribute} right 第二个属性
105
+ * @returns {boolean} 是否相等
106
+ */
107
+ Cartesian3GeometryInstanceAttribute.equals = function (left, right) {
108
+ return left === right || defined(left) && defined(right)
109
+ && left.value[0] === right.value[0]
110
+ && left.value[1] === right.value[1]
111
+ && left.value[2] === right.value[2];
112
+ };
113
+
114
+ /**
115
+ * 浮点型几何体实例属性,以 Float32Array 存储单个浮点数。
116
+ * 该类从 Cesium 源码恢复,npm 版 cesium 中已移除。
117
+ * @param {number} [value=1] 初始浮点值
118
+ */
119
+ function FloatGeometryInstanceAttribute(value = 1) {
120
+ this.value = FloatGeometryInstanceAttribute.toValue(value);
121
+ }
122
+ Object.defineProperties(FloatGeometryInstanceAttribute.prototype, {
123
+ /** 组件数据类型,固定为浮点型 */
124
+ componentDatatype: { get: function () { return ComponentDatatype.FLOAT; } },
125
+ /** 每个属性的组件数量,固定为 1 */
126
+ componentsPerAttribute: { get: function () { return 1; } },
127
+ /** 是否归一化,固定为 false */
128
+ normalize: { get: function () { return false; } },
129
+ });
130
+ /**
131
+ * 从浮点数创建浮点型几何体实例属性(静态方法)。
132
+ * @param {number} value 浮点值
133
+ * @returns {FloatGeometryInstanceAttribute} 新的浮点型几何体实例属性
134
+ */
135
+ FloatGeometryInstanceAttribute.fromFloat = function (value) {
136
+ if (!defined(value))
137
+ throw new DeveloperError("value is required.");
138
+ return new FloatGeometryInstanceAttribute(value);
139
+ };
140
+ /**
141
+ * 将浮点数转换为 Float32Array(静态方法)。
142
+ * @param {number} value 浮点值
143
+ * @param {Float32Array|Array} [result] 用于存储结果的数组,未提供则新建
144
+ * @returns {Float32Array|Array} 转换后的浮点数组
145
+ */
146
+ FloatGeometryInstanceAttribute.toValue = function (value, result) {
147
+ if (!defined(value))
148
+ throw new DeveloperError("value is required.");
149
+ if (!defined(result))
150
+ return new Float32Array([value]);
151
+ result[0] = value;
152
+ return result;
153
+ };
154
+ /**
155
+ * 判断两个浮点型几何体实例属性是否相等(静态方法)。
156
+ * @param {FloatGeometryInstanceAttribute} left 第一个属性
157
+ * @param {FloatGeometryInstanceAttribute} right 第二个属性
158
+ * @returns {boolean} 是否相等
159
+ */
160
+ FloatGeometryInstanceAttribute.equals = function (left, right) {
161
+ return left === right || defined(left) && defined(right) && left.value[0] === right.value[0];
162
+ };
163
+
164
+ export { BooleanGeometryInstanceAttribute, Cartesian3GeometryInstanceAttribute, FloatGeometryInstanceAttribute };