@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.59 kB
JavaScript
import{PathGeometryCursor as t}from"../CIMCursor.js";import{PathHelper as e}from"../CurveHelper.js";import{LineDashEnding as s}from"../enums.js";import{GeometryWalker as a,DashPattern as i}from"../GeometryWalker.js";class r{static local(){return null===r.instance&&(r.instance=new r),r.instance}execute(t,e,s,a,i){return new n(t,e,s)}}r.instance=null;class n extends t{constructor(t,e,s){super(t,!0,!0),this._firstCurve=null,this._walker=new a,this._walker.updateTolerance(s),this._endings=e.lineDashEnding,this._customDashPos=-(e.offsetAlongLine??0)*s,this._offsetAtEnd=(e.customEndingOffset??0)*s,this._pattern=new i,this._pattern.init(e.dashTemplate,!0),this._pattern.scale(s)}processPath(t){if(0===this._pattern.length())return this.iteratePath=!1,{paths:[t]};if(!this.iteratePath){let e=!0;switch(this._endings){case s.HalfPattern:case s.HalfGap:default:this._pattern.extPtGap=0;break;case s.FullPattern:this.isClosed||(this._pattern.extPtGap=.5*this._pattern.firstValue());break;case s.FullGap:this.isClosed||(this._pattern.extPtGap=.5*this._pattern.lastValue());break;case s.NoConstraint:this.isClosed||(e=!1);break;case s.Custom:this.isClosed||(this._pattern.extPtGap=.5*this._offsetAtEnd)}const a=this._walker.calculatePathLength(t);if(this._pattern.isEmpty()||a<.1*this._pattern.length())return{paths:[t]};if(!this._walker.init(t,this._pattern,e))return{paths:[t]}}let a;if(this.iteratePath)a=this._pattern.nextValue();else{let t;switch(this._endings){case s.HalfPattern:default:t=.5*this._pattern.firstValue();break;case s.HalfGap:t=.5*-this._pattern.lastValue();break;case s.FullGap:t=-this._pattern.lastValue();break;case s.FullPattern:t=0;break;case s.NoConstraint:case s.Custom:t=-this._customDashPos}let e=t/this._pattern.length();e-=Math.floor(e),t=e*this._pattern.length(),this._pattern.reset(),a=this._pattern.nextValue();let i=!1;for(;t>=a;)t-=a,a=this._pattern.nextValue(),i=!i;a-=t,i?(this._walker.nextPosition(a),a=this._pattern.nextValue()):this.isClosed&&(this._firstCurve=this._walker.nextCurve(a),a=this._pattern.nextValue(),this._walker.nextPosition(a),a=this._pattern.nextValue())}let i=this._walker.nextCurve(a);return i?this._walker.isPathEnd()?(this.iteratePath=!1,this._firstCurve&&(this._firstCurve.splice(0,1),e.mergePath(i,this._firstCurve),this._firstCurve=null)):(a=this._pattern.nextValue(),!this._walker.nextPosition(a)||this._walker.isPathEnd()?(this.iteratePath=!1,this._firstCurve&&(i=this._firstCurve,this._firstCurve=null)):this.iteratePath=!0):(this.iteratePath=!1,i=this._firstCurve,this._firstCurve=null),{paths:[i]}}}export{r as EffectDashes};