UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 1.52 kB
import{PathTransformationCursor as t,getCoord2D as e}from"../CIMCursor.js";import{CurveHelper as s}from"../CurveHelper.js";import{ExtremityPlacement as i}from"../enums.js";class n{static local(){return null===n.instance&&(n.instance=new n),n.instance}execute(t,e,s,i,n){return new r(t,e,s)}}n.instance=null;class r extends t{constructor(t,e,i){super(t,!1,!0),this._curveHelper=new s,this._angleToLine=void 0===e.angleToLine||e.angleToLine,this._offset=void 0!==e.offset?e.offset*i:0,this._type=e.extremityPlacement,this._position=void 0!==e.offsetAlongLine?e.offsetAlongLine*i:0,this._beginProcessed=!1}processPath(t){let e;switch(this._type){case i.Both:default:this._beginProcessed?(e=this._atExtremities(t,this._position,!1),this._beginProcessed=!1,this.iteratePath=!1):(e=this._atExtremities(t,this._position,!0),this._beginProcessed=!0,this.iteratePath=!0);break;case i.JustBegin:e=this._atExtremities(t,this._position,!0);break;case i.JustEnd:e=this._atExtremities(t,this._position,!1);case i.None:}return e}_atExtremities(t,s,i){const n=t.length;if(n<2)return null;const r=i?1:n-2,o=i?n:-1,a=i?1:-1;let l,h=0,c=i?t[0]:t[n-1];for(let _=r;_!==o;_+=a){l=c,c=t[_];const i=this._curveHelper.calculateLength(l,c);if(h+i>s){const t=(s-h)/i,[n,r]=this._curveHelper.getAngleCS(l,c,t),o=e(l,c,t);return this.internalPlacement.setTranslate(o[0]-this._offset*r,o[1]+this._offset*n),this._angleToLine&&this.internalPlacement.setRotateCS(-n,-r),this.internalPlacement}h+=i}return null}}export{n as PlacementAtExtremities};