@ino-cesium/draw 0.0.16-beta.4 → 0.0.16

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 CHANGED
@@ -201,6 +201,10 @@ interface IDrawHandler {
201
201
  * 移除所有方法
202
202
  */
203
203
  removeAll: () => void;
204
+ /**
205
+ * 移除正在绘制或编辑的操作
206
+ */
207
+ removeEditing: () => void;
204
208
  /**
205
209
  * 更新测量单位方法
206
210
  * @param drawData 绘制属性信息
@@ -216,11 +220,23 @@ interface IDrawHandler {
216
220
  * 事件处理器
217
221
  */
218
222
  Event: IDrawHandlerEvent;
223
+ /**
224
+ * 回显某个绘制数据
225
+ */
226
+ reShowDrawData: (reShowOptions: IReShowOptions) => void;
227
+ /**
228
+ * 回显多个绘制数据
229
+ */
230
+ reShowDrawDatas: (reShowOptions: IReShowOptions[]) => void;
219
231
  }
220
232
  /**
221
233
  * 绘制选项接口
222
234
  */
223
235
  interface IDrawOptions {
236
+ /**
237
+ * 绘制id, 如果为空则自动生成
238
+ */
239
+ id?: string;
224
240
  /**
225
241
  * 绘制形状
226
242
  */
@@ -254,6 +270,34 @@ interface IDrawOptions {
254
270
  */
255
271
  drawStyle?: Common.DeepPartial<IDrawStyle>;
256
272
  }
273
+ interface IReShowOptions {
274
+ id: string;
275
+ positions: Cesium.Cartesian3[];
276
+ /**
277
+ * 绘制形状
278
+ */
279
+ shape: DrawShape;
280
+ /**
281
+ * 是否可编辑
282
+ */
283
+ edit?: boolean;
284
+ /**
285
+ * 是否测量
286
+ */
287
+ measure?: boolean;
288
+ /**
289
+ * 测量单位数组
290
+ */
291
+ measureUnit?: string[];
292
+ /**
293
+ * 是否显示测量标签
294
+ */
295
+ measureLabel?: boolean;
296
+ /**
297
+ * 是否贴地
298
+ */
299
+ clampToGround?: boolean;
300
+ }
257
301
  /**
258
302
  * 测量选项接口
259
303
  */
@@ -324,7 +368,7 @@ interface IMeasureResult {
324
368
  /**
325
369
  * 绘制形状类型
326
370
  */
327
- type DrawShape = 'polyline' | 'polyline-arrow' | 'polygon' | 'point' | 'circle' | 'rectangle' | 'vertical-line' | 'vertical-surface-line' | 'curve' | 'curve-arrow';
371
+ type DrawShape = 'polyline' | 'polyline-arrow' | 'polygon' | 'point' | 'circle' | 'rectangle' | 'vertical-line' | 'vertical-surface-line' | 'curve' | 'curve-arrow' | string;
328
372
  /**
329
373
  * 绘制样式接口
330
374
  */
@@ -400,9 +444,10 @@ type types_IEventActions = IEventActions;
400
444
  type types_IEventData = IEventData;
401
445
  type types_IMeasureOptions = IMeasureOptions;
402
446
  type types_IMeasureResult = IMeasureResult;
447
+ type types_IReShowOptions = IReShowOptions;
403
448
  declare namespace types {
404
449
  export { types_DrawEventType as DrawEventType };
405
- export type { types_DrawEvent as DrawEvent, types_DrawShape as DrawShape, types_IDrawAttrInfo as IDrawAttrInfo, types_IDrawEditEvent as IDrawEditEvent, types_IDrawHandler as IDrawHandler, types_IDrawHandlerEvent as IDrawHandlerEvent, types_IDrawOptions as IDrawOptions, types_IDrawStyle as IDrawStyle, types_IEventActions as IEventActions, types_IEventData as IEventData, types_IMeasureOptions as IMeasureOptions, types_IMeasureResult as IMeasureResult };
450
+ export type { types_DrawEvent as DrawEvent, types_DrawShape as DrawShape, types_IDrawAttrInfo as IDrawAttrInfo, types_IDrawEditEvent as IDrawEditEvent, types_IDrawHandler as IDrawHandler, types_IDrawHandlerEvent as IDrawHandlerEvent, types_IDrawOptions as IDrawOptions, types_IDrawStyle as IDrawStyle, types_IEventActions as IEventActions, types_IEventData as IEventData, types_IMeasureOptions as IMeasureOptions, types_IMeasureResult as IMeasureResult, types_IReShowOptions as IReShowOptions };
406
451
  }
407
452
 
408
453
  declare const DrawStyle: IDrawStyle;
@@ -429,4 +474,4 @@ interface IAddDrawActionsOptions {
429
474
  declare const createDrawHandler: (viewer: Cesium.Viewer) => IDrawHandler;
430
475
 
431
476
  export { types as Draw, DrawEventType, DrawStyle, addDrawActions, createDrawHandler };
432
- export type { DrawEvent, DrawShape, IDrawAttrInfo, IDrawEditEvent, IDrawHandler, IDrawHandlerEvent, IDrawOptions, IDrawStyle, IEventActions, IEventData, IMeasureOptions, IMeasureResult };
477
+ export type { DrawEvent, DrawShape, IDrawAttrInfo, IDrawEditEvent, IDrawHandler, IDrawHandlerEvent, IDrawOptions, IDrawStyle, IEventActions, IEventData, IMeasureOptions, IMeasureResult, IReShowOptions };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import*as i from"cesium";import{calcArea as e,calcPoistionCenter as t,calcGeodesicDistance as a,calcSpaceDistance as n,makePositiontoLnglat as o,makeLnglatToPosition as s,calcGeodesicDistances as r,BasePrimitive as l,Tooltip as d,numberId as p}from"@ino-cesium/common";var c=(i=>(i.DRAW_ADD="drawAdd",i.DRAW_MOVE="drawMove",i.DRAW_PICK="drawPick",i.DRAW_DB_CLICK="drawDbClick",i.DRAW_RIGHT_CLICK="drawRightClick",i))(c||{}),h=Object.freeze({__proto__:null,DrawEventType:c});const m={drawStart:{circle:"单击左键绘制圆的中心点,单机右键取消绘制。",rectangle:"单击左键绘制矩形左上角。",point:"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单击左键绘制第一个节点,单机右键取消绘制。"},drawMove:{circle:"单击左键确定圆的半径并结束绘制,单机右键取消绘制。",rectangle:"单击左键结束绘制,单机右键取消绘制。","vertical-line":"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单机左键绘制下一个节点,双击左键结束绘制,单机右键撤销上次绘制。"},drawEnd:"单击左键结束绘制,单机右键取消上次绘制",pointEnter:"双击左键编辑节点。",drawEditMove:{default:"移动鼠标修改节点,单击左键确定修改,单机右键取消修改。"}},u={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)"}},w="cm",v="厘米",A="m",g="米",C="km",y="千米",P="公里",E="㎡",D="平方厘米",f="㎡",S="平方米",I="km²",M="平方千米",R="平方公里",T="亩",F="公顷",G={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},b=(i,e,t)=>e===t?i:i*U(t),x=(i,e,t)=>e===t?i:i*function(i){switch(i){case E:return 1e4;case f:return 1;case I:return 1e-6;case D:return 1e4;case S:return 1;case M:case R:return 1e-6;case T:return.0015;case F:return 1e-4;default:return 1}}(t),_=i=>G[i],U=i=>{switch(i){case A:return 1;case w:case v:return 100;case C:return.001;case g:return 1;case y:case P:return.001;default:return 1}};const k=(e,t)=>{let a=e;if("vertical-surface-line"===t&&e.length>=1){const t=e[0],n=i.Cartographic.fromCartesian(t),o=i.Math.toDegrees(n.longitude),s=i.Math.toDegrees(n.latitude),r=0;a=[i.Cartesian3.fromDegrees(o,s,n.height),i.Cartesian3.fromDegrees(o,s,r)]}if("vertical-line"===t&&e.length>=2){const t=e[0],n=e[1],r=o(t),l=o(n);let d=r,p=l;r.height>l.height&&(d=l,p=r),console.log(d.longitude,d.latitude,p.height);const c=s(new i.Cartographic(d.longitude,d.latitude,p.height));a=[s(d),c,s(p),s(d)]}return t.startsWith("curve")&&e.length>2&&(a=O(e)),a},N=(i,e,o,s,r)=>{o.push(...i.map((o,r)=>{const l=i[r+1];if(l){let i=e?a(o,l):n(o,l);return i=b(i,"m",s),{value:Number(i.toFixed(2)),unit:s,position:t([o,l]),positions:[o,l]}}return null}).filter(i=>i&&i.value>0))},B=i=>{if(2===i.length)return i;let[e,t]=i;return t||(t=_(e)),[e,t]},O=e=>{const t=e.length,a=r(e),n=Math.floor(a/5),o=[];for(let i=0;i<t;i++)o.push(1.5*i);const s=new i.CatmullRomSpline({points:e,times:o}),l=[],d=o[0],p=o[o.length-1];for(let e=0;e<n;e++){const t=e/(n-1),a=i.Math.lerp(d,p,t),o=s.evaluate(a);l.push(o)}return l},V=(e,t=1e3)=>{if(e.length<2)return console.warn("至少需要2个点才能生成箭头"),[];const a=e[e.length-1],n=e[e.length-2],r=o(a),l=o(n),d=r.height,p=r.longitude-l.longitude,c=r.latitude-l.latitude,h=Math.sqrt(p**2+c**2);if(h<1e-12)return console.warn("最后两点经纬度重合,无法生成箭头"),[];const m=p/h,u=c/h,w=(e=>{const t=i.Math.toRadians(.5),a=s(e),n=s(new i.Cartographic(e.longitude+t,e.latitude,e.height)),o=2*i.Cartesian3.distance(a,n),r=s(new i.Cartographic(e.longitude,e.latitude+t,e.height));return{lon:o,lat:2*i.Cartesian3.distance(a,r)}})(r),v=t/w.lon*i.Math.RADIANS_PER_DEGREE,A=t/w.lat*i.Math.RADIANS_PER_DEGREE,g=Math.PI/6,C=t*Math.tan(g),y=C/w.lon*i.Math.RADIANS_PER_DEGREE,P=C/w.lat*i.Math.RADIANS_PER_DEGREE,E=r.longitude-m*v-u*y,D=r.latitude-u*A+m*P,f=r.longitude-m*v+u*y,S=r.latitude-u*A-m*P,I=s(new i.Cartographic(E,D,d)),M=s(new i.Cartographic(f,S,d));return[I,s(new i.Cartographic(r.longitude,r.latitude,d)),M]};class K extends l{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=k(this.positions,this.drawData.shape);if(this.drawData.shapePositions=e,"vertical-surface-line"===this.drawData.shape){const i=this.drawData.pointPrimitives.get(1);i&&(i.position=this.drawData.shapePositions[1])}if(this.setShapePositions(e),!(e.length<2))return this.drawData.clampToGround?new i.GroundPolylineGeometry({positions:e,width:u.polyline.width}):new i.PolylineGeometry({positions:e,width:u.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:`draw-${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(u.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(u.polyline.depthFailColor)})}))}}class L extends l{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const e=JSON.parse(JSON.stringify(this.positions));if(this.calcShapePositions(e),this.positions.length<3)return;const t=[new i.GeometryInstance({geometry:new i.PolygonGeometry({polygonHierarchy:new i.PolygonHierarchy(e),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];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(u.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(u.polygon.depthFailColor)})})}calcShapePositions(i){const e=[...i,i[0]];this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class H extends l{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(),this.calcShapePositions(this.positions);const e=JSON.parse(JSON.stringify(this.positions)),t=this.drawData.clampToGround?a(e[0],e[1]):n(e[0],e[1]);if(!t)return;const o=i.Cartographic.fromCartesian(e[0]).height,s=[new i.GeometryInstance({geometry:new i.CircleGeometry({center:e[0],height:o,radius:t}),id:`draw-${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(u.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(u.polygon.depthFailColor)})})}calcShapePositions(e){let t=e;const a=n(e[0],e[1]),o=i.Cartographic.fromCartesian(e[0]).height,s=new i.CircleOutlineGeometry({center:e[0],height:o,radius:a}),r=i.CircleOutlineGeometry.createGeometry(s);let l=[];if(r){const e=[].slice.call(r.attributes.position.values);l=i.Cartesian3.unpackArray(e),l.push(l[0]),t=l}this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class Q extends l{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,this.calcShapePositions(e);const t=i.Cartographic.fromCartesian(e[0]).height,a=i.Rectangle.fromCartesianArray(e),n=[new i.GeometryInstance({geometry:new i.RectangleGeometry({rectangle:a,height:t}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new i.GroundPrimitive({geometryInstances:n,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new i.Primitive({geometryInstances:n,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(u.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(u.polygon.depthFailColor)})})}calcShapePositions(e){let t=e;const a=i.Cartographic.fromCartesian(e[0]).height,n=i.Rectangle.fromCartesianArray(e),o=new i.RectangleOutlineGeometry({rectangle:n,height:a}),s=i.RectangleOutlineGeometry.createGeometry(o);let r=[];if(s){const e=[].slice.call(s.attributes.position.values);r=i.Cartesian3.unpackArray(e),r.push(r[0]),t=r}this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class j extends l{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 o=(i=>{let{shapePositions:o,positions:s,shape:r,clampToGround:l,measureUnit:d}=i;o||(o=s),l||(l=!1);const[p,c]=B(d),h=_(p);i.measureUnit=[p,c];const m=[];if("polyline"===r&&(N(s,l,m,p),m.push({value:0,unit:p,position:s[0],positions:s,prefixText:"起点"}),m.push({value:Number(m.reduce((i,e)=>i+e.value,0).toFixed(2)),unit:p,position:s[s.length-1],positions:s})),"vertical-surface-line"===r&&N(o,l,m,p),"vertical-line"===r&&(N(o,l,m,p),m.forEach((i,e)=>{0===e&&(i.prefixText="高度"),1===e&&(i.prefixText="水平距离"),2===e&&(i.prefixText="空间距离")})),"polygon"===r){N(o,l,m,p);const i=x(e(o),h,c);m.push({value:Number(i.toFixed(2)),unit:c,position:t(o),positions:o})}if("rectangle"===r){N(o,l,m,p);const i=x(e(o),h,c);m.push({value:Number(i.toFixed(2)),unit:c,position:t(o),positions:o})}if("circle"===r){const i=l?a(s[0],s[1]):n(s[0],s[1]);m.push({value:Number(b(i,"m",p).toFixed(2)),unit:p,position:s[1],positions:s,prefixText:"半径"});const e=x(i*i*Math.PI,p,c);i>0&&m.push({value:Number(e.toFixed(2)),unit:c,position:s[0],positions:s})}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 a=this.createDiv(`measure-label-${this.drawData.id}-${e}`,t);this.measureDivs.push({position:i.position,divEle:a})})}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 a=`\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 `,n=document.createElement("div");return n.id=i,n.innerHTML=a,n.style.position="absolute",n.style.pointerEvents="none",n.className=`measure-label measure-label-${this.drawData.id}`,this.cesiumWidget.appendChild(n),n}calcShapePositions(i){this.setShapePositions(i)}}class W extends l{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;viewer;constructor(e,t){super(),this.drawData=e,this.positions=e.positions,this.linePrimitiveCollection=new i.PrimitiveCollection,this.viewer=t,this.setAppearance()}getGeometry(){if(this.positions.length<2)return;const e=this.viewer.camera.position,t=.02*i.Cartographic.fromCartesian(e).height;let a=this.positions;return a=k(a,this.drawData.shape),a=V(a,t),this.calcShapePositions(a),a.length<2?void 0:(this.setShapePositions(a),this.drawData.clampToGround?new i.GroundPolylineGeometry({positions:a,width:u.polyline.width}):new i.PolylineGeometry({positions:a,width:u.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(u.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(u.polyline.depthFailColor)})}))}calcShapePositions(i){this.setShapePositions(i)}}class J extends l{drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(e){super(),this.drawData=e,this.linePrimitiveCollection=new i.PrimitiveCollection,this.setAppearance()}getGeometry(){const e=this.drawData.shapePositions||[];if(this.calcShapePositions(e),!(e.length<2))return this.drawData.clampToGround?new i.GroundPolylineGeometry({positions:e,width:u.polyline.width}):new i.PolylineGeometry({positions:e,width:u.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:`draw-${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(u.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(u.polyline.depthFailColor)})}))}calcShapePositions(i){this.setShapePositions(i)}}const z={point:1,circle:2,rectangle:2,sector:3,"vertical-surface-line":1,"vertical-line":2},Y={},q=i=>{const{type:e,action:t,outline:a,pointCount:n}=i;Y[e]=(i,e)=>{t(i,e),a&&Z(i)},n&&(z[e]=n)},X=i=>{const e=new K(i);i.primitives.add(e)},Z=i=>{const e=new J(i);i.primitives.add(e)},$=(i,e)=>{const t=new W(i,e);i.primitives.add(t)},ii=i=>{const e=new L(i);i.primitives.add(e)},ei=i=>{const e=new H(i);i.primitives.add(e)},ti=i=>{const e=new Q(i);i.primitives.add(e)},ai="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",ni="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",oi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",si="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class ri{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=si,t.className="draw-edit-icon",e.appendChild(t),e.addEventListener("click",()=>{this._drawEditEvent.drawEditMove&&this._drawEditEvent.drawEditMove(this._editPointPrimitive)});const a=document.createElement("DIV");a.id="addPoint";const n=document.createElement("img");n.src=ai,n.title="点击添加节点",n.className="draw-edit-icon",a.appendChild(n),a.addEventListener("click",()=>{this._drawEditEvent.drawEditAdd&&this._drawEditEvent.drawEditAdd(this._editPointPrimitive)});const o=document.createElement("DIV"),s=document.createElement("img");o.id="removePoint",s.src=oi,s.title="点击删除节点",s.className="draw-edit-icon",o.appendChild(s),o.addEventListener("click",()=>{this._drawEditEvent.drawEditRemove&&this._drawEditEvent.drawEditRemove(this._editPointPrimitive)});const r=document.createElement("DIV"),l=document.createElement("img");l.src=ni,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(a),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 ri.editUI||(ri.editUI=new ri(i,e)),ri.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(){ri.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}Y.polyline=i=>{X(i)},Y["polyline-arrow"]=(i,e)=>{X(i),$(i,e)},Y.curve=i=>{X(i)},Y["curve-arrow"]=(i,e)=>{X(i),$(i,e)},Y["vertical-line"]=i=>{i.clampToGround=!1,X(i)},Y["vertical-surface-line"]=i=>{i.clampToGround=!1,X(i)},Y.polygon=i=>{ii(i),Z(i)},Y.circle=i=>{ei(i),Z(i)},Y.rectangle=i=>{ti(i),Z(i)};const li=e=>{let t;const a=[];let n=new i.Cartesian3(0,0,0);const o=[];let s,r,l,h;const w=u.point;let v=!1;((e,t)=>{const a=e.scene,n=new i.ScreenSpaceEventHandler(a.canvas);let o;e.cesiumWidget.screenSpaceEventHandler.removeInputAction(i.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),n.setInputAction(i=>{const n=a.pickPosition(i.position),s=(new Date).getTime();if(o&&s-o<270){const a=e.scene.pick(i.position);return void t(c.DRAW_DB_CLICK,{position:n,pickPrimitive:a?.primitive,windowPosition:i.position})}t(c.DRAW_ADD,{position:n}),o=(new Date).getTime()},i.ScreenSpaceEventType.LEFT_CLICK),n.setInputAction(i=>{const n=e.scene.pick(i.endPosition),o=a.pickPosition(i.endPosition);t(c.DRAW_MOVE,{position:o,pickPrimitive:n?.primitive,windowPosition:i.endPosition}),n&&t(c.DRAW_PICK,{position:o,pickPrimitive:n?.primitive,windowPosition:i.endPosition})},i.ScreenSpaceEventType.MOUSE_MOVE),n.setInputAction(()=>{t(c.DRAW_RIGHT_CLICK,{})},i.ScreenSpaceEventType.RIGHT_CLICK)})(e,(i,e)=>{s&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(i)||s.isEditing)&&y[i]?.(e)});const A=new i.PrimitiveCollection;A.destroyPrimitives=!1,e.scene.primitives.add(A);const g=i=>{const e=o.findIndex(e=>e.id===i),t=o[e];t.positions.length=0,o.splice(e,1),F.drawRemove&&F.drawRemove(t),setTimeout(()=>{t.measurePrimitive?.clearAllDiv(),A.remove(t?.primitives)},300)},C=()=>{e._element.style.cursor="default",n=new i.Cartesian3(0,0,0),s.positions.pop(),s.isDisAdd=!0,setTimeout(()=>{s.isEditing=!1,s.isDisAdd=!1,F.drawEnd&&F.drawEnd(s),s={}},300),r=void 0,l&&(s.pointPrimitives.remove(l),l=void 0),D()},y={drawAdd:({position:i})=>{if(s.positions.push(i),v=!1,S.id)return F.drawEditEnd&&F.drawEditEnd(s),S.id="",void C();T(i,s),F.drawAdd&&F.drawAdd(i,s),s.positions.length>z[s.shape]&&C()},drawMove:({position:i,windowPosition:e})=>{if(v=!0,f(),i&&!s.isDisAdd&&s.isEditing){if(D(e),S.id)s.positions.splice(S.index,1,i),S.pointPrimitive.position=i;else{const e=s.positions.findIndex(i=>i.x===n.x&&i.y===n.y&&i.z===n.z);s.positions.push(i),-1!==e&&s.positions.splice(e,1),l&&s.pointPrimitives.remove(l),l=T(i,s)}n=i,F.drawMove&&F.drawMove(i,s)}},drawPick:({pickPrimitive:e,windowPosition:t})=>{s.isEditing||e instanceof i.PointPrimitive&&P(e,t)},drawDbClick:({position:i,windowPosition:e,pickPrimitive:t})=>{s.isEditing?C():!s.isEditing&&t&&E(i,e,t)},drawRightClick:()=>{s.isEditing?(()=>{if(S.id)return S.id="",s.isDisAdd=!0,s.isEditing=!0,S.originPosition?(s.positions.splice(S.index,1,S.originPosition),S.pointPrimitive.position=S.originPosition):s?.positions.splice(S.index,1),F.drawEditEnd&&F.drawEditEnd(s),setTimeout(()=>{s.isEditing=!1,s.isDisAdd=!1},300),n=new i.Cartesian3(0,0,0),r=void 0,void D();if((!z[s.shape]||z[s.shape]>2)&&s.positions.length>2){const i=v?2:1,e=s.pointPrimitives.get(s.positions.length-i);return s.pointPrimitives.remove(e),void s?.positions.splice(s.positions.length-i,1)}n=new i.Cartesian3(0,0,0),r=void 0,g(s.id),s={},D()})():t.setVisible(!1)}},P=(i,t)=>{const n=i.id.split("-")[0],s=o.find(i=>i.id===n);a.includes(i.id)||s&&s.edit&&(e._element.style.cursor="pointer",i.pixelSize=1.5*w.pixelSize,i.outlineWidth=1.5*w.outlineWidth,r=i,h.showAt(t,m.pointEnter),h.setVisible(!0))},E=(e,n,s)=>{if(s instanceof i.PointPrimitive){if(a.includes(s.id))return;const i=s.id.split("-")[0],n=o.find(e=>e.id===i);if(!n)return;if(!n.edit)return;t.showAt(e,s,n.shape),F.drawEditStart&&F.drawEditStart(n)}},D=i=>{if(h)return i&&s.positions?void(S.id?h.showAt(i,m.drawEditMove[s.shape]||m.drawEditMove.default):z[s.shape]!==s.positions.length?s.positions.length>1?h.showAt(i,m.drawMove[s.shape]||m.drawMove.default):h.showAt(i,m.drawStart[s.shape]||m.drawStart.default):h.showAt(i,m.drawEnd)):(e._element.style.cursor="default",void h.setVisible(!1));e._element.style.cursor="default"},f=()=>{r&&(r.pixelSize=w.pixelSize,r.outlineWidth=w.outlineWidth,D())},S={},I={drawEditAdd:a=>{t.setVisible(!1);const{id:n,index:o,drawData:r}=M(a),l=new i.Cartesian3(a.position.x,a.position.y,a.position.z);r?.positions.splice(o,0,l),s=r;const d=T(l,s);e._element.style.cursor="move",Object.assign(S,{id:n,index:o+1,pointPrimitive:d,originPosition:l}),s.isEditing=!0},drawEditMove:a=>{t.setVisible(!1),e._element.style.cursor="move";const{id:n,index:o,drawData:r}=M(a);s=r,Object.assign(S,{id:n,index:o,pointPrimitive:a,originPosition:new i.Cartesian3(a.position.x,a.position.y,a.position.z)}),s.isEditing=!0},drawEditRemove:i=>{t.setVisible(!1);const{index:e,drawData:a}=M(i);a.isEditing=!0,a.isDisAdd=!0,a?.positions.splice(e,1),a?.pointPrimitives.remove(i),F.drawEditEnd&&F.drawEditEnd(a),setTimeout(()=>{a.isEditing=!1,a.isDisAdd=!1},300)},drawDelete:i=>{t.setVisible(!1);const{id:e}=M(i);g(e)}};t=ri.createEditUi(e,I);const M=i=>{const e=i.id.split("-")[0],t=o.find(i=>i.id===e),a=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:a}},R=e=>{const t=new i.PrimitiveCollection,a=new i.PointPrimitiveCollection;t.add(a);const n={id:p(),edit:e.edit||!1,measure:e.measure||!1,measureLabel:e.measureLabel||!1,disDepthFail:e.disDepthFail||!1,measureUnit:e.measureUnit||["m"],isEditing:!0,shape:e.shape,positions:[],clampToGround:e.clampToGround,pointPrimitives:a,primitives:t};return A.add(t),n},T=(e,t)=>t.pointPrimitives.add({id:`${t.id}-${p()}`,position:e,...w,color:i.Color.fromCssColorString(w.color),outlineColor:i.Color.fromCssColorString(w.outlineColor)}),F={};return{draw:i=>{e._element.style.cursor="crosshair",h=d.createToolTip(e),r=void 0;const t=R(i);s=t,F.drawStart&&F.drawStart(t),o.push(t),((i,e,t)=>{Y[e]&&Y[e](t,i)})(e,i.shape,t),i.measure&&((i,e)=>{const t=new j(i,e);i.primitives.add(t),i.measurePrimitive=t,i.primitives.raiseToTop(t)})(t,e),t.primitives.raiseToTop(t.pointPrimitives)},remove:i=>{g(i.id)},removeAll:()=>{o.forEach(i=>{i.measurePrimitive?.clearAllDiv()}),A.removeAll(),o.length=0},setDrawStyle:i=>{Object.assign(u.point,i.point),Object.assign(u.polyline,i.polyline),Object.assign(u.polygon,i.polygon)},Event:F,updateMeasureUnit:(i,e)=>{if(-1===o.findIndex(e=>e.id===i.id))throw new Error("绘制对象不存在");const t=i.primitives._primitives.find(i=>i instanceof j);t&&t.updateUnit(e)}}};export{h as Draw,c as DrawEventType,u as DrawStyle,q as addDrawActions,li as createDrawHandler};
1
+ import*as i from"cesium";import{calcArea as e,calcPoistionCenter as t,calcGeodesicDistance as a,calcSpaceDistance as n,makePositiontoLnglat as o,makeLnglatToPosition as s,calcGeodesicDistances as r,BasePrimitive as l,Tooltip as d,numberId as p}from"@ino-cesium/common";var c=(i=>(i.DRAW_ADD="drawAdd",i.DRAW_MOVE="drawMove",i.DRAW_PICK="drawPick",i.DRAW_DB_CLICK="drawDbClick",i.DRAW_RIGHT_CLICK="drawRightClick",i))(c||{}),h=Object.freeze({__proto__:null,DrawEventType:c});const m={drawStart:{circle:"单击左键绘制圆的中心点,单机右键取消绘制。",rectangle:"单击左键绘制矩形左上角。",point:"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单击左键绘制第一个节点,单机右键取消绘制。"},drawMove:{circle:"单击左键确定圆的半径并结束绘制,单机右键取消绘制。",rectangle:"单击左键结束绘制,单机右键取消绘制。","vertical-line":"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。","default-dbclick":"单机左键绘制下一个节点,双击左键结束绘制,单机右键撤销上次绘制。",default:"单机左键绘制下一个节点,单机右键撤销上次绘制。"},drawEnd:"单击左键结束绘制,单机右键取消上次绘制",pointEnter:"双击左键编辑节点。",drawEditMove:{default:"移动鼠标修改节点,单击左键确定修改,单机右键取消修改。"}},u={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)"}},w="cm",v="厘米",A="m",g="米",C="km",y="千米",P="公里",E="㎡",D="平方厘米",f="㎡",S="平方米",I="km²",M="平方千米",T="平方公里",R="亩",F="公顷",b={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},G=(i,e,t)=>e===t?i:i*U(t),x=(i,e,t)=>e===t?i:i*function(i){switch(i){case E:return 1e4;case f:return 1;case I:return 1e-6;case D:return 1e4;case S:return 1;case M:case T:return 1e-6;case R:return.0015;case F:return 1e-4;default:return 1}}(t),_=i=>b[i],U=i=>{switch(i){case A:return 1;case w:case v:return 100;case C:return.001;case g:return 1;case y:case P:return.001;default:return 1}};const k=(e,t)=>{let a=e;if("vertical-surface-line"===t&&e.length>=1){const t=e[0],n=i.Cartographic.fromCartesian(t),o=i.Math.toDegrees(n.longitude),s=i.Math.toDegrees(n.latitude),r=0;a=[i.Cartesian3.fromDegrees(o,s,n.height),i.Cartesian3.fromDegrees(o,s,r)]}if("vertical-line"===t&&e.length>=2){const t=e[0],n=e[1],r=o(t),l=o(n);let d=r,p=l;r.height>l.height&&(d=l,p=r),console.log(d.longitude,d.latitude,p.height);const c=s(new i.Cartographic(d.longitude,d.latitude,p.height));a=[s(d),c,s(p),s(d)]}return t.startsWith("curve")&&e.length>2&&(a=O(e)),a},N=(i,e,o,s,r)=>{o.push(...i.map((o,r)=>{const l=i[r+1];if(l){let i=e?a(o,l):n(o,l);return i=G(i,"m",s),{value:Number(i.toFixed(2)),unit:s,position:t([o,l]),positions:[o,l]}}return null}).filter(i=>i&&i.value>0))},B=i=>{if(2===i.length)return i;let[e,t]=i;return t||(t=_(e)),[e,t]},O=e=>{const t=e.length,a=r(e),n=Math.floor(a/5),o=[];for(let i=0;i<t;i++)o.push(1.5*i);const s=new i.CatmullRomSpline({points:e,times:o}),l=[],d=o[0],p=o[o.length-1];for(let e=0;e<n;e++){const t=e/(n-1),a=i.Math.lerp(d,p,t),o=s.evaluate(a);l.push(o)}return l},V=(e,t=1e3)=>{if(e.length<2)return console.warn("至少需要2个点才能生成箭头"),[];const a=e[e.length-1],n=e[e.length-2],r=o(a),l=o(n),d=r.height,p=r.longitude-l.longitude,c=r.latitude-l.latitude,h=Math.sqrt(p**2+c**2);if(h<1e-12)return console.warn("最后两点经纬度重合,无法生成箭头"),[];const m=p/h,u=c/h,w=(e=>{const t=i.Math.toRadians(.5),a=s(e),n=s(new i.Cartographic(e.longitude+t,e.latitude,e.height)),o=2*i.Cartesian3.distance(a,n),r=s(new i.Cartographic(e.longitude,e.latitude+t,e.height));return{lon:o,lat:2*i.Cartesian3.distance(a,r)}})(r),v=t/w.lon*i.Math.RADIANS_PER_DEGREE,A=t/w.lat*i.Math.RADIANS_PER_DEGREE,g=Math.PI/6,C=t*Math.tan(g),y=C/w.lon*i.Math.RADIANS_PER_DEGREE,P=C/w.lat*i.Math.RADIANS_PER_DEGREE,E=r.longitude-m*v-u*y,D=r.latitude-u*A+m*P,f=r.longitude-m*v+u*y,S=r.latitude-u*A-m*P,I=s(new i.Cartographic(E,D,d)),M=s(new i.Cartographic(f,S,d));return[I,s(new i.Cartographic(r.longitude,r.latitude,d)),M]};class K extends l{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=k(this.positions,this.drawData.shape);if(this.drawData.shapePositions=e,"vertical-surface-line"===this.drawData.shape){const i=this.drawData.pointPrimitives.get(1);i&&(i.position=this.drawData.shapePositions[1])}if(this.setShapePositions(e),!(e.length<2))return this.drawData.clampToGround?new i.GroundPolylineGeometry({positions:e,width:u.polyline.width}):new i.PolylineGeometry({positions:e,width:u.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:`draw-${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(u.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(u.polyline.depthFailColor)})}))}}class L extends l{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const e=JSON.parse(JSON.stringify(this.positions));if(this.calcShapePositions(e),this.positions.length<3)return;const t=[new i.GeometryInstance({geometry:new i.PolygonGeometry({polygonHierarchy:new i.PolygonHierarchy(e),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];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(u.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(u.polygon.depthFailColor)})})}calcShapePositions(i){const e=[...i,i[0]];this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class H extends l{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(),this.calcShapePositions(this.positions);const e=JSON.parse(JSON.stringify(this.positions)),t=this.drawData.clampToGround?a(e[0],e[1]):n(e[0],e[1]);if(!t)return;const o=i.Cartographic.fromCartesian(e[0]).height,s=[new i.GeometryInstance({geometry:new i.CircleGeometry({center:e[0],height:o,radius:t}),id:`draw-${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(u.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(u.polygon.depthFailColor)})})}calcShapePositions(e){let t=e;const a=n(e[0],e[1]),o=i.Cartographic.fromCartesian(e[0]).height,s=new i.CircleOutlineGeometry({center:e[0],height:o,radius:a}),r=i.CircleOutlineGeometry.createGeometry(s);let l=[];if(r){const e=[].slice.call(r.attributes.position.values);l=i.Cartesian3.unpackArray(e),l.push(l[0]),t=l}this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class Q extends l{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,this.calcShapePositions(e);const t=i.Cartographic.fromCartesian(e[0]).height,a=i.Rectangle.fromCartesianArray(e),n=[new i.GeometryInstance({geometry:new i.RectangleGeometry({rectangle:a,height:t}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new i.GroundPrimitive({geometryInstances:n,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new i.Primitive({geometryInstances:n,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(u.polygon.color)})}),this.depthFailAppearance=new i.MaterialAppearance({material:i.Material.fromType("Color",{color:i.Color.fromCssColorString(u.polygon.depthFailColor)})})}calcShapePositions(e){let t=e;const a=i.Cartographic.fromCartesian(e[0]).height,n=i.Rectangle.fromCartesianArray(e),o=new i.RectangleOutlineGeometry({rectangle:n,height:a}),s=i.RectangleOutlineGeometry.createGeometry(o);let r=[];if(s){const e=[].slice.call(s.attributes.position.values);r=i.Cartesian3.unpackArray(e),r.push(r[0]),t=r}this.drawData.shapePositions=t,this.setShapePositions(this.drawData.shapePositions)}}class j extends l{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 o=(i=>{let{shapePositions:o,positions:s,shape:r,clampToGround:l,measureUnit:d}=i;o||(o=s),l||(l=!1);const[p,c]=B(d),h=_(p);i.measureUnit=[p,c];const m=[];if("polyline"===r&&(N(s,l,m,p),m.push({value:0,unit:p,position:s[0],positions:s,prefixText:"起点"}),m.push({value:Number(m.reduce((i,e)=>i+e.value,0).toFixed(2)),unit:p,position:s[s.length-1],positions:s})),"vertical-surface-line"===r&&N(o,l,m,p),"vertical-line"===r&&(N(o,l,m,p),m.forEach((i,e)=>{0===e&&(i.prefixText="高度"),1===e&&(i.prefixText="水平距离"),2===e&&(i.prefixText="空间距离")})),"polygon"===r){N(o,l,m,p);const i=x(e(o),h,c);m.push({value:Number(i.toFixed(2)),unit:c,position:t(o),positions:o})}if("rectangle"===r){N(o,l,m,p);const i=x(e(o),h,c);m.push({value:Number(i.toFixed(2)),unit:c,position:t(o),positions:o})}if("circle"===r){const i=l?a(s[0],s[1]):n(s[0],s[1]);m.push({value:Number(G(i,"m",p).toFixed(2)),unit:p,position:s[1],positions:s,prefixText:"半径"});const e=x(i*i*Math.PI,p,c);i>0&&m.push({value:Number(e.toFixed(2)),unit:c,position:s[0],positions:s})}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 a=this.createDiv(`measure-label-${this.drawData.id}-${e}`,t);this.measureDivs.push({position:i.position,divEle:a})})}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 a=`\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 `,n=document.createElement("div");return n.id=i,n.innerHTML=a,n.style.position="absolute",n.style.pointerEvents="none",n.className=`measure-label measure-label-${this.drawData.id}`,this.cesiumWidget.appendChild(n),n}calcShapePositions(i){this.setShapePositions(i)}}class W extends l{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;viewer;constructor(e,t){super(),this.drawData=e,this.positions=e.positions,this.linePrimitiveCollection=new i.PrimitiveCollection,this.viewer=t,this.setAppearance()}getGeometry(){if(this.positions.length<2)return;const e=this.viewer.camera.position,t=.02*i.Cartographic.fromCartesian(e).height;let a=this.positions;return a=k(a,this.drawData.shape),a=V(a,t),this.calcShapePositions(a),a.length<2?void 0:(this.setShapePositions(a),this.drawData.clampToGround?new i.GroundPolylineGeometry({positions:a,width:u.polyline.width}):new i.PolylineGeometry({positions:a,width:u.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(u.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(u.polyline.depthFailColor)})}))}calcShapePositions(i){this.setShapePositions(i)}}class J extends l{drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(e){super(),this.drawData=e,this.linePrimitiveCollection=new i.PrimitiveCollection,this.setAppearance()}getGeometry(){const e=this.drawData.shapePositions||[];if(this.calcShapePositions(e),!(e.length<2))return this.drawData.clampToGround?new i.GroundPolylineGeometry({positions:e,width:u.polyline.width}):new i.PolylineGeometry({positions:e,width:u.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:`draw-${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(u.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(u.polyline.depthFailColor)})}))}calcShapePositions(i){this.setShapePositions(i)}}const z={point:1,circle:2,rectangle:2,sector:3,"vertical-surface-line":1,"vertical-line":2},Y={},q=i=>{const{type:e,action:t,outline:a,pointCount:n}=i;Y[e]=(i,e)=>{t(i,e),a&&$(i)},n&&(z[e]=n)},X=(i,e,t)=>{Y[e]&&Y[e](t,i)},Z=i=>{const e=new K(i);i.primitives.add(e)},$=i=>{const e=new J(i);i.primitives.add(e)},ii=(i,e)=>{const t=new W(i,e);i.primitives.add(t)},ei=i=>{const e=new L(i);i.primitives.add(e)},ti=i=>{const e=new H(i);i.primitives.add(e)},ai=i=>{const e=new Q(i);i.primitives.add(e)},ni=(i,e)=>{const t=new j(i,e);i.primitives.add(t),i.measurePrimitive=t,i.primitives.raiseToTop(t)},oi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",si="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",ri="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",li="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class di{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=li,t.className="draw-edit-icon",e.appendChild(t),e.addEventListener("click",()=>{this._drawEditEvent.drawEditMove&&this._drawEditEvent.drawEditMove(this._editPointPrimitive)});const a=document.createElement("DIV");a.id="addPoint";const n=document.createElement("img");n.src=oi,n.title="点击添加节点",n.className="draw-edit-icon",a.appendChild(n),a.addEventListener("click",()=>{this._drawEditEvent.drawEditAdd&&this._drawEditEvent.drawEditAdd(this._editPointPrimitive)});const o=document.createElement("DIV"),s=document.createElement("img");o.id="removePoint",s.src=ri,s.title="点击删除节点",s.className="draw-edit-icon",o.appendChild(s),o.addEventListener("click",()=>{this._drawEditEvent.drawEditRemove&&this._drawEditEvent.drawEditRemove(this._editPointPrimitive)});const r=document.createElement("DIV"),l=document.createElement("img");l.src=si,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(a),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 di.editUI||(di.editUI=new di(i,e)),di.editUI}showAt(i,e,t){this.setVisible(!0),this._editUiPosition=i,this._editPointPrimitive=e,this.setAddElementStatus(!z[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(){di.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}Y.polyline=i=>{Z(i)},Y["polyline-arrow"]=(i,e)=>{Z(i),ii(i,e)},Y.curve=i=>{Z(i)},Y["curve-arrow"]=(i,e)=>{Z(i),ii(i,e)},Y["vertical-line"]=i=>{i.clampToGround=!1,Z(i)},Y["vertical-surface-line"]=i=>{i.clampToGround=!1,Z(i)},Y.polygon=i=>{ei(i),$(i)},Y.circle=i=>{ti(i),$(i)},Y.rectangle=i=>{ai(i),$(i)};const pi=e=>{let t;const a=[];let n=new i.Cartesian3(0,0,0);const o=[];let s,r,l;const h=d.createToolTip(e),w=u.point;let v=!1;((e,t)=>{const a=e.scene,n=new i.ScreenSpaceEventHandler(a.canvas);let o;e.cesiumWidget.screenSpaceEventHandler.removeInputAction(i.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),n.setInputAction(i=>{const n=a.pickPosition(i.position),s=(new Date).getTime();if(o&&s-o<270){const a=e.scene.pick(i.position);return void t(c.DRAW_DB_CLICK,{position:n,pickPrimitive:a?.primitive,windowPosition:i.position})}t(c.DRAW_ADD,{position:n}),o=(new Date).getTime()},i.ScreenSpaceEventType.LEFT_CLICK),n.setInputAction(i=>{const n=e.scene.pick(i.endPosition),o=a.pickPosition(i.endPosition);t(c.DRAW_MOVE,{position:o,pickPrimitive:n?.primitive,windowPosition:i.endPosition}),n&&t(c.DRAW_PICK,{position:o,pickPrimitive:n?.primitive,windowPosition:i.endPosition})},i.ScreenSpaceEventType.MOUSE_MOVE),n.setInputAction(()=>{t(c.DRAW_RIGHT_CLICK,{})},i.ScreenSpaceEventType.RIGHT_CLICK)})(e,(i,e)=>{s&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(i)||s.isEditing)&&E[i]?.(e)});const A=new i.PrimitiveCollection;A.destroyPrimitives=!1,e.scene.primitives.add(A);const g=()=>{s&&(s.isEditing=!1,s.isDisAdd=!0,S(),M.id===s.id?y():(C(s.id),s={}))},C=i=>{const e=o.findIndex(e=>e.id===i);if(-1===e)return;const t=o[e];t.positions.length=0,o.splice(e,1),x.drawRemove&&x.drawRemove(t),setTimeout(()=>{t.measurePrimitive?.clearAllDiv(),A.remove(t?.primitives)},300)},y=()=>{if(M.id)return M.id="",s.isDisAdd=!0,s.isEditing=!0,M.originPosition?(s.positions.splice(M.index,1,M.originPosition),M.pointPrimitive.position=M.originPosition):s?.positions.splice(M.index,1),x.drawEditEnd&&x.drawEditEnd(s),setTimeout(()=>{s.isEditing=!1,s.isDisAdd=!1},300),n=new i.Cartesian3(0,0,0),r=void 0,void S();if((!z[s.shape]||z[s.shape]>2)&&s.positions&&s.positions.length>2){const i=v?2:1,e=s.pointPrimitives.get(s.positions.length-i);return s.pointPrimitives.remove(e),void s?.positions.splice(s.positions.length-i,1)}n=new i.Cartesian3(0,0,0),r=void 0,C(s.id),s={},S()},P=t=>{t||(t=s),e._element.style.cursor="default",n=new i.Cartesian3(0,0,0),t.positions.pop(),t.isDisAdd=!0,setTimeout(()=>{t.isEditing=!1,t.isDisAdd=!1,x.drawEnd&&x.drawEnd(t),s={}},300),r=void 0,l&&(t.pointPrimitives.remove(l),l=void 0),S()},E={drawAdd:({position:i})=>{if(s.positions.push(i),v=!1,M.id)return x.drawEditEnd&&x.drawEditEnd(s),M.id="",void P();b(i,s),x.drawAdd&&x.drawAdd(i,s),s.positions.length>z[s.shape]&&P()},drawMove:({position:i,windowPosition:e})=>{if(v=!0,I(),i&&!s.isDisAdd&&s.isEditing){if(S(e),M.id)s.positions.splice(M.index,1,i),M.pointPrimitive.position=i;else{const e=s.positions.findIndex(i=>i.x===n.x&&i.y===n.y&&i.z===n.z);s.positions.push(i),-1!==e&&s.positions.splice(e,1),l&&s.pointPrimitives.remove(l),l=b(i,s)}n=i,x.drawMove&&x.drawMove(i,s)}},drawPick:({pickPrimitive:e,windowPosition:t})=>{s.isEditing||e instanceof i.PointPrimitive&&D(e,t)},drawDbClick:({position:i,windowPosition:e,pickPrimitive:t})=>{if(s.isEditing){if(z[s.shape])return;P()}else!s.isEditing&&t&&f(i,e,t)},drawRightClick:()=>{s.isEditing?y():t.setVisible(!1)}},D=(i,t)=>{const n=i.id.split("-")[1],s=o.find(i=>i.id===n);a.includes(i.id)||s&&s.edit&&(e._element.style.cursor="pointer",i.pixelSize=1.5*w.pixelSize,i.outlineWidth=1.5*w.outlineWidth,r=i,h.showAt(t,m.pointEnter),h.setVisible(!0))},f=(e,n,s)=>{if(s instanceof i.PointPrimitive){if(a.includes(s.id))return;const i=s.id.split("-")[1],n=o.find(e=>e.id===i);if(!n)return;if(!n.edit)return;t.showAt(e,s,n.shape),x.drawEditStart&&x.drawEditStart(n)}},S=i=>{if(!h)return void(e._element.style.cursor="default");if(!i||!s.positions)return e._element.style.cursor="default",void h.setVisible(!1);const t=z[s.shape]?"default":"default-dbclick";M.id?h.showAt(i,m.drawEditMove[s.shape]||m.drawEditMove.default):z[s.shape]!==s.positions.length?s.positions.length>1?h.showAt(i,m.drawMove[t]||m.drawMove[t]):h.showAt(i,m.drawStart[t]||m.drawStart.default):h.showAt(i,m.drawEnd)},I=()=>{r&&(r.pixelSize=w.pixelSize,r.outlineWidth=w.outlineWidth,S())},M={},T={drawEditAdd:a=>{t.setVisible(!1);const{id:n,index:o,drawData:r}=R(a),l=new i.Cartesian3(a.position.x,a.position.y,a.position.z);r?.positions.splice(o,0,l),s=r;const d=b(l,s);e._element.style.cursor="move",Object.assign(M,{id:n,index:o+1,pointPrimitive:d,originPosition:l}),s.isEditing=!0},drawEditMove:a=>{t.setVisible(!1),e._element.style.cursor="move";const{id:n,index:o,drawData:r}=R(a);s=r,Object.assign(M,{id:n,index:o,pointPrimitive:a,originPosition:new i.Cartesian3(a.position.x,a.position.y,a.position.z)}),s.isEditing=!0},drawEditRemove:i=>{t.setVisible(!1);const{index:e,drawData:a}=R(i);a.isEditing=!0,a.isDisAdd=!0,a?.positions.splice(e,1),a?.pointPrimitives.remove(i),x.drawEditEnd&&x.drawEditEnd(a),setTimeout(()=>{a.isEditing=!1,a.isDisAdd=!1},300)},drawDelete:i=>{t.setVisible(!1);const{id:e}=R(i);C(e)}};t=di.createEditUi(e,T);const R=i=>{const e=i.id.split("-")[1],t=o.find(i=>i.id===e),a=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:a}},F=(e,t)=>{const a=new i.PrimitiveCollection,n=new i.PointPrimitiveCollection;a.add(n);const o={id:e.id,edit:e.edit||!1,measure:e.measure||!1,measureLabel:e.measureLabel||!1,disDepthFail:e.disDepthFail||!1,measureUnit:e.measureUnit||["m"],isEditing:!0,shape:e.shape,positions:t,clampToGround:e.clampToGround,pointPrimitives:n,primitives:a};return A.add(a),t.forEach(i=>{b(i,o)}),o},b=(e,t)=>t.pointPrimitives.add({id:`draw-${t.id}-${p()}`,position:e,...w,color:i.Color.fromCssColorString(w.color),outlineColor:i.Color.fromCssColorString(w.outlineColor)}),G=i=>{const t=F({...i},i.positions);t.positions.push(t.positions[t.positions.length-1]),s=t,o.push(t),X(e,i.shape,t),i.measure&&ni(t,e),t.primitives.raiseToTop(t.pointPrimitives),P(t)},x={};return{draw:i=>{e._element.style.cursor="crosshair",r=void 0,i.id=p();const t=F(i,[]);s=t,x.drawStart&&x.drawStart(t),o.push(t),X(e,i.shape,t),i.measure&&ni(t,e),t.primitives.raiseToTop(t.pointPrimitives)},removeEditing:g,remove:i=>{C(i.id),S()},removeAll:()=>{o.forEach(i=>{i.measurePrimitive?.clearAllDiv()}),A.removeAll(),o.length=0,g()},setDrawStyle:i=>{Object.assign(u.point,i.point),Object.assign(u.polyline,i.polyline),Object.assign(u.polygon,i.polygon)},Event:x,updateMeasureUnit:(i,e)=>{if(-1===o.findIndex(e=>e.id===i.id))throw new Error("绘制对象不存在");const t=i.primitives._primitives.find(i=>i instanceof j);t&&t.updateUnit(e)},reShowDrawData:G,reShowDrawDatas:i=>{i.forEach(i=>{G(i)})}}};export{h as Draw,c as DrawEventType,u as DrawStyle,q as addDrawActions,pi 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.16-beta.4",
4
+ "version": "0.0.16",
5
5
  "author": "koino",
6
6
  "keywords": [
7
7
  "cesium",
@@ -25,11 +25,11 @@
25
25
  "README.MD"
26
26
  ],
27
27
  "peerDependencies": {
28
- "cesium": "*",
28
+ "cesium": "1.131.0",
29
29
  "html2canvas": "^1.4.1"
30
30
  },
31
31
  "dependencies": {
32
- "@ino-cesium/common": "0.0.16-beta.4",
32
+ "@ino-cesium/common": "0.0.16",
33
33
  "html2canvas": "^1.4.1"
34
34
  },
35
35
  "scripts": {