UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) • 21.4 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{GeometryCursor as s}from"../../../geometry/GeometryCursor.js";import{collectMultipath as t}from"../../../geometry/geometryCursorCollectUtils.js";import{getPathLength as i}from"../../../geometry/support/coordsUtils.js";import{setId as h}from"../CIMCursor.js";class e{static{this.instance=null}static local(){return null===e.instance&&(e.instance=new e),e.instance}execute(s,t,i){return new r(s,t,i)}}class r{constructor(s,t,i){this._defaultPointSize=20,this._inputGeometries=s,this._geomUnitsPerPoint=i,this._rule=t.rule??"FullGeometry",this._defaultSize=this._defaultPointSize*i}next(){let i;for(;i=this._inputGeometries.next();){const h=this._processGeom(t(i));if(h?.length)return s.fromJSONCIM({paths:h})}return null}_clone(s){return[s[0],s[1]]}_mid(s,t){return[(s[0]+t[0])/2,(s[1]+t[1])/2]}_mix(s,t,i,h){return[s[0]*t+i[0]*h,s[1]*t+i[1]*h]}_add(s,t){return[s[0]+t[0],s[1]+t[1]]}_add2(s,t,i){return[s[0]+t,s[1]+i]}_sub(s,t){return[s[0]-t[0],s[1]-t[1]]}_dist(s,t){return Math.sqrt((s[0]-t[0])*(s[0]-t[0])+(s[1]-t[1])*(s[1]-t[1]))}_norm(s){return Math.sqrt(s[0]*s[0]+s[1]*s[1])}_normalize(s,t=1){const i=t/this._norm(s);s[0]*=i,s[1]*=i}_leftPerpendicular(s){const t=-s[1],i=s[0];s[0]=t,s[1]=i}_leftPerp(s){return[-s[1],s[0]]}_rightPerpendicular(s){const t=s[1],i=-s[0];s[0]=t,s[1]=i}_rightPerp(s){return[s[1],-s[0]]}_dotProduct(s,t){return s[0]*t[0]+s[1]*t[1]}_crossProduct(s,t){return s[0]*t[1]-s[1]*t[0]}_rotateDirect(s,t,i){const h=s[0]*t-s[1]*i,e=s[0]*i+s[1]*t;s[0]=h,s[1]=e}_makeCtrlPt(s){const t=[s[0],s[1]];return h(t,1),t}_addAngledTicks(s,t,i,h){const e=this._sub(i,t);this._normalize(e);const r=this._crossProduct(e,this._sub(h,t));let _;_=r>0?this._rightPerp(e):this._leftPerp(e);const c=Math.abs(r)/2,u=[];u.push([t[0]+(_[0]-e[0])*c,t[1]+(_[1]-e[1])*c]),u.push(t),u.push(i),u.push([i[0]+(_[0]+e[0])*c,i[1]+(_[1]+e[1])*c]),s.push(u)}_addBezier2(s,t,i,h,e){if(0===e--)return void s.push(h);const r=this._mid(t,i),_=this._mid(i,h),c=this._mid(r,_);this._addBezier2(s,t,r,c,e),this._addBezier2(s,c,_,h,e)}_addBezier3(s,t,i,h,e,r){if(0===r--)return void s.push(e);const _=this._mid(t,i),c=this._mid(i,h),u=this._mid(h,e),o=this._mid(_,c),a=this._mid(c,u),n=this._mid(o,a);this._addBezier3(s,t,_,o,n,r),this._addBezier3(s,n,a,u,e,r)}_add90DegArc(s,t,i,h,e){const r=e??this._crossProduct(this._sub(i,t),this._sub(h,t))>0,_=this._mid(t,i),c=this._sub(_,t);r?this._leftPerpendicular(c):this._rightPerpendicular(c),_[0]+=c[0],_[1]+=c[1],this._addBezier3(s,t,this._mix(t,.33333,_,.66667),this._mix(i,.33333,_,.66667),i,4)}_addArrow(s,t,i){const h=t[0],e=t[1],r=t[t.length-1],_=this._sub(h,e),c=this._norm(_);this._normalize(_);const u=Math.abs(this._crossProduct(_,this._sub(r,e)));let o=this._dotProduct(_,this._sub(r,e));o<.05*c?o=.05*c:o>.95*c&&(o=.95*c);const a=.5*u,n=this._leftPerp(_),p=[e[0]+_[0]*o,e[1]+_[1]*o],d=t.length-1,l=[];l.push(i?[-n[0],-n[1]]:n);let b=[-_[0],-_[1]];for(let P=1;P<d-1;P++){const s=this._sub(t[P+1],t[P]);this._normalize(s);const i=this._dotProduct(s,b),h=this._crossProduct(s,b),e=Math.sqrt((1+i)/2),r=this._sub(s,b);this._normalize(r),r[0]/=e,r[1]/=e,l.push(h<0?[-r[0],-r[1]]:r),b=s}l.push(this._rightPerp(b));for(let P=l.length-1;P>0;P--)s.push([t[P][0]+l[P][0]*a,t[P][1]+l[P][1]*a]);s.push([p[0]+l[0][0]*a,p[1]+l[0][1]*a]),s.push([p[0]+l[0][0]*u,p[1]+l[0][1]*u]),s.push(h),s.push([p[0]-l[0][0]*u,p[1]-l[0][1]*u]),s.push([p[0]-l[0][0]*a,p[1]-l[0][1]*a]);for(let P=1;P<l.length;P++)s.push([t[P][0]-l[P][0]*a,t[P][1]-l[P][1]*a])}_addDash(s,t,i){const h=this._norm(i)/7;this._normalize(i);let e=[];for(let r=0;r<=7;r++)e.push([t[0]+i[0]*r*h,t[1]+i[1]*r*h]),1&r&&(s.push(e),e=[])}_cp2(s,t,i){return s.length>=2?s[1]:this._add2(s[0],t*this._defaultSize,i*this._defaultSize)}_cp3(s,t,i,h){if(s.length>=3)return s[2];const e=this._mix(s[0],1-i,t,i),r=this._sub(t,s[0]);return this._normalize(r),this._rightPerpendicular(r),[e[0]+r[0]*h*this._defaultSize,e[1]+r[1]*h*this._defaultSize]}_arrowPath(s){if(s.length>2)return s;const t=s[0],i=this._cp2(s,-4,0),h=this._sub(t,i);this._normalize(h);const e=this._rightPerp(h);return[t,i,[t[0]+(e[0]-h[0])*this._defaultSize,t[1]+(e[1]-h[1])*this._defaultSize]]}_arrowLastSeg(s){const t=s[0],i=this._cp2(s,-4,0);let h;if(s.length>=3)h=s[s.length-1];else{const s=this._sub(t,i);this._normalize(s);const e=this._rightPerp(s);h=[t[0]+(e[0]-s[0])*this._defaultSize,t[1]+(e[1]-s[1])*this._defaultSize]}return[i,h]}_processGeom(s){if(!s)return null;const t=[];for(const e of s){const s=e.length>1&&i(e)<this._defaultSize;if(!e||0===e.length||s)continue;const r=e.length;let _=e[0];switch(this._rule){case"PerpendicularFromFirstSegment":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,.5,4),h=[];h.push(i),h.push(this._mid(_,s)),t.push(h);break}case"ReversedFirstSegment":{const s=this._cp2(e,0,-1);t.push([s,_]);break}case"PerpendicularToSecondSegment":{if(e.length<3)return[];const s=this._cp2(e,-4,1),i=this._cp3(e,s,.882353,-1.94),h=[];h.push(this._mid(s,i)),h.push(_),t.push(h);break}case"SecondSegmentWithTicks":{if(e.length<3)return[];const s=this._cp2(e,-4,1),i=this._cp3(e,s,.882353,-1.94),h=this._sub(i,s);let r;r=this._crossProduct(h,this._sub(_,s))>0?this._rightPerp(h):this._leftPerp(h);const c=[];c.push([s[0]+(r[0]-h[0])/3,s[1]+(r[1]-h[1])/3]),c.push(s),c.push(i),c.push([i[0]+(r[0]+h[0])/3,i[1]+(r[1]+h[1])/3]),t.push(c);break}case"DoublePerpendicular":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,.5,3),h=this._mid(_,s),r=this._sub(h,i);this._normalize(r);const c=this._crossProduct(r,this._sub(_,i));this._leftPerpendicular(r);const u=[];u.push(_),u.push([i[0]+r[0]*c,i[1]+r[1]*c]),t.push(u);const o=[];o.push([i[0]-r[0]*c,i[1]-r[1]*c]),o.push(s),t.push(o);break}case"OppositeToFirstSegment":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,.5,3),h=this._mid(_,s),r=this._sub(h,i);this._normalize(r);const c=this._crossProduct(r,this._sub(_,i));this._leftPerpendicular(r);const u=[];u.push([i[0]+r[0]*c,i[1]+r[1]*c]),u.push([i[0]-r[0]*c,i[1]-r[1]*c]),t.push(u);break}case"TriplePerpendicular":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,.5,4),h=this._mid(_,s),r=this._sub(h,i);this._normalize(r);const c=this._crossProduct(r,this._sub(_,i));this._leftPerpendicular(r);const u=[];u.push([i[0]+r[0]*c*.8,i[1]+r[1]*c*.8]),u.push([h[0]+.8*(_[0]-h[0]),h[1]+.8*(_[1]-h[1])]),t.push(u),t.push([i,h]);const o=[];o.push([i[0]-r[0]*c*.8,i[1]-r[1]*c*.8]),o.push([h[0]+.8*(s[0]-h[0]),h[1]+.8*(s[1]-h[1])]),t.push(o);break}case"HalfCircleFirstSegment":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,.5,4),h=this._mid(_,s);let r=this._sub(s,_);const c=Math.cos(Math.PI/18),u=Math.sin(Math.PI/18),o=Math.sqrt((1+c)/2),a=Math.sqrt((1-c)/2),n=[];let p;this._crossProduct(r,this._sub(i,_))>0?(n.push(_),r=this._sub(_,h),p=s):(n.push(s),r=this._sub(s,h),p=_),this._rotateDirect(r,o,a),r[0]/=o,r[1]/=o;for(let t=1;t<=18;t++)n.push(this._add(h,r)),this._rotateDirect(r,c,u);n.push(p),t.push(n);break}case"HalfCircleSecondSegment":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,1,-1);let h=this._sub(_,s);this._normalize(h);const r=this._crossProduct(h,this._sub(i,s))/2;this._leftPerpendicular(h);const c=[s[0]+h[0]*r,s[1]+h[1]*r];h=this._sub(s,c);const u=Math.cos(Math.PI/18);let o=Math.sin(Math.PI/18);r>0&&(o=-o);const a=[s];for(let t=1;t<=18;t++)this._rotateDirect(h,u,o),a.push(this._add(c,h));t.push(a);break}case"HalfCircleExtended":{const s=this._cp2(e,0,-2),i=this._cp3(e,s,1,-1);let h;if(r>=4)h=e[3];else{const t=this._sub(_,s);h=this._add(i,t)}const c=this._dist(s,i)/2/.75,u=this._sub(s,_);this._normalize(u,c);const o=this._sub(i,h);this._normalize(o,c);const a=[h,i];t.push(a);const n=[this._clone(i)];this._addBezier3(n,i,this._add(i,o),this._add(s,u),s,4),n.push(_),t.push(n);break}case"OpenCircle":{const s=this._cp2(e,-2,0),i=this._sub(s,_),h=Math.cos(Math.PI/18),r=-Math.sin(Math.PI/18),c=[s];for(let t=1;t<=33;t++)this._rotateDirect(i,h,r),c.push(this._add(_,i));t.push(c);break}case"CoverageEdgesWithTicks":{const s=this._cp2(e,0,-1);let i,h;if(r>=3)i=e[2];else{const t=this._sub(s,_),h=this._leftPerp(t);i=[_[0]+h[0]-.25*t[0],_[1]+h[1]-.25*t[1]]}if(r>=4)h=e[3];else{const t=this._mid(_,s),e=this._sub(_,s);this._normalize(e),this._leftPerpendicular(e);const r=this._crossProduct(e,this._sub(i,t));this._rightPerpendicular(e),h=[i[0]+e[0]*r*2,i[1]+e[1]*r*2]}const c=this._sub(s,_);let u,o;u=this._crossProduct(c,this._sub(i,_))>0?this._rightPerp(c):this._leftPerp(c),o=[],o.push(i),o.push(_),o.push([_[0]+(u[0]-c[0])/3,_[1]+(u[1]-c[1])/3]),t.push(o),u=this._crossProduct(c,this._sub(h,s))>0?this._rightPerp(c):this._leftPerp(c),o=[],o.push([s[0]+(u[0]+c[0])/3,s[1]+(u[1]+c[1])/3]),o.push(s),o.push(h),t.push(o);break}case"GapExtentWithDoubleTicks":{const s=this._cp2(e,0,2),i=this._cp3(e,s,0,1);let h;if(r>=4)h=e[3];else{const t=this._sub(s,_);h=this._add(i,t)}this._addAngledTicks(t,_,s,this._mid(i,h)),this._addAngledTicks(t,i,h,this._mid(_,s));break}case"GapExtentMidline":{const s=this._cp2(e,2,0),i=this._cp3(e,s,0,1);let h;if(r>=4)h=e[3];else{const t=this._sub(s,_);h=this._add(i,t)}const c=[];c.push(this._mid(_,i)),c.push(this._mid(s,h)),t.push(c);break}case"Chevron":{const s=this._cp2(e,-1,-1);let i;if(r>=3)i=e[2];else{const t=this._sub(s,_);this._leftPerpendicular(t),i=this._add(_,t)}t.push([s,this._makeCtrlPt(_),i]);break}case"PerpendicularWithArc":{const s=this._cp2(e,0,-2),i=this._cp3(e,s,.5,-1),h=this._sub(s,_),c=this._norm(h);h[0]/=c,h[1]/=c;const u=this._crossProduct(h,this._sub(i,_));let o=this._dotProduct(h,this._sub(i,_));o<.05*c?o=.05*c:o>.95*c&&(o=.95*c);const a=[_[0]+h[0]*o,_[1]+h[1]*o];let n=this._leftPerp(h),p=[];if(p.push([a[0]-n[0]*u,a[1]-n[1]*u]),p.push([a[0]+n[0]*u,a[1]+n[1]*u]),t.push(p),r>=4){const s=e[3];let i=this._dotProduct(h,this._sub(s,_));i<.1*c?i=.1*c:i>.9*c&&(i=.9*c);const r=[_[0]+h[0]*i,_[1]+h[1]*i],u=this._crossProduct(h,this._sub(s,_)),o=[];o.push([r[0]-n[0]*u,r[1]-n[1]*u]),o.push([r[0]+n[0]*u,r[1]+n[1]*u]),t.push(o)}const d=[s[0]+n[0]*u,s[1]+n[1]*u];n=this._sub(s,d);const l=Math.cos(Math.PI/18);let b=Math.sin(Math.PI/18);u<0&&(b=-b),p=[_,s];for(let t=1;t<=9;t++)this._rotateDirect(n,l,b),p.push(this._add(d,n));t.push(p);break}case"ClosedHalfCircle":{const s=this._cp2(e,2,0),i=this._mid(_,s),h=this._sub(s,i),r=Math.cos(Math.PI/18),c=Math.sin(Math.PI/18),u=[_,s];for(let t=1;t<=18;t++)this._rotateDirect(h,r,c),u.push(this._add(i,h));t.push(u);break}case"TripleParallelExtended":{const s=this._cp2(e,0,-2),i=this._cp3(e,s,1,-2),r=this._mid(_,s),c=this._sub(i,s);this._normalize(c);const u=Math.abs(this._crossProduct(c,this._sub(r,s)))/2,o=this._dist(s,i),a=[s,_];a.push([_[0]+c[0]*o*.5,_[1]+c[1]*o*.5]),t.push(a);const n=[];n.push([r[0]-c[0]*u,r[1]-c[1]*u]),n.push([r[0]+c[0]*o*.375,r[1]+c[1]*o*.375]),h(n[n.length-1],1),n.push([r[0]+c[0]*o*.75,r[1]+c[1]*o*.75]),t.push(n);const p=[s,i];t.push(p);break}case"ParallelWithTicks":{const s=this._cp2(e,3,0),i=this._cp3(e,s,.5,-1),h=this._sub(i,s);this._normalize(h);const r=this._crossProduct(h,this._sub(i,_));this._leftPerpendicular(h),this._addAngledTicks(t,_,s,i),this._addAngledTicks(t,this._mix(_,1,h,r),this._mix(s,1,h,r),this._mid(_,s));break}case"Parallel":{const s=this._cp2(e,3,0),i=this._cp3(e,s,.5,-1),h=this._sub(s,_);this._normalize(h);const r=this._leftPerp(h),c=this._crossProduct(h,this._sub(i,_));let u=[_,s];t.push(u),u=[],u.push([_[0]+r[0]*c,_[1]+r[1]*c]),u.push([s[0]+r[0]*c,s[1]+r[1]*c]),t.push(u);break}case"PerpendicularToFirstSegment":{const s=this._cp2(e,3,0),i=this._cp3(e,s,.5,-1),h=this._mid(_,s),r=this._sub(s,_);this._normalize(r);const c=this._crossProduct(r,this._sub(i,_));this._leftPerpendicular(r);const u=[];u.push([h[0]-r[0]*c*.25,h[1]-r[1]*c*.25]),u.push([h[0]+r[0]*c*1.25,h[1]+r[1]*c*1.25]),t.push(u);break}case"ParallelOffset":{const s=this._cp2(e,3,0),i=this._cp3(e,s,.5,-1),h=this._sub(s,_);this._normalize(h);const r=this._crossProduct(h,this._sub(i,_));this._leftPerpendicular(h);const c=[];c.push([_[0]-h[0]*r,_[1]-h[1]*r]),c.push([s[0]-h[0]*r,s[1]-h[1]*r]),t.push(c);const u=[];u.push([_[0]+h[0]*r,_[1]+h[1]*r]),u.push([s[0]+h[0]*r,s[1]+h[1]*r]),t.push(u);break}case"OffsetOpposite":{const s=this._cp2(e,3,0),i=this._cp3(e,s,.5,-1),h=this._sub(s,_);this._normalize(h);const r=this._crossProduct(h,this._sub(i,_));this._leftPerpendicular(h);const c=[];c.push([_[0]-h[0]*r,_[1]-h[1]*r]),c.push([s[0]-h[0]*r,s[1]-h[1]*r]),t.push(c);break}case"OffsetSame":{const s=this._cp2(e,3,0),i=this._cp3(e,s,.5,-1),h=this._sub(s,_);this._normalize(h);const r=this._crossProduct(h,this._sub(i,_));this._leftPerpendicular(h);const c=[];c.push([_[0]+h[0]*r,_[1]+h[1]*r]),c.push([s[0]+h[0]*r,s[1]+h[1]*r]),t.push(c);break}case"CircleWithArc":{let s=this._cp2(e,3,0);const i=this._cp3(e,s,.5,-1);let c,u;if(r>=4)c=e[3],u=this._crossProduct(this._sub(c,s),this._sub(i,s))>0;else{c=s,u=this._crossProduct(this._sub(c,_),this._sub(i,_))>0;const t=24*this._geomUnitsPerPoint,h=this._sub(c,_);this._normalize(h,t);const e=Math.sqrt(2)/2;this._rotateDirect(h,e,u?e:-e),s=this._add(_,h)}const o=this._sub(s,_),a=Math.cos(Math.PI/18),n=Math.sin(Math.PI/18),p=[s];for(let t=1;t<=36;t++)this._rotateDirect(o,a,n),p.push(this._add(_,o));this._add90DegArc(p,s,c,i,u),h(p[p.length-8],1),t.push(p);break}case"DoubleJog":{let s,i=this._cp2(e,-3,1),h=this._cp3(e,i,-1,-.5);if(r>=4)s=e[3];else{const t=_;_=i,s=h;const e=this._dist(_,t),r=this._dist(s,t);let c=30*this._geomUnitsPerPoint;.5*e<c&&(c=.5*e),.5*r<c&&(c=.5*r),i=this._mix(_,c/e,t,(e-c)/e),h=this._mix(s,c/r,t,(r-c)/r)}const c=this._mid(_,i),u=this._mid(s,h),o=this._dist(_,i),a=this._dist(h,s);let n=Math.min(o,a)/8;n=Math.min(n,24*this._geomUnitsPerPoint);const p=Math.cos(Math.PI/4);let d=this._sub(_,i);this._normalize(d,n),this._crossProduct(d,this._sub(s,i))>0?this._rotateDirect(d,p,-p):this._rotateDirect(d,p,p);let l=[];l.push(i),l.push(this._add(c,d)),l.push(this._sub(c,d)),l.push(_),t.push(l),d=this._sub(s,h),this._normalize(d,n),this._crossProduct(d,this._sub(_,h))<0?this._rotateDirect(d,p,p):this._rotateDirect(d,p,-p),l=[],l.push(h),l.push(this._add(u,d)),l.push(this._sub(u,d)),l.push(s),t.push(l);break}case"PerpendicularOffset":{const s=this._cp2(e,-4,1),i=this._cp3(e,s,.882353,-1.94),h=this._sub(i,s);this._crossProduct(h,this._sub(_,s))>0?this._rightPerpendicular(h):this._leftPerpendicular(h);const r=[h[0]/8,h[1]/8],c=this._sub(this._mid(s,i),r);t.push([c,_]);break}case"LineExcludingLastSegment":{const s=this._arrowPath(e),i=[];let h=s.length-2;for(;h--;)i.push(s[h]);t.push(i);break}case"MultivertexArrow":{const s=this._arrowPath(e),i=[];this._addArrow(i,s,!1),t.push(i);break}case"CrossedArrow":{const s=this._arrowPath(e),i=[];this._addArrow(i,s,!0),t.push(i);break}case"ChevronArrow":{const[s,i]=this._arrowLastSeg(e),h=10*this._geomUnitsPerPoint,r=this._sub(_,s),c=this._norm(r);this._normalize(r);const u=this._crossProduct(r,this._sub(i,s));let o=this._dotProduct(r,this._sub(i,s));o<.05*c?o=.05*c:o>.95*c-h&&(o=.95*c-h);const a=[s[0]+r[0]*o,s[1]+r[1]*o],n=this._leftPerp(r),p=[];p.push([a[0]+n[0]*u+r[0]*h,a[1]+n[1]*u+r[1]*h]),p.push(_),p.push([a[0]-n[0]*u+r[0]*h,a[1]-n[1]*u+r[1]*h]),t.push(p);break}case"ChevronArrowOffset":{const[s,i]=this._arrowLastSeg(e),h=this._sub(_,s),r=this._norm(h);this._normalize(h);const c=this._crossProduct(h,this._sub(i,s));let u=this._dotProduct(h,this._sub(i,s));u<.05*r?u=.05*r:u>.95*r&&(u=.95*r);const o=[s[0]+h[0]*u,s[1]+h[1]*u];this._leftPerpendicular(h);const a=[];a.push([o[0]+h[0]*c*.5,o[1]+h[1]*c*.5]),a.push(this._mid(o,_)),a.push([o[0]-h[0]*c*.5,o[1]-h[1]*c*.5]),t.push(a);break}case"PartialFirstSegment":{const[s,i]=this._arrowLastSeg(e),h=this._sub(_,s),r=this._norm(h);this._normalize(h);let c=this._dotProduct(h,this._sub(i,s));c<.05*r?c=.05*r:c>.95*r&&(c=.95*r);const u=[s[0]+h[0]*c,s[1]+h[1]*c];t.push([s,u]);break}case"Arch":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,.5,1),h=this._sub(_,s),r=this._mix(i,1,h,.55),c=this._mix(i,1,h,-.55),u=[_];this._addBezier2(u,_,r,i,4),this._addBezier2(u,i,c,s,4),t.push(u);break}case"CurvedParallelTicks":{const s=this._cp2(e,-4,1),i=this._cp3(e,s,.882353,-1.94),h=this._sub(i,s);this._crossProduct(h,this._sub(_,s))>0?this._rightPerpendicular(h):this._leftPerpendicular(h);const r=[h[0]/8,h[1]/8],c=this._sub(this._mid(s,i),r),u=this._sub(this._mix(s,.75,i,.25),r),o=this._sub(this._mix(s,.25,i,.75),r),a=[s];this._addBezier2(a,s,u,c,3),this._addBezier2(a,c,o,i,3),t.push(a);for(let e=0;e<8;e++){const s=a[2*e+1],i=[this._clone(s)];i.push(this._add(s,[h[0]/4,h[1]/4])),t.push(i)}break}case"Arc90Degrees":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,.5,1),h=[s];this._add90DegArc(h,s,_,i),t.push(h);break}case"TipWithPerpendicularAndTicks":{const[s,i]=this._arrowLastSeg(e),h=10*this._geomUnitsPerPoint,r=this._sub(_,s),c=this._norm(r);this._normalize(r);let u=this._crossProduct(r,this._sub(i,s)),o=this._dotProduct(r,this._sub(i,s));o<.05*c?o=.05*c:o>.95*c-h&&(o=.95*c-h);const a=this._leftPerp(r),n=[_[0]-r[0]*h,_[1]-r[1]*h],p=.5*Math.max(c-o-h,h);u=Math.abs(u);const d=[];d.push([n[0]+a[0]*(u+p)-r[0]*p,n[1]+a[1]*(u+p)-r[1]*p]),d.push([n[0]+a[0]*u,n[1]+a[1]*u]),d.push([n[0]-a[0]*u,n[1]-a[1]*u]),d.push([n[0]-a[0]*(u+p)-r[0]*p,n[1]-a[1]*(u+p)-r[1]*p]),t.push(d),t.push([n,_]);break}case"ConcentricCircles":{const s=this._cp2(e,1,0),i=this._cp3(e,s,2,0),c=Math.cos(Math.PI/18),u=Math.sin(Math.PI/18);let o=this._dist(s,_),a=[o,0],n=[];for(let t=0;t<=36;t++)n.push(this._add(_,a)),this._rotateDirect(a,c,u);if(t.push(n),r>=4){n=[];const s=e[3];o=this._dist(s,_),a=[o,0];for(let t=0;t<=36;t++)n.push(this._add(_,a)),0===t&&(n.push(this._add(_,a)),h(n[1],1)),this._rotateDirect(a,c,u);t.push(n)}n=[],o=this._dist(i,_),a=[o,0];for(let t=0;t<=36;t++)n.push(this._add(_,a)),this._rotateDirect(a,c,u);t.push(n);break}case"DoubleJogArrow":{_=this._arrowPath(e)[0];const[s,i]=this._arrowLastSeg(e),h=this._sub(_,s),r=this._norm(h);this._normalize(h);const c=Math.abs(this._crossProduct(h,this._sub(i,_)));let u=Math.abs(this._dotProduct(h,this._sub(i,_)));u<.05*r?u=.05*r:u>.95*r&&(u=.95*r);const o=Math.max(c,u),a=this._leftPerp(h);let n=[];const p=[_[0]-h[0]*u*.5+a[0]*c*.5,_[1]-h[1]*u*.5+a[1]*c*.5];n.push([p[0],p[1]]),p[0]+=h[0]*o*.5+a[0]*o*.4,p[1]+=h[1]*o*.5+a[1]*o*.4,n.push([p[0],p[1]]),p[0]-=a[0]*o*.25,p[1]-=a[1]*o*.25,n.push([p[0],p[1]]),p[0]+=h[0]*o*.5+a[0]*o*.4,p[1]+=h[1]*o*.5+a[1]*o*.4,n.push([p[0],p[1]]),t.push(n),n=[],p[0]=_[0]-h[0]*u*.5-a[0]*c*.5,p[1]=_[1]-h[1]*u*.5-a[1]*c*.5,n.push([p[0],p[1]]),p[0]+=h[0]*o*.5-a[0]*o*.4,p[1]+=h[1]*o*.5-a[1]*o*.4,n.push([p[0],p[1]]),p[0]+=a[0]*o*.25,p[1]+=a[1]*o*.25,n.push([p[0],p[1]]),p[0]+=h[0]*o*.5-a[0]*o*.4,p[1]+=h[1]*o*.5-a[1]*o*.4,n.push([p[0],p[1]]),t.push(n);break}case"LinkedChevrons":{const s=this._cp2(e,-5,0),i=this._cp3(e,s,-.2,1),h=this._sub(_,s);this._normalize(h);const r=this._leftPerp(h),c=Math.abs(this._crossProduct(h,this._sub(i,s)));t.push([s,_]);const u=[];u.push([_[0]-h[0]*c+r[0]*c,_[1]-h[1]*c+r[1]*c]),u.push(_),u.push([_[0]-h[0]*c-r[0]*c,_[1]-h[1]*c-r[1]*c]),t.push(u),this._addDash(t,s,[-h[0]*c+r[0]*c,-h[1]*c+r[1]*c]),this._addDash(t,s,[-h[0]*c-r[0]*c,-h[1]*c-r[1]*c]);break}case"SegmentThenHalfCircle":{const s=this._cp2(e,2,0),i=this._cp3(e,s,1.5,0);let h;h=r>=4?e[3]:this._cp3(e,s,1.25,-.5);const c=this._sub(s,_);this._normalize(c);const u=.5*this._dist(s,i),o=this._crossProduct(c,this._sub(h,_))>0,a=Math.cos(Math.PI/18);let n=Math.sin(Math.PI/18);o&&(n=-n);const p=[_,s];c[0]*=u,c[1]*=u;const d=this._add(s,c);c[0]=-c[0],c[1]=-c[1];for(let t=1;t<=18;t++)this._rotateDirect(c,a,n),p.push(this._add(d,c));t.push(p);break}case"LineWithStraightTicks":{const s=this._cp2(e,-2,1),i=this._cp3(e,s,-1,-.5),h=this._sub(i,s);this._normalize(h);const r=this._dotProduct(h,this._sub(s,_)),c=this._dotProduct(h,this._sub(i,_));let u=[_];u.push([_[0]+h[0]*r,_[1]+h[1]*r]),u.push(s),t.push(u),u=[_],u.push([_[0]+h[0]*c,_[1]+h[1]*c]),u.push(i),t.push(u);break}case"DoubleCurve":{const s=this._cp2(e,-5,-1),i=this._cp3(e,s,2,0),r=Math.atan2(1,5),c=Math.cos(r),u=Math.sin(r),o=this._sub(s,_),a=this._dist(_,s);this._normalize(o),this._rotateDirect(o,c,-u);const n=[_];n.push([_[0]+o[0]*a*.5,_[1]+o[1]*a*.5]),h(n[1],1),n.push([_[0]+o[0]*a*.8,_[1]+o[1]*a*.8]),this._addBezier2(n,n[2],[_[0]+o[0]*a,_[1]+o[1]*a],s,3);const p=this._sub(i,s),d=this._dist(s,i);this._normalize(p),this._rotateDirect(p,c,-u),this._addBezier2(n,s,[i[0]-p[0]*d,i[1]-p[1]*d],[i[0]-p[0]*d*.8,i[1]-p[1]*d*.8],3),n.push(i),t.push(n);break}case"ParallelWithTicksByWidth":{const s=this._cp2(e,0,-1),i=this._cp3(e,s,.5,3),h=this._sub(s,_);this._normalize(h);const r=this._crossProduct(h,this._sub(i,_));this._leftPerpendicular(h),r>0?(this._addAngledTicks(t,_,[_[0]+h[0]*r,_[1]+h[1]*r],s),this._addAngledTicks(t,s,[s[0]+h[0]*r,s[1]+h[1]*r],_)):(this._addAngledTicks(t,[_[0]+h[0]*r,_[1]+h[1]*r],_,s),this._addAngledTicks(t,[s[0]+h[0]*r,s[1]+h[1]*r],_,s));break}case"EnclosingRoundedRectangle":{const s=this._cp2(e,3,-2),t=[Math.min(_[0],s[0]),Math.max(_[1],s[1])],i=[Math.max(_[0],s[0]),Math.min(_[1],s[1])],h=i[0]-t[0],r=t[1]-i[1],c=Math.min(h,r)/10,u=[];u.push([t[0]+c+.75*(h-2*c),t[1]]),u.push([i[0]-c,t[1]]),this._add90DegArc(u,[i[0]-c,t[1]],[i[0],t[1]-c],[i[0],t[1]]),u.push([i[0],i[1]+c]),this._add90DegArc(u,[i[0],i[1]+c],[i[0]-c,i[1]],i),u.push([t[0]+c,i[1]]),this._add90DegArc(u,[t[0]+c,i[1]],[t[0],i[1]+c],[t[0],i[1]]),u.push([t[0],t[1]-c]),this._add90DegArc(u,[t[0],t[1]-c],[t[0]+c,t[1]],t),u.push([t[0]+c+.75*(h-2*c),t[1]]);break}default:t.push(e)}}return t}}export{e as EffectControlMeasureLine};