@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 2.11 kB
JavaScript
import{PathTransformationCursor as t,isClosedPath as s,getId as e}from"../CIMCursor.js";import{CurveHelper as i}from"../CurveHelper.js";class n{static local(){return null===n.instance&&(n.instance=new n),n.instance}execute(t,s,e,i,n){return new a(t,s,e)}}n.instance=null;const r=1e-15;class a extends t{constructor(t,s,e){super(t,!0,!0),this._curveHelper=new i,this._angleToLine=void 0===s.angleToLine||s.angleToLine,this._offset=void 0!==s.offset?s.offset*e:0,this._endPoints=void 0===s.placeOnEndPoints||s.placeOnEndPoints,this._controlPoints=void 0===s.placeOnControlPoints||s.placeOnControlPoints,this._regularVertices=void 0===s.placeOnRegularVertices||s.placeOnRegularVertices,this._tags=[],this._tagIterator=0}processPath(t){if(this.iteratePath||(this._preparePath(t),this.iteratePath=!0),this._tagIterator>=this._tags.length)return this._tags.length=0,this._tagIterator=0,this.iteratePath=!1,null;const s=this._tags[this._tagIterator];this._angleToLine&&this.internalPlacement.setRotate(s[2]);let e=s[0],i=s[1];if(0!==this._offset){const t=Math.cos(s[2]),n=Math.sin(s[2]);e-=this._offset*n,i+=this._offset*t}return this.internalPlacement.setTranslate(e,i),this._tagIterator++,this.internalPlacement}_preparePath(t){this._tags.length=0,this._tagIterator=0;const i=s(t),n=t.length-1;let r,a,h=0,l=0,_=0,c=0,g=0;for(;h<n;){h++,r=t[h-1],a=t[h];const s=e(r),u=e(a);(this._angleToLine||0!==this._offset)&&(c=this._curveHelper.getAngle(r,a,0)),1===h?i?(l=c,_=s):(this._endPoints||this._controlPoints&&1===s)&&this._tags.push([r[0],r[1],c]):1===s?this._controlPoints&&this._tags.push([r[0],r[1],o(g,c)]):this._regularVertices&&this._tags.push([r[0],r[1],o(g,c)]),(this._angleToLine||0!==this._offset)&&(g=this._curveHelper.getAngle(r,a,1)),h===n&&(i?1===u||1===_?this._controlPoints&&this._tags.push([a[0],a[1],o(g,l)]):this._regularVertices&&this._tags.push([a[0],a[1],o(g,l)]):(this._endPoints||this._controlPoints&&1===u)&&this._tags.push([a[0],a[1],g]))}this._tagIterator=0}}function o(t,s){const e=Math.PI;for(;Math.abs(s-t)>e+2*r;)s-t>e?s-=2*e:s+=2*e;return(t+s)/2}export{n as PlacementOnVertices};