@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.05 kB
JavaScript
import{outQuad as i,inQuad as e}from"../../easing.js";import{Path as n}from"../Path.js";import{Segment as t}from"../Segment.js";import{optimalDistance as o}from"./planning.js";class s extends n{constructor(i,e){super(),this._preallocSegments=[new t,new t,new t],this._ascensionSegment=null,this._descensionSegment=null,this.update(i,e)}update(i,e){if(!i)return;this.definition?this.definition.copyFrom(i):this.definition=i.clone();let n=null;e&&e.apex&&(n=o(i,e.apex)),this.segments.length=0,this._ascensionSegment=null,this._descensionSegment=null,null==n?this._updateWithoutApex():this._updateWithApex(n,e?.apex)}segmentInterpolateComponentsAt(n,t,o){return o=n.interpolateComponentsAt(t,o),n===this._ascensionSegment?o.zoom=i(o.zoom):n===this._descensionSegment&&(o.zoom=e(o.zoom)),o}_updateWithApex(i,e){const[n,t,o]=this._preallocSegments,s=e?.ascensionFactor??.5,d=Math.min(1-s,null!=e?.ascensionFactor&&null!=e.descensionFactor?e.descensionFactor:.5),a=1-s-d;n.definition?n.definition.copyFrom(this.definition):n.definition=this.definition.clone(),n.definition.compared.targetZoom=i,n.definition.compared.pan=this.definition.compared.pan*s,n.definition.compared.rotate=this.definition.compared.rotate*s,n.update(),this._ascensionSegment=n,this.segments.push(n),a>0&&(t.definition?t.definition.copyFrom(this.definition):t.definition=this.definition.clone(),t.definition.copyFrom(this.definition),t.definition.compared.sourceZoom=i,t.definition.compared.targetZoom=i,t.definition.compared.pan=this.definition.compared.pan*a,t.definition.compared.rotate=this.definition.compared.rotate*a,t.update(),this.segments.push(t)),o.definition?o.definition.copyFrom(this.definition):o.definition=this.definition.clone(),o.definition.compared.sourceZoom=i,o.definition.compared.pan=this.definition.compared.pan*d,o.definition.compared.rotate=this.definition.compared.rotate*d,o.update(),this._descensionSegment=o,this.segments.push(o)}_updateWithoutApex(){const[i]=this._preallocSegments;i.update(this.definition),this.segments.push(i)}}export{s as Path};