@ino-cesium/draw 0.0.13 → 0.0.15
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/dist/index.d.ts +31 -31
- package/dist/index.js +1 -1
- package/package.json +5 -6
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as Cesium from 'cesium';
|
|
2
|
-
import { Cartesian3, PointPrimitiveCollection, PrimitiveCollection, Primitive, Cartesian2, PointPrimitive, Viewer } from 'cesium';
|
|
3
2
|
import { BasePrimitive, Common } from '@ino-cesium/common';
|
|
4
3
|
|
|
5
4
|
declare class MeasurePrimitive extends BasePrimitive<any> {
|
|
@@ -20,7 +19,7 @@ declare class MeasurePrimitive extends BasePrimitive<any> {
|
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
|
-
*
|
|
22
|
+
* 绘制事件类型
|
|
24
23
|
*/
|
|
25
24
|
declare enum DrawEventType {
|
|
26
25
|
/**
|
|
@@ -45,13 +44,13 @@ declare enum DrawEventType {
|
|
|
45
44
|
DRAW_RIGHT_CLICK = "drawRightClick"
|
|
46
45
|
}
|
|
47
46
|
/**
|
|
48
|
-
*
|
|
47
|
+
* 绘制事件处理函数类型
|
|
49
48
|
* @param type 事件类型
|
|
50
49
|
* @param data 事件数据
|
|
51
50
|
*/
|
|
52
51
|
type DrawEvent = (type: string, data: any) => void;
|
|
53
52
|
/**
|
|
54
|
-
*
|
|
53
|
+
* 绘制处理器事件接口
|
|
55
54
|
*/
|
|
56
55
|
interface IDrawHandlerEvent {
|
|
57
56
|
/**
|
|
@@ -69,13 +68,13 @@ interface IDrawHandlerEvent {
|
|
|
69
68
|
* @param positions 绘制点的位置数组
|
|
70
69
|
* @param drawData 绘制属性信息
|
|
71
70
|
*/
|
|
72
|
-
drawAdd?: (positions: Cartesian3, drawData: IDrawAttrInfo) => void;
|
|
71
|
+
drawAdd?: (positions: Cesium.Cartesian3, drawData: IDrawAttrInfo) => void;
|
|
73
72
|
/**
|
|
74
73
|
* 绘制移动事件
|
|
75
74
|
* @param positions 绘制点的位置数组
|
|
76
75
|
* @param drawData 绘制属性信息
|
|
77
76
|
*/
|
|
78
|
-
drawMove?: (positions: Cartesian3, drawData: IDrawAttrInfo) => void;
|
|
77
|
+
drawMove?: (positions: Cesium.Cartesian3, drawData: IDrawAttrInfo) => void;
|
|
79
78
|
/**
|
|
80
79
|
* 绘制编辑开始事件
|
|
81
80
|
* @param drawData 绘制属性信息
|
|
@@ -93,7 +92,7 @@ interface IDrawHandlerEvent {
|
|
|
93
92
|
drawRemove?: (drawData: IDrawAttrInfo) => void;
|
|
94
93
|
}
|
|
95
94
|
/**
|
|
96
|
-
*
|
|
95
|
+
* 绘制属性信息接口
|
|
97
96
|
*/
|
|
98
97
|
interface IDrawAttrInfo {
|
|
99
98
|
/**
|
|
@@ -139,15 +138,15 @@ interface IDrawAttrInfo {
|
|
|
139
138
|
/**
|
|
140
139
|
* 绘制点的位置数组
|
|
141
140
|
*/
|
|
142
|
-
positions: Cartesian3[];
|
|
141
|
+
positions: Cesium.Cartesian3[];
|
|
143
142
|
/**
|
|
144
143
|
* 形状点的位置数组
|
|
145
144
|
*/
|
|
146
|
-
shapePositions?: Cartesian3[];
|
|
145
|
+
shapePositions?: Cesium.Cartesian3[];
|
|
147
146
|
/**
|
|
148
147
|
* 点图元集合
|
|
149
148
|
*/
|
|
150
|
-
pointPrimitives: PointPrimitiveCollection;
|
|
149
|
+
pointPrimitives: Cesium.PointPrimitiveCollection;
|
|
151
150
|
/**
|
|
152
151
|
* 测量图元集合
|
|
153
152
|
*/
|
|
@@ -155,37 +154,37 @@ interface IDrawAttrInfo {
|
|
|
155
154
|
/**
|
|
156
155
|
* 图元集合
|
|
157
156
|
*/
|
|
158
|
-
primitives: PrimitiveCollection;
|
|
157
|
+
primitives: Cesium.PrimitiveCollection;
|
|
159
158
|
/**
|
|
160
159
|
* 测量结果数组
|
|
161
160
|
*/
|
|
162
161
|
measureResult?: IMeasureResult[];
|
|
163
162
|
}
|
|
164
163
|
/**
|
|
165
|
-
*
|
|
164
|
+
* 事件动作类型
|
|
166
165
|
*/
|
|
167
166
|
type IEventActions = {
|
|
168
167
|
[key in DrawEventType]: (data: IEventData) => void;
|
|
169
168
|
};
|
|
170
169
|
/**
|
|
171
|
-
*
|
|
170
|
+
* 事件数据接口
|
|
172
171
|
*/
|
|
173
172
|
interface IEventData {
|
|
174
173
|
/**
|
|
175
174
|
* 事件位置
|
|
176
175
|
*/
|
|
177
|
-
position: Cartesian3;
|
|
176
|
+
position: Cesium.Cartesian3;
|
|
178
177
|
/**
|
|
179
178
|
* 拾取的图元
|
|
180
179
|
*/
|
|
181
|
-
pickPrimitive?: Primitive;
|
|
180
|
+
pickPrimitive?: Cesium.Primitive;
|
|
182
181
|
/**
|
|
183
182
|
* 窗口位置
|
|
184
183
|
*/
|
|
185
|
-
windowPosition: Cartesian2;
|
|
184
|
+
windowPosition: Cesium.Cartesian2;
|
|
186
185
|
}
|
|
187
186
|
/**
|
|
188
|
-
*
|
|
187
|
+
* 绘制处理器接口
|
|
189
188
|
*/
|
|
190
189
|
interface IDrawHandler {
|
|
191
190
|
/**
|
|
@@ -218,7 +217,7 @@ interface IDrawHandler {
|
|
|
218
217
|
Event: IDrawHandlerEvent;
|
|
219
218
|
}
|
|
220
219
|
/**
|
|
221
|
-
*
|
|
220
|
+
* 绘制选项接口
|
|
222
221
|
*/
|
|
223
222
|
interface IDrawOptions {
|
|
224
223
|
/**
|
|
@@ -255,7 +254,7 @@ interface IDrawOptions {
|
|
|
255
254
|
drawStyle?: Common.DeepPartial<IDrawStyle>;
|
|
256
255
|
}
|
|
257
256
|
/**
|
|
258
|
-
*
|
|
257
|
+
* 测量选项接口
|
|
259
258
|
*/
|
|
260
259
|
interface IMeasureOptions extends IDrawOptions {
|
|
261
260
|
/**
|
|
@@ -272,32 +271,32 @@ interface IMeasureOptions extends IDrawOptions {
|
|
|
272
271
|
measureLabel?: boolean;
|
|
273
272
|
}
|
|
274
273
|
/**
|
|
275
|
-
*
|
|
274
|
+
* 绘制编辑事件接口
|
|
276
275
|
*/
|
|
277
276
|
interface IDrawEditEvent {
|
|
278
277
|
/**
|
|
279
278
|
* 绘制编辑添加事件
|
|
280
279
|
* @param pointPrimitive 点图元
|
|
281
280
|
*/
|
|
282
|
-
drawEditAdd: (pointPrimitive: PointPrimitive) => void;
|
|
281
|
+
drawEditAdd: (pointPrimitive: Cesium.PointPrimitive) => void;
|
|
283
282
|
/**
|
|
284
283
|
* 绘制编辑移动事件
|
|
285
284
|
* @param pointPrimitive 点图元
|
|
286
285
|
*/
|
|
287
|
-
drawEditMove: (pointPrimitive: PointPrimitive) => void;
|
|
286
|
+
drawEditMove: (pointPrimitive: Cesium.PointPrimitive) => void;
|
|
288
287
|
/**
|
|
289
288
|
* 绘制编辑移除事件
|
|
290
289
|
* @param pointPrimitive 点图元
|
|
291
290
|
*/
|
|
292
|
-
drawEditRemove: (pointPrimitive: PointPrimitive) => void;
|
|
291
|
+
drawEditRemove: (pointPrimitive: Cesium.PointPrimitive) => void;
|
|
293
292
|
/**
|
|
294
293
|
* 绘制删除事件
|
|
295
294
|
* @param pointPrimitive 点图元
|
|
296
295
|
*/
|
|
297
|
-
drawDelete: (pointPrimitive: PointPrimitive) => void;
|
|
296
|
+
drawDelete: (pointPrimitive: Cesium.PointPrimitive) => void;
|
|
298
297
|
}
|
|
299
298
|
/**
|
|
300
|
-
*
|
|
299
|
+
* 测量结果接口
|
|
301
300
|
*/
|
|
302
301
|
interface IMeasureResult {
|
|
303
302
|
/**
|
|
@@ -311,22 +310,22 @@ interface IMeasureResult {
|
|
|
311
310
|
/**
|
|
312
311
|
* 测量位置
|
|
313
312
|
*/
|
|
314
|
-
position: Cartesian3;
|
|
313
|
+
position: Cesium.Cartesian3;
|
|
315
314
|
/**
|
|
316
315
|
* 测量点的位置数组
|
|
317
316
|
*/
|
|
318
|
-
positions: Cartesian3[];
|
|
317
|
+
positions: Cesium.Cartesian3[];
|
|
319
318
|
/**
|
|
320
319
|
* 前缀文本,默认为空 用来做测量标识
|
|
321
320
|
*/
|
|
322
321
|
prefixText?: string;
|
|
323
322
|
}
|
|
324
323
|
/**
|
|
325
|
-
*
|
|
324
|
+
* 绘制形状类型
|
|
326
325
|
*/
|
|
327
326
|
type DrawShape = 'polyline' | 'polygon' | 'point' | 'circle' | 'rectangle' | 'vertical-line' | 'vertical-surface-line';
|
|
328
327
|
/**
|
|
329
|
-
*
|
|
328
|
+
* 绘制样式接口
|
|
330
329
|
*/
|
|
331
330
|
interface IDrawStyle {
|
|
332
331
|
/**
|
|
@@ -409,6 +408,7 @@ declare namespace types {
|
|
|
409
408
|
* 创建绘制工具
|
|
410
409
|
* @param viewer
|
|
411
410
|
*/
|
|
412
|
-
declare const createDrawHandler: (viewer: Viewer) => IDrawHandler;
|
|
411
|
+
declare const createDrawHandler: (viewer: Cesium.Viewer) => IDrawHandler;
|
|
413
412
|
|
|
414
|
-
export { types as Draw, createDrawHandler };
|
|
413
|
+
export { types as Draw, DrawEventType, createDrawHandler };
|
|
414
|
+
export type { DrawEvent, DrawShape, IDrawAttrInfo, IDrawEditEvent, IDrawHandler, IDrawHandlerEvent, IDrawOptions, IDrawStyle, IEventActions, IEventData, IMeasureOptions, IMeasureResult };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import*as i from"cesium";import{ScreenSpaceEventHandler as e,ScreenSpaceEventType as t,Cartesian3 as n,PrimitiveCollection as s,Color as o,PointPrimitiveCollection as a,PointPrimitive as r}from"cesium";import{calcArea as l,calcPoistionCenter as d,calcGeodesicDistance as p,calcSpaceDistance as c,BasePrimitive as h,makePositiontoLnglat as m,Tooltip as u,numberId as A}from"@ino-cesium/common";var v=(i=>(i.DRAW_ADD="drawAdd",i.DRAW_MOVE="drawMove",i.DRAW_PICK="drawPick",i.DRAW_DB_CLICK="drawDbClick",i.DRAW_RIGHT_CLICK="drawRightClick",i))(v||{}),w=Object.freeze({__proto__:null,DrawEventType:v});const g="cm",C="厘米",E="m",y="米",D="km",f="千米",P="公里",I="㎡",b="平方厘米",R="㎡",U="平方米",F="km²",M="平方千米",T="平方公里",x="亩",_="公顷",S={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},G=(i,e,t)=>e===t?i:i*B(t),k=(i,e,t)=>e===t?i:i*function(i){switch(i){case I:return 1e4;case R:return 1;case F:return 1e-6;case b:return 1e4;case U:return 1;case M:case T:return 1e-6;case x:return.0015;case _:return 1e-4;default:return 1}}(t),N=i=>S[i],B=i=>{switch(i){case E:return 1;case g:case C:return 100;case D:return.001;case y:return 1;case f:case P:return.001;default:return 1}};const O=(i,e,t,n,s)=>{t.push(...i.map((t,s)=>{const o=i[s+1];if(o){let i=e?p(t,o):c(t,o);return i=G(i,"m",n),{value:Number(i.toFixed(2)),unit:n,position:d([t,o]),positions:[t,o]}}return null}).filter(i=>i&&i.value>0))},V=i=>{if(2===i.length)return i;let[e,t]=i;return t||(t=N(e)),[e,t]},K={drawStart:{circle:"单击左键绘制圆的中心点,单机右键取消绘制。",rectangle:"单击左键绘制矩形左上角。",point:"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单击左键绘制第一个节点,单机右键取消绘制。"},drawMove:{circle:"单击左键确定圆的半径并结束绘制,单机右键取消绘制。",rectangle:"单击左键结束绘制,单机右键取消绘制。","vertical-line":"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单机左键绘制下一个节点,双击左键结束绘制,单机右键撤销上次绘制。"},pointEnter:"双击左键编辑节点。",drawEditMove:{default:"移动鼠标修改节点,单击左键确定修改,单机右键取消修改。"}},L={point:{color:"rgba(255,255,0,0.8)",pixelSize:8,outlineColor:"rgba(255,255,255,0.8)",outlineWidth:2,disableDepthTestDistance:Number.POSITIVE_INFINITY},polyline:{width:2,color:"rgba(81,255,0,0.8)",depthFailColor:"rgba(255,0,0,0.5)"},polygon:{color:"rgba(255,255,54,0.3)",depthFailColor:"rgba(255,0,0,0.3)"}};class H extends h{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(e){super(),this.drawData=e,this.positions=e.positions,this.linePrimitiveCollection=new i.PrimitiveCollection,this.setAppearance()}getGeometry(){const e=((e,t)=>{let n=e;if("vertical-surface-line"===t&&e.length>=1){const t=e[0],s=i.Cartographic.fromCartesian(t),o=i.Math.toDegrees(s.longitude),a=i.Math.toDegrees(s.latitude),r=0;n=[i.Cartesian3.fromDegrees(o,a,s.height),i.Cartesian3.fromDegrees(o,a,r)]}if("polygon"===t&&e.length>=2&&(n=[...e,e[0]]),"vertical-line"===t&&e.length>=2){const t=e[0],s=e[1],o=i.Cartographic.fromCartesian(t),a=i.Cartographic.fromCartesian(s).height,r=i.Math.toDegrees(o.longitude),l=i.Math.toDegrees(o.latitude);n=[i.Cartesian3.fromDegrees(r,l,o.height),i.Cartesian3.fromDegrees(r,l,a)]}if("circle"===t&&e.length>=2){const t=c(e[0],e[1]),s=i.Cartographic.fromCartesian(e[0]).height,o=new i.CircleOutlineGeometry({center:e[0],height:s,radius:t}),a=i.CircleOutlineGeometry.createGeometry(o);let r=[];if(a){const e=[].slice.call(a.attributes.position.values);r=i.Cartesian3.unpackArray(e),r.push(r[0]),n=r}}if("rectangle"===t&&e.length>=2){const t=i.Cartographic.fromCartesian(e[0]).height,s=i.Rectangle.fromCartesianArray(e),o=new i.RectangleOutlineGeometry({rectangle:s,height:t}),a=i.RectangleOutlineGeometry.createGeometry(o);let r=[];if(a){const e=[].slice.call(a.attributes.position.values);r=i.Cartesian3.unpackArray(e),r.push(r[0]),n=r}}return n})(this.positions,this.drawData.shape);if(this.drawData.shapePositions=e,"vertical-line"===this.drawData.shape||"vertical-surface-line"===this.drawData.shape){const i=this.drawData.pointPrimitives.get(1);i&&(i.position=this.drawData.shapePositions[1])}if(!(e.length<2))return this.drawData.clampToGround?new i.GroundPolylineGeometry({positions:e,width:L.polyline.width}):new i.PolylineGeometry({positions:e,width:L.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const e=this.getGeometry();if(!e)return;const t=new i.GeometryInstance({geometry:e,id:this.drawData.id});return e?this.drawData.clampToGround?new i.GroundPolylinePrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new i.Primitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new i.Primitive({geometryInstances:t,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(e){e?this.appearance=e:(this.appearance=new i.PolylineMaterialAppearance({material:new i.Material({fabric:{type:"Color",uniforms:{color:i.Color.fromCssColorString(L.polyline.color)}}})}),this.appearanceTran=new i.MaterialAppearance({material:new i.Material({fabric:{type:"Color",uniforms:{color:new i.Color(0,0,0,0)}}})}),this.depthFailAppearance=new i.PolylineMaterialAppearance({material:i.Material.fromType(i.Material.PolylineDashType,{color:i.Color.fromCssColorString(L.polyline.depthFailColor)})}))}}class Q extends h{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<3)return;const e=JSON.parse(JSON.stringify(this.positions)),t=[new i.GeometryInstance({geometry:new i.PolygonGeometry({polygonHierarchy:new i.PolygonHierarchy(e),perPositionHeight:!0}),id:`${this.drawData.id}-polygon`})];return this.drawData.clampToGround?new i.GroundPrimitive({geometryInstances:t,appearance:this.appearance,asynchronous:!1}):new i.Primitive({geometryInstances:t,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(L.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(L.polygon.depthFailColor)})})}}class j extends h{positions;drawData;depthFailAppearance;primitiveCollection;constructor(e){super(),this.drawData=e,this.positions=e.positions,this.primitiveCollection=new i.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return;this.primitiveCollection.removeAll();const e=JSON.parse(JSON.stringify(this.positions)),t=this.drawData.clampToGround?p(e[0],e[1]):c(e[0],e[1]);if(!t)return;const n=i.Cartographic.fromCartesian(e[0]).height,s=[new i.GeometryInstance({geometry:new i.CircleGeometry({center:e[0],height:n,radius:t}),id:`${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new i.GroundPrimitive({geometryInstances:s,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new i.Primitive({geometryInstances:s,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(L.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(L.polygon.depthFailColor)})})}}class W extends h{positions;drawData;depthFailAppearance;primitiveCollection;constructor(e){super(),this.drawData=e,this.positions=e.positions,this.primitiveCollection=new i.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return this.primitiveCollection;this.primitiveCollection.removeAll();const e=JSON.parse(JSON.stringify(this.positions));e.length=2;const t=i.Cartographic.fromCartesian(e[0]).height,n=i.Rectangle.fromCartesianArray(e),s=[new i.GeometryInstance({geometry:new i.RectangleGeometry({rectangle:n,height:t}),id:`${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new i.GroundPrimitive({geometryInstances:s,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new i.Primitive({geometryInstances:s,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(L.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(L.polygon.depthFailColor)})})}}class J extends h{drawData;labelCollection;measureDivs;cesiumWidget;viewer;constructor(e,t){super(),this.viewer=t,this.cesiumWidget=t._element.getElementsByClassName("cesium-widget")[0],this.drawData=e,this.labelCollection=new i.LabelCollection({scene:t.scene}),this.drawData.measureLabel&&this.setAppearance(),this.measureDivs=[],this.renderDivPosition()}getPrimitive(){return this.drawData.isEditing&&this.drawData.measureLabel?"point"===this.drawData.shape?(this.updatePointDivLabel(),this.labelCollection):this.drawData.shapePositions.length>=2?(this.updateUnit(this.drawData.measureUnit),this.labelCollection):void 0:this.labelCollection}updateUnit(i){if("point"===this.drawData.shape)return;this.drawData.measureUnit=i,this.clearAllDiv();const e=(i=>{let{shapePositions:e,positions:t,shape:n,clampToGround:s,measureUnit:o}=i;e||(e=t),s||(s=!1);const[a,r]=V(o),h=N(a);i.measureUnit=[a,r];const m=[];if("polyline"===n&&(O(t,s,m,a),m.push({value:0,unit:a,position:t[0],positions:t,prefixText:"起点"}),m.push({value:Number(m.reduce((i,e)=>i+e.value,0).toFixed(2)),unit:a,position:t[t.length-1],positions:t})),"vertical-line"!==n&&"vertical-surface-line"!==n||(O(e,s,m,a),m.length&&(m[0].position=e[0])),"polygon"===n){O(e,s,m,a);const i=k(l(e),h,r);m.push({value:Number(i.toFixed(2)),unit:r,position:d(e),positions:e})}if("rectangle"===n){O(e,s,m,a);const i=k(l(e),h,r);m.push({value:Number(i.toFixed(2)),unit:r,position:d(e),positions:e})}if("circle"===n){const i=s?p(t[0],t[1]):c(t[0],t[1]);m.push({value:Number(G(i,"m",a).toFixed(2)),unit:a,position:t[1],positions:t,prefixText:"半径"});const e=k(i*i*Math.PI,a,r);i>0&&m.push({value:Number(e.toFixed(2)),unit:r,position:t[0],positions:t})}return m})(this.drawData);this.drawData.measureResult=e,e.forEach((i,e)=>{let t="";i.prefixText?(t=`${i.prefixText}`,i.value&&(t+=`:${i.value}${i.unit}`)):t+=`${i.value}${i.unit}`;const n=this.createDiv(`measure-label-${this.drawData.id}-${e}`,t);this.measureDivs.push({position:i.position,divEle:n})})}updatePointDivLabel(){this.clearAllDiv(),this.drawData.positions.forEach(i=>{const e=m(i),t=this.createDiv(`measure-label-${this.drawData.id}-0`,`经度:${e.longitude.toFixed(6)}\n纬度:${e.latitude.toFixed(6)}\n高度:${e.height.toFixed(6)}`);this.measureDivs.push({position:i,divEle:t})})}renderDivPosition(){this.viewer.scene.postRender.addEventListener(()=>{this.measureDivs.forEach(i=>{const e=this.viewer.scene.cartesianToCanvasCoordinates(i.position);if(e){i.divEle.style.display="block";const t=i.divEle.getBoundingClientRect();i.divEle.style.left=e.x-t.width/2+"px",i.divEle.style.top=e.y-t.height+"px"}else i.divEle.style.display="none"})})}destroy(){super.destroy(),this.clearAllDiv()}setAppearance(){}clearAllDiv(){this.measureDivs.forEach(i=>{i.divEle.remove()}),this.measureDivs=[]}createDiv(i,e,t=48){const n=`\n <div style="\n background: rgba(0, 0, 0, 0.6);\n color: white;\n border-radius: 5px;\n padding: 0 10px 0 10px;\n font-size: 14px;\n white-space: nowrap;\n pointer-events: none;\n ">\n ${e.split("\n").map(i=>`\n <div style="height: 24px; line-height: 24px">\n ${i}\n </div>\n `).join(" ")}\n </div>\n <div style="\n height: ${t}px;\n width: 2px;\n background: rgba(0, 0, 0, 0.6);\n margin: auto;\n ">\n </div>\n `,s=document.createElement("div");return s.id=i,s.innerHTML=n,s.style.position="absolute",s.style.pointerEvents="none",s.className=`measure-label measure-label-${this.drawData.id}`,this.cesiumWidget.appendChild(s),s}}const z="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",Y="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",X="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",Z="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class q{static editUI;_editUi;viewer;_editUiPosition=null;_editPointPrimitive=null;_drawEditEvent;elementId="draw-edit-ui";constructor(i,e){this._editUi=null,this.viewer=i,this.create(),this.setVisible(!1),this.renderPosition(),this._drawEditEvent=e}create(){if(this._editUi=document.getElementById(this.elementId),this._editUi)return this._editUi;const i=document.createElement("DIV");i.id=this.elementId,i.className="draw-edit-ui";const e=document.createElement("DIV");e.title="点击移动节点";const t=document.createElement("img");t.src=Z,t.className="draw-edit-icon",e.appendChild(t),e.addEventListener("click",()=>{this._drawEditEvent.drawEditMove&&this._drawEditEvent.drawEditMove(this._editPointPrimitive)});const n=document.createElement("DIV");n.id="addPoint";const s=document.createElement("img");s.src=z,s.title="点击添加节点",s.className="draw-edit-icon",n.appendChild(s),n.addEventListener("click",()=>{this._drawEditEvent.drawEditAdd&&this._drawEditEvent.drawEditAdd(this._editPointPrimitive)});const o=document.createElement("DIV"),a=document.createElement("img");o.id="removePoint",a.src=X,a.title="点击删除节点",a.className="draw-edit-icon",o.appendChild(a),o.addEventListener("click",()=>{this._drawEditEvent.drawEditRemove&&this._drawEditEvent.drawEditRemove(this._editPointPrimitive)});const r=document.createElement("DIV"),l=document.createElement("img");l.src=Y,l.title="点击删除绘制",l.className="draw-edit-icon",r.appendChild(l),r.addEventListener("click",()=>{this._drawEditEvent.drawDelete&&this._drawEditEvent.drawDelete(this._editPointPrimitive)}),i.appendChild(e),i.appendChild(n),i.appendChild(o),i.appendChild(r),document.body.appendChild(i),this._editUi=i}setAddElementStatus(i){const e=document.getElementById("addPoint"),t=document.getElementById("removePoint");e&&(e.style.display=i?"block":"none"),t&&(t.style.display=i?"block":"none")}static createEditUi(i,e){return q.editUI||(q.editUI=new q(i,e)),q.editUI}showAt(i,e,t){this.setVisible(!0),this._editUiPosition=i,this._editPointPrimitive=e,this.setAddElementStatus(!["point","circle","rectangle","vertical-line"].includes(t))}setVisible(i){this._editUi&&(this._editUi.style.display=i?"flex":"none")}renderPosition(){this.viewer.scene.postRender.addEventListener(()=>{if(this._editUiPosition&&this._editUi&&"flex"===this._editUi.style.display){const i=this.viewer.scene.cartesianToCanvasCoordinates(this._editUiPosition);this._editUi.style.position="fixed",this._editUi.style.top=i.y-28+"px",this._editUi.style.left=`${i.x+15}px`}})}destroy(){q.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}const $=i=>{let l;const d=[];let p=new n(0,0,0);const c=[];let h,m,w,g;const C=L.point;let E=!1;((i,n)=>{const s=i.scene,o=new e(s.canvas);let a;i.cesiumWidget.screenSpaceEventHandler.removeInputAction(t.LEFT_DOUBLE_CLICK),o.setInputAction(e=>{const t=s.pickPosition(e.position),o=(new Date).getTime();if(a&&o-a<270){const s=i.scene.pick(e.position);return void n(v.DRAW_DB_CLICK,{position:t,pickPrimitive:s?.primitive,windowPosition:e.position})}n(v.DRAW_ADD,{position:t}),a=(new Date).getTime()},t.LEFT_CLICK),o.setInputAction(e=>{const t=i.scene.pick(e.endPosition),o=s.pickPosition(e.endPosition);n(v.DRAW_MOVE,{position:o,pickPrimitive:t?.primitive,windowPosition:e.endPosition}),t&&n(v.DRAW_PICK,{position:o,pickPrimitive:t?.primitive,windowPosition:e.endPosition})},t.MOUSE_MOVE),o.setInputAction(()=>{n(v.DRAW_RIGHT_CLICK,{})},t.RIGHT_CLICK)})(i,(i,e)=>{h&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(i)||h.isEditing)&&F[i]?.(e)});const y=new s;y.destroyPrimitives=!1,i.scene.primitives.add(y);const D=i=>{const e=c.findIndex(e=>e.id===i),t=c[e];t.positions.length=0,c.splice(e,1),O.drawRemove&&O.drawRemove(t),setTimeout(()=>{t.measurePrimitive?.clearAllDiv(),y.remove(t?.primitives)},300)},f=()=>{i._element.style.cursor="default",p=new n(0,0,0),h.positions.pop(),h.isDisAdd=!0,setTimeout(()=>{h.isEditing=!1,h.isDisAdd=!1,O.drawEnd&&O.drawEnd(h),h={}},300),m=void 0,w&&(h.pointPrimitives.remove(w),w=void 0),x()},P=i=>{const e=new H(i);i.primitives.add(e)},I=i=>{const e=new Q(i);i.primitives.add(e)},b=i=>{const e=new j(i);i.primitives.add(e)},R=i=>{const e=new W(i);i.primitives.add(e)},U=e=>{const t=new J(e,i);e.primitives.add(t),e.measurePrimitive=t,e.primitives.raiseToTop(t)},F={drawAdd:({position:i})=>{if(h.positions.push(i),E=!1,S.id)return O.drawEditEnd&&O.drawEditEnd(h),S.id="",void f();const e=B(i,h);O.drawAdd&&O.drawAdd(i,h),"point"!==h.shape&&"vertical-surface-line"!==h.shape||f(),"vertical-line"===h.shape&&h.positions.length<=2&&d.push(e.id),["circle","rectangle","vertical-line"].includes(h.shape)&&h.positions.length>2&&("vertical-line"===h.shape&&(e.position=w.position),f())},drawMove:({position:i,windowPosition:e})=>{if(E=!0,_(),i&&!h.isDisAdd&&h.isEditing){if(x(e),S.id)h.positions.splice(S.index,1,i),S.pointPrimitive.position=i;else{const e=h.positions.findIndex(i=>i.x===p.x&&i.y===p.y&&i.z===p.z);h.positions.push(i),-1!==e&&h.positions.splice(e,1),w&&h.pointPrimitives.remove(w),w=B(i,h)}p=i,O.drawMove&&O.drawMove(i,h)}},drawPick:({pickPrimitive:i,windowPosition:e})=>{h.isEditing||i instanceof r&&M(i,e)},drawDbClick:({position:i,windowPosition:e,pickPrimitive:t})=>{h.isEditing?f():!h.isEditing&&t&&T(i,e,t)},drawRightClick:()=>{h.isEditing?(()=>{if(S.id)return S.id="",h.isDisAdd=!0,h.isEditing=!0,S.originPosition?(h.positions.splice(S.index,1,S.originPosition),S.pointPrimitive.position=S.originPosition):h?.positions.splice(S.index,1),O.drawEditEnd&&O.drawEditEnd(h),setTimeout(()=>{h.isEditing=!1,h.isDisAdd=!1},300),p=new n(0,0,0),m=void 0,void x();if(["polyline","polygon"].includes(h.shape)&&h.positions.length>2){const i=E?2:1,e=h.pointPrimitives.get(h.positions.length-i);return h.pointPrimitives.remove(e),void h?.positions.splice(h.positions.length-i,1)}p=new n(0,0,0),m=void 0,D(h.id),h={},x()})():l.setVisible(!1)}},M=(e,t)=>{const n=e.id.split("-")[0],s=c.find(i=>i.id===n);d.includes(e.id)||s&&s.edit&&(i._element.style.cursor="pointer",e.pixelSize=1.5*C.pixelSize,e.outlineWidth=1.5*C.outlineWidth,m=e,g.showAt(t,K.pointEnter),g.setVisible(!0))},T=(i,e,t)=>{if(t instanceof r){if(d.includes(t.id))return;const e=t.id.split("-")[0],n=c.find(i=>i.id===e);if(!n)return;if(!n.edit)return;l.showAt(i,t,n.shape),O.drawEditStart&&O.drawEditStart(n)}},x=e=>{if(g)return e&&h.positions?void(S.id?g.showAt(e,K.drawEditMove[h.shape]||K.drawEditMove.default):h.positions.length>1?g.showAt(e,K.drawMove[h.shape]||K.drawMove.default):g.showAt(e,K.drawStart[h.shape]||K.drawStart.default)):(i._element.style.cursor="default",void g.setVisible(!1));i._element.style.cursor="default"},_=()=>{m&&(m.pixelSize=C.pixelSize,m.outlineWidth=C.outlineWidth,x())},S={},G={drawEditAdd:e=>{l.setVisible(!1);const{id:t,index:s,drawData:o}=k(e),a=new n(e.position.x,e.position.y,e.position.z);o?.positions.splice(s,0,a),h=o;const r=B(a,h);i._element.style.cursor="move",Object.assign(S,{id:t,index:s+1,pointPrimitive:r,originPosition:a}),h.isEditing=!0},drawEditMove:e=>{l.setVisible(!1),i._element.style.cursor="move";const{id:t,index:s,drawData:o}=k(e);h=o,Object.assign(S,{id:t,index:s,pointPrimitive:e,originPosition:new n(e.position.x,e.position.y,e.position.z)}),h.isEditing=!0},drawEditRemove:i=>{l.setVisible(!1);const{index:e,drawData:t}=k(i);t.isEditing=!0,t.isDisAdd=!0,t?.positions.splice(e,1),t?.pointPrimitives.remove(i),O.drawEditEnd&&O.drawEditEnd(t),setTimeout(()=>{t.isEditing=!1,t.isDisAdd=!1},300)},drawDelete:i=>{l.setVisible(!1);const{id:e}=k(i);D(e)}};l=q.createEditUi(i,G);const k=i=>{const e=i.id.split("-")[0],t=c.find(i=>i.id===e),n=t.positions.findIndex(e=>e.x===i.position.x&&e.y===i.position.y&&e.z===i.position.z);return{id:e,drawData:t,index:n}},N=i=>{const e=new s,t=new a;e.add(t);const n={id:A(),edit:i.edit||!1,measure:i.measure||!1,measureLabel:i.measureLabel||!1,disDepthFail:i.disDepthFail||!1,measureUnit:i.measureUnit||["m"],isEditing:!0,shape:i.shape,positions:[],clampToGround:i.clampToGround,pointPrimitives:t,primitives:e};return y.add(e),n},B=(i,e)=>e.pointPrimitives.add({id:`${e.id}-${A()}`,position:i,...C,color:o.fromCssColorString(C.color),outlineColor:o.fromCssColorString(C.outlineColor)}),O={};return{draw:e=>{i._element.style.cursor="crosshair",g=u.createToolTip(i),m=void 0;const t=N(e);h=t,O.drawStart&&O.drawStart(t),c.push(t),e.shape,"polyline"===e.shape&&P(t),"vertical-line"===e.shape&&(t.clampToGround=!1,P(t)),"vertical-surface-line"===e.shape&&(t.clampToGround=!1,P(t)),"polygon"===e.shape&&(I(t),P(t)),"circle"===e.shape&&(P(t),b(t)),"rectangle"===e.shape&&(P(t),R(t)),e.measure&&U(t),t.primitives.raiseToTop(t.pointPrimitives)},remove:i=>{D(i.id)},removeAll:()=>{c.forEach(i=>{i.measurePrimitive?.clearAllDiv()}),y.removeAll(),c.length=0},setDrawStyle:i=>{Object.assign(L.point,i.point),Object.assign(L.polyline,i.polyline),Object.assign(L.polygon,i.polygon)},Event:O,updateMeasureUnit:(i,e)=>{if(-1===c.findIndex(e=>e.id===i.id))throw new Error("绘制对象不存在");const t=i.primitives._primitives.find(i=>i instanceof J);t&&t.updateUnit(e)}}};export{w as Draw,$ as createDrawHandler};
|
|
1
|
+
import{calcArea as i,calcPoistionCenter as e,calcGeodesicDistance as t,calcSpaceDistance as n,BasePrimitive as s,makePositiontoLnglat as o,Tooltip as a,numberId as r}from"@ino-cesium/common";import*as l from"cesium";var d=(i=>(i.DRAW_ADD="drawAdd",i.DRAW_MOVE="drawMove",i.DRAW_PICK="drawPick",i.DRAW_DB_CLICK="drawDbClick",i.DRAW_RIGHT_CLICK="drawRightClick",i))(d||{}),p=Object.freeze({__proto__:null,DrawEventType:d});const c="cm",h="厘米",m="m",u="米",v="km",A="千米",w="公里",g="㎡",C="平方厘米",E="㎡",y="平方米",D="km²",f="平方千米",P="平方公里",I="亩",b="公顷",R={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},T=(i,e,t)=>e===t?i:i*S(t),U=(i,e,t)=>e===t?i:i*function(i){switch(i){case g:return 1e4;case E:return 1;case D:return 1e-6;case C:return 1e4;case y:return 1;case f:case P:return 1e-6;case I:return.0015;case b:return 1e-4;default:return 1}}(t),F=i=>R[i],S=i=>{switch(i){case m:return 1;case c:case h:return 100;case v:return.001;case u:return 1;case A:case w:return.001;default:return 1}};const M=(i,s,o,a,r)=>{o.push(...i.map((o,r)=>{const l=i[r+1];if(l){let i=s?t(o,l):n(o,l);return i=T(i,"m",a),{value:Number(i.toFixed(2)),unit:a,position:e([o,l]),positions:[o,l]}}return null}).filter(i=>i&&i.value>0))},x=i=>{if(2===i.length)return i;let[e,t]=i;return t||(t=F(e)),[e,t]},_={drawStart:{circle:"单击左键绘制圆的中心点,单机右键取消绘制。",rectangle:"单击左键绘制矩形左上角。",point:"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单击左键绘制第一个节点,单机右键取消绘制。"},drawMove:{circle:"单击左键确定圆的半径并结束绘制,单机右键取消绘制。",rectangle:"单击左键结束绘制,单机右键取消绘制。","vertical-line":"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单机左键绘制下一个节点,双击左键结束绘制,单机右键撤销上次绘制。"},pointEnter:"双击左键编辑节点。",drawEditMove:{default:"移动鼠标修改节点,单击左键确定修改,单机右键取消修改。"}},G={point:{color:"rgba(255,255,0,0.8)",pixelSize:8,outlineColor:"rgba(255,255,255,0.8)",outlineWidth:2,disableDepthTestDistance:Number.POSITIVE_INFINITY},polyline:{width:2,color:"rgba(81,255,0,0.8)",depthFailColor:"rgba(255,0,0,0.5)"},polygon:{color:"rgba(255,255,54,0.3)",depthFailColor:"rgba(255,0,0,0.3)"}};class k extends s{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new l.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=((i,e)=>{let t=i;if("vertical-surface-line"===e&&i.length>=1){const e=i[0],n=l.Cartographic.fromCartesian(e),s=l.Math.toDegrees(n.longitude),o=l.Math.toDegrees(n.latitude),a=0;t=[l.Cartesian3.fromDegrees(s,o,n.height),l.Cartesian3.fromDegrees(s,o,a)]}if("polygon"===e&&i.length>=2&&(t=[...i,i[0]]),"vertical-line"===e&&i.length>=2){const e=i[0],n=i[1],s=l.Cartographic.fromCartesian(e),o=l.Cartographic.fromCartesian(n).height,a=l.Math.toDegrees(s.longitude),r=l.Math.toDegrees(s.latitude);t=[l.Cartesian3.fromDegrees(a,r,s.height),l.Cartesian3.fromDegrees(a,r,o)]}if("circle"===e&&i.length>=2){const e=n(i[0],i[1]),s=l.Cartographic.fromCartesian(i[0]).height,o=new l.CircleOutlineGeometry({center:i[0],height:s,radius:e}),a=l.CircleOutlineGeometry.createGeometry(o);let r=[];if(a){const i=[].slice.call(a.attributes.position.values);r=l.Cartesian3.unpackArray(i),r.push(r[0]),t=r}}if("rectangle"===e&&i.length>=2){const e=l.Cartographic.fromCartesian(i[0]).height,n=l.Rectangle.fromCartesianArray(i),s=new l.RectangleOutlineGeometry({rectangle:n,height:e}),o=l.RectangleOutlineGeometry.createGeometry(s);let a=[];if(o){const i=[].slice.call(o.attributes.position.values);a=l.Cartesian3.unpackArray(i),a.push(a[0]),t=a}}return t})(this.positions,this.drawData.shape);if(this.drawData.shapePositions=i,"vertical-line"===this.drawData.shape||"vertical-surface-line"===this.drawData.shape){const i=this.drawData.pointPrimitives.get(1);i&&(i.position=this.drawData.shapePositions[1])}if(!(i.length<2))return this.drawData.clampToGround?new l.GroundPolylineGeometry({positions:i,width:G.polyline.width}):new l.PolylineGeometry({positions:i,width:G.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.getGeometry();if(!i)return;const e=new l.GeometryInstance({geometry:i,id:this.drawData.id});return i?this.drawData.clampToGround?new l.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new l.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new l.Primitive({geometryInstances:e,appearance:this.appearanceTran,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.linePrimitiveCollection):void 0}setAppearance(i){i?this.appearance=i:(this.appearance=new l.PolylineMaterialAppearance({material:new l.Material({fabric:{type:"Color",uniforms:{color:l.Color.fromCssColorString(G.polyline.color)}}})}),this.appearanceTran=new l.MaterialAppearance({material:new l.Material({fabric:{type:"Color",uniforms:{color:new l.Color(0,0,0,0)}}})}),this.depthFailAppearance=new l.PolylineMaterialAppearance({material:l.Material.fromType(l.Material.PolylineDashType,{color:l.Color.fromCssColorString(G.polyline.depthFailColor)})}))}}class N extends s{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<3)return;const i=JSON.parse(JSON.stringify(this.positions)),e=[new l.GeometryInstance({geometry:new l.PolygonGeometry({polygonHierarchy:new l.PolygonHierarchy(i),perPositionHeight:!0}),id:`${this.drawData.id}-polygon`})];return this.drawData.clampToGround?new l.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new l.Primitive({geometryInstances:e,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new l.MaterialAppearance({material:l.Material.fromType("Color",{color:l.Color.fromCssColorString(G.polygon.color)})}),this.depthFailAppearance=new l.MaterialAppearance({material:l.Material.fromType("Color",{color:l.Color.fromCssColorString(G.polygon.depthFailColor)})})}}class B extends s{positions;drawData;depthFailAppearance;primitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.primitiveCollection=new l.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return;this.primitiveCollection.removeAll();const i=JSON.parse(JSON.stringify(this.positions)),e=this.drawData.clampToGround?t(i[0],i[1]):n(i[0],i[1]);if(!e)return;const s=l.Cartographic.fromCartesian(i[0]).height,o=[new l.GeometryInstance({geometry:new l.CircleGeometry({center:i[0],height:s,radius:e}),id:`${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new l.GroundPrimitive({geometryInstances:o,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new l.Primitive({geometryInstances:o,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new l.MaterialAppearance({material:l.Material.fromType("Color",{color:l.Color.fromCssColorString(G.polygon.color)})}),this.depthFailAppearance=new l.MaterialAppearance({material:l.Material.fromType("Color",{color:l.Color.fromCssColorString(G.polygon.depthFailColor)})})}}class O extends s{positions;drawData;depthFailAppearance;primitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.primitiveCollection=new l.PrimitiveCollection,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.positions.length<2)return this.primitiveCollection;this.primitiveCollection.removeAll();const i=JSON.parse(JSON.stringify(this.positions));i.length=2;const e=l.Cartographic.fromCartesian(i[0]).height,t=l.Rectangle.fromCartesianArray(i),n=[new l.GeometryInstance({geometry:new l.RectangleGeometry({rectangle:t,height:e}),id:`${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new l.GroundPrimitive({geometryInstances:n,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new l.Primitive({geometryInstances:n,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new l.MaterialAppearance({material:l.Material.fromType("Color",{color:l.Color.fromCssColorString(G.polygon.color)})}),this.depthFailAppearance=new l.MaterialAppearance({material:l.Material.fromType("Color",{color:l.Color.fromCssColorString(G.polygon.depthFailColor)})})}}class V extends s{drawData;labelCollection;measureDivs;cesiumWidget;viewer;constructor(i,e){super(),this.viewer=e,this.cesiumWidget=e._element.getElementsByClassName("cesium-widget")[0],this.drawData=i,this.labelCollection=new l.LabelCollection({scene:e.scene}),this.drawData.measureLabel&&this.setAppearance(),this.measureDivs=[],this.renderDivPosition()}getPrimitive(){return this.drawData.isEditing&&this.drawData.measureLabel?"point"===this.drawData.shape?(this.updatePointDivLabel(),this.labelCollection):this.drawData.shapePositions.length>=2?(this.updateUnit(this.drawData.measureUnit),this.labelCollection):void 0:this.labelCollection}updateUnit(s){if("point"===this.drawData.shape)return;this.drawData.measureUnit=s,this.clearAllDiv();const o=(s=>{let{shapePositions:o,positions:a,shape:r,clampToGround:l,measureUnit:d}=s;o||(o=a),l||(l=!1);const[p,c]=x(d),h=F(p);s.measureUnit=[p,c];const m=[];if("polyline"===r&&(M(a,l,m,p),m.push({value:0,unit:p,position:a[0],positions:a,prefixText:"起点"}),m.push({value:Number(m.reduce((i,e)=>i+e.value,0).toFixed(2)),unit:p,position:a[a.length-1],positions:a})),"vertical-line"!==r&&"vertical-surface-line"!==r||(M(o,l,m,p),m.length&&(m[0].position=o[0])),"polygon"===r){M(o,l,m,p);const t=U(i(o),h,c);m.push({value:Number(t.toFixed(2)),unit:c,position:e(o),positions:o})}if("rectangle"===r){M(o,l,m,p);const t=U(i(o),h,c);m.push({value:Number(t.toFixed(2)),unit:c,position:e(o),positions:o})}if("circle"===r){const i=l?t(a[0],a[1]):n(a[0],a[1]);m.push({value:Number(T(i,"m",p).toFixed(2)),unit:p,position:a[1],positions:a,prefixText:"半径"});const e=U(i*i*Math.PI,p,c);i>0&&m.push({value:Number(e.toFixed(2)),unit:c,position:a[0],positions:a})}return m})(this.drawData);this.drawData.measureResult=o,o.forEach((i,e)=>{let t="";i.prefixText?(t=`${i.prefixText}`,i.value&&(t+=`:${i.value}${i.unit}`)):t+=`${i.value}${i.unit}`;const n=this.createDiv(`measure-label-${this.drawData.id}-${e}`,t);this.measureDivs.push({position:i.position,divEle:n})})}updatePointDivLabel(){this.clearAllDiv(),this.drawData.positions.forEach(i=>{const e=o(i),t=this.createDiv(`measure-label-${this.drawData.id}-0`,`经度:${e.longitude.toFixed(6)}\n纬度:${e.latitude.toFixed(6)}\n高度:${e.height.toFixed(6)}`);this.measureDivs.push({position:i,divEle:t})})}renderDivPosition(){this.viewer.scene.postRender.addEventListener(()=>{this.measureDivs.forEach(i=>{const e=this.viewer.scene.cartesianToCanvasCoordinates(i.position);if(e){i.divEle.style.display="block";const t=i.divEle.getBoundingClientRect();i.divEle.style.left=e.x-t.width/2+"px",i.divEle.style.top=e.y-t.height+"px"}else i.divEle.style.display="none"})})}destroy(){super.destroy(),this.clearAllDiv()}setAppearance(){}clearAllDiv(){this.measureDivs.forEach(i=>{i.divEle.remove()}),this.measureDivs=[]}createDiv(i,e,t=48){const n=`\n <div style="\n background: rgba(0, 0, 0, 0.6);\n color: white;\n border-radius: 5px;\n padding: 0 10px 0 10px;\n font-size: 14px;\n white-space: nowrap;\n pointer-events: none;\n ">\n ${e.split("\n").map(i=>`\n <div style="height: 24px; line-height: 24px">\n ${i}\n </div>\n `).join(" ")}\n </div>\n <div style="\n height: ${t}px;\n width: 2px;\n background: rgba(0, 0, 0, 0.6);\n margin: auto;\n ">\n </div>\n `,s=document.createElement("div");return s.id=i,s.innerHTML=n,s.style.position="absolute",s.style.pointerEvents="none",s.className=`measure-label measure-label-${this.drawData.id}`,this.cesiumWidget.appendChild(s),s}}const K="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",L="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",H="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",Q="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class j{static editUI;_editUi;viewer;_editUiPosition=null;_editPointPrimitive=null;_drawEditEvent;elementId="draw-edit-ui";constructor(i,e){this._editUi=null,this.viewer=i,this.create(),this.setVisible(!1),this.renderPosition(),this._drawEditEvent=e}create(){if(this._editUi=document.getElementById(this.elementId),this._editUi)return this._editUi;const i=document.createElement("DIV");i.id=this.elementId,i.className="draw-edit-ui";const e=document.createElement("DIV");e.title="点击移动节点";const t=document.createElement("img");t.src=Q,t.className="draw-edit-icon",e.appendChild(t),e.addEventListener("click",()=>{this._drawEditEvent.drawEditMove&&this._drawEditEvent.drawEditMove(this._editPointPrimitive)});const n=document.createElement("DIV");n.id="addPoint";const s=document.createElement("img");s.src=K,s.title="点击添加节点",s.className="draw-edit-icon",n.appendChild(s),n.addEventListener("click",()=>{this._drawEditEvent.drawEditAdd&&this._drawEditEvent.drawEditAdd(this._editPointPrimitive)});const o=document.createElement("DIV"),a=document.createElement("img");o.id="removePoint",a.src=H,a.title="点击删除节点",a.className="draw-edit-icon",o.appendChild(a),o.addEventListener("click",()=>{this._drawEditEvent.drawEditRemove&&this._drawEditEvent.drawEditRemove(this._editPointPrimitive)});const r=document.createElement("DIV"),l=document.createElement("img");l.src=L,l.title="点击删除绘制",l.className="draw-edit-icon",r.appendChild(l),r.addEventListener("click",()=>{this._drawEditEvent.drawDelete&&this._drawEditEvent.drawDelete(this._editPointPrimitive)}),i.appendChild(e),i.appendChild(n),i.appendChild(o),i.appendChild(r),document.body.appendChild(i),this._editUi=i}setAddElementStatus(i){const e=document.getElementById("addPoint"),t=document.getElementById("removePoint");e&&(e.style.display=i?"block":"none"),t&&(t.style.display=i?"block":"none")}static createEditUi(i,e){return j.editUI||(j.editUI=new j(i,e)),j.editUI}showAt(i,e,t){this.setVisible(!0),this._editUiPosition=i,this._editPointPrimitive=e,this.setAddElementStatus(!["point","circle","rectangle","vertical-line"].includes(t))}setVisible(i){this._editUi&&(this._editUi.style.display=i?"flex":"none")}renderPosition(){this.viewer.scene.postRender.addEventListener(()=>{if(this._editUiPosition&&this._editUi&&"flex"===this._editUi.style.display){const i=this.viewer.scene.cartesianToCanvasCoordinates(this._editUiPosition);this._editUi.style.position="fixed",this._editUi.style.top=i.y-28+"px",this._editUi.style.left=`${i.x+15}px`}})}destroy(){j.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}const W=i=>{let e;const t=[];let n=new l.Cartesian3(0,0,0);const s=[];let o,p,c,h;const m=G.point;let u=!1;((i,e)=>{const t=i.scene,n=new l.ScreenSpaceEventHandler(t.canvas);let s;i.cesiumWidget.screenSpaceEventHandler.removeInputAction(l.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),n.setInputAction(n=>{const o=t.pickPosition(n.position),a=(new Date).getTime();if(s&&a-s<270){const t=i.scene.pick(n.position);return void e(d.DRAW_DB_CLICK,{position:o,pickPrimitive:t?.primitive,windowPosition:n.position})}e(d.DRAW_ADD,{position:o}),s=(new Date).getTime()},l.ScreenSpaceEventType.LEFT_CLICK),n.setInputAction(n=>{const s=i.scene.pick(n.endPosition),o=t.pickPosition(n.endPosition);e(d.DRAW_MOVE,{position:o,pickPrimitive:s?.primitive,windowPosition:n.endPosition}),s&&e(d.DRAW_PICK,{position:o,pickPrimitive:s?.primitive,windowPosition:n.endPosition})},l.ScreenSpaceEventType.MOUSE_MOVE),n.setInputAction(()=>{e(d.DRAW_RIGHT_CLICK,{})},l.ScreenSpaceEventType.RIGHT_CLICK)})(i,(i,e)=>{o&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(i)||o.isEditing)&&f[i]?.(e)});const v=new l.PrimitiveCollection;v.destroyPrimitives=!1,i.scene.primitives.add(v);const A=i=>{const e=s.findIndex(e=>e.id===i),t=s[e];t.positions.length=0,s.splice(e,1),x.drawRemove&&x.drawRemove(t),setTimeout(()=>{t.measurePrimitive?.clearAllDiv(),v.remove(t?.primitives)},300)},w=()=>{i._element.style.cursor="default",n=new l.Cartesian3(0,0,0),o.positions.pop(),o.isDisAdd=!0,setTimeout(()=>{o.isEditing=!1,o.isDisAdd=!1,x.drawEnd&&x.drawEnd(o),o={}},300),p=void 0,c&&(o.pointPrimitives.remove(c),c=void 0),b()},g=i=>{const e=new k(i);i.primitives.add(e)},C=i=>{const e=new N(i);i.primitives.add(e)},E=i=>{const e=new B(i);i.primitives.add(e)},y=i=>{const e=new O(i);i.primitives.add(e)},D=e=>{const t=new V(e,i);e.primitives.add(t),e.measurePrimitive=t,e.primitives.raiseToTop(t)},f={drawAdd:({position:i})=>{if(o.positions.push(i),u=!1,T.id)return x.drawEditEnd&&x.drawEditEnd(o),T.id="",void w();const e=M(i,o);x.drawAdd&&x.drawAdd(i,o),"point"!==o.shape&&"vertical-surface-line"!==o.shape||w(),"vertical-line"===o.shape&&o.positions.length<=2&&t.push(e.id),["circle","rectangle","vertical-line"].includes(o.shape)&&o.positions.length>2&&("vertical-line"===o.shape&&(e.position=c.position),w())},drawMove:({position:i,windowPosition:e})=>{if(u=!0,R(),i&&!o.isDisAdd&&o.isEditing){if(b(e),T.id)o.positions.splice(T.index,1,i),T.pointPrimitive.position=i;else{const e=o.positions.findIndex(i=>i.x===n.x&&i.y===n.y&&i.z===n.z);o.positions.push(i),-1!==e&&o.positions.splice(e,1),c&&o.pointPrimitives.remove(c),c=M(i,o)}n=i,x.drawMove&&x.drawMove(i,o)}},drawPick:({pickPrimitive:i,windowPosition:e})=>{o.isEditing||i instanceof l.PointPrimitive&&P(i,e)},drawDbClick:({position:i,windowPosition:e,pickPrimitive:t})=>{o.isEditing?w():!o.isEditing&&t&&I(i,e,t)},drawRightClick:()=>{o.isEditing?(()=>{if(T.id)return T.id="",o.isDisAdd=!0,o.isEditing=!0,T.originPosition?(o.positions.splice(T.index,1,T.originPosition),T.pointPrimitive.position=T.originPosition):o?.positions.splice(T.index,1),x.drawEditEnd&&x.drawEditEnd(o),setTimeout(()=>{o.isEditing=!1,o.isDisAdd=!1},300),n=new l.Cartesian3(0,0,0),p=void 0,void b();if(["polyline","polygon"].includes(o.shape)&&o.positions.length>2){const i=u?2:1,e=o.pointPrimitives.get(o.positions.length-i);return o.pointPrimitives.remove(e),void o?.positions.splice(o.positions.length-i,1)}n=new l.Cartesian3(0,0,0),p=void 0,A(o.id),o={},b()})():e.setVisible(!1)}},P=(e,n)=>{const o=e.id.split("-")[0],a=s.find(i=>i.id===o);t.includes(e.id)||a&&a.edit&&(i._element.style.cursor="pointer",e.pixelSize=1.5*m.pixelSize,e.outlineWidth=1.5*m.outlineWidth,p=e,h.showAt(n,_.pointEnter),h.setVisible(!0))},I=(i,n,o)=>{if(o instanceof l.PointPrimitive){if(t.includes(o.id))return;const n=o.id.split("-")[0],a=s.find(i=>i.id===n);if(!a)return;if(!a.edit)return;e.showAt(i,o,a.shape),x.drawEditStart&&x.drawEditStart(a)}},b=e=>{if(h)return e&&o.positions?void(T.id?h.showAt(e,_.drawEditMove[o.shape]||_.drawEditMove.default):o.positions.length>1?h.showAt(e,_.drawMove[o.shape]||_.drawMove.default):h.showAt(e,_.drawStart[o.shape]||_.drawStart.default)):(i._element.style.cursor="default",void h.setVisible(!1));i._element.style.cursor="default"},R=()=>{p&&(p.pixelSize=m.pixelSize,p.outlineWidth=m.outlineWidth,b())},T={},U={drawEditAdd:t=>{e.setVisible(!1);const{id:n,index:s,drawData:a}=F(t),r=new l.Cartesian3(t.position.x,t.position.y,t.position.z);a?.positions.splice(s,0,r),o=a;const d=M(r,o);i._element.style.cursor="move",Object.assign(T,{id:n,index:s+1,pointPrimitive:d,originPosition:r}),o.isEditing=!0},drawEditMove:t=>{e.setVisible(!1),i._element.style.cursor="move";const{id:n,index:s,drawData:a}=F(t);o=a,Object.assign(T,{id:n,index:s,pointPrimitive:t,originPosition:new l.Cartesian3(t.position.x,t.position.y,t.position.z)}),o.isEditing=!0},drawEditRemove:i=>{e.setVisible(!1);const{index:t,drawData:n}=F(i);n.isEditing=!0,n.isDisAdd=!0,n?.positions.splice(t,1),n?.pointPrimitives.remove(i),x.drawEditEnd&&x.drawEditEnd(n),setTimeout(()=>{n.isEditing=!1,n.isDisAdd=!1},300)},drawDelete:i=>{e.setVisible(!1);const{id:t}=F(i);A(t)}};e=j.createEditUi(i,U);const F=i=>{const e=i.id.split("-")[0],t=s.find(i=>i.id===e),n=t.positions.findIndex(e=>e.x===i.position.x&&e.y===i.position.y&&e.z===i.position.z);return{id:e,drawData:t,index:n}},S=i=>{const e=new l.PrimitiveCollection,t=new l.PointPrimitiveCollection;e.add(t);const n={id:r(),edit:i.edit||!1,measure:i.measure||!1,measureLabel:i.measureLabel||!1,disDepthFail:i.disDepthFail||!1,measureUnit:i.measureUnit||["m"],isEditing:!0,shape:i.shape,positions:[],clampToGround:i.clampToGround,pointPrimitives:t,primitives:e};return v.add(e),n},M=(i,e)=>e.pointPrimitives.add({id:`${e.id}-${r()}`,position:i,...m,color:l.Color.fromCssColorString(m.color),outlineColor:l.Color.fromCssColorString(m.outlineColor)}),x={};return{draw:e=>{i._element.style.cursor="crosshair",h=a.createToolTip(i),p=void 0;const t=S(e);o=t,x.drawStart&&x.drawStart(t),s.push(t),e.shape,"polyline"===e.shape&&g(t),"vertical-line"===e.shape&&(t.clampToGround=!1,g(t)),"vertical-surface-line"===e.shape&&(t.clampToGround=!1,g(t)),"polygon"===e.shape&&(C(t),g(t)),"circle"===e.shape&&(g(t),E(t)),"rectangle"===e.shape&&(g(t),y(t)),e.measure&&D(t),t.primitives.raiseToTop(t.pointPrimitives)},remove:i=>{A(i.id)},removeAll:()=>{s.forEach(i=>{i.measurePrimitive?.clearAllDiv()}),v.removeAll(),s.length=0},setDrawStyle:i=>{Object.assign(G.point,i.point),Object.assign(G.polyline,i.polyline),Object.assign(G.polygon,i.polygon)},Event:x,updateMeasureUnit:(i,e)=>{if(-1===s.findIndex(e=>e.id===i.id))throw new Error("绘制对象不存在");const t=i.primitives._primitives.find(i=>i instanceof V);t&&t.updateUnit(e)}}};export{p as Draw,d as DrawEventType,W as createDrawHandler};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ino-cesium/draw",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.15",
|
|
5
5
|
"author": "koino",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"cesium",
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
"ino-cesium-draw"
|
|
10
10
|
],
|
|
11
11
|
"exports": {
|
|
12
|
-
".": "./
|
|
12
|
+
".": "./src/index.ts"
|
|
13
13
|
},
|
|
14
14
|
"typesVersions": {
|
|
15
15
|
"*": {
|
|
16
16
|
"*": [
|
|
17
17
|
"./src/*",
|
|
18
|
-
"./dist
|
|
18
|
+
"./dist/index.d.ts"
|
|
19
19
|
]
|
|
20
20
|
}
|
|
21
21
|
},
|
|
@@ -32,10 +32,9 @@
|
|
|
32
32
|
"html2canvas": "^1.4.1"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"
|
|
36
|
-
"
|
|
35
|
+
"html2canvas": "^1.4.1",
|
|
36
|
+
"@ino-cesium/common": "0.0.15"
|
|
37
37
|
},
|
|
38
|
-
"types": "./dist/index.d.ts",
|
|
39
38
|
"scripts": {
|
|
40
39
|
"build": "rimraf dist && rollup -c",
|
|
41
40
|
"clean": "rimraf dist",
|