@vesium/plot 1.0.1-beta.25 → 1.0.1-beta.27
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/LICENSE +21 -0
- package/README.md +58 -0
- package/dist/index.cjs +72 -52
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +58 -12
- package/dist/{index.js → index.iife.js} +73 -53
- package/dist/index.iife.js.map +1 -0
- package/dist/index.iife.min.js +2 -0
- package/dist/index.iife.min.js.map +1 -0
- package/dist/index.min.cjs +1 -1
- package/dist/index.min.cjs.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +74 -54
- package/dist/index.mjs.map +1 -1
- package/package.json +24 -5
- package/dist/index.js.map +0 -1
- package/dist/index.min.js +0 -2
- package/dist/index.min.js.map +0 -1
|
@@ -9,25 +9,30 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
9
9
|
PlotAction2[PlotAction2["ACTIVE"] = 2] = "ACTIVE";
|
|
10
10
|
return PlotAction2;
|
|
11
11
|
})(PlotAction || {});
|
|
12
|
+
class PlotSkeletonEntity extends cesium.Entity {
|
|
13
|
+
constructor(options) {
|
|
14
|
+
super(options);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
12
17
|
function control() {
|
|
13
18
|
return {
|
|
14
|
-
|
|
19
|
+
disabled: ({ active }) => !active,
|
|
15
20
|
cursor: "pointer",
|
|
16
21
|
dragCursor: "crosshair",
|
|
17
|
-
onDrag({ viewer,
|
|
22
|
+
onDrag({ viewer, sampled, packable, context, index, lockCamera }) {
|
|
18
23
|
lockCamera();
|
|
19
24
|
const position = shared.canvasCoordToCartesian(context.endPosition, viewer.scene);
|
|
20
25
|
if (position) {
|
|
21
26
|
const positions = [...packable.positions ?? []];
|
|
22
27
|
positions[index] = position;
|
|
23
|
-
|
|
28
|
+
sampled.setSample({
|
|
24
29
|
time: packable.time,
|
|
25
30
|
derivative: packable.derivative,
|
|
26
31
|
positions
|
|
27
32
|
});
|
|
28
33
|
}
|
|
29
34
|
},
|
|
30
|
-
onKeyPressed({ viewer, keyEvent,
|
|
35
|
+
onKeyPressed({ viewer, keyEvent, sampled, packable, index }) {
|
|
31
36
|
var _a;
|
|
32
37
|
const height = (_a = shared.toCartographic(viewer.camera.position)) == null ? void 0 : _a.height;
|
|
33
38
|
if (!height || !["ArrowUp", "ArrowRight", "ArrowDown", "ArrowLeft"].includes(keyEvent.key))
|
|
@@ -56,7 +61,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
56
61
|
cartographic.latitude += distance * Math.cos(newHeading);
|
|
57
62
|
cartographic.longitude += distance * Math.sin(newHeading);
|
|
58
63
|
positions[index] = shared.toCartesian3(cartographic);
|
|
59
|
-
|
|
64
|
+
sampled.setSample({
|
|
60
65
|
time: packable.time,
|
|
61
66
|
derivative: packable.derivative,
|
|
62
67
|
positions
|
|
@@ -84,7 +89,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
84
89
|
function interval() {
|
|
85
90
|
let dragIndex = -1;
|
|
86
91
|
return {
|
|
87
|
-
|
|
92
|
+
disabled: ({ active, defining }) => !active || defining,
|
|
88
93
|
cursor: "pointer",
|
|
89
94
|
dragCursor: "crosshair",
|
|
90
95
|
format(packable) {
|
|
@@ -97,7 +102,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
97
102
|
return cesium.Cartesian3.midpoint(position, next, new cesium.Cartesian3());
|
|
98
103
|
});
|
|
99
104
|
},
|
|
100
|
-
onDrag({ viewer,
|
|
105
|
+
onDrag({ viewer, sampled, packable, context, index, lockCamera, dragging }) {
|
|
101
106
|
lockCamera();
|
|
102
107
|
const position = shared.canvasCoordToCartesian(context.endPosition, viewer.scene);
|
|
103
108
|
if (!position) {
|
|
@@ -113,7 +118,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
113
118
|
if (!dragging) {
|
|
114
119
|
dragIndex = -1;
|
|
115
120
|
}
|
|
116
|
-
|
|
121
|
+
sampled.setSample({
|
|
117
122
|
time: packable.time,
|
|
118
123
|
derivative: packable.derivative,
|
|
119
124
|
positions
|
|
@@ -144,7 +149,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
144
149
|
function intervalNonclosed() {
|
|
145
150
|
let dragIndex = -1;
|
|
146
151
|
return {
|
|
147
|
-
|
|
152
|
+
disabled: ({ active, defining }) => !active || defining,
|
|
148
153
|
cursor: "pointer",
|
|
149
154
|
dragCursor: "crosshair",
|
|
150
155
|
format(packable) {
|
|
@@ -152,11 +157,13 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
152
157
|
if (_positions.length < 2) {
|
|
153
158
|
return [];
|
|
154
159
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
160
|
+
const midpoints = [];
|
|
161
|
+
for (let i = 0; i < _positions.length - 1; i++) {
|
|
162
|
+
midpoints.push(cesium.Cartesian3.midpoint(_positions[i], _positions[i + 1], new cesium.Cartesian3()));
|
|
163
|
+
}
|
|
164
|
+
return midpoints;
|
|
158
165
|
},
|
|
159
|
-
onDrag({ viewer,
|
|
166
|
+
onDrag({ viewer, sampled, packable, context, index, lockCamera, dragging }) {
|
|
160
167
|
lockCamera();
|
|
161
168
|
const position = shared.canvasCoordToCartesian(context.endPosition, viewer.scene);
|
|
162
169
|
if (!position) {
|
|
@@ -172,7 +179,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
172
179
|
if (!dragging) {
|
|
173
180
|
dragIndex = -1;
|
|
174
181
|
}
|
|
175
|
-
|
|
182
|
+
sampled.setSample({
|
|
176
183
|
time: packable.time,
|
|
177
184
|
derivative: packable.derivative,
|
|
178
185
|
positions
|
|
@@ -202,7 +209,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
202
209
|
)}`;
|
|
203
210
|
function moved() {
|
|
204
211
|
return {
|
|
205
|
-
|
|
212
|
+
disabled: ({ active, defining }) => !active || defining,
|
|
206
213
|
cursor: "pointer",
|
|
207
214
|
dragCursor: "crosshair",
|
|
208
215
|
format(packable) {
|
|
@@ -216,7 +223,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
216
223
|
return [shared.toCartesian3(center)];
|
|
217
224
|
}
|
|
218
225
|
},
|
|
219
|
-
onDrag({ viewer,
|
|
226
|
+
onDrag({ viewer, sampled, packable, context, lockCamera, dragging }) {
|
|
220
227
|
dragging && lockCamera();
|
|
221
228
|
const startPosition = shared.canvasCoordToCartesian(context.startPosition, viewer.scene);
|
|
222
229
|
const endPosition = shared.canvasCoordToCartesian(context.endPosition, viewer.scene);
|
|
@@ -225,7 +232,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
225
232
|
}
|
|
226
233
|
const offset = cesium.Cartesian3.subtract(endPosition, startPosition, new cesium.Cartesian3());
|
|
227
234
|
const positions = [...packable.positions ?? []];
|
|
228
|
-
|
|
235
|
+
sampled.setSample({
|
|
229
236
|
time: packable.time,
|
|
230
237
|
derivative: packable.derivative,
|
|
231
238
|
positions: positions.map((position) => cesium.Cartesian3.add(position, offset, new cesium.Cartesian3()))
|
|
@@ -395,16 +402,20 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
395
402
|
this.complete = options.complete;
|
|
396
403
|
this.forceComplete = options.forceComplete;
|
|
397
404
|
this.definingCursor = options.definingCursor ?? "crosshair";
|
|
398
|
-
this.skeletons = ((_a = options.skeletons) == null ? void 0 : _a.map((item) =>
|
|
405
|
+
this.skeletons = ((_a = options.skeletons) == null ? void 0 : _a.map((item) => item())) ?? [];
|
|
399
406
|
this.render = options.render;
|
|
400
407
|
}
|
|
401
|
-
static
|
|
408
|
+
static getCacheTypes() {
|
|
402
409
|
return [...this._record.keys()];
|
|
403
410
|
}
|
|
404
|
-
static
|
|
411
|
+
static getCache(type) {
|
|
405
412
|
return _PlotScheme._record.get(type);
|
|
406
413
|
}
|
|
407
|
-
|
|
414
|
+
/**
|
|
415
|
+
* 设置标绘方案
|
|
416
|
+
* @param scheme
|
|
417
|
+
*/
|
|
418
|
+
static setCache(scheme) {
|
|
408
419
|
shared.assertError(!scheme.type, "`scheme.type` is required");
|
|
409
420
|
_PlotScheme._record.set(scheme.type, scheme);
|
|
410
421
|
}
|
|
@@ -413,7 +424,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
413
424
|
*/
|
|
414
425
|
static resolve(maybeScheme) {
|
|
415
426
|
if (typeof maybeScheme === "string") {
|
|
416
|
-
const _scheme = _PlotScheme.
|
|
427
|
+
const _scheme = _PlotScheme.getCache(maybeScheme);
|
|
417
428
|
core.assert(!!_scheme, `scheme ${maybeScheme} not found`);
|
|
418
429
|
return _scheme;
|
|
419
430
|
} else if (!(maybeScheme instanceof _PlotScheme)) {
|
|
@@ -678,31 +689,45 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
678
689
|
shared.createCesiumAttribute(this, "disabled", !!options.disabled);
|
|
679
690
|
shared.createCesiumAttribute(this, "defining", true);
|
|
680
691
|
shared.createCesiumAttribute(this, "scheme", PlotScheme.resolve(options.scheme), { readonly: true });
|
|
681
|
-
const
|
|
682
|
-
shared.createCesiumProperty(this, "
|
|
692
|
+
const sampled = options.sampled instanceof SampledPlotProperty ? options.sampled : new SampledPlotProperty(options.sampled);
|
|
693
|
+
shared.createCesiumProperty(this, "sampled", sampled);
|
|
683
694
|
shared.createCesiumAttribute(this, "entities", []);
|
|
684
695
|
shared.createCesiumAttribute(this, "primitives", []);
|
|
685
696
|
shared.createCesiumAttribute(this, "groundPrimitives", []);
|
|
686
697
|
shared.createCesiumAttribute(this, "skeletonEntities", []);
|
|
687
698
|
}
|
|
699
|
+
/**
|
|
700
|
+
* An event that is raised when a property is changed.
|
|
701
|
+
*/
|
|
688
702
|
get definitionChanged() {
|
|
689
703
|
return this._definitionChanged;
|
|
690
704
|
}
|
|
705
|
+
/**
|
|
706
|
+
* 当前标绘是否处于定义态
|
|
707
|
+
*/
|
|
691
708
|
isDefining() {
|
|
692
709
|
return this.defining;
|
|
693
710
|
}
|
|
711
|
+
/**
|
|
712
|
+
* 获取当前标绘的entity数组
|
|
713
|
+
*/
|
|
694
714
|
getEntities() {
|
|
695
715
|
return [...this.entities];
|
|
696
716
|
}
|
|
717
|
+
/**
|
|
718
|
+
* 获取当前标绘的primitive数组
|
|
719
|
+
*/
|
|
697
720
|
getPrimitives() {
|
|
698
721
|
return [...this.primitives];
|
|
699
722
|
}
|
|
723
|
+
/**
|
|
724
|
+
* 获取当前标绘的贴地primitive数组
|
|
725
|
+
*/
|
|
700
726
|
getGroundPrimitives() {
|
|
701
727
|
return [...this.groundPrimitives];
|
|
702
728
|
}
|
|
703
729
|
/**
|
|
704
|
-
*
|
|
705
|
-
*
|
|
730
|
+
* 获取当前标绘标绘的骨架点entity数组
|
|
706
731
|
*/
|
|
707
732
|
getSkeletonEntities() {
|
|
708
733
|
return [...this.skeletonEntities];
|
|
@@ -758,7 +783,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
758
783
|
const update = shared.throttle(async (plot) => {
|
|
759
784
|
var _a, _b;
|
|
760
785
|
const reslut = await ((_b = (_a = plot.scheme).render) == null ? void 0 : _b.call(_a, {
|
|
761
|
-
packable: plot.
|
|
786
|
+
packable: plot.sampled.getValue(getCurrentTime()),
|
|
762
787
|
mouse: plot.defining ? mouseCartesian.value : void 0,
|
|
763
788
|
defining: plot.defining,
|
|
764
789
|
previous: {
|
|
@@ -777,7 +802,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
777
802
|
core$1.useCesiumEventListener(
|
|
778
803
|
() => plots.value.map((item) => item.definitionChanged),
|
|
779
804
|
(plot, key) => {
|
|
780
|
-
if (["disabled", "defining", "scheme", "
|
|
805
|
+
if (["disabled", "defining", "scheme", "sampled", "time"].includes(key)) {
|
|
781
806
|
update(plot);
|
|
782
807
|
}
|
|
783
808
|
}
|
|
@@ -796,7 +821,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
796
821
|
const doubleClicking = vue.ref(false);
|
|
797
822
|
const packable = vue.computed(() => {
|
|
798
823
|
var _a;
|
|
799
|
-
return (_a = current.value) == null ? void 0 : _a.
|
|
824
|
+
return (_a = current.value) == null ? void 0 : _a.sampled.getValue(getCurrentTime());
|
|
800
825
|
});
|
|
801
826
|
core$1.useScreenSpaceEventHandler(
|
|
802
827
|
cesium.ScreenSpaceEventType.LEFT_CLICK,
|
|
@@ -809,7 +834,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
809
834
|
if (doubleClicking.value) {
|
|
810
835
|
return;
|
|
811
836
|
}
|
|
812
|
-
const { scheme, defining,
|
|
837
|
+
const { scheme, defining, sampled } = current.value;
|
|
813
838
|
if (!defining) {
|
|
814
839
|
return;
|
|
815
840
|
}
|
|
@@ -819,7 +844,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
819
844
|
}
|
|
820
845
|
(_a = packable.value).positions ?? (_a.positions = []);
|
|
821
846
|
packable.value.positions.push(position);
|
|
822
|
-
|
|
847
|
+
sampled.setSample(packable.value);
|
|
823
848
|
const completed = (_b = scheme.complete) == null ? void 0 : _b.call(scheme, packable.value);
|
|
824
849
|
completed && (current.value.defining = false);
|
|
825
850
|
}
|
|
@@ -853,7 +878,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
853
878
|
if (!current.value || !packable.value) {
|
|
854
879
|
return;
|
|
855
880
|
}
|
|
856
|
-
const { defining,
|
|
881
|
+
const { defining, sampled } = current.value;
|
|
857
882
|
if (!defining) {
|
|
858
883
|
return;
|
|
859
884
|
}
|
|
@@ -862,7 +887,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
862
887
|
return;
|
|
863
888
|
}
|
|
864
889
|
packable.value.positions.splice(packable.value.positions.length - 1, 1);
|
|
865
|
-
|
|
890
|
+
sampled.setSample(packable.value);
|
|
866
891
|
}
|
|
867
892
|
);
|
|
868
893
|
const definingCursorCss = vue.ref();
|
|
@@ -885,17 +910,12 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
885
910
|
var _a;
|
|
886
911
|
return (_a = current.value) == null ? void 0 : _a.definitionChanged;
|
|
887
912
|
}, (plot, key) => {
|
|
888
|
-
if (key === "defining" || key === "
|
|
913
|
+
if (key === "defining" || key === "sampled") {
|
|
889
914
|
setDefiningCursorCss();
|
|
890
915
|
}
|
|
891
916
|
});
|
|
892
917
|
vue.watch(current, () => setDefiningCursorCss());
|
|
893
918
|
}
|
|
894
|
-
class PlotSkeletonEntity extends cesium.Entity {
|
|
895
|
-
constructor(options) {
|
|
896
|
-
super(options);
|
|
897
|
-
}
|
|
898
|
-
}
|
|
899
919
|
function useSkeleton(plots, current, getCurrentTime) {
|
|
900
920
|
const viewer = core$1.useViewer();
|
|
901
921
|
const dataSource = core$1.useDataSource(new cesium.CustomDataSource());
|
|
@@ -915,14 +935,14 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
915
935
|
if (destroyed || plot.disabled) {
|
|
916
936
|
plot.skeletonEntities = [];
|
|
917
937
|
} else {
|
|
918
|
-
const packable = plot.
|
|
938
|
+
const packable = plot.sampled.getValue(getCurrentTime());
|
|
919
939
|
const defining = plot.defining;
|
|
920
940
|
const active = current.value === plot;
|
|
921
941
|
const skeletons = plot.scheme.skeletons;
|
|
922
942
|
skeletons.forEach((skeleton) => {
|
|
923
943
|
var _a;
|
|
924
|
-
const
|
|
925
|
-
if (
|
|
944
|
+
const disabled = shared.isFunction(skeleton.disabled) ? skeleton.disabled({ active, defining }) : skeleton.disabled;
|
|
945
|
+
if (disabled) {
|
|
926
946
|
return;
|
|
927
947
|
}
|
|
928
948
|
const positions = ((_a = skeleton.format) == null ? void 0 : _a.call(skeleton, packable)) ?? (packable == null ? void 0 : packable.positions) ?? [];
|
|
@@ -983,10 +1003,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
983
1003
|
activeEntity.value = entity;
|
|
984
1004
|
const skeleton = entity.skeleton;
|
|
985
1005
|
const index = entity.index;
|
|
986
|
-
const packable = plot.
|
|
1006
|
+
const packable = plot.sampled.getValue(getCurrentTime());
|
|
987
1007
|
(_a = skeleton.onDrag) == null ? void 0 : _a.call(skeleton, {
|
|
988
1008
|
viewer: viewer.value,
|
|
989
|
-
|
|
1009
|
+
sampled: plot.sampled,
|
|
990
1010
|
packable,
|
|
991
1011
|
active: current.value === plot,
|
|
992
1012
|
index,
|
|
@@ -1006,10 +1026,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1006
1026
|
const plot = entity.plot;
|
|
1007
1027
|
const skeleton = entity.skeleton;
|
|
1008
1028
|
const index = entity.index;
|
|
1009
|
-
const packable = plot.
|
|
1029
|
+
const packable = plot.sampled.getValue(getCurrentTime());
|
|
1010
1030
|
(_a = skeleton.onKeyPressed) == null ? void 0 : _a.call(skeleton, {
|
|
1011
1031
|
viewer: viewer.value,
|
|
1012
|
-
|
|
1032
|
+
sampled: plot.sampled,
|
|
1013
1033
|
packable,
|
|
1014
1034
|
index,
|
|
1015
1035
|
keyEvent
|
|
@@ -1035,10 +1055,10 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1035
1055
|
const plot = entity.plot;
|
|
1036
1056
|
const skeleton = entity.skeleton;
|
|
1037
1057
|
const index = entity.index;
|
|
1038
|
-
const packable = plot.
|
|
1058
|
+
const packable = plot.sampled.getValue(getCurrentTime());
|
|
1039
1059
|
(_a = skeleton.onLeftClick) == null ? void 0 : _a.call(skeleton, {
|
|
1040
1060
|
viewer: viewer.value,
|
|
1041
|
-
|
|
1061
|
+
sampled: plot.sampled,
|
|
1042
1062
|
packable,
|
|
1043
1063
|
active: current.value === plot,
|
|
1044
1064
|
defining: plot.defining,
|
|
@@ -1055,7 +1075,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1055
1075
|
removed.forEach((plot) => update(plot, true));
|
|
1056
1076
|
});
|
|
1057
1077
|
core$1.useCesiumEventListener(() => plots.value.map((plot) => plot.definitionChanged), (plot, key, newValue, oldValue) => {
|
|
1058
|
-
if (["disabled", "defining", "scheme", "
|
|
1078
|
+
if (["disabled", "defining", "scheme", "sampled", "time"].includes(key)) {
|
|
1059
1079
|
update(plot);
|
|
1060
1080
|
}
|
|
1061
1081
|
if (key === "skeletonEntities") {
|
|
@@ -1088,11 +1108,11 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1088
1108
|
core$1.useCesiumEventListener([
|
|
1089
1109
|
() => {
|
|
1090
1110
|
var _a;
|
|
1091
|
-
return (_a = current.value) == null ? void 0 : _a.
|
|
1111
|
+
return (_a = current.value) == null ? void 0 : _a.sampled.definitionChanged;
|
|
1092
1112
|
}
|
|
1093
1113
|
], () => {
|
|
1094
1114
|
var _a;
|
|
1095
|
-
packable.value = (_a = current.value) == null ? void 0 : _a.
|
|
1115
|
+
packable.value = (_a = current.value) == null ? void 0 : _a.sampled.getValue(getCurrentTime());
|
|
1096
1116
|
});
|
|
1097
1117
|
useSampled(current, getCurrentTime);
|
|
1098
1118
|
useRender(plots, current, getCurrentTime);
|
|
@@ -1118,7 +1138,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1118
1138
|
var _a, _b;
|
|
1119
1139
|
if (previous) {
|
|
1120
1140
|
if (previous.defining) {
|
|
1121
|
-
const packable2 = previous.
|
|
1141
|
+
const packable2 = previous.sampled.getValue(getCurrentTime());
|
|
1122
1142
|
const completed = (_b = (_a = previous.scheme).forceComplete) == null ? void 0 : _b.call(_a, packable2);
|
|
1123
1143
|
if (completed) {
|
|
1124
1144
|
previous.defining = false;
|
|
@@ -1171,4 +1191,4 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
1171
1191
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
1172
1192
|
return exports;
|
|
1173
1193
|
}({}, Cesium, VesiumShared, VueUse, VesiumCore, VesiumCore, Vue);
|
|
1174
|
-
//# sourceMappingURL=index.js.map
|
|
1194
|
+
//# sourceMappingURL=index.iife.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.iife.js","sources":["../usePlot/PlotSkeleton.ts","../skeleton/control.ts","../skeleton/interval.ts","../skeleton/intervalNonclosed.ts","../skeleton/moved.ts","../scheme/Billboard.ts","../scheme/Label.ts","../scheme/LineString.ts","../scheme/Polygon.ts","../usePlot/PlotScheme.ts","../usePlot/SampledPlotProperty.ts","../usePlot/Plot.ts","../usePlot/useRender.ts","../usePlot/useSampled.ts","../usePlot/useSkeleton.ts","../usePlot/usePlot.ts"],"sourcesContent":["import type { Nullable } from '@vesium/shared';\nimport type { Cartesian3, ScreenSpaceEventHandler, Viewer } from 'cesium';\nimport type { CSSProperties, MaybeRef, VNode } from 'vue';\nimport type { Plot } from './Plot';\nimport type { SampledPlotPackable, SampledPlotProperty } from './SampledPlotProperty';\nimport { Entity } from 'cesium';\n\nexport interface SkeletonDisabledOptions {\n\n /**\n * 当前标绘是否是否正在激活,即正在编辑状态\n */\n active: boolean;\n\n /**\n * 当前标绘是否还在定义态,即还未完成采集\n */\n defining: boolean;\n}\n\nexport interface OnSkeletonClickOptions {\n viewer: Viewer;\n\n /**\n * 当前标绘属性数据\n */\n sampled: SampledPlotProperty;\n\n /**\n * 标绘采集到的数据,通过该数据可以获取到当前标绘的所有点位信息\n */\n packable: SampledPlotPackable<any>;\n\n /**\n * 当前标绘是否是否正在激活,即正在编辑状态\n */\n active: boolean;\n\n /**\n * 当前标绘是否还在定义态,即还未完成采集\n */\n defining: boolean;\n\n /**\n * 当前被点击的控制点索引\n */\n index: number;\n\n /**\n * 鼠标点击事件上下文信息\n */\n context: ScreenSpaceEventHandler.PositionedEvent;\n}\n\nexport interface OnSkeletonDragOptions {\n viewer: Viewer;\n\n /***\n * 当前标绘属性数据\n */\n sampled: SampledPlotProperty;\n\n /**\n * 标绘采集到的数据,通过该数据可以获取到当前标绘的所有点位信息\n */\n packable: SampledPlotPackable<any>;\n\n /**\n * 当前标绘是否是否正在激活,即正在编辑状态\n */\n active: boolean;\n\n /**\n * 当前被拖拽的控制点索引\n */\n index: number;\n\n /**\n * 鼠标拖拽事件上下文信息\n */\n context: ScreenSpaceEventHandler.MotionEvent;\n\n /**\n * 当前的拖拽状态\n */\n dragging: boolean;\n\n /**\n * 执行是否锁定相机视角\n */\n lockCamera: () => void;\n}\n\nexport interface OnKeyPressedOptions {\n viewer: Viewer;\n\n /**\n * 当前标绘属性数据\n */\n sampled: SampledPlotProperty;\n\n /**\n * 标绘采集到的数据,通过该数据可以获取到当前标绘的所有点位信息\n */\n packable: SampledPlotPackable<any>;\n\n /**\n * 当前被点击的控制点索引\n */\n index: number;\n\n /**\n * 被按压的按键事件回调\n */\n keyEvent: KeyboardEvent;\n}\n\n/**\n * 框架点执行状态枚举\n * - IDLE 空闲状态\n * - HOVER 悬停状态\n * - ACTIVE 激活状态\n */\nexport enum PlotAction {\n IDLE = 0,\n HOVER = 1,\n ACTIVE = 2,\n}\n\nexport interface SkeletonRenderOptions {\n /**\n * 标绘采集到的数据,通过该数据可以获取到当前标绘的所有点位信息\n */\n packable: SampledPlotPackable;\n\n /**\n * 所有框架点位集合\n */\n positions: Cartesian3[];\n\n /**\n * 当前渲染的框架点索引\n */\n index: number;\n /**\n * 当前应当渲染的位置\n */\n position: Cartesian3;\n\n /**\n * 当前标绘是否是否正在激活,即正在编辑状态\n */\n active: boolean;\n\n /**\n * 当前标绘是否还在定义态,即还未完成采集\n */\n defining: boolean;\n\n /**\n * 当前框架点执行状态\n */\n action: PlotAction;\n}\n\n/**\n * 控制点配置项\n */\nexport interface PlotSkeleton {\n /**\n * 是否禁用控制点\n */\n disabled?: boolean | ((options: SkeletonDisabledOptions) => boolean);\n /**\n * 实际情况中,并非所有采集都都要渲染对应框架点,通过`format`函数可以过滤掉不需要渲染的点位,另外还可以自定义点位的偏移、增加框架点\n * @param packable 标绘采集到的数据\n */\n format?: (packable: SampledPlotPackable<any>) => Cartesian3[];\n\n /**\n * 点位渲染函数,返回Entity的构造参数,如果不返回任何值则不渲染该点位\n */\n render?: (options: SkeletonRenderOptions) => Entity.ConstructorOptions | undefined;\n\n /**\n * Cursor style when hovering.\n */\n cursor?: MaybeRef<Nullable<CSSProperties['cursor']>> | ((pick: any) => Nullable<CSSProperties['cursor']>);\n\n /**\n * Cursor style when dragging.\n */\n dragCursor?: MaybeRef<Nullable<CSSProperties['cursor']>> | ((pick: any) => Nullable<CSSProperties['cursor']>);\n\n /**\n * 鼠标悬停在框架点时显示的提示信息\n */\n tip?: (options: SkeletonRenderOptions) => string | VNode | string | undefined;\n\n /**\n * 框架点鼠标左键点击时的处理逻辑\n */\n onLeftClick?: (options: OnSkeletonClickOptions) => void;\n\n /**\n * 框架点被拖拽时的处理逻辑\n */\n onDrag?: (options: OnSkeletonDragOptions) => void;\n\n /**\n * 键盘按键按下时的处理逻辑\n */\n onKeyPressed?: (options: OnKeyPressedOptions) => void;\n}\n\n/**\n * 标绘框架点 Entity\n */\nexport class PlotSkeletonEntity extends Entity {\n constructor(options: Entity.ConstructorOptions) {\n super(options);\n }\n\n /**\n * @internal\n */\n declare plot: Plot;\n\n /**\n * @internal\n */\n declare skeleton: PlotSkeleton;\n\n /**\n * @internal\n */\n declare index: number;\n}\n","import type { PlotSkeleton } from '../usePlot/PlotSkeleton';\nimport { canvasCoordToCartesian, toCartesian3, toCartographic } from '@vesium/shared';\nimport { Color } from 'cesium';\nimport { PlotAction } from '../usePlot/PlotSkeleton';\n\n/**\n * 绘制控制的框架点,拖拽时,将更新该控制点的实时位置\n */\nexport function control(): PlotSkeleton {\n return {\n disabled: ({ active }) => !active,\n cursor: 'pointer',\n dragCursor: 'crosshair',\n onDrag({ viewer, sampled, packable, context, index, lockCamera }) {\n lockCamera();\n const position = canvasCoordToCartesian(context.endPosition, viewer.scene);\n if (position) {\n const positions = [...packable.positions ?? []];\n positions[index] = position;\n sampled.setSample({\n time: packable.time,\n derivative: packable.derivative,\n positions,\n });\n }\n },\n\n onKeyPressed({ viewer, keyEvent, sampled, packable, index }) {\n const height = toCartographic(viewer!.camera.position)?.height;\n if (!height || !['ArrowUp', 'ArrowRight', 'ArrowDown', 'ArrowLeft'].includes(keyEvent.key))\n return;\n\n keyEvent.preventDefault();\n let headingAdjust = 0;\n switch (keyEvent.key) {\n case 'ArrowRight':\n headingAdjust = Math.PI / 2;\n break;\n case 'ArrowDown':\n headingAdjust = Math.PI;\n break;\n case 'ArrowLeft':\n headingAdjust = -Math.PI / 2;\n break;\n case 'ArrowUp':\n headingAdjust = 0;\n break;\n }\n const newHeading = (viewer.camera.heading + headingAdjust) % (2 * Math.PI);\n const positions = [...packable.positions ?? []];\n const cartographic = toCartographic(positions[index])!;\n const r = height / 100000;\n const distance = r * Math.PI / 180 / 1000;\n\n cartographic.latitude += distance * Math.cos(newHeading);\n cartographic.longitude += distance * Math.sin(newHeading);\n\n positions[index] = toCartesian3(cartographic)!;\n sampled.setSample({\n time: packable.time,\n derivative: packable.derivative,\n positions,\n });\n },\n render: ({ position, action }) => {\n const colors = {\n [PlotAction.IDLE]: Color.BLUE.withAlpha(0.4),\n [PlotAction.HOVER]: Color.BLUE.withAlpha(0.6),\n [PlotAction.ACTIVE]: Color.AQUA.withAlpha(1),\n };\n return {\n position,\n point: {\n pixelSize: 8,\n color: colors[action],\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n outlineWidth: 1,\n outlineColor: Color.WHITE.withAlpha(0.4),\n },\n };\n },\n };\n}\n","import type { PlotSkeleton } from '../usePlot/PlotSkeleton';\nimport { canvasCoordToCartesian } from '@vesium/shared';\nimport { Cartesian3, Color } from 'cesium';\nimport { PlotAction } from '../usePlot/PlotSkeleton';\n\n/**\n * 绘制封闭的间隔框架点,如多边形。拖拽时,会在两点之间插入一个控制点,并持续拖拽该点。\n */\nexport function interval(): PlotSkeleton {\n let dragIndex = -1;\n return {\n disabled: ({ active, defining }) => !active || defining,\n cursor: 'pointer',\n dragCursor: 'crosshair',\n format(packable) {\n const _positions = packable.positions ?? [];\n if (_positions.length < 2) {\n return [];\n }\n return _positions.map((position, i) => {\n const next = i === _positions.length - 1 ? _positions[0] : _positions[i + 1];\n return Cartesian3.midpoint(position, next, new Cartesian3());\n });\n },\n onDrag({ viewer, sampled, packable, context, index, lockCamera, dragging }) {\n lockCamera();\n\n const position = canvasCoordToCartesian(context.endPosition, viewer.scene);\n if (!position) {\n return;\n }\n const positions = [...packable.positions ?? []];\n if (dragIndex === -1) {\n dragIndex = index;\n positions.splice(index + 1, 0, position);\n }\n else {\n positions[dragIndex + 1] = position;\n }\n if (!dragging) {\n dragIndex = -1;\n }\n sampled.setSample({\n time: packable.time,\n derivative: packable.derivative,\n positions,\n });\n },\n render: ({ position, action, active }) => {\n if (!active) {\n return;\n }\n const colors = {\n [PlotAction.IDLE]: Color.GREEN.withAlpha(0.4),\n [PlotAction.HOVER]: Color.GREEN.withAlpha(0.6),\n [PlotAction.ACTIVE]: Color.GREEN.withAlpha(1.0),\n };\n return {\n position,\n point: {\n pixelSize: 6,\n color: colors[action],\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n outlineWidth: 1,\n outlineColor: Color.WHITE.withAlpha(0.4),\n },\n };\n },\n };\n}\n","import type { PlotSkeleton } from '../usePlot/PlotSkeleton';\nimport { canvasCoordToCartesian } from '@vesium/shared';\nimport { Cartesian3, Color } from 'cesium';\nimport { PlotAction } from '../usePlot/PlotSkeleton';\n\n/**\n * 绘制非封闭的间隔框架点,如线段。拖拽时,会在两点之间插入一个控制点,并持续拖拽该点。\n */\nexport function intervalNonclosed(): PlotSkeleton {\n let dragIndex = -1;\n return {\n disabled: ({ active, defining }) => !active || defining,\n cursor: 'pointer',\n dragCursor: 'crosshair',\n format(packable) {\n const _positions = packable.positions ?? [];\n if (_positions.length < 2) {\n return [];\n }\n const midpoints = [];\n for (let i = 0; i < _positions.length - 1; i++) {\n midpoints.push(Cartesian3.midpoint(_positions[i], _positions[i + 1], new Cartesian3()));\n }\n return midpoints;\n },\n onDrag({ viewer, sampled, packable, context, index, lockCamera, dragging }) {\n lockCamera();\n const position = canvasCoordToCartesian(context.endPosition, viewer.scene);\n if (!position) {\n return;\n }\n const positions = [...packable.positions ?? []];\n if (dragIndex === -1) {\n dragIndex = index;\n positions.splice(index + 1, 0, position);\n }\n else {\n positions[dragIndex + 1] = position;\n }\n if (!dragging) {\n dragIndex = -1;\n }\n sampled.setSample({\n time: packable.time,\n derivative: packable.derivative,\n positions,\n });\n },\n render: ({ position, action }) => {\n const colors = {\n [PlotAction.IDLE]: Color.GREEN.withAlpha(0.4),\n [PlotAction.HOVER]: Color.GREEN.withAlpha(0.6),\n [PlotAction.ACTIVE]: Color.GREEN.withAlpha(1.0),\n };\n return {\n position,\n point: {\n pixelSize: 6,\n color: colors[action],\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n outlineWidth: 1,\n outlineColor: Color.WHITE.withAlpha(0.4),\n },\n };\n },\n };\n}\n","import type { PlotSkeleton } from '../usePlot/PlotSkeleton';\nimport { canvasCoordToCartesian, toCartesian3 } from '@vesium/shared';\nimport { Cartesian3, Color, HorizontalOrigin, Rectangle, VerticalOrigin } from 'cesium';\nimport { PlotAction } from '../usePlot/PlotSkeleton';\n\n// see https://icones.js.org/collection/tabler?s=move&icon=tabler:arrows-move\nconst svg = `data:image/svg+xml;utf8,${encodeURIComponent(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 24 24\"><path stroke=\"#ffffff\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m18 9l3 3l-3 3m-3-3h6M6 9l-3 3l3 3m-3-3h6m0 6l3 3l3-3m-3-3v6m3-15l-3-3l-3 3m3-3v6\"/></svg>',\n)}`;\n\n/**\n * 绘制非封闭的间隔框架点,如线段。拖拽时,会在两点之间插入一个控制点,并持续拖拽该点。\n */\nexport function moved(): PlotSkeleton {\n return {\n disabled: ({ active, defining }) => !active || defining,\n cursor: 'pointer',\n dragCursor: 'crosshair',\n format(packable) {\n const positions = packable.positions ?? [];\n if (positions.length === 0) {\n return [];\n }\n else if (positions.length === 1) {\n return [positions[0]];\n }\n else {\n const center = Rectangle.center(Rectangle.fromCartesianArray(positions));\n return [toCartesian3(center)!];\n }\n },\n onDrag({ viewer, sampled, packable, context, lockCamera, dragging }) {\n dragging && lockCamera();\n const startPosition = canvasCoordToCartesian(context.startPosition, viewer.scene);\n const endPosition = canvasCoordToCartesian(context.endPosition, viewer.scene);\n\n if (!startPosition || !endPosition) {\n return;\n }\n const offset = Cartesian3.subtract(endPosition, startPosition, new Cartesian3());\n const positions = [...packable.positions ?? []];\n\n sampled.setSample({\n time: packable.time,\n derivative: packable.derivative,\n positions: positions.map(position => Cartesian3.add(position, offset, new Cartesian3())),\n });\n },\n render: ({ position, action }) => {\n const colors = {\n [PlotAction.IDLE]: Color.WHITE,\n [PlotAction.HOVER]: Color.WHITE,\n [PlotAction.ACTIVE]: Color.AQUA.withAlpha(1.0),\n };\n return {\n position,\n billboard: {\n image: svg,\n width: 20,\n height: 20,\n color: colors[action],\n pixelOffset: new Cartesian3(0, -20),\n horizontalOrigin: HorizontalOrigin.CENTER,\n verticalOrigin: VerticalOrigin.BOTTOM,\n disableDepthTestDistance: Number.POSITIVE_INFINITY,\n },\n };\n },\n };\n}\n","import type { PlotConstructorOptions } from '../usePlot/Plot';\nimport { CallbackPositionProperty, Entity } from 'cesium';\nimport { moved } from '../skeleton';\n\n/**\n * 广告牌标绘方案\n */\nexport const PLOT_BILLBOARD_SCHEME: PlotConstructorOptions = {\n scheme: {\n type: 'Billboard',\n complete: packable => packable.positions!.length >= 1,\n skeletons: [\n moved,\n ],\n render(options) {\n const { mouse, packable } = options;\n const entity = options.previous.entities?.[0]\n ?? new Entity({\n billboard: { },\n });\n const position = packable.positions?.[0] ?? mouse;\n entity.position = new CallbackPositionProperty(() => position, true);\n\n return {\n entities: [entity],\n };\n },\n },\n};\n","import type { PlotConstructorOptions } from '../usePlot/Plot';\nimport { CallbackPositionProperty, Entity } from 'cesium';\nimport { moved } from '../skeleton';\n\n/**\n * 标签文字标绘方案\n */\nexport const PLOT_LABEL_SCHEME: PlotConstructorOptions = {\n scheme: {\n type: 'Label',\n complete: packable => packable.positions!.length >= 1,\n skeletons: [\n moved,\n ],\n render(options) {\n const { mouse, packable } = options;\n const entity = options.previous.entities?.[0]\n ?? new Entity({\n label: {\n text: 'Label',\n },\n });\n const position = packable.positions?.[0] ?? mouse;\n entity.position = new CallbackPositionProperty(() => position, true);\n\n return {\n entities: [entity],\n };\n },\n },\n};\n","import type { PlotConstructorOptions } from '../usePlot/Plot';\nimport { CallbackProperty, Entity } from 'cesium';\nimport { control } from '../skeleton/control';\nimport { intervalNonclosed } from '../skeleton/intervalNonclosed';\nimport { moved } from '../skeleton/moved';\n\n/**\n * 内置的线段标绘方案\n */\nexport const PLOT_LINE_STRING_SCHEME: PlotConstructorOptions = {\n scheme: {\n type: 'LineString',\n forceComplete: packable => packable.positions!.length >= 2,\n skeletons: [\n control,\n intervalNonclosed,\n moved,\n ],\n render(options) {\n const { mouse, packable } = options;\n const entity = options.previous.entities?.[0]\n ?? new Entity({\n polyline: {\n width: 1,\n },\n });\n entity.polyline!.positions = new CallbackProperty(() => {\n const positions = [...packable.positions ?? []].concat(mouse ? [mouse] : []);\n return positions.length >= 2 ? positions : [];\n }, false);\n\n return {\n entities: [entity],\n };\n },\n },\n};\n","import type { PlotConstructorOptions } from '../usePlot/Plot';\nimport { CallbackProperty, Color, Entity, PolygonHierarchy } from 'cesium';\nimport { control, interval, moved } from '../skeleton';\n\n/**\n * 内置的多边形标绘方案\n */\nexport const PLOT_POLYGON_SCHEME: PlotConstructorOptions = {\n scheme: {\n type: 'Polygon',\n forceComplete: packable => packable.positions!.length >= 3,\n skeletons: [\n control,\n interval,\n moved,\n ],\n render(options) {\n const { mouse, packable } = options;\n const entity = options.previous.entities?.[0]\n ?? new Entity({\n polyline: {\n material: Color.YELLOW.withAlpha(0.5),\n },\n polygon: {\n material: Color.YELLOW.withAlpha(0.5),\n },\n });\n\n const positions = [...packable.positions ?? []];\n mouse && positions.push(mouse);\n\n if (positions.length === 2) {\n entity.polygon!.hierarchy = undefined;\n entity.polyline!.positions = new CallbackProperty(() => positions, false);\n }\n else if (positions.length >= 3) {\n entity.polyline!.positions = undefined;\n entity.polygon!.hierarchy = new CallbackProperty(() => {\n positions.push(positions[0]);\n return positions.length >= 3 ? new PolygonHierarchy([...positions]) : undefined;\n }, false);\n }\n else {\n entity.polygon!.hierarchy = undefined;\n entity.polyline!.positions = undefined;\n }\n\n return {\n entities: [entity],\n };\n },\n },\n};\n","import type { Nullable } from '@vesium/shared';\nimport type { MaybeRef } from '@vueuse/core';\nimport type { Cartesian3, Entity } from 'cesium';\nimport type { CSSProperties } from 'vue';\nimport type { PlotSkeleton } from './PlotSkeleton';\nimport type { SampledPlotPackable } from './SampledPlotProperty';\nimport { assertError } from '@vesium/shared';\nimport { assert } from '@vueuse/core';\n\nexport interface PlotRenderResult {\n entities?: Entity[];\n primitives?: any[];\n groundPrimitives?: any[];\n}\n\nexport interface PlotRenderOptions<D = any> {\n packable: SampledPlotPackable<D>;\n defining: boolean;\n mouse?: Cartesian3;\n previous: PlotRenderResult;\n}\n\nexport interface PlotSchemeConstructorOptions {\n type: string;\n\n /**\n * 是否立即执行完成标绘操作\n * 每次控制点发生变变化时,执行该回调函数,如果返回`true`则标绘完成\n */\n complete?: (packable: SampledPlotPackable) => boolean;\n\n /**\n * 双击时,是否执行完成标绘操作\n * 每次控制点发生变变化时,执行该回调函数,如果返回 true 则下一次双击事件执行完成\n */\n forceComplete?: (packable: SampledPlotPackable) => boolean;\n\n /**\n * 处于定义态时的鼠标样式\n * @default 'crosshair'\n */\n definingCursor?: MaybeRef<Nullable<CSSProperties['cursor']>> | ((packable: SampledPlotPackable) => Nullable<CSSProperties['cursor']>);\n\n /**\n * 框架点渲染配置\n */\n skeletons?: (() => PlotSkeleton) [];\n\n /**\n */\n render?: (options: PlotRenderOptions) => PlotRenderResult | Promise<PlotRenderResult>;\n\n}\n\nexport class PlotScheme {\n constructor(options: PlotSchemeConstructorOptions) {\n this.type = options.type;\n this.complete = options.complete;\n this.forceComplete = options.forceComplete;\n this.definingCursor = options.definingCursor ?? 'crosshair';\n this.skeletons = options.skeletons?.map(item => item()) ?? [];\n this.render = options.render;\n }\n\n type: string;\n\n /**\n * 是否立即执行完成标绘操作\n *\n * 每次控制点发生变变化时,执行该回调函数,如果返回`true`则标绘完成\n */\n complete?: (packable: SampledPlotPackable) => boolean;\n\n /**\n * 双击时,是否执行完成标绘操作\n */\n forceComplete?: (packable: SampledPlotPackable) => boolean;\n\n /**\n * 处于定义态时的鼠标样式\n * @default 'crosshair'\n */\n definingCursor?: MaybeRef<Nullable<CSSProperties['cursor']>> | ((packable: SampledPlotPackable) => Nullable<CSSProperties['cursor']>);\n\n /**\n * 框架点渲染配置\n */\n skeletons: PlotSkeleton [];\n\n /**\n */\n render?: (options: PlotRenderOptions) => PlotRenderResult | Promise<PlotRenderResult>;\n\n /**\n * @internal\n */\n private static _record = new Map<string, PlotScheme>();\n\n static getCacheTypes(): string[] {\n return [...this._record.keys()];\n }\n\n static getCache(type: string): PlotScheme | undefined {\n return PlotScheme._record.get(type);\n }\n\n /**\n * 设置标绘方案\n * @param scheme\n */\n static setCache(scheme: PlotScheme): void {\n assertError(!scheme.type, '`scheme.type` is required');\n PlotScheme._record.set(scheme.type, scheme);\n }\n\n /**\n * 解析传入的 scheme,并返回 PlotScheme 实例\n */\n static resolve(maybeScheme: string | PlotScheme | PlotSchemeConstructorOptions): PlotScheme {\n if (typeof maybeScheme === 'string') {\n const _scheme = PlotScheme.getCache(maybeScheme);\n assert(!!_scheme, `scheme ${maybeScheme} not found`);\n return _scheme!;\n }\n else if (!(maybeScheme instanceof PlotScheme)) {\n return new PlotScheme(maybeScheme);\n }\n else {\n return maybeScheme;\n }\n }\n}\n","import type { Property } from 'cesium';\nimport { Cartesian3, Event, JulianDate, TimeInterval } from 'cesium';\n\n/**\n * 标绘采集到的数据\n */\nexport interface SampledPlotPackable<D = any> {\n time: JulianDate;\n positions?: Cartesian3[];\n derivative?: D;\n}\n\nexport enum SampledPlotStrategy {\n NEAR = 0,\n CYCLE = 1,\n STRICT = 2,\n}\n\nexport type SampledPlotInterpolationAlgorithm<D = any> = (\n time: JulianDate,\n previous: SampledPlotPackable<D>,\n next: SampledPlotPackable<D>,\n proportion: number\n) => SampledPlotPackable;\n\n/**\n * 默认插值算法\n *\n * @param time 时间\n * @param previous 前一个数据点\n * @param next 后一个数据点\n * @param proportion 比例\n * @returns 插值结果\n */\nconst defaultInterpolationAlgorithm: SampledPlotInterpolationAlgorithm = (time, previous, next, proportion) => {\n if (proportion === 0) {\n return {\n time,\n positions: previous.positions?.map(item => item.clone()),\n derivative: previous.derivative,\n };\n }\n else if (proportion === 1) {\n return {\n time,\n positions: next.positions?.map(item => item.clone()),\n derivative: previous.derivative,\n };\n }\n\n return {\n time,\n positions: next.positions?.map((right, index) => {\n const left = previous.positions?.[index];\n return !left ? right : Cartesian3.lerp(left, right, proportion, new Cartesian3());\n }),\n derivative: previous.derivative,\n };\n};\n\nexport interface SampledPlotPropertyConstructorOptions<D = any> {\n interpolationAlgorithm?: SampledPlotInterpolationAlgorithm<D>;\n strategy?: SampledPlotStrategy;\n packables?: SampledPlotPackable<D>[];\n}\n\n/**\n * 标绘属性数据\n */\nexport class SampledPlotProperty<D = any> {\n constructor(options?: SampledPlotPropertyConstructorOptions<D>) {\n this.interpolationAlgorithm = options?.interpolationAlgorithm;\n this.strategy = options?.strategy ?? SampledPlotStrategy.NEAR;\n options?.packables?.forEach(packable => this.setSample(packable));\n // 默认将初始化一项数据\n if (!this._times.length) {\n this.setSample({\n time: JulianDate.now(),\n positions: [],\n derivative: undefined,\n });\n }\n }\n\n static defaultInterpolationAlgorithm: SampledPlotInterpolationAlgorithm<any> = defaultInterpolationAlgorithm;\n\n strategy: SampledPlotStrategy;\n\n interpolationAlgorithm?: SampledPlotInterpolationAlgorithm;\n\n /**\n * @internal\n */\n private _times: JulianDate[] = [];\n\n /**\n * @internal\n */\n private _sampleds: Cartesian3[][] = [];\n\n /**\n * @internal\n */\n private _derivatives: (D | undefined)[] = [];\n\n get isConstant(): boolean {\n return this._times.length === 0;\n };\n\n /**\n * @internal\n */\n private _definitionChanged = new Event<(...args: any[]) => void>();\n\n get definitionChanged(): Event<(...args: any[]) => void> {\n return this._definitionChanged;\n };\n\n /**\n * 获取时间数组\n *\n * @returns 返回包含所有时间的 JulianDate 数组\n */\n getTimes(): JulianDate[] {\n return this._times.map(t => t.clone());\n }\n\n /**\n * 根据给定的儒略日期获取时间索引范围及比例\n *\n * @param time 给定的儒略日期\n * @returns 返回包含前一个索引、后一个索引及时间比例的对象,若不符合条件则返回undefined\n * @internal\n */\n private getIndexScope(time: JulianDate): { prevIndex: number; nextIndex: number; proportion: number } | undefined {\n if (!this._times.length) {\n return;\n }\n const start = this._times[0];\n const end = this._times[this._times.length - 1];\n if (JulianDate.lessThan(time, start) || JulianDate.greaterThan(time, end)) {\n switch (this.strategy) {\n case SampledPlotStrategy.STRICT: {\n return;\n }\n case SampledPlotStrategy.NEAR: {\n time = JulianDate.lessThan(time, this._times[0])\n ? this._times[0].clone()\n : this._times[this._times.length - 1].clone();\n break;\n }\n case SampledPlotStrategy.CYCLE: {\n const startMS = JulianDate.toDate(this._times[0]).getTime();\n const endMS = JulianDate.toDate(this._times[this._times.length - 1]).getTime();\n const duration = endMS - startMS;\n const timeMS = JulianDate.toDate(time).getTime();\n const diff = (timeMS - startMS) % duration;\n const dete = new Date(startMS + diff);\n time = JulianDate.fromDate(dete);\n break;\n }\n }\n }\n\n const prevIndex = this._times.findIndex(t => JulianDate.lessThanOrEquals(time, t));\n const nextIndex = Math.min(prevIndex, this._times.length - 1);\n const prevMs = JulianDate.toDate(this._times[prevIndex]).getTime();\n const nextMs = JulianDate.toDate(this._times[nextIndex]).getTime();\n const ms = JulianDate.toDate(time).getTime();\n\n return {\n prevIndex,\n nextIndex,\n proportion: ((ms - prevMs) / (nextMs - prevMs)) || 0,\n };\n }\n\n /**\n * 根据给定的儒略日期(JulianDate)获取插值后的样本点数据。\n *\n * @param time 指定的儒略日期(JulianDate)。\n * @param result 可选参数,用于存储结果的容器。如果未提供,则创建一个新的容器。\n * @returns 插值后的样本点数据,存储在提供的或新创建的result容器中。\n * @template D 数据类型。\n */\n getValue(time: JulianDate, result?: SampledPlotPackable): SampledPlotPackable<D> {\n result ??= { time };\n Object.assign(result, {\n time: time.clone(),\n positions: undefined,\n derivative: undefined,\n });\n\n if (!time) {\n result.time = this._times[0]?.clone();\n result.positions = this._sampleds[0]?.map(c => c.clone(c));\n result.derivative = this._derivatives[0];\n return result;\n }\n const scope = this.getIndexScope(time);\n if (!scope) {\n return result;\n }\n\n result.time = time;\n const { prevIndex, nextIndex, proportion } = scope;\n const previous: SampledPlotPackable<D> = {\n time: this._times[prevIndex],\n positions: this._sampleds[prevIndex],\n derivative: this._derivatives[prevIndex],\n };\n const next: SampledPlotPackable<D> = {\n time: this._times[nextIndex],\n positions: this._sampleds[nextIndex],\n derivative: this._derivatives[nextIndex],\n };\n const packable = (this.interpolationAlgorithm || SampledPlotProperty.defaultInterpolationAlgorithm)(time, previous, next, proportion);\n Object.assign(result, packable);\n return result;\n }\n\n /**\n * 设置样本数据\n *\n * @param value 样本数据对象,包含时间、位置和导数信息\n */\n setSample(value: SampledPlotPackable<D>): void {\n const time = value.time.clone();\n const positions = value.positions?.map(item => item.clone()) ?? [];\n const derivative = value.derivative;\n const index = this._times.findIndex(t => JulianDate.equals(time, t));\n\n if (index !== -1) {\n this._times[index] = time;\n this._sampleds[index] = positions;\n this._derivatives[index] = value.derivative;\n }\n else if (this._times.length === 0) {\n this._times[0] = time;\n this._sampleds[0] = positions;\n this._derivatives[0] = value.derivative;\n }\n else if (JulianDate.lessThan(time, this._times[0])) {\n this._times.splice(0, 0, time);\n this._sampleds.splice(0, 0, positions);\n this._derivatives.splice(0, 0, derivative);\n }\n else if (JulianDate.greaterThan(time, this._times[this._times.length - 1])) {\n this._times.push(time);\n this._sampleds.push(positions);\n this._derivatives.push(derivative);\n }\n\n this.definitionChanged.raiseEvent(this);\n }\n\n /**\n * 设置样本数据\n *\n * @param values 样本数据数组,每个元素都是类型为SampledPlotPackable<D>的对象\n */\n setSamples(values: SampledPlotPackable<D>[]): void {\n values.forEach(value => this.setSample(value));\n }\n\n /**\n * 从样本中移除指定时间点的数据\n *\n * @param time 需要移除的时间点,使用儒略日期表示\n * @returns 如果成功移除,则返回 true;否则返回 false\n */\n removeSample(time: JulianDate): boolean {\n const index = this._times.findIndex(t => t.equals(time));\n if (index !== -1) {\n this._sampleds.splice(index, 1);\n this._derivatives.splice(index, 1);\n const removed = this._times.splice(index, 1);\n if (removed.length) {\n this._definitionChanged.raiseEvent(this);\n return true;\n }\n }\n return false;\n }\n\n /**\n * 从样本中移除指定时间间隔内的样本。\n *\n * @param interval 要移除样本的时间间隔\n */\n removeSamples(interval: TimeInterval): void {\n for (let i = 0; i < this._times.length; i++) {\n const time = this._times[i];\n TimeInterval.contains(interval, time) && this.removeSample(time);\n }\n }\n\n equals(other?: Property): boolean {\n return other === this;\n }\n}\n","import type { Entity, JulianDate } from 'cesium';\nimport type { PlotSchemeConstructorOptions } from './PlotScheme';\nimport type { PlotSkeletonEntity } from './PlotSkeleton';\nimport type { SampledPlotPropertyConstructorOptions } from './SampledPlotProperty';\nimport { assertError, createCesiumAttribute, createCesiumProperty } from '@vesium/shared';\nimport { notNullish } from '@vueuse/core';\nimport { createGuid, Event } from 'cesium';\nimport { PlotScheme } from './PlotScheme';\nimport { SampledPlotProperty } from './SampledPlotProperty';\n\n/**\n * Options for constructing a Plot instance.\n */\nexport interface PlotConstructorOptions {\n /**\n * A unique identifier for the plot.\n */\n id?: string;\n\n /**\n * Whether the plot is disabled.\n */\n disabled?: boolean;\n\n /**\n * The scheme for the plot.\n * If it is a string, it will attempt to retrieve the corresponding `PlotScheme.type` object from the cache internally.\n */\n scheme: string | PlotScheme | PlotSchemeConstructorOptions;\n\n /**\n * Sampled plot property.\n */\n sampled?: SampledPlotProperty | SampledPlotPropertyConstructorOptions;\n}\n\nexport class Plot {\n constructor(options: PlotConstructorOptions) {\n assertError(!notNullish(options.scheme), 'options.scheme is required');\n\n this.id = options.id || createGuid();\n createCesiumAttribute(this, 'disabled', !!options.disabled);\n createCesiumAttribute(this, 'defining', true);\n createCesiumAttribute(this, 'scheme', PlotScheme.resolve(options.scheme), { readonly: true });\n const sampled = options.sampled instanceof SampledPlotProperty ? options.sampled : new SampledPlotProperty(options.sampled);\n createCesiumProperty(this, 'sampled', sampled);\n createCesiumAttribute(this, 'entities', []);\n createCesiumAttribute(this, 'primitives', []);\n createCesiumAttribute(this, 'groundPrimitives', []);\n createCesiumAttribute(this, 'skeletonEntities', []);\n }\n\n /**\n * @internal\n */\n private _definitionChanged = new Event();\n\n /**\n * An event that is raised when a property is changed.\n */\n get definitionChanged(): Event<(scope: Plot, key: keyof Plot, newValue: Plot[typeof key], oldValue: Plot[typeof key]) => void> {\n return this._definitionChanged;\n }\n\n time?: JulianDate;\n\n /**\n * A unique identifier for the plot.\n */\n declare id: string;\n\n /**\n * Whether the plot is disabled.\n */\n declare disabled: boolean;\n\n /**\n * The scheme for the plot.\n */\n declare readonly scheme: PlotScheme;\n\n /**\n * Sampled plot property.\n */\n declare sampled: SampledPlotProperty;\n\n /**\n * @internal\n */\n declare defining: boolean;\n\n /**\n * 当前标绘是否处于定义态\n */\n isDefining(): boolean {\n return this.defining;\n }\n\n /**\n * @internal\n */\n declare entities: Entity[];\n\n /**\n * 获取当前标绘的entity数组\n */\n getEntities(): Entity[] {\n return [...this.entities];\n }\n\n /**\n * @internal\n */\n declare primitives: any[];\n\n /**\n * 获取当前标绘的primitive数组\n */\n getPrimitives(): any[] {\n return [...this.primitives];\n }\n\n /**\n * @internal\n */\n declare groundPrimitives: any[];\n\n /**\n * 获取当前标绘的贴地primitive数组\n */\n getGroundPrimitives(): any[] {\n return [...this.groundPrimitives];\n }\n\n /**\n * @internal\n */\n declare skeletonEntities: PlotSkeletonEntity[];\n\n /**\n * 获取当前标绘标绘的骨架点entity数组\n */\n getSkeletonEntities(): PlotSkeletonEntity[] {\n return [...this.skeletonEntities];\n }\n}\n","import type { Cartesian3, Entity, JulianDate } from 'cesium';\nimport type { ComputedRef, ShallowRef } from 'vue';\nimport type { Plot } from './Plot';\nimport { useCesiumEventListener, useDataSource, useEntityScope, usePrimitive, usePrimitiveScope, useScreenSpaceEventHandler, useViewer } from '@vesium/core';\nimport { arrayDifference, canvasCoordToCartesian, throttle } from '@vesium/shared';\nimport { watchArray } from '@vueuse/core';\nimport { CustomDataSource, PrimitiveCollection, ScreenSpaceEventType } from 'cesium';\nimport { computed, shallowRef, watch } from 'vue';\n\nexport interface UseProductRetrun {\n primitives: ComputedRef<any[]>;\n entities: ComputedRef<Entity[]>;\n groundPrimitives: ComputedRef<any[]>;\n}\n\nexport function useRender(\n plots: ComputedRef<Plot[]>,\n current: ShallowRef<Plot | undefined>,\n getCurrentTime: () => JulianDate,\n): UseProductRetrun {\n const viewer = useViewer();\n\n const primitiveCollection = usePrimitive(new PrimitiveCollection())!;\n const groundPrimitiveCollection = usePrimitive(new PrimitiveCollection(), { collection: 'ground' })!;\n const dataSource = useDataSource(new CustomDataSource());\n\n const entityScope = useEntityScope({ collection: () => dataSource.value!.entities });\n const primitiveScope = usePrimitiveScope({ collection: () => primitiveCollection.value! });\n const groundPrimitiveScope = usePrimitiveScope({ collection: () => groundPrimitiveCollection.value! });\n\n const mouseCartesian = shallowRef<Cartesian3>();\n\n useScreenSpaceEventHandler(\n ScreenSpaceEventType.MOUSE_MOVE,\n throttle((context) => {\n mouseCartesian.value = canvasCoordToCartesian(context?.endPosition, viewer.value!.scene);\n }, 10),\n );\n\n watchArray(plots, (_value, _oldValue, added, removed = []) => {\n removed.forEach((plot) => {\n entityScope.removeWhere(item => plot.entities.includes(item));\n primitiveScope.removeWhere(item => plot.primitives.includes(item));\n groundPrimitiveScope.removeWhere(item => plot.groundPrimitives.includes(item));\n });\n\n added.forEach((plot) => {\n plot.entities.forEach(item => entityScope.add(item));\n plot.primitives.forEach(item => primitiveScope.add(item));\n plot.groundPrimitives.forEach(item => groundPrimitiveScope.add(item));\n });\n }, {\n immediate: true,\n });\n\n useCesiumEventListener(\n () => plots.value.map(item => item.definitionChanged),\n (_scope, key, newValue, oldValue) => {\n if (key === 'entities') {\n const { added, removed } = arrayDifference(newValue as Entity[], oldValue as Entity[]);\n added.forEach(item => entityScope.add(item));\n removed.forEach(item => entityScope.remove(item));\n }\n else if (key === 'primitives') {\n const { added, removed } = arrayDifference(newValue as Entity[], oldValue as Entity[]);\n added.forEach(item => primitiveScope.add(item));\n removed.forEach(item => primitiveScope.remove(item));\n }\n else if (key === 'groundPrimitives') {\n const { added, removed } = arrayDifference(newValue as Entity[], oldValue as Entity[]);\n added.forEach(item => groundPrimitiveScope.add(item));\n removed.forEach(item => groundPrimitiveScope.remove(item));\n }\n },\n );\n\n const update = throttle(async (plot: Plot) => {\n const reslut = await plot.scheme.render?.({\n packable: plot.sampled.getValue(getCurrentTime()),\n mouse: plot.defining ? mouseCartesian.value : undefined,\n defining: plot.defining,\n previous: {\n entities: plot.entities,\n primitives: plot.primitives,\n groundPrimitives: plot.groundPrimitives,\n },\n });\n\n plot.entities = reslut?.entities ?? [];\n plot.primitives = reslut?.primitives ?? [];\n plot.groundPrimitives = reslut?.groundPrimitives ?? [];\n }, 1);\n\n watch(current, (plot, previous) => {\n previous && update(previous);\n });\n\n useCesiumEventListener(\n () => plots.value.map(item => item.definitionChanged),\n (plot, key) => {\n if (['disabled', 'defining', 'scheme', 'sampled', 'time'].includes(key)) {\n update(plot);\n }\n },\n );\n\n watch(mouseCartesian, () => {\n plots.value.forEach(plot => plot.defining && update(plot));\n });\n\n return {\n primitives: computed(() => Array.from(primitiveScope.scope)),\n groundPrimitives: computed(() => Array.from(primitiveScope.scope)),\n entities: computed(() => Array.from(entityScope.scope)),\n };\n}\n","import type { Nullable } from '@vesium/shared';\nimport type { JulianDate } from 'cesium';\nimport type { CSSProperties, ShallowRef } from 'vue';\nimport type { Plot } from './Plot';\nimport { useCesiumEventListener, useScreenSpaceEventHandler, useViewer } from '@vesium/core';\nimport { canvasCoordToCartesian, isFunction } from '@vesium/shared';\nimport { promiseTimeout } from '@vueuse/core';\nimport { ScreenSpaceEventType } from 'cesium';\nimport { computed, ref, toValue, watch } from 'vue';\n\nexport function useSampled(\n current: ShallowRef<Plot | undefined>,\n getCurrentTime: () => JulianDate,\n): void {\n const viewer = useViewer();\n const doubleClicking = ref(false);\n\n const packable = computed(() => {\n return current.value?.sampled.getValue(getCurrentTime());\n });\n\n // 左键点击添加点\n useScreenSpaceEventHandler(\n ScreenSpaceEventType.LEFT_CLICK,\n async (ctx) => {\n await promiseTimeout(1);\n if (!current.value || !packable.value) {\n return;\n }\n // 双击会触发两次事件, 这里做一个防抖处理,只需触发一次事件\n if (doubleClicking.value) {\n return;\n }\n const { scheme, defining, sampled } = current.value;\n if (!defining) {\n return;\n }\n const position = canvasCoordToCartesian(ctx.position, viewer.value!.scene);\n if (!position) {\n return;\n }\n packable.value.positions ??= [];\n packable.value.positions.push(position);\n sampled.setSample(packable.value);\n const completed = scheme.complete?.(packable.value);\n completed && (current.value.defining = false);\n },\n );\n\n // 双击结束定义态,进入激活态\n useScreenSpaceEventHandler(\n ScreenSpaceEventType.LEFT_DOUBLE_CLICK,\n async (ctx) => {\n if (!current.value || !packable.value) {\n return;\n }\n doubleClicking.value = true;\n await promiseTimeout(2);\n doubleClicking.value = false;\n\n const { scheme, defining } = current.value;\n if (!defining) {\n return;\n }\n const position = canvasCoordToCartesian(ctx.position, viewer.value!.scene);\n if (!position) {\n return;\n }\n\n const completed = scheme.forceComplete?.(packable.value);\n completed && (current.value.defining = false);\n },\n );\n\n // 右键回退到上一个点\n useScreenSpaceEventHandler(\n ScreenSpaceEventType.RIGHT_CLICK,\n async () => {\n if (!current.value || !packable.value) {\n return;\n }\n const { defining, sampled } = current.value;\n\n if (!defining) {\n return;\n }\n packable.value.positions ??= [];\n if (packable.value.positions.length === 0) {\n return;\n }\n packable.value.positions.splice(packable.value.positions.length - 1, 1);\n sampled.setSample(packable.value);\n },\n );\n\n // 定义态时的鼠标样式\n const definingCursorCss = ref<Nullable<CSSProperties['cursor']>>();\n\n const setDefiningCursorCss = () => {\n if (!current.value?.defining) {\n if (definingCursorCss.value) {\n definingCursorCss.value = undefined;\n viewer.value!.container.parentElement!.style.removeProperty('cursor');\n }\n }\n else {\n const definingCursor = current.value!.scheme.definingCursor;\n definingCursorCss.value = isFunction(definingCursor) ? definingCursor(packable.value!) : toValue(definingCursor);\n if (definingCursorCss.value) {\n viewer.value?.container.parentElement!.style.setProperty('cursor', definingCursorCss.value);\n }\n }\n };\n\n useCesiumEventListener(() => current.value?.definitionChanged, (plot, key) => {\n if (key === 'defining' || key === 'sampled') {\n setDefiningCursorCss();\n }\n });\n watch(current, () => setDefiningCursorCss());\n}\n","import type { JulianDate } from 'cesium';\nimport type { ComputedRef, ShallowRef } from 'vue';\nimport type { Plot } from './Plot';\nimport type { PlotSkeleton } from './PlotSkeleton';\nimport { useCesiumEventListener, useDataSource, useEntityScope, useGraphicDrag, useGraphicHover, useGraphicLeftClick, useViewer } from '@vesium/core';\nimport { arrayDifference, isFunction, throttle } from '@vesium/shared';\nimport { onKeyStroke, watchArray } from '@vueuse/core';\nimport { CustomDataSource } from 'cesium';\nimport { shallowRef, toValue, watch } from 'vue';\nimport { PlotAction, PlotSkeletonEntity } from './PlotSkeleton';\n\nexport function useSkeleton(\n plots: ComputedRef<Plot[]>,\n current: ShallowRef<Plot | undefined>,\n getCurrentTime: () => JulianDate,\n) {\n const viewer = useViewer();\n\n const dataSource = useDataSource(new CustomDataSource());\n const entityScope = useEntityScope({ collection: () => dataSource.value!.entities });\n\n const hoverEntity = shallowRef<PlotSkeletonEntity>();\n const activeEntity = shallowRef<PlotSkeletonEntity>();\n\n // 获取当前点位的状态\n const getPointAction = (entity?: PlotSkeletonEntity) => {\n if (!entity) {\n return PlotAction.IDLE;\n }\n return activeEntity.value?.id === entity.id\n ? PlotAction.ACTIVE\n : hoverEntity.value?.id === entity.id\n ? PlotAction.HOVER\n : PlotAction.IDLE;\n };\n\n const update = throttle((plot: Plot, destroyed?: boolean) => {\n const oldEntities = plot.getSkeletonEntities();\n const entities: PlotSkeletonEntity[] = [];\n\n if (destroyed || plot.disabled) {\n plot.skeletonEntities = [];\n }\n else {\n const packable = plot.sampled.getValue(getCurrentTime());\n const defining = plot.defining;\n const active = current.value === plot;\n const skeletons = plot.scheme.skeletons;\n\n skeletons.forEach((skeleton) => {\n const disabled = isFunction(skeleton.disabled) ? skeleton.disabled({ active, defining }) : skeleton.disabled;\n if (disabled) {\n return;\n }\n const positions = skeleton.format?.(packable!) ?? packable?.positions ?? [];\n\n positions.forEach((position, index) => {\n let entity = oldEntities.find(item => item.index === index && item.skeleton === skeleton);\n const options = skeleton.render?.({\n defining,\n active,\n index,\n packable,\n positions,\n position,\n action: getPointAction(entity),\n });\n\n const merge = new PlotSkeletonEntity(options ?? {});\n if (entity) {\n merge.propertyNames.forEach((key) => {\n if (key !== 'id') {\n // @ts-expect-error ignore\n entity[key] = merge[key];\n }\n });\n }\n else {\n entity = merge;\n }\n entity.plot = plot;\n entity.skeleton = skeleton;\n entity.index = index;\n entities.push(entity);\n });\n });\n }\n plot.skeletonEntities = entities;\n }, 1);\n\n // cursor 仅在不存在定义态的标绘时才生效\n useGraphicDrag({\n cursor: (pick) => {\n if (!current.value?.defining && entityScope.scope.has(pick.id)) {\n const skeleton = pick.id.skeleton as PlotSkeleton;\n return isFunction(skeleton?.cursor) ? skeleton.cursor(pick) : toValue(skeleton?.cursor);\n }\n },\n dragCursor: (pick) => {\n if (!current.value?.defining && entityScope.scope.has(pick.id)) {\n const skeleton = pick.id.skeleton as PlotSkeleton;\n return isFunction(skeleton?.dragCursor) ? skeleton.dragCursor(pick) : toValue(skeleton?.dragCursor);\n }\n },\n listener: (params) => {\n if (params.pick.id instanceof PlotSkeletonEntity && entityScope.scope.has(params.pick.id)) {\n const entity = params.pick.id as PlotSkeletonEntity;\n\n const plot = entity.plot as Plot;\n // 仅在非定义态时才可拖拽\n if (plot.defining) {\n return;\n }\n activeEntity.value = entity;\n const skeleton = entity.skeleton as PlotSkeleton;\n const index = entity.index as number;\n const packable = plot.sampled.getValue(getCurrentTime());\n skeleton.onDrag?.({\n viewer: viewer.value!,\n sampled: plot.sampled,\n packable,\n active: current.value === plot,\n index,\n context: params.context,\n dragging: params.dragging,\n lockCamera: params.lockCamera,\n });\n }\n else {\n activeEntity.value = undefined;\n }\n },\n });\n\n // 键盘控制当前激活的点位\n onKeyStroke((keyEvent) => {\n if (activeEntity.value) {\n const entity = activeEntity.value;\n const plot = entity.plot as Plot;\n const skeleton = entity.skeleton as PlotSkeleton;\n const index = entity.index as number;\n const packable = plot.sampled.getValue(getCurrentTime());\n\n skeleton.onKeyPressed?.({\n viewer: viewer.value!,\n sampled: plot.sampled,\n packable,\n index,\n keyEvent,\n });\n }\n });\n\n useGraphicHover({\n listener: ({ hovering, pick }) => {\n if (hovering && pick.id instanceof PlotSkeletonEntity && entityScope.scope.has(pick.id)) {\n const entity = pick.id as PlotSkeletonEntity;\n hoverEntity.value = entity;\n }\n else {\n hoverEntity.value = undefined;\n }\n },\n });\n\n // 左键点击,令点位处于激活\n useGraphicLeftClick({\n listener: ({ context, pick }) => {\n if (pick.id instanceof PlotSkeletonEntity && entityScope.scope.has(pick.id)) {\n const entity = pick.id as PlotSkeletonEntity;\n activeEntity.value = entity;\n const plot = entity.plot as Plot;\n const skeleton = entity.skeleton as PlotSkeleton;\n const index = entity.index as number;\n\n const packable = plot.sampled.getValue(getCurrentTime());\n\n skeleton.onLeftClick?.({\n viewer: viewer.value!,\n sampled: plot.sampled,\n packable: packable!,\n active: current.value === plot,\n defining: plot.defining,\n index,\n context,\n });\n }\n else {\n activeEntity.value = undefined;\n }\n },\n });\n\n watchArray(plots, (value, oldValue, added, removed = []) => {\n added.forEach(plot => update(plot));\n removed.forEach(plot => update(plot, true));\n });\n\n useCesiumEventListener(() => plots.value.map(plot => plot.definitionChanged), (plot, key, newValue, oldValue) => {\n if (['disabled', 'defining', 'scheme', 'sampled', 'time'].includes(key)) {\n update(plot);\n }\n if (key === 'skeletonEntities') {\n const { added, removed } = arrayDifference(newValue as PlotSkeletonEntity[], oldValue as PlotSkeletonEntity[]);\n added.forEach(item => entityScope.add(item));\n removed.forEach(item => entityScope.remove(item));\n }\n });\n\n // 当前激活的标绘变化时,更新渲染\n watch(current, (plot, previous) => {\n plot && update(plot);\n setTimeout(() => {\n previous && update(previous);\n }, 2);\n });\n\n return {\n dataSource,\n };\n}\n","import type { ShallowRef } from 'vue';\nimport type { PlotConstructorOptions } from './Plot';\nimport type { SampledPlotPackable } from './SampledPlotProperty';\nimport { useCesiumEventListener, useScreenSpaceEventHandler } from '@vesium/core';\nimport { useViewer } from '@vesium/core/useViewer';\nimport { pickHitGraphic } from '@vesium/shared';\nimport { JulianDate, ScreenSpaceEventType } from 'cesium';\nimport { computed, shallowReactive, shallowRef, watch } from 'vue';\nimport { Plot } from './Plot';\nimport { useRender } from './useRender';\nimport { useSampled } from './useSampled';\nimport { useSkeleton } from './useSkeleton';\n\nexport interface UsePlotOptions {\n time?: ShallowRef<JulianDate | undefined>;\n}\n\nexport type UsePlotOperate = (plot: Plot | PlotConstructorOptions) => Promise<Plot>;\n\nexport interface UsePlotRetrun {\n\n time: ShallowRef<JulianDate | undefined>;\n\n data?: ShallowRef<Plot[]>;\n\n current?: ShallowRef<Plot | undefined>;\n /**\n * 触发标绘\n */\n operate: UsePlotOperate;\n\n /**\n * 强制终止当前进行中的标绘\n */\n cancel: VoidFunction;\n}\n\nexport function usePlot(options?: UsePlotOptions) {\n const time = options?.time || shallowRef<JulianDate>();\n\n const viewer = useViewer();\n\n const getCurrentTime = () => {\n return time.value?.clone() || viewer.value?.clock.currentTime?.clone() || JulianDate.now();\n };\n\n const collection = shallowReactive(new Set<Plot>());\n const plots = computed(() => Array.from(collection));\n const current = shallowRef<Plot>();\n const packable = shallowRef<SampledPlotPackable>();\n\n useCesiumEventListener([\n () => current.value?.sampled.definitionChanged,\n ], () => {\n packable.value = current.value?.sampled.getValue(getCurrentTime());\n });\n\n useSampled(current, getCurrentTime);\n useRender(plots, current, getCurrentTime);\n useSkeleton(plots, current, getCurrentTime);\n\n // 单击激活\n useScreenSpaceEventHandler(ScreenSpaceEventType.LEFT_CLICK, (data) => {\n if (current.value?.defining) {\n return;\n }\n const pick = viewer.value?.scene.pick(data.position.clone());\n // 点击到了骨架点则不处理\n if (pick?.id?.plot instanceof Plot) {\n return;\n }\n if (!pick) {\n current.value = undefined;\n return;\n }\n current.value = plots.value.find(plot => pickHitGraphic(pick, [...plot.entities, ...plot.primitives, ...plot.groundPrimitives]));\n });\n\n let operateResolve: ((plot: Plot) => void) | undefined;\n let operateReject: (() => void) | undefined;\n\n watch(current, (plot, previous) => {\n if (previous) {\n if (previous.defining) {\n const packable = previous.sampled.getValue(getCurrentTime());\n const completed = previous.scheme.forceComplete?.(packable);\n if (completed) {\n previous.defining = false;\n operateResolve?.(previous);\n }\n else {\n collection.delete(previous);\n }\n }\n }\n });\n\n const operate: UsePlotOperate = async (plot) => {\n return new Promise((resolve, reject) => {\n operateResolve = resolve;\n operateReject = reject;\n const _plot = plot instanceof Plot ? plot : new Plot(plot);\n\n if (!collection.has(_plot)) {\n collection.add(_plot);\n }\n current.value = _plot;\n return resolve(_plot);\n });\n };\n\n const remove = (plot: Plot): boolean => {\n if (plot === current.value) {\n current.value = undefined;\n }\n if (collection.has(plot)) {\n collection.delete(plot);\n return true;\n }\n return false;\n };\n\n return {\n plots,\n time,\n operate,\n remove,\n cancel: operateReject,\n };\n}\n"],"names":["PlotAction","Entity","canvasCoordToCartesian","toCartographic","toCartesian3","Color","Cartesian3","Rectangle","HorizontalOrigin","VerticalOrigin","CallbackPositionProperty","CallbackProperty","PolygonHierarchy","assertError","assert","SampledPlotStrategy","_a","Event","JulianDate","interval","TimeInterval","notNullish","createGuid","createCesiumAttribute","createCesiumProperty","useViewer","usePrimitive","PrimitiveCollection","useDataSource","CustomDataSource","useEntityScope","usePrimitiveScope","shallowRef","useScreenSpaceEventHandler","ScreenSpaceEventType","throttle","watchArray","useCesiumEventListener","arrayDifference","watch","computed","ref","promiseTimeout","isFunction","toValue","useGraphicDrag","onKeyStroke","useGraphicHover","useGraphicLeftClick","shallowReactive","pickHitGraphic","packable"],"mappings":"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"}
|