@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,72 @@
1
+ import Destroyable from "@lijuhong1981/jsdestroy/src/Destroyable.js";
2
+ import { Event } from "cesium";
3
+
4
+ /**
5
+ * 属性变更监听器基类,继承自 Destroyable。
6
+ * 提供统一的属性变更事件(Event)触发与回调机制,供各类 Transform 组件复用。
7
+ */
8
+ class PropertyChangedListener extends Destroyable {
9
+ /**
10
+ * 创建属性变更监听器实例。
11
+ * @param {function} [onPropertyValueChanged] 属性值变更时的回调函数,签名为 (name, value, type)
12
+ */
13
+ constructor(onPropertyValueChanged) {
14
+ super();
15
+
16
+ this._propertyChanged = new Event();
17
+ this.onPropertyValueChanged = onPropertyValueChanged || this.onPropertyValueChanged.bind(this);
18
+ }
19
+
20
+ // @deprecated
21
+ /**
22
+ * 获取属性变更事件对象。
23
+ * @deprecated 已废弃,请使用 propertyChanged 替代
24
+ * @returns {Event} 属性变更事件对象
25
+ */
26
+ get propertyChangeEvent() {
27
+ return this._propertyChanged;
28
+ }
29
+
30
+ /**
31
+ * 获取属性变更事件对象。
32
+ * @returns {Event} 属性变更事件对象
33
+ */
34
+ get propertyChanged() {
35
+ return this._propertyChanged;
36
+ }
37
+
38
+ /**
39
+ * 属性值发生变更时的回调钩子,子类可重写以处理变更通知。
40
+ * @param {string} name 属性名称
41
+ * @param {*} value 变更后的属性值
42
+ * @param {string} type 属性类型,取值参考 PropertyType
43
+ * @returns {void}
44
+ */
45
+ onPropertyValueChanged(name, value, type) { }
46
+
47
+ /**
48
+ * 触发属性变更事件并调用属性变更回调。
49
+ * @param {string} name 属性名称
50
+ * @param {*} value 变更后的属性值
51
+ * @param {string} type 属性类型,取值参考 PropertyType
52
+ * @returns {void}
53
+ */
54
+ raisePropertyChangeEvent(name, value, type) {
55
+ if (this.isDestroyed())
56
+ return;
57
+ this._propertyChanged.raiseEvent(this, name, value, type);
58
+ this.onPropertyValueChanged(name, value, type);
59
+ }
60
+
61
+ /**
62
+ * 销毁实例时清理资源,清空属性变更事件并调用父类销毁逻辑。
63
+ * @returns {void}
64
+ */
65
+ onDestroy() {
66
+ this._propertyChanged.clear();
67
+ super.onDestroy();
68
+ }
69
+ };
70
+
71
+ export default PropertyChangedListener;
72
+ export { PropertyChangedListener };
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 属性类型枚举,用于标识属性变更事件中属性所属的业务类别(材质、外观、几何体、模型矩阵等)。
3
+ * 该对象已被 Object.freeze 冻结,不可修改。
4
+ */
5
+ const PropertyType = Object.freeze({
6
+ /** 材质类型 */
7
+ MATERIAL: 'material',
8
+ /** 外观类型 */
9
+ APPEARANCE: 'appearance',
10
+ /** 填充外观类型 */
11
+ FILLAPPEARANCE: 'fillAppearance',
12
+ /** 图元类型 */
13
+ PRIMITIVE: 'primitive',
14
+ /** 填充图元类型 */
15
+ FILLPRIMITIVE: 'fillPrimitive',
16
+ // PRIMITIVE_TYPE: 'primitiveType',
17
+ /** 模型矩阵类型 */
18
+ MODELMATRIX: 'modelMatrix',
19
+ /** 几何体类型 */
20
+ GEOMETRY: 'geometry',
21
+ /** 填充几何体类型 */
22
+ FILLGEOMETRY: 'fillGeometry',
23
+ /** 轮廓几何体类型 */
24
+ OUTLINEGEOMETRY: 'outlineGeometry',
25
+ /** 属性类型(如纹理坐标相关的属性) */
26
+ ATTRIBUTE: 'attribute',
27
+ });
28
+
29
+ export default PropertyType;
30
+ export { PropertyType };
@@ -0,0 +1,266 @@
1
+ import { Cartesian2, Cartesian3, Math as CesiumMath, Check, defined, Event, Matrix3 } from "cesium";
2
+ import PropertyType from "./PropertyType.js";
3
+ import parseToCartesian2 from "../parses/parseToCartesian2.js";
4
+ import computeStTransform from "../utils/computeStTransform.js";
5
+ import Scratch from "../utils/Scratch.js";
6
+ import PropertyChangedListener from "./PropertyChangedListener.js";
7
+
8
+ /**
9
+ * 纹理坐标(s、t)变换类,继承自 PropertyChangedListener。
10
+ * 通过偏移(stOffset)、重复(stRepeat)、旋转(stRotation)、中心(stCenter)等参数维护二维纹理坐标变换矩阵,
11
+ * 支持逐帧自动更新,并在参数变化时触发属性变更事件。
12
+ */
13
+ class StTransforms extends PropertyChangedListener {
14
+ /**
15
+ * 创建纹理坐标变换实例。
16
+ * @param {object} [options={}] 配置项
17
+ * @param {object} [options.owner] 宿主对象,未提供时默认为当前实例
18
+ * @param {boolean} [options.updateByPerFrame=true] 是否逐帧自动更新矩阵
19
+ * @param {function} [options.onPropertyValueChanged] 属性变更回调函数
20
+ * @param {function} [options.onStTransformChanged] 纹理坐标变换变更回调函数
21
+ * @param {Cartesian2|object} [options.stOffset] 初始纹理坐标偏移
22
+ * @param {Cartesian2|object} [options.stRepeat] 初始纹理坐标重复次数
23
+ * @param {number} [options.stRotation] 初始纹理坐标旋转量(弧度)
24
+ * @param {number} [options.stRotationDegrees] 初始纹理坐标旋转量(角度)
25
+ * @param {Cartesian2|object} [options.stCenter] 初始纹理坐标旋转中心
26
+ */
27
+ constructor(options = {}) {
28
+ super(options.onPropertyValueChanged);
29
+
30
+ this.owner = options.owner ?? this;
31
+ this.updateByPerFrame = options.updateByPerFrame ?? true;
32
+ this.onStTransformChanged = options.onStTransformChanged || this.onStTransformChanged.bind(this.owner);
33
+
34
+ this._stOffset = new Cartesian2();
35
+ this._stRepeat = new Cartesian2(1, 1);
36
+ this._stRotation = 0;
37
+ this._stCenter = new Cartesian2(0.5, 0.5);
38
+ this._stCenterRotation = new Cartesian3(0.5, 0.5, 0);
39
+
40
+ this._transform = new Matrix3();
41
+ this._stTransformChangeEvent = new Event();
42
+
43
+ this.updateTransform(true);
44
+
45
+ this.setTransforms(options);
46
+ }
47
+
48
+ /**
49
+ * 根据传入的配置对象设置纹理坐标变换参数。
50
+ * @param {object} transforms 变换配置,可包含 stOffset、stRepeat、stRotation、stRotationDegrees、stCenter
51
+ * @returns {void}
52
+ */
53
+ setTransforms(transforms) {
54
+ if (!transforms)
55
+ return;
56
+
57
+ if (transforms.stOffset)
58
+ this.stOffset = transforms.stOffset;
59
+ else if (transforms.stRepeat)
60
+ this.stRepeat = transforms.stRepeat;
61
+ if (defined(transforms.stRotation))
62
+ this.stRotation = transforms.stRotation;
63
+ else if (defined(transforms.stRotationDegrees))
64
+ this.stRotationDegrees = transforms.stRotationDegrees;
65
+ if (transforms.stCenter)
66
+ this.stCenter = transforms.stCenter;
67
+ }
68
+
69
+ /**
70
+ * 获取纹理坐标变换变更事件对象。
71
+ * @returns {Event} 纹理坐标变换变更事件对象
72
+ */
73
+ get stTransformChangeEvent() {
74
+ return this._stTransformChangeEvent;
75
+ }
76
+
77
+ /**
78
+ * 纹理坐标变换发生变更时的回调钩子,子类可重写。
79
+ * @param {Matrix3} transform 变换后的纹理坐标矩阵
80
+ * @returns {void}
81
+ */
82
+ onStTransformChanged(transform) { }
83
+
84
+ /**
85
+ * 触发纹理坐标变换变更事件并调用对应回调。
86
+ * @param {Matrix3} transform 变换后的纹理坐标矩阵
87
+ * @returns {void}
88
+ */
89
+ raiseStTransformChangeEvent(transform) {
90
+ this._stTransformChangeEvent.raiseEvent(transform);
91
+ this.onStTransformChanged(transform);
92
+ }
93
+
94
+ /**
95
+ * 设置纹理坐标偏移量。
96
+ * @param {Cartesian2|object} value 纹理坐标偏移
97
+ * @returns {void}
98
+ */
99
+ set stOffset(value) {
100
+ value = parseToCartesian2(value, Scratch.scratchCartesian2, false);
101
+ if (!Cartesian2.equals(this._stOffset, value)) {
102
+ this._stOffset = value.clone(this._stOffset);
103
+ this.raisePropertyChangeEvent('stOffset', this._stOffset, PropertyType.ATTRIBUTE);
104
+ if (!this.updateByPerFrame)
105
+ this.updateTransform(true);
106
+ else
107
+ this.needsUpdate = true;
108
+ }
109
+ }
110
+
111
+ /**
112
+ * 获取纹理坐标偏移量。
113
+ * @returns {Cartesian2} 纹理坐标偏移
114
+ */
115
+ get stOffset() {
116
+ return this._stOffset;
117
+ }
118
+
119
+ /**
120
+ * 设置纹理坐标重复次数。
121
+ * @param {Cartesian2|object} value 纹理坐标重复次数
122
+ * @returns {void}
123
+ */
124
+ set stRepeat(value) {
125
+ value = parseToCartesian2(value, Scratch.scratchCartesian2, false);
126
+ if (!Cartesian2.equals(this._stRepeat, value)) {
127
+ this._stRepeat = value.clone(this._stRepeat);
128
+ this.raisePropertyChangeEvent('stRepeat', this._stRepeat, PropertyType.ATTRIBUTE);
129
+ if (!this.updateByPerFrame)
130
+ this.updateTransform(true);
131
+ else
132
+ this.needsUpdate = true;
133
+ }
134
+ }
135
+
136
+ /**
137
+ * 获取纹理坐标重复次数。
138
+ * @returns {Cartesian2} 纹理坐标重复次数
139
+ */
140
+ get stRepeat() {
141
+ return this._stRepeat;
142
+ }
143
+
144
+ /**
145
+ * 设置纹理坐标旋转量(弧度制)。
146
+ * @param {number} value 旋转量,单位弧度
147
+ * @returns {void}
148
+ */
149
+ set stRotation(value) {
150
+ Check.typeOf.number('stRotation', value);
151
+ if (this._stRotation !== value) {
152
+ this._stRotation = value;
153
+ this._stCenterRotation.z = value;
154
+ this.raisePropertyChangeEvent('stRotation', this._stRotation, PropertyType.ATTRIBUTE);
155
+ if (!this.updateByPerFrame)
156
+ this.updateTransform(true);
157
+ else
158
+ this.needsUpdate = true;
159
+ }
160
+ }
161
+
162
+ /**
163
+ * 获取纹理坐标旋转量(弧度制)。
164
+ * @returns {number} 旋转量,单位弧度
165
+ */
166
+ get stRotation() {
167
+ return this._stRotation;
168
+ }
169
+
170
+ /**
171
+ * 设置纹理坐标旋转量(角度制)。
172
+ * @param {number} value 旋转量,单位角度
173
+ * @returns {void}
174
+ */
175
+ set stRotationDegrees(value) {
176
+ this.stRotation = CesiumMath.toRadians(value);
177
+ }
178
+
179
+ /**
180
+ * 获取纹理坐标旋转量(角度制)。
181
+ * @returns {number|undefined} 旋转量,单位角度
182
+ */
183
+ get stRotationDegrees() {
184
+ if (defined(this._stRotation))
185
+ return CesiumMath.toDegrees(this._stRotation);
186
+ }
187
+
188
+ /**
189
+ * 设置纹理坐标旋转中心。
190
+ * @param {Cartesian2|object} value 纹理坐标旋转中心
191
+ * @returns {void}
192
+ */
193
+ set stCenter(value) {
194
+ value = parseToCartesian2(value, Scratch.scratchCartesian2, false);
195
+ if (!Cartesian2.equals(this._stCenter, value)) {
196
+ this._stCenter = value.clone(this._stCenter);
197
+ this._stCenterRotation = value.clone(this._stCenterRotation);
198
+ this.raisePropertyChangeEvent('stCenter', this._stCenter, PropertyType.ATTRIBUTE);
199
+ if (!this.updateByPerFrame)
200
+ this.updateTransform(true);
201
+ else
202
+ this.needsUpdate = true;
203
+ }
204
+ }
205
+
206
+ /**
207
+ * 获取纹理坐标旋转中心。
208
+ * @returns {Cartesian2} 纹理坐标旋转中心
209
+ */
210
+ get stCenter() {
211
+ return this._stCenter;
212
+ }
213
+
214
+ /**
215
+ * 获取带旋转量的纹理坐标旋转中心(z 分量为旋转弧度)。
216
+ * @returns {Cartesian3} 纹理坐标旋转中心及旋转量
217
+ */
218
+ get stCenterRotation() {
219
+ return this._stCenterRotation;
220
+ }
221
+
222
+ /**
223
+ * 获取当前的纹理坐标变换矩阵。
224
+ * @returns {Matrix3} 纹理坐标变换矩阵
225
+ */
226
+ get transform() {
227
+ return this._transform;
228
+ }
229
+
230
+ /**
231
+ * 根据当前参数重新计算纹理坐标变换矩阵。
232
+ * @param {boolean} [force] 是否强制更新矩阵
233
+ * @returns {boolean|undefined} 更新成功返回 true,无需更新时返回 undefined
234
+ */
235
+ updateTransform(force) {
236
+ if (force || this.needsUpdate) {
237
+ this._transform = computeStTransform(this._stOffset, this._stRepeat, this._stRotation, this._stCenter, this._transform);
238
+ this.raisePropertyChangeEvent('stTransform', this._transform, PropertyType.ATTRIBUTE);
239
+ this.raiseStTransformChangeEvent(this._transform);
240
+ this.needsUpdate = false;
241
+ return true;
242
+ }
243
+ }
244
+
245
+ /**
246
+ * 每帧更新,逐帧模式下按需更新纹理坐标变换矩阵。
247
+ * @returns {boolean|undefined} 逐帧更新时返回矩阵更新结果
248
+ */
249
+ update() {
250
+ if (this.updateByPerFrame)
251
+ return this.updateTransform();
252
+ }
253
+
254
+ /**
255
+ * 销毁实例时清理资源,清空纹理坐标变换变更事件并调用父类销毁逻辑。
256
+ * @returns {void}
257
+ */
258
+ onDestroy() {
259
+ this._stTransformChangeEvent.clear();
260
+ super.onDestroy();
261
+ }
262
+ };
263
+
264
+ export default StTransforms;
265
+ export { StTransforms };
266
+