@lijuhong1981/cesium.utils 0.0.0-stage → 0.1.0

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 +33 -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,271 @@
1
+ import { Cartesian3, Cartesian4, Check, Color, defined, DeveloperError } from "cesium";
2
+
3
+ /**
4
+ * 扩展 Cesium 的 Color 类,补充 rgb 复制比较、与 Byte 数组的打包解包、
5
+ * CSS 字符串转换、与 Cartesian 互转等方法。
6
+ * @class Color
7
+ * @see {@link https://cesium.com/learn/cesiumjs/ref-doc/Color.html}
8
+ */
9
+
10
+ /**
11
+ * 复制一个 Color 的 rgb 分量(不包含 alpha)。
12
+ *
13
+ * @param {Color} color 待复制的 Color 对象。
14
+ * @param {Color} [result] 存放结果的对象,未指定则创建新实例。
15
+ * @returns {Color} 修改后的 result 或新建的实例;若 color 未定义则返回 undefined。
16
+ * @memberof Color
17
+ * @static
18
+ */
19
+ Color.cloneRgb = function (color, result) {
20
+ if (!defined(color)) {
21
+ return undefined;
22
+ }
23
+ if (!defined(result)) {
24
+ return new Color(color.red, color.green, color.blue);
25
+ }
26
+ result.red = color.red;
27
+ result.green = color.green;
28
+ result.blue = color.blue;
29
+ return result;
30
+ };
31
+
32
+ /**
33
+ * 判断两个 Color 的 rgb 分量是否相等。
34
+ *
35
+ * @param {Color} [left] 待比较的第一个 Color 对象。
36
+ * @param {Color} [right] 待比较的第二个 Color 对象。
37
+ * @returns {boolean} 两个 Color 的 rgb 相等返回 <code>true</code>,否则返回 <code>false</code>。
38
+ * @memberof Color
39
+ * @static
40
+ */
41
+ Color.equalsRgb = function (left, right) {
42
+ return (
43
+ left === right || //
44
+ (defined(left) && //
45
+ defined(right) && //
46
+ left.red === right.red && //
47
+ left.green === right.green && //
48
+ left.blue === right.blue)
49
+ );
50
+ };
51
+
52
+ /**
53
+ * 复制当前 Color 的 rgb 分量(不包含 alpha)。
54
+ *
55
+ * @param {Color} [result] 存放结果的对象,未指定则创建新实例。
56
+ * @returns {Color} 修改后的 result 或新建的实例。
57
+ * @memberof Color
58
+ */
59
+ Color.prototype.cloneRgb = function (result) {
60
+ return Color.cloneRgb(this, result);
61
+ };
62
+
63
+ /**
64
+ * 判断当前 Color 的 rgb 分量是否与 other 相等。
65
+ *
66
+ * @param {Color} [other] 待比较的 Color 对象。
67
+ * @returns {boolean} 两个 Color 的 rgb 相等返回 <code>true</code>,否则返回 <code>false</code>。
68
+ * @memberof Color
69
+ */
70
+ Color.prototype.equalsRgb = function (other) {
71
+ return Color.equalsRgb(this, other);
72
+ };
73
+
74
+ /**
75
+ * 将一个Color对象属性转换为Byte,并打包入一个数组中。
76
+ * @param {Color} color Color对象
77
+ * @param {Array} [array] 存放结果的数组,如果未指定则创建一个新的数组
78
+ * @param {number} [startingIndex=0] 开始存放的位置,默认为0
79
+ * @returns {Array<number>} 返回存放结果的数组
80
+ * @memberof Color
81
+ * @static
82
+ */
83
+ Color.packToBytes = function (color, array = [], startingIndex = 0) {
84
+ Check.typeOf.object("color", color);
85
+
86
+ array[startingIndex] = Color.floatToByte(color.red);
87
+ array[startingIndex + 1] = Color.floatToByte(color.green);
88
+ array[startingIndex + 2] = Color.floatToByte(color.blue);
89
+ array[startingIndex + 3] = Color.floatToByte(color.alpha);
90
+
91
+ return array;
92
+ };
93
+
94
+ /**
95
+ * 将一个Color对象数组属性转换为Byte,并打包入一个数组中。
96
+ * @param {Array<Color>} array Color对象数组
97
+ * @param {Array} [result] 存放结果的数组,如果未指定则创建一个新的数组
98
+ * @returns {Array<number>} 返回存放结果的数组
99
+ * @memberof Color
100
+ * @static
101
+ */
102
+ Color.packArrayToBytes = function (array, result) {
103
+ //>>includeStart('debug', pragmas.debug);
104
+ Check.typeOf.array("array", array);
105
+ //>>includeEnd('debug');
106
+
107
+ const length = array.length;
108
+ const resultLength = length * 4;
109
+ if (!defined(result)) {
110
+ result = new Array(resultLength);
111
+ } else if (!Array.isArray(result) && result.length !== resultLength) {
112
+ throw new DeveloperError(
113
+ "If result is a typed array, it must have exactly array.length * 4 elements"
114
+ );
115
+ } else if (result.length !== resultLength) {
116
+ result.length = resultLength;
117
+ }
118
+
119
+ for (let i = 0; i < length; ++i) {
120
+ Color.packToBytes(array[i], result, i * 4);
121
+ }
122
+ return result;
123
+ };
124
+
125
+ /**
126
+ * 从一个Byte数组中解包出Color对象。
127
+ * @param {Array<number>} array 存放Color属性的Byte数组
128
+ * @param {number} [startingIndex=0] 开始读取的位置,默认为0
129
+ * @param {Color} [result] 存放结果的Color对象,如果未指定则创建一个新的Color对象
130
+ * @returns {Color} 返回存放结果的Color对象
131
+ * @memberof Color
132
+ * @static
133
+ */
134
+ Color.unpackFromBytes = function (array, startingIndex = 0, result) {
135
+ Check.defined("array", array);
136
+
137
+ return Color.fromBytes(array[startingIndex], array[startingIndex + 1], array[startingIndex + 2], array[startingIndex + 3], result);;
138
+ };
139
+
140
+ /**
141
+ * 从一个Byte数组中解包出Color对象数组。
142
+ * @param {Array<number>} array 存放Color属性的Byte数组
143
+ * @param {Array<Color>} [result] 存放结果的Color对象数组,如果未指定则创建一个新的Color对象数组
144
+ * @returns {Array<Color>} 返回存放结果的Color对象数组
145
+ * @memberof Color
146
+ * @static
147
+ */
148
+ Color.unpackArrayFromBytes = function (array, result) {
149
+ Check.defined("array", array);
150
+
151
+ if (array.length % 4 !== 0) {
152
+ throw new DeveloperError("array length must be a multiple of 4.");
153
+ }
154
+ //>>includeEnd('debug');
155
+
156
+ var length = array.length;
157
+ if (!defined(result)) {
158
+ result = new Array(length / 4);
159
+ } else {
160
+ result.length = length / 4;
161
+ }
162
+
163
+ for (var i = 0; i < length; i += 4) {
164
+ var index = i / 4;
165
+ result[index] = Color.unpackFromBytes(array, i, result[index]);
166
+ }
167
+ return result;
168
+ };
169
+
170
+ /**
171
+ * 从数组生成Color对象,等同于 Color.unpack。
172
+ * @memberof Color
173
+ * @static
174
+ * @see Color.unpack
175
+ */
176
+ Color.fromArray = Color.unpack;
177
+
178
+ /**
179
+ * 从Byte数组生成Color对象,等同于 Color.unpackFromBytes。
180
+ * @memberof Color
181
+ * @static
182
+ * @see Color.unpackFromBytes
183
+ */
184
+ Color.fromBytesArray = Color.unpackFromBytes;
185
+
186
+ /**
187
+ * 从CSS颜色字符串创建一个Color对象。
188
+ * @param {string} color CSS颜色字符串
189
+ * @param {number} [alpha] 透明度,如果指定则覆盖CSS颜色字符串中的透明度
190
+ * @param {Color} [result] 存放结果的Color对象,如果未指定则创建一个新的Color对象
191
+ * @returns {Color} 返回存放结果的Color对象
192
+ * @memberof Color
193
+ * @static
194
+ */
195
+ Color.fromCssColorWithAlpha = function (color, alpha, result) {
196
+ result = Color.fromCssColorString(color, result);
197
+ if (defined(alpha))
198
+ result.alpha = alpha;
199
+ return result;
200
+ };
201
+
202
+ /**
203
+ * 将当前Color对象转换为CSS rgb颜色字符串。
204
+ * @return {string} CSS rgb颜色字符串,例如"rgb(255,0,0)"
205
+ * @memberof Color
206
+ */
207
+ Color.prototype.toCssRgbString = function () {
208
+ const red = Color.floatToByte(this.red);
209
+ const green = Color.floatToByte(this.green);
210
+ const blue = Color.floatToByte(this.blue);
211
+ return `rgb(${red},${green},${blue})`;
212
+ };
213
+
214
+ /**
215
+ * 将当前Color对象转换为CSS rgba颜色字符串。
216
+ * @return {string} CSS rgba颜色字符串,例如"rgba(255,0,0,0.5)"
217
+ * @memberof Color
218
+ */
219
+ Color.prototype.toCssRgbaString = function () {
220
+ const red = Color.floatToByte(this.red);
221
+ const green = Color.floatToByte(this.green);
222
+ const blue = Color.floatToByte(this.blue);
223
+ return `rgba(${red},${green},${blue},${this.alpha})`;
224
+ };
225
+
226
+ /**
227
+ * 从Cartesian3对象创建一个Color对象。
228
+ * @param {Cartesian3} cartesian 输入的Cartesian3对象
229
+ * @param {Color} [result] 存放结果的Color对象,如果未指定则创建一个新的Color对象
230
+ * @returns {Color} 返回存放结果的Color对象
231
+ * @memberof Color
232
+ * @static
233
+ */
234
+ Color.fromCartesian3 = function (cartesian, result = new Color()) {
235
+ Check.typeOf.object('cartesian', cartesian);
236
+
237
+ result.red = cartesian.x;
238
+ result.green = cartesian.y;
239
+ result.blue = cartesian.z;
240
+ return result;
241
+ };
242
+
243
+ /**
244
+ * 将当前Color对象转换为Cartesian3对象。
245
+ * @param {Cartesian3} [result] 存放结果的Cartesian3对象,如果未指定则创建一个新的Cartesian3对象
246
+ * @returns {Cartesian3} 返回存放结果的Cartesian3对象
247
+ * @memberof Color
248
+ */
249
+ Color.prototype.toCartesian3 = function (result = new Cartesian3()) {
250
+ result.x = this.red;
251
+ result.y = this.green;
252
+ result.z = this.blue;
253
+ return result;
254
+ };
255
+
256
+ /**
257
+ * 将当前Color对象转换为Cartesian4对象。
258
+ * @param {Cartesian4} [result] 存放结果的Cartesian4对象,如果未指定则创建一个新的Cartesian4对象
259
+ * @returns {Cartesian4} 返回存放结果的Cartesian4对象
260
+ * @memberof Color
261
+ */
262
+ Color.prototype.toCartesian4 = function (result = new Cartesian4()) {
263
+ result.x = this.red;
264
+ result.y = this.green;
265
+ result.z = this.blue;
266
+ result.w = this.alpha;
267
+ return result;
268
+ };
269
+
270
+ export default Color;
271
+ export { Color };
@@ -0,0 +1,37 @@
1
+ import { Math as CesiumMath, Check, DistanceDisplayCondition } from "cesium";
2
+
3
+ /**
4
+ * 扩展 Cesium 的 DistanceDisplayCondition 类,补充基于距离判断是否显示的方法。
5
+ * @class DistanceDisplayCondition
6
+ * @see {@link https://cesium.com/learn/cesiumjs/ref-doc/DistanceDisplayCondition.html}
7
+ */
8
+
9
+ /**
10
+ * 判断给定距离是否位于距离显示条件范围内。
11
+ * @param {DistanceDisplayCondition} distanceDisplayCondition 距离显示条件。
12
+ * @param {number} distance 待判断的距离,单位米。
13
+ * @returns {boolean} 距离位于 near 与 far 之间返回 true,否则返回 false。
14
+ * @memberof DistanceDisplayCondition
15
+ * @static
16
+ */
17
+ DistanceDisplayCondition.isDisplay = function (distanceDisplayCondition, distance) {
18
+ Check.defined('distanceDisplayCondition', distanceDisplayCondition);
19
+ return CesiumMath.between(
20
+ distance,
21
+ Math.min(distanceDisplayCondition.near, distanceDisplayCondition.far),
22
+ Math.max(distanceDisplayCondition.near, distanceDisplayCondition.far)
23
+ );
24
+ };
25
+
26
+ /**
27
+ * 判断给定距离是否位于当前距离显示条件范围内。
28
+ * @param {number} distance 待判断的距离,单位米。
29
+ * @returns {boolean} 距离位于 near 与 far 之间返回 true,否则返回 false。
30
+ * @memberof DistanceDisplayCondition
31
+ */
32
+ DistanceDisplayCondition.prototype.isDisplay = function (distance) {
33
+ return DistanceDisplayCondition.isDisplay(this, distance);
34
+ };
35
+
36
+ export default DistanceDisplayCondition;
37
+ export { DistanceDisplayCondition };
@@ -0,0 +1,64 @@
1
+ import { Check, Ellipsoid, IntersectionTests, Ray } from "cesium";
2
+ import Scratch from "../utils/Scratch.js";
3
+
4
+ /**
5
+ * 扩展 Cesium 的 Ellipsoid 类,补充缩放椭球高、高度偏移以及射线求交等方法。
6
+ * @class Ellipsoid
7
+ * @see {@link https://cesium.com/learn/cesiumjs/ref-doc/Ellipsoid.html}
8
+ */
9
+
10
+ /**
11
+ * 将给定点的高度缩放到指定的椭球高。
12
+ * @param {Cartesian3} cartesian 待处理的点(世界坐标)。
13
+ * @param {number} height 目标椭球高度,单位米。
14
+ * @param {Cartesian3} [result] 存放结果的对象,未指定则创建新实例。
15
+ * @returns {Cartesian3} 修改后的 result 或新建的实例。
16
+ * @memberof Ellipsoid
17
+ */
18
+ Ellipsoid.prototype.scaleToGeodeticHeight = function (cartesian, height, result) {
19
+ Check.defined('cartesian', cartesian);
20
+ Check.typeOf.number('height', height);
21
+ const cartographic = this.cartesianToCartographic(cartesian, Scratch.scratchCartographic);
22
+ cartographic.height = height;
23
+ return this.cartographicToCartesian(cartographic, result);
24
+ };
25
+
26
+ /**
27
+ * 在给定点当前高度的基础上偏移指定高度,返回新的位置。
28
+ * @param {Cartesian3} cartesian 待处理的点(世界坐标)。
29
+ * @param {number} [heightOffset=0] 高度偏移量,单位米。
30
+ * @param {Cartesian3} [result] 存放结果的对象,未指定则创建新实例。
31
+ * @returns {Cartesian3} 修改后的 result 或新建的实例。
32
+ * @memberof Ellipsoid
33
+ */
34
+ Ellipsoid.prototype.scaleGeodeticHeightOffset = function (cartesian, heightOffset = 0, result) {
35
+ Check.defined('cartesian', cartesian);
36
+ Check.typeOf.number('heightOffset', heightOffset);
37
+ if (heightOffset === 0)
38
+ return cartesian.clone(result);
39
+ const cartographic = this.cartesianToCartographic(cartesian, Scratch.scratchCartographic);
40
+ cartographic.height += heightOffset;
41
+ return this.cartographicToCartesian(cartographic, result);
42
+ };
43
+
44
+ /**
45
+ * 计算射线与椭球表面的交点。
46
+ * @param {Ray} ray 射线。
47
+ * @param {Cartesian3} [result] 存放结果的对象,未指定则创建新实例。
48
+ * @returns {Cartesian3} 射线与椭球的交点;无交点时返回 undefined。
49
+ * @memberof Ellipsoid
50
+ */
51
+ Ellipsoid.prototype.rayPosition = function (ray, result) {
52
+ Check.instanceOf('ray', ray, Ray);
53
+
54
+ const intersection = IntersectionTests.rayEllipsoid(ray, this);
55
+ if (!intersection) {
56
+ return undefined;
57
+ }
58
+
59
+ const t = intersection.start > 0.0 ? intersection.start : intersection.stop;
60
+ return Ray.getPoint(ray, t, result);
61
+ };
62
+
63
+ export default Ellipsoid;
64
+ export { Ellipsoid };
@@ -0,0 +1,79 @@
1
+ import { BoundingSphere, Geometry, GeometryPipeline, PrimitiveType } from "cesium";
2
+
3
+ /**
4
+ * 扩展 Cesium 的 Geometry 类,补充克隆、转线框以及获取包围球等方法。
5
+ * @class Geometry
6
+ * @see {@link https://cesium.com/learn/cesiumjs/ref-doc/Geometry.html}
7
+ */
8
+
9
+ /**
10
+ * 克隆一个 Geometry 对象。
11
+ * @param {Geometry} geometry 待克隆的几何体。
12
+ * @returns {Geometry} 克隆得到的新几何体。
13
+ * @memberof Geometry
14
+ * @static
15
+ */
16
+ Geometry.clone = function (geometry) {
17
+ return new Geometry({
18
+ attributes: geometry.attributes,
19
+ indices: geometry.indices,
20
+ primitiveType: geometry.primitiveType,
21
+ boundingSphere: geometry.boundingSphere
22
+ });
23
+ };
24
+
25
+ /**
26
+ * 克隆当前 Geometry 对象。
27
+ * @returns {Geometry} 克隆得到的新几何体。
28
+ * @memberof Geometry
29
+ */
30
+ Geometry.prototype.clone = function () {
31
+ return Geometry.clone(this);
32
+ };
33
+
34
+ /**
35
+ * 将三角形类型的几何体转换为线框几何体;非三角形类型原样返回。
36
+ * @param {Geometry} geometry 待转换的几何体。
37
+ * @returns {Geometry} 转换后的线框几何体或原几何体。
38
+ * @memberof Geometry
39
+ * @static
40
+ */
41
+ Geometry.toWireframe = function (geometry) {
42
+ if (geometry.primitiveType !== PrimitiveType.TRIANGLES &&
43
+ geometry.primitiveType !== PrimitiveType.TRIANGLE_FAN &&
44
+ geometry.primitiveType !== PrimitiveType.TRIANGLE_STRIP) {
45
+ return geometry;
46
+ }
47
+
48
+ return GeometryPipeline.toWireframe(geometry);
49
+ };
50
+
51
+ /**
52
+ * 将当前几何体转换为线框几何体;非三角形类型原样返回。
53
+ * @returns {Geometry} 转换后的线框几何体或原几何体。
54
+ * @memberof Geometry
55
+ */
56
+ Geometry.prototype.toWireframe = function () {
57
+ return Geometry.toWireframe(this);
58
+ };
59
+
60
+ /**
61
+ * 获取当前几何体的包围球,优先使用已计算的 boundingSphere,否则由顶点计算。
62
+ * @param {BoundingSphere} [result] 存放结果的对象,未指定则创建新实例。
63
+ * @returns {BoundingSphere} 几何体的包围球。
64
+ * @memberof Geometry
65
+ */
66
+ Geometry.prototype.getBoundingSphere = function (result) {
67
+ if (!result)
68
+ result = new BoundingSphere();
69
+ if (this.boundingSphere)
70
+ this.boundingSphere.clone(result);
71
+ else {
72
+ const positions = this.attributes.position.values;
73
+ BoundingSphere.fromVertices(positions, undefined, undefined, result);
74
+ }
75
+ return result;
76
+ };
77
+
78
+ export default Geometry;
79
+ export { Geometry };
@@ -0,0 +1,92 @@
1
+ import { Check, Globe, GlobeSurfaceTileProvider } from "cesium";
2
+
3
+ /**
4
+ * 扩展 Cesium 的 GlobeSurfaceTileProvider 类,补充地形分析访问属性与待渲染瓦片帧回调支持。
5
+ * @class GlobeSurfaceTileProvider
6
+ * @see {@link https://cesium.com/learn/cesiumjs/ref-doc/GlobeSurfaceTileProvider.html}
7
+ */
8
+ /**
9
+ * 扩展 Cesium 的 Globe 类,补充地形分析(terrainAnalysis)属性。
10
+ * @class Globe
11
+ * @see {@link https://cesium.com/learn/cesiumjs/ref-doc/Globe.html}
12
+ */
13
+
14
+ Object.defineProperties(GlobeSurfaceTileProvider.prototype, {
15
+ /**
16
+ * 获取当前的地形分析对象。
17
+ * @type {TerrainAnalysis}
18
+ * @memberof GlobeSurfaceTileProvider
19
+ */
20
+ terrainAnalysis: {
21
+ get: function () {
22
+ return this._terrainAnalysis;
23
+ }
24
+ }
25
+ });
26
+
27
+ let tilesToRender = [];
28
+
29
+ /**
30
+ * 每帧调用,记录当前待渲染的瓦片;当瓦片集合发生变化时,
31
+ * 通知各影像图层提供者的 onShowTilesToRenderFrame 回调。
32
+ * @param {Array} tiles 本帧待渲染的瓦片数组。
33
+ * @memberof GlobeSurfaceTileProvider
34
+ */
35
+ GlobeSurfaceTileProvider.prototype.showTilesToRenderFrame = function (tiles) {
36
+ let changed = false;
37
+ if (tiles.length !== tilesToRender.length) {
38
+ changed = true;
39
+ } else {
40
+ for (let i = tiles.length - 1; i >= 0; i--) {
41
+ let a = tiles[i];
42
+ let finded = false;
43
+ for (let j = tilesToRender.length - 1; j >= 0; j--) {
44
+ let b = tilesToRender[j];
45
+ if (a === b) {
46
+ finded = true;
47
+ break;
48
+ }
49
+ }
50
+ if (!finded) {
51
+ changed = true;
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ if (changed) {
57
+ tilesToRender = tiles.slice();
58
+ }
59
+ const imageryLayers = this._imageryLayers;
60
+ for (let i = 0; i < imageryLayers.length; i++) {
61
+ const layer = imageryLayers.get(i);
62
+ const provider = layer.imageryProvider;
63
+ if (provider && typeof provider.onShowTilesToRenderFrame === 'function') {
64
+ provider.onShowTilesToRenderFrame(tiles, changed);
65
+ }
66
+ }
67
+ };
68
+
69
+ Object.defineProperties(Globe.prototype, {
70
+ /**
71
+ * 获取或设置地形分析对象;设置时会将其绑定到当前 Globe。
72
+ * @type {TerrainAnalysis}
73
+ * @memberof Globe
74
+ */
75
+ terrainAnalysis: {
76
+ get: function () {
77
+ return this._surface._tileProvider._terrainAnalysis;
78
+ },
79
+ set: function (value) {
80
+ if (value) {
81
+ Check.instanceOf('terrainAnalysis', value, TerrainAnalysis);
82
+ this._surface._tileProvider._terrainAnalysis = value;
83
+ value.globe = this;
84
+ } else {
85
+ delete this._surface._tileProvider._terrainAnalysis;
86
+ }
87
+ }
88
+ }
89
+ });
90
+
91
+ export default Globe;
92
+ export { Globe, GlobeSurfaceTileProvider };