@ino-cesium/draw 0.0.16 → 0.0.17-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -368,7 +368,7 @@ interface IMeasureResult {
368
368
  /**
369
369
  * 绘制形状类型
370
370
  */
371
- type DrawShape = 'polyline' | 'polyline-arrow' | 'polygon' | 'point' | 'circle' | 'rectangle' | 'vertical-line' | 'vertical-surface-line' | 'curve' | 'curve-arrow' | string;
371
+ type DrawShape = 'polyline' | 'polyline-arrow' | 'polygon' | 'point' | 'circle' | 'rectangle' | 'vertical-line' | 'vertical-surface-line' | 'curve' | 'curve-arrow' | 'sector' | 'db-arrow' | string;
372
372
  /**
373
373
  * 绘制样式接口
374
374
  */
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-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};
1
+ import{BasePrimitive as i,makePositionsToLnglats as e,calcSpaceDistance as t,makeLnglatsToPositions as a,makePositiontoLnglat as o,makeLnglatToPosition as n,calcGeodesicDistances as s,calcArea as r,calcPoistionCenter as l,calcGeodesicDistance as p,Tooltip as c,numberId as d}from"@ino-cesium/common";import*as h from"@turf/turf";import*as m from"cesium";var u=(i=>(i.DRAW_ADD="drawAdd",i.DRAW_MOVE="drawMove",i.DRAW_PICK="drawPick",i.DRAW_DB_CLICK="drawDbClick",i.DRAW_RIGHT_CLICK="drawRightClick",i))(u||{}),w=Object.freeze({__proto__:null,DrawEventType:u});const g={drawStart:{circle:"单击左键绘制圆的中心点,单机右键取消绘制。",rectangle:"单击左键绘制矩形左上角。",point:"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。",default:"单击左键绘制第一个节点,单机右键取消绘制。"},drawMove:{circle:"单击左键确定圆的半径并结束绘制,单机右键取消绘制。",rectangle:"单击左键结束绘制,单机右键取消绘制。","vertical-line":"单击左键结束绘制,单机右键取消绘制。","vertical-surface-line":"单击左键结束绘制,单机右键取消绘制。","default-dbclick":"单机左键绘制下一个节点,双击左键结束绘制,单机右键撤销上次绘制。",default:"单机左键绘制下一个节点,单机右键撤销上次绘制。"},drawEnd:"单击左键结束绘制,单机右键取消上次绘制",pointEnter:"双击左键编辑节点。",drawEditMove:{default:"移动鼠标修改节点,单击左键确定修改,单机右键取消修改。"}},v={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 A extends i{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.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),e=[new m.GeometryInstance({geometry:new m.PolygonGeometry({polygonHierarchy:new m.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new m.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new m.Primitive({geometryInstances:e,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.color)})}),this.depthFailAppearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<3)return this.drawData.shapePositions=i,void this.setShapePositions(this.drawData.shapePositions);const a=e(i).map(i=>i.height),o=e(i).map(i=>h.point([i.longitude,i.latitude])),n=Math.max(...a),s=t(i[0],i[1]),[r,l,p]=[o[0],o[1],o[2]],c=h.bearing(r,l),d=h.bearing(r,p),u=h.lineArc(r,s/1e3,c,d).geometry.coordinates.map(i=>[i[0],i[1],n]);u.push([...r.geometry.coordinates,n]),u.unshift([...r.geometry.coordinates,n]),this.drawData.shapePositions=m.Cartesian3.fromDegreesArrayHeights(u.flat()),this.setShapePositions(this.drawData.shapePositions)}}const P=(i,e)=>Math.sqrt((i[0]-e[0])**2+(i[1]-e[1])**2),y=i=>{let e=0;return i&&Array.isArray(i)&&i.length>0&&i.forEach((t,a)=>{a<i.length-1&&(e+=P(t,i[a+1]))}),e},C=i=>y(i)**.99,D=(i,e)=>[(i[0]+e[0])/2,(i[1]+e[1])/2],f=(i,e)=>{let t;const a=Math.asin(Math.abs(e[1]-i[1])/P(i,e));return e[1]>=i[1]&&e[0]>=i[0]?t=a+Math.PI:e[1]>=i[1]&&e[0]<i[0]?t=2*Math.PI-a:e[1]<i[1]&&e[0]<i[0]?t=a:e[1]<i[1]&&e[0]>=i[0]&&(t=Math.PI-a),t},E=(i,e,t)=>{const a=f(e,i)-f(e,t);return a<0?a+2*Math.PI:a},M=(i,e,t,a,o)=>{const n=f(i,e),s=o?n+t:n-t,r=a*Math.cos(s),l=a*Math.sin(s);return[e[0]+r,e[1]+l]},I=function(i){if(i.length<=2)return i;const e=[],t=i.length-1;for(let a=0;a<=1;a+=.01){let[o,n]=[0,0];for(let e=0;e<=t;e++){const s=F(t,e),r=a**e,l=(1-a)**(t-e);o+=s*r*l*i[e][0],n+=s*r*l*i[e][1]}e.push([o,n])}return e.push(i[t]),e},S=i=>{let e=1;switch(i){case i<=1:e=1;break;case 2===i:e=2;break;case 3===i:e=6;break;case 24===i:e=24;break;case 5===i:e=120;break;default:for(let t=1;t<=i;t++)e*=t}return e},F=(i,e)=>S(i)/(S(e)*S(i-e));class T extends i{positions;drawData;depthFailAppearance;connPoint;tempPoint4;llBodyPnts=[];rrBodyPnts=[];isClockWise;neckWidthFactor;headWidthFactor;headHeightFactor;neckHeightFactor;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance(),this.headHeightFactor=.25,this.headWidthFactor=.3,this.neckHeightFactor=.85,this.neckWidthFactor=.15,this.connPoint=[0,0],this.tempPoint4=[0,0],this.isClockWise=!1}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;if(this.calcShapePositions(this.positions),this.positions.length<2)return this._primitive;const i=JSON.parse(JSON.stringify(this.drawData.shapePositions||[])),e=[new m.GeometryInstance({geometry:new m.PolygonGeometry({polygonHierarchy:new m.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new m.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new m.Primitive({geometryInstances:e,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.color)})}),this.depthFailAppearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.depthFailColor)})})}calcShapePositions(i){if(i.length<3)return this.drawData.shapePositions=i,void this.setShapePositions(this.drawData.shapePositions);const t=[],o=e(i).map(i=>(t.push(i.height),[i.longitude,i.latitude])),n=Math.max(...t),[s,r,l]=[o[0],o[1],o[2]],p=o.length;let c,d;3===p?(this.tempPoint4=this.getTempPoint4(s,r,l),this.connPoint=D(s,r)):4===p?(this.tempPoint4=o[3],this.connPoint=D(s,r)):(this.tempPoint4=o[3],this.connPoint=o[4]),this.isClockWise=((i,e,t)=>(t[1]-i[1])*(e[0]-i[0])>(e[1]-i[1])*(t[0]-i[0]))(s,r,l),this.isClockWise?(c=this.getArrowPoints(s,this.connPoint,this.tempPoint4,!1),d=this.getArrowPoints(this.connPoint,r,l,!0)):(c=this.getArrowPoints(r,this.connPoint,l,!1),d=this.getArrowPoints(this.connPoint,s,this.tempPoint4,!0));const h=c.length,u=(h-5)/2,w=c.slice(0,u),g=c.slice(u,u+5);let v=c.slice(u+5,h);this.llBodyPnts=w;let A=d.slice(0,u);const P=d.slice(u,u+5),y=d.slice(u+5,h);this.rrBodyPnts=y,A=I(A);const C=I(y.concat(w.slice(1)));v=I(v);const f=A.concat(P,C,g,v).filter(i=>i[0]&&i[1]).map(i=>new m.Cartographic(i[0],i[1],n)),E=a(f);this.drawData.shapePositions=E,this.drawData.shapePositions.push(E[0]),this.setShapePositions(this.drawData.shapePositions)}getTempPoint4(i,e,t){const a=D(i,e),o=P(a,t),n=E(i,a,t);let s,r,l,p=[0,0];return n<Math.PI/2?(s=o*Math.sin(n),r=o*Math.cos(n),l=M(i,a,Math.PI/2,s,!1),p=M(a,l,Math.PI/2,r,!0)):n>=Math.PI/2&&n<Math.PI?(s=o*Math.sin(Math.PI-n),r=o*Math.cos(Math.PI-n),l=M(i,a,Math.PI/2,s,!1),p=M(a,l,Math.PI/2,r,!1)):n>=Math.PI&&n<1.5*Math.PI?(s=o*Math.sin(n-Math.PI),r=o*Math.cos(n-Math.PI),l=M(i,a,Math.PI/2,s,!0),p=M(a,l,Math.PI/2,r,!0)):(s=o*Math.sin(2*Math.PI-n),r=o*Math.cos(2*Math.PI-n),l=M(i,a,Math.PI/2,s,!0),p=M(a,l,Math.PI/2,r,!1)),p}getArrowPoints(i,e,t,a){const o=D(i,e),n=P(o,t);let s=M(t,o,0,.3*n,!0),r=M(t,o,0,.5*n,!0);s=M(o,s,Math.PI/2,n/5,a),r=M(o,r,Math.PI/2,n/4,a);const l=[o,s,r,t],p=this.getArrowHeadPoints(l);if(!(p&&Array.isArray(p)&&p.length>0))throw new Error("Interpolation Error");{const t=p[0],a=p[4],o=P(i,e)/C(l)/2,n=this.getArrowBodyPoints(l,t,a,o);if(n){const o=n.length;let s=n.slice(0,o/2),r=n.slice(o/2,o);return s.push(t),r.push(a),s=s.reverse(),s.push(e),r=r.reverse(),r.push(i),s.reverse().concat(p,r)}}}getArrowBodyPoints(i,e,t,a){const o=y(i),n=C(i)*a,s=(n-P(e,t))/2;let r=0;const l=[],p=[];for(let e=1;e<i.length-1;e++){const t=E(i[e-1],i[e],i[e+1])/2;r+=P(i[e-1],i[e]);const a=(n/2-r/o*s)/Math.sin(t),c=M(i[e-1],i[e],Math.PI-t,a,!0),d=M(i[e-1],i[e],t,a,!1);l.push(c),p.push(d)}return l.concat(p)}getArrowHeadPoints(i){const e=C(i)*this.headHeightFactor,t=i[i.length-1],a=e*this.headWidthFactor,o=e*this.neckWidthFactor,n=e*this.neckHeightFactor,s=M(i[i.length-2],t,0,e,!0),r=M(i[i.length-2],t,0,n,!0),l=M(t,s,Math.PI/2,a,!1),p=M(t,s,Math.PI/2,a,!0);return[M(t,r,Math.PI/2,o,!1),l,t,p,M(t,r,Math.PI/2,o,!0)]}}const b=i=>{const e=new A(i);i.primitives.add(e)},G=i=>{const e=new T(i);i.primitives.add(e)},R="cm",x="厘米",_="m",k="米",U="km",N="千米",B="公里",H="㎡",O="平方厘米",V="㎡",W="平方米",K="km²",L="平方千米",Q="平方公里",J="亩",j="公顷",z={cm:"cm²",m:"㎡",km:"km²","米":"平方米","千米":"平方千米","公里":"平方公里"},Y=(i,e,t)=>e===t?i:i*Z(t),q=(i,e,t)=>e===t?i:i*function(i){switch(i){case H:return 1e4;case V:return 1;case K:return 1e-6;case O:return 1e4;case W:return 1;case L:case Q:return 1e-6;case J:return.0015;case j:return 1e-4;default:return 1}}(t),X=i=>z[i],Z=i=>{switch(i){case _:return 1;case R:case x:return 100;case U:return.001;case k:return 1;case N:case B:return.001;default:return 1}};const $=(i,e)=>{let t=i;if("vertical-surface-line"===e&&i.length>=1){const e=i[0],a=m.Cartographic.fromCartesian(e),o=m.Math.toDegrees(a.longitude),n=m.Math.toDegrees(a.latitude),s=0;t=[m.Cartesian3.fromDegrees(o,n,a.height),m.Cartesian3.fromDegrees(o,n,s)]}if("vertical-line"===e&&i.length>=2){const e=i[0],a=i[1],s=o(e),r=o(a);let l=s,p=r;s.height>r.height&&(l=r,p=s),console.log(l.longitude,l.latitude,p.height);const c=n(new m.Cartographic(l.longitude,l.latitude,p.height));t=[n(l),c,n(p),n(l)]}return e.startsWith("curve")&&i.length>2&&(t=ti(i)),t},ii=(i,e,a,o,n)=>{a.push(...i.map((a,n)=>{const s=i[n+1];if(s){let i=e?p(a,s):t(a,s);return i=Y(i,"m",o),{value:Number(i.toFixed(2)),unit:o,position:l([a,s]),positions:[a,s]}}return null}).filter(i=>i&&i.value>0))},ei=i=>{if(2===i.length)return i;let[e,t]=i;return t||(t=X(e)),[e,t]},ti=i=>{const e=i.length,t=s(i),a=Math.floor(t/5),o=[];for(let i=0;i<e;i++)o.push(1.5*i);const n=new m.CatmullRomSpline({points:i,times:o}),r=[],l=o[0],p=o[o.length-1];for(let i=0;i<a;i++){const e=i/(a-1),t=m.Math.lerp(l,p,e),o=n.evaluate(t);r.push(o)}return r},ai=(i,e=1e3)=>{if(i.length<2)return console.warn("至少需要2个点才能生成箭头"),[];const t=i[i.length-1],a=i[i.length-2],s=o(t),r=o(a),l=s.height,p=s.longitude-r.longitude,c=s.latitude-r.latitude,d=Math.sqrt(p**2+c**2);if(d<1e-12)return console.warn("最后两点经纬度重合,无法生成箭头"),[];const h=p/d,u=c/d,w=(i=>{const e=m.Math.toRadians(.5),t=n(i),a=n(new m.Cartographic(i.longitude+e,i.latitude,i.height)),o=2*m.Cartesian3.distance(t,a),s=n(new m.Cartographic(i.longitude,i.latitude+e,i.height));return{lon:o,lat:2*m.Cartesian3.distance(t,s)}})(s),g=e/w.lon*m.Math.RADIANS_PER_DEGREE,v=e/w.lat*m.Math.RADIANS_PER_DEGREE,A=Math.PI/6,P=e*Math.tan(A),y=P/w.lon*m.Math.RADIANS_PER_DEGREE,C=P/w.lat*m.Math.RADIANS_PER_DEGREE,D=s.longitude-h*g-u*y,f=s.latitude-u*v+h*C,E=s.longitude-h*g+u*y,M=s.latitude-u*v-h*C,I=n(new m.Cartographic(D,f,l)),S=n(new m.Cartographic(E,M,l));return[I,n(new m.Cartographic(s.longitude,s.latitude,l)),S]};class oi extends i{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new m.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=$(this.positions,this.drawData.shape);if(this.drawData.shapePositions=i,"vertical-surface-line"===this.drawData.shape){const i=this.drawData.pointPrimitives.get(1);i&&(i.position=this.drawData.shapePositions[1])}if(this.setShapePositions(i),!(i.length<2))return this.drawData.clampToGround?new m.GroundPolylineGeometry({positions:i,width:v.polyline.width}):new m.PolylineGeometry({positions:i,width:v.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.getGeometry();if(!i)return;const e=new m.GeometryInstance({geometry:i,id:`draw-${this.drawData.id}`});return i?this.drawData.clampToGround?new m.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new m.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new m.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 m.PolylineMaterialAppearance({material:new m.Material({fabric:{type:"Color",uniforms:{color:m.Color.fromCssColorString(v.polyline.color)}}})}),this.appearanceTran=new m.MaterialAppearance({material:new m.Material({fabric:{type:"Color",uniforms:{color:new m.Color(0,0,0,0)}}})}),this.depthFailAppearance=new m.PolylineMaterialAppearance({material:m.Material.fromType(m.Material.PolylineDashType,{color:m.Color.fromCssColorString(v.polyline.depthFailColor)})}))}}class ni extends i{positions;drawData;depthFailAppearance;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.setAppearance()}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=JSON.parse(JSON.stringify(this.positions));if(this.calcShapePositions(i),this.positions.length<3)return;const e=[new m.GeometryInstance({geometry:new m.PolygonGeometry({polygonHierarchy:new m.PolygonHierarchy(i),perPositionHeight:!0}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?new m.GroundPrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):new m.Primitive({geometryInstances:e,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})}setAppearance(){this.appearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.color)})}),this.depthFailAppearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.depthFailColor)})})}calcShapePositions(i){const e=[...i,i[0]];this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class si extends i{positions;drawData;depthFailAppearance;primitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.primitiveCollection=new m.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 i=JSON.parse(JSON.stringify(this.positions)),e=this.drawData.clampToGround?p(i[0],i[1]):t(i[0],i[1]);if(!e)return;const a=m.Cartographic.fromCartesian(i[0]).height,o=[new m.GeometryInstance({geometry:new m.CircleGeometry({center:i[0],height:a,radius:e}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new m.GroundPrimitive({geometryInstances:o,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new m.Primitive({geometryInstances:o,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.color)})}),this.depthFailAppearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.depthFailColor)})})}calcShapePositions(i){let e=i;const a=t(i[0],i[1]),o=m.Cartographic.fromCartesian(i[0]).height,n=new m.CircleOutlineGeometry({center:i[0],height:o,radius:a}),s=m.CircleOutlineGeometry.createGeometry(n);let r=[];if(s){const i=[].slice.call(s.attributes.position.values);r=m.Cartesian3.unpackArray(i),r.push(r[0]),e=r}this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class ri extends i{positions;drawData;depthFailAppearance;primitiveCollection;constructor(i){super(),this.drawData=i,this.positions=i.positions,this.primitiveCollection=new m.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,this.calcShapePositions(i);const e=m.Cartographic.fromCartesian(i[0]).height,t=m.Rectangle.fromCartesianArray(i),a=[new m.GeometryInstance({geometry:new m.RectangleGeometry({rectangle:t,height:e}),id:`draw-${this.drawData.id}`})];return this.drawData.clampToGround?this.primitiveCollection.add(new m.GroundPrimitive({geometryInstances:a,appearance:this.appearance,asynchronous:!1})):this.primitiveCollection.add(new m.Primitive({geometryInstances:a,appearance:this.appearance,depthFailAppearance:this.drawData.disDepthFail?void 0:this.depthFailAppearance,asynchronous:!1})),this.primitiveCollection}setAppearance(){this.appearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.color)})}),this.depthFailAppearance=new m.MaterialAppearance({material:m.Material.fromType("Color",{color:m.Color.fromCssColorString(v.polygon.depthFailColor)})})}calcShapePositions(i){let e=i;const t=m.Cartographic.fromCartesian(i[0]).height,a=m.Rectangle.fromCartesianArray(i),o=new m.RectangleOutlineGeometry({rectangle:a,height:t}),n=m.RectangleOutlineGeometry.createGeometry(o);let s=[];if(n){const i=[].slice.call(n.attributes.position.values);s=m.Cartesian3.unpackArray(i),s.push(s[0]),e=s}this.drawData.shapePositions=e,this.setShapePositions(this.drawData.shapePositions)}}class li extends i{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 m.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(i){if("point"===this.drawData.shape)return;this.drawData.measureUnit=i,this.clearAllDiv();const e=(i=>{let{shapePositions:e,positions:a,shape:o,clampToGround:n,measureUnit:s}=i;e||(e=a),n||(n=!1);const[c,d]=ei(s),h=X(c);i.measureUnit=[c,d];const m=[];if("polyline"===o&&(ii(a,n,m,c),m.push({value:0,unit:c,position:a[0],positions:a,prefixText:"起点"}),m.push({value:Number(m.reduce((i,e)=>i+e.value,0).toFixed(2)),unit:c,position:a[a.length-1],positions:a})),"vertical-surface-line"===o&&ii(e,n,m,c),"vertical-line"===o&&(ii(e,n,m,c),m.forEach((i,e)=>{0===e&&(i.prefixText="高度"),1===e&&(i.prefixText="水平距离"),2===e&&(i.prefixText="空间距离")})),"polygon"===o){ii(e,n,m,c);const i=q(r(e),h,d);m.push({value:Number(i.toFixed(2)),unit:d,position:l(e),positions:e})}if("rectangle"===o){ii(e,n,m,c);const i=q(r(e),h,d);m.push({value:Number(i.toFixed(2)),unit:d,position:l(e),positions:e})}if("circle"===o){const i=n?p(a[0],a[1]):t(a[0],a[1]);m.push({value:Number(Y(i,"m",c).toFixed(2)),unit:c,position:a[1],positions:a,prefixText:"半径"});const e=q(i*i*Math.PI,c,d);i>0&&m.push({value:Number(e.toFixed(2)),unit:d,position:a[0],positions:a})}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 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 `,o=document.createElement("div");return o.id=i,o.innerHTML=a,o.style.position="absolute",o.style.pointerEvents="none",o.className=`measure-label measure-label-${this.drawData.id}`,this.cesiumWidget.appendChild(o),o}calcShapePositions(i){this.setShapePositions(i)}}class pi extends i{positions;drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;viewer;constructor(i,e){super(),this.drawData=i,this.positions=i.positions,this.linePrimitiveCollection=new m.PrimitiveCollection,this.viewer=e,this.setAppearance()}getGeometry(){if(this.positions.length<2)return;const i=this.viewer.camera.position,e=.02*m.Cartographic.fromCartesian(i).height;let t=this.positions;return t=$(t,this.drawData.shape),t=ai(t,e),this.calcShapePositions(t),t.length<2?void 0:(this.setShapePositions(t),this.drawData.clampToGround?new m.GroundPolylineGeometry({positions:t,width:v.polyline.width}):new m.PolylineGeometry({positions:t,width:v.polyline.width}))}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.getGeometry();if(!i)return;const e=new m.GeometryInstance({geometry:i,id:this.drawData.id});return i?this.drawData.clampToGround?new m.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new m.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new m.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 m.PolylineMaterialAppearance({material:new m.Material({fabric:{type:"Color",uniforms:{color:m.Color.fromCssColorString(v.polyline.color)}}})}),this.appearanceTran=new m.MaterialAppearance({material:new m.Material({fabric:{type:"Color",uniforms:{color:new m.Color(0,0,0,0)}}})}),this.depthFailAppearance=new m.PolylineMaterialAppearance({material:m.Material.fromType(m.Material.PolylineDashType,{color:m.Color.fromCssColorString(v.polyline.depthFailColor)})}))}calcShapePositions(i){this.setShapePositions(i)}}class ci extends i{drawData;appearanceTran;depthFailAppearance;linePrimitiveCollection;constructor(i){super(),this.drawData=i,this.linePrimitiveCollection=new m.PrimitiveCollection,this.setAppearance()}getGeometry(){const i=this.drawData.shapePositions||[];if(this.calcShapePositions(i),!(i.length<2))return this.drawData.clampToGround?new m.GroundPolylineGeometry({positions:i,width:v.polyline.width}):new m.PolylineGeometry({positions:i,width:v.polyline.width})}getPrimitive(){if(!this.drawData.isEditing)return this._primitive;const i=this.getGeometry();if(!i)return;const e=new m.GeometryInstance({geometry:i,id:`draw-${this.drawData.id}`});return i?this.drawData.clampToGround?new m.GroundPolylinePrimitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1}):(this.linePrimitiveCollection.removeAll(),this.linePrimitiveCollection.add(new m.Primitive({geometryInstances:e,appearance:this.appearance,asynchronous:!1})),this.linePrimitiveCollection.add(new m.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 m.PolylineMaterialAppearance({material:new m.Material({fabric:{type:"Color",uniforms:{color:m.Color.fromCssColorString(v.polyline.color)}}})}),this.appearanceTran=new m.MaterialAppearance({material:new m.Material({fabric:{type:"Color",uniforms:{color:new m.Color(0,0,0,0)}}})}),this.depthFailAppearance=new m.PolylineMaterialAppearance({material:m.Material.fromType(m.Material.PolylineDashType,{color:m.Color.fromCssColorString(v.polyline.depthFailColor)})}))}calcShapePositions(i){this.setShapePositions(i)}}const di={point:1,circle:2,rectangle:2,sector:3,"vertical-surface-line":1,"vertical-line":2},hi={},mi=i=>{const{type:e,action:t,outline:a,pointCount:o}=i;hi[e]=(i,e)=>{t(i,e),a&&gi(i)},o&&(di[e]=o)},ui=(i,e,t)=>{hi[e]&&hi[e](t,i)},wi=i=>{const e=new oi(i);i.primitives.add(e)},gi=i=>{const e=new ci(i);i.primitives.add(e)},vi=(i,e)=>{const t=new pi(i,e);i.primitives.add(t)},Ai=i=>{const e=new ni(i);i.primitives.add(e)},Pi=i=>{const e=new si(i);i.primitives.add(e)},yi=i=>{const e=new ri(i);i.primitives.add(e)},Ci=(i,e)=>{const t=new li(i,e);i.primitives.add(t),i.measurePrimitive=t,i.primitives.raiseToTop(t)},Di="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAQBJREFUWEft2MsNgkAQBuAZtABCBctBErvATryiRRibkKudGKvgwMFtQGIBumOAYAxCArsTs4fZ8w758032wSJ4PtDzfCABXTvEKhjmhXpka+0a6rueNWB0KgmAdLVLYq6QbAHDvEwDgksdzOAz5pKUgK6tFkERnCogq3iq1Ng8ERRBS4HBjTrKywMAqjnfJCKFAGlTg3ieU9vOJV1lq2O/bjhgcyv59yBt8LXpXzLYBFsE2toKojHX+z75kWc8iwsV0PLm8XVLArotivp/RFrsYiiCLnp1rQiKoKWAHHWWcJ8yZsFF8zbj5eNRt9VwPRp1hGyCrq0cq5eArrLeC74BlkT4KR3TrCoAAAAASUVORK5CYII=",fi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAY9JREFUWEftmNFRwzAMhiVYAMoC5Y50jjAJ9LFliMIQNI/NJtA1CA9hAHIsgMWZYC5xHVtNajcHzqtl+ctvSZaNMPIPR84HEXDoDv1tBc/XxRMCpFaVEPNqcTXvq6RTwbOsSE8FTfUFBOKNE05NQsxRiK3u4/MEy49F8myDdwJOstcNEN32VWCouhHQu4JetnYPp84tVr4uHl8OGofvd7Ocw8kGnKwL4jjk2lTLhLU2y0guGgE7pI8KdsVkuBhEzDtPGstYEEAkmstyMcmKFRDcN9WyjUk774AKQEE1IW1jyt47IACV1XJ22VRNQqKgN70Im9qyAIASbRdST4qunjEQoB3S1tAGBATQY05iy7ObEDdHLzMmOFPi6KBBFLTBuSC9A5rg6pijqSm79TrpHRC021o7IdrZfbwy8wNpztYacgRlhtuitu38b3E/rt9Z/w+Q9czBVtV9RCpX7I7adTKw2QBAIFy7njz2Bvy+OGXFighS9pvMDjWVdXlKHrg/xFaQ6/DQdhFwqKJRwaEKfgEJRgs46ima/wAAAABJRU5ErkJggg==",Ei="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAMdJREFUWEdjZBjkgHGQu49h1IGUxtBoCI6GIKUhQKn+0TQ4GoKUhgCl+kfT4GgIUhoClOofTYM0DUGh6bfrGRgYFSi1BJ9+xn//Dr7NVluASw3eKBaadvs/LR0HM/sfI4Pjh0zVA9jswulAgenXFZj+s9ynjwP/KH7I1HxAkgNBioWn3kr4z8RkT1tH/n/wLlO1kawopq3DiDN9tJghLpxwqxoNwdEQpDQEKNU/mgZHQ5DSEKBU/2gaHA1BSkOAUv2jaXDYhyAAbjwcKU1UyjYAAAAASUVORK5CYII=",Mi="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAkJJREFUWEftl19SwkAMxpPCARAvgDPijKewnER4BA8hHEJ5FE8CnsIZccZ6AJEDMF1Ny5Zu/6bNMvQBXmk3vyZfvmQRGv7DhvPBGVBaIasZ7M4/XwhoM74eScH0+9YAAzilhuHByttMbq5sQFoBNOE0lh1IMeDF83qJAG52tuSQIsBiODuZrA14+fQxVIhBUwSqA1hFmURcHPQIAIiLuo1TG5CguvP14z/Z1EcYtHzVi4ARpj7sXh3V/iLw30l/ULdhRIAUtDN/723Ht56RUYTpZtyf6f/qwtF7YkAdPAtQAmbdB08KSMF/Hm4WRRmpCkjeyWmc0hJHVlLSiaQ3gHYv/IidR7rM+6CDPZX7ZCFg0ueoW7fj/kqiLfoQ6u7DGcWQuYDHgNNQVSAzAZNwgQkjpDJHXldUSm1DDrTv01nHnmHmOQtGCpA3vsJwnJJ35mvXUbBkySJD5ylAPR04B54EMD7C4kJGBbMkdJn16BK3/FZq21GOc8eZ17lNYmZSeeHA76cgOZlOPpMse9G8zgUMOo3ErWC631c8H3Fk22bKlolCHzQgLRq1rk4ZHGtZIEjSUJneqo46zvhkAXI1VhWQe27pLOYe1FhAXapGLqzhddN3yYLQV9/myg9vwQQR3EdEGkz6pAL09KXJuECFUYIrAFcu8edqazDtk9nhOVZSBF4b0NhUIjM3Q0nhRCU2djtj4uznjvC6qc8XZTCer7gmbWTOOqDegpQCV3JRT+rRWgbrdCjnnTMgJ0tHsxlpcM77f6iGZThXF5iUAAAAAElFTkSuQmCC";class Ii{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=Mi,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 o=document.createElement("img");o.src=Di,o.title="点击添加节点",o.className="draw-edit-icon",a.appendChild(o),a.addEventListener("click",()=>{this._drawEditEvent.drawEditAdd&&this._drawEditEvent.drawEditAdd(this._editPointPrimitive)});const n=document.createElement("DIV"),s=document.createElement("img");n.id="removePoint",s.src=Ei,s.title="点击删除节点",s.className="draw-edit-icon",n.appendChild(s),n.addEventListener("click",()=>{this._drawEditEvent.drawEditRemove&&this._drawEditEvent.drawEditRemove(this._editPointPrimitive)});const r=document.createElement("DIV"),l=document.createElement("img");l.src=fi,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(n),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 Ii.editUI||(Ii.editUI=new Ii(i,e)),Ii.editUI}showAt(i,e,t){this.setVisible(!0),this._editUiPosition=i,this._editPointPrimitive=e,this.setAddElementStatus(!di[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(){Ii.editUI&&(this._editUi&&this._editUi.parentNode.removeChild(this._editUi),this._editUi=null)}}hi.polyline=i=>{wi(i)},hi["polyline-arrow"]=(i,e)=>{wi(i),vi(i,e)},hi.curve=i=>{wi(i)},hi["curve-arrow"]=(i,e)=>{wi(i),vi(i,e)},hi["vertical-line"]=i=>{i.clampToGround=!1,wi(i)},hi["vertical-surface-line"]=i=>{i.clampToGround=!1,wi(i)},hi.polygon=i=>{Ai(i),gi(i)},hi.circle=i=>{Pi(i),gi(i)},hi.rectangle=i=>{yi(i),gi(i)},mi({type:"sector",action:b,outline:!0,pointCount:3}),mi({type:"db-arrow",action:G,outline:!0,pointCount:4});const Si=i=>{let e;const t=[];let a=new m.Cartesian3(0,0,0);const o=[];let n,s,r;const l=c.createToolTip(i),p=v.point;let h=!1;((i,e)=>{const t=i.scene,a=new m.ScreenSpaceEventHandler(t.canvas);let o;i.cesiumWidget.screenSpaceEventHandler.removeInputAction(m.ScreenSpaceEventType.LEFT_DOUBLE_CLICK),a.setInputAction(a=>{const n=t.pickPosition(a.position),s=(new Date).getTime();if(o&&s-o<270){const t=i.scene.pick(a.position);return void e(u.DRAW_DB_CLICK,{position:n,pickPrimitive:t?.primitive,windowPosition:a.position})}e(u.DRAW_ADD,{position:n}),o=(new Date).getTime()},m.ScreenSpaceEventType.LEFT_CLICK),a.setInputAction(a=>{const o=i.scene.pick(a.endPosition),n=t.pickPosition(a.endPosition);e(u.DRAW_MOVE,{position:n,pickPrimitive:o?.primitive,windowPosition:a.endPosition}),o&&e(u.DRAW_PICK,{position:n,pickPrimitive:o?.primitive,windowPosition:a.endPosition})},m.ScreenSpaceEventType.MOUSE_MOVE),a.setInputAction(()=>{e(u.DRAW_RIGHT_CLICK,{})},m.ScreenSpaceEventType.RIGHT_CLICK)})(i,(i,e)=>{n&&(["drawDbClick","drawPick","drawMove","drawRightClick"].includes(i)||n.isEditing)&&D[i]?.(e)});const w=new m.PrimitiveCollection;w.destroyPrimitives=!1,i.scene.primitives.add(w);const A=()=>{n&&(n.isEditing=!1,n.isDisAdd=!0,M(),S.id===n.id?y():(P(n.id),n={}))},P=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(),w.remove(t?.primitives)},300)},y=()=>{if(S.id)return S.id="",n.isDisAdd=!0,n.isEditing=!0,S.originPosition?(n.positions.splice(S.index,1,S.originPosition),S.pointPrimitive.position=S.originPosition):n?.positions.splice(S.index,1),x.drawEditEnd&&x.drawEditEnd(n),setTimeout(()=>{n.isEditing=!1,n.isDisAdd=!1},300),a=new m.Cartesian3(0,0,0),s=void 0,void M();if((!di[n.shape]||di[n.shape]>2)&&n.positions&&n.positions.length>2){const i=h?2:1,e=n.pointPrimitives.get(n.positions.length-i);return n.pointPrimitives.remove(e),void n?.positions.splice(n.positions.length-i,1)}a=new m.Cartesian3(0,0,0),s=void 0,P(n.id),n={},M()},C=e=>{e||(e=n),i._element.style.cursor="default",a=new m.Cartesian3(0,0,0),e.positions.pop(),e.isDisAdd=!0,setTimeout(()=>{e.isEditing=!1,e.isDisAdd=!1,x.drawEnd&&x.drawEnd(e),n={}},300),s=void 0,r&&(e.pointPrimitives.remove(r),r=void 0),M()},D={drawAdd:({position:i})=>{if(n.positions.push(i),h=!1,S.id)return x.drawEditEnd&&x.drawEditEnd(n),S.id="",void C();G(i,n),x.drawAdd&&x.drawAdd(i,n),n.positions.length>di[n.shape]&&C()},drawMove:({position:i,windowPosition:e})=>{if(h=!0,I(),i&&!n.isDisAdd&&n.isEditing){if(M(e),S.id)n.positions.splice(S.index,1,i),S.pointPrimitive.position=i;else{const e=n.positions.findIndex(i=>i.x===a.x&&i.y===a.y&&i.z===a.z);n.positions.push(i),-1!==e&&n.positions.splice(e,1),r&&n.pointPrimitives.remove(r),r=G(i,n)}a=i,x.drawMove&&x.drawMove(i,n)}},drawPick:({pickPrimitive:i,windowPosition:e})=>{n.isEditing||i instanceof m.PointPrimitive&&f(i,e)},drawDbClick:({position:i,windowPosition:e,pickPrimitive:t})=>{if(n.isEditing){if(di[n.shape])return;C()}else!n.isEditing&&t&&E(i,e,t)},drawRightClick:()=>{n.isEditing?y():e.setVisible(!1)}},f=(e,a)=>{const n=e.id.split("-")[1],r=o.find(i=>i.id===n);t.includes(e.id)||r&&r.edit&&(i._element.style.cursor="pointer",e.pixelSize=1.5*p.pixelSize,e.outlineWidth=1.5*p.outlineWidth,s=e,l.showAt(a,g.pointEnter),l.setVisible(!0))},E=(i,a,n)=>{if(n instanceof m.PointPrimitive){if(t.includes(n.id))return;const a=n.id.split("-")[1],s=o.find(i=>i.id===a);if(!s)return;if(!s.edit)return;e.showAt(i,n,s.shape),x.drawEditStart&&x.drawEditStart(s)}},M=e=>{if(!l)return void(i._element.style.cursor="default");if(!e||!n.positions)return i._element.style.cursor="default",void l.setVisible(!1);const t=di[n.shape]?"default":"default-dbclick";S.id?l.showAt(e,g.drawEditMove[n.shape]||g.drawEditMove.default):di[n.shape]!==n.positions.length?n.positions.length>1?l.showAt(e,g.drawMove[t]||g.drawMove[t]):l.showAt(e,g.drawStart[t]||g.drawStart.default):l.showAt(e,g.drawEnd)},I=()=>{s&&(s.pixelSize=p.pixelSize,s.outlineWidth=p.outlineWidth,M())},S={},F={drawEditAdd:t=>{e.setVisible(!1);const{id:a,index:o,drawData:s}=T(t),r=new m.Cartesian3(t.position.x,t.position.y,t.position.z);s?.positions.splice(o,0,r),n=s;const l=G(r,n);i._element.style.cursor="move",Object.assign(S,{id:a,index:o+1,pointPrimitive:l,originPosition:r}),n.isEditing=!0},drawEditMove:t=>{e.setVisible(!1),i._element.style.cursor="move";const{id:a,index:o,drawData:s}=T(t);n=s,Object.assign(S,{id:a,index:o,pointPrimitive:t,originPosition:new m.Cartesian3(t.position.x,t.position.y,t.position.z)}),n.isEditing=!0},drawEditRemove:i=>{e.setVisible(!1);const{index:t,drawData:a}=T(i);a.isEditing=!0,a.isDisAdd=!0,a?.positions.splice(t,1),a?.pointPrimitives.remove(i),x.drawEditEnd&&x.drawEditEnd(a),setTimeout(()=>{a.isEditing=!1,a.isDisAdd=!1},300)},drawDelete:i=>{e.setVisible(!1);const{id:t}=T(i);P(t)}};e=Ii.createEditUi(i,F);const T=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}},b=(i,e)=>{const t=new m.PrimitiveCollection,a=new m.PointPrimitiveCollection;t.add(a);const o={id:i.id,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:e,clampToGround:i.clampToGround,pointPrimitives:a,primitives:t};return w.add(t),e.forEach(i=>{G(i,o)}),o},G=(i,e)=>e.pointPrimitives.add({id:`draw-${e.id}-${d()}`,position:i,...p,color:m.Color.fromCssColorString(p.color),outlineColor:m.Color.fromCssColorString(p.outlineColor)}),R=e=>{const t=b({...e},e.positions);t.positions.push(t.positions[t.positions.length-1]),n=t,o.push(t),ui(i,e.shape,t),e.measure&&Ci(t,i),t.primitives.raiseToTop(t.pointPrimitives),C(t)},x={};return{draw:e=>{i._element.style.cursor="crosshair",s=void 0,e.id=d();const t=b(e,[]);n=t,x.drawStart&&x.drawStart(t),o.push(t),ui(i,e.shape,t),e.measure&&Ci(t,i),t.primitives.raiseToTop(t.pointPrimitives)},removeEditing:A,remove:i=>{P(i.id),M()},removeAll:()=>{o.forEach(i=>{i.measurePrimitive?.clearAllDiv()}),w.removeAll(),o.length=0,A()},setDrawStyle:i=>{Object.assign(v.point,i.point),Object.assign(v.polyline,i.polyline),Object.assign(v.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 li);t&&t.updateUnit(e)},reShowDrawData:R,reShowDrawDatas:i=>{i.forEach(i=>{R(i)})}}};export{w as Draw,u as DrawEventType,v as DrawStyle,mi as addDrawActions,Si 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",
4
+ "version": "0.0.17-beta.1",
5
5
  "author": "koino",
6
6
  "keywords": [
7
7
  "cesium",
@@ -26,11 +26,10 @@
26
26
  ],
27
27
  "peerDependencies": {
28
28
  "cesium": "1.131.0",
29
- "html2canvas": "^1.4.1"
29
+ "@turf/turf": "^7.0.0"
30
30
  },
31
31
  "dependencies": {
32
- "@ino-cesium/common": "0.0.16",
33
- "html2canvas": "^1.4.1"
32
+ "@ino-cesium/common": "0.0.17-beta.1"
34
33
  },
35
34
  "scripts": {
36
35
  "build": "rimraf dist && rollup -c",