UNPKG

@arcgis/core

Version:

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

3 lines (2 loc) 2.85 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */ import{triangulateF32 as t,loadLibtessF32 as e}from"../../../../../../geometry/libtess.js";import{TileClipper as n}from"../../../../../../geometry/support/TileClipper.js";import o from"../../../../../../layers/graphics/OptimizedGeometry.js";import{tileSize as r}from"../../definitions.js";import{bufcut as s}from"../bufcut.js";const l=1e-5,i=new n(0,0,0,1,0),f=new n(0,0,0,1,0),c=100;function u(t,e,n){let o=0;for(let r=1;r<n;r++){const n=t[2*(e+r-1)],s=t[2*(e+r-1)+1];o+=(t[2*(e+r)]-n)*(t[2*(e+r)+1]+s)}return o}function h(t,e,n,o,r){let s=0;const l=2;for(let i=n;i<o;i+=3){const n=(t[i]-r)*l,o=(t[i+1]-r)*l,f=(t[i+2]-r)*l;s+=Math.abs((e[n]-e[f])*(e[o+1]-e[n+1])-(e[n]-e[o])*(e[f+1]-e[n+1]))}return s}async function a(t){return await e(),g(t)}function g(t){const e=[];if(!(t.maxLength>c)&&p(e,t))return e.length?{indices:e,vertices:t.coords}:null;return{indices:null,vertices:m(t)}}function p(t,e){const{coords:n,lengths:o}=e,r=0,i=t;let f=0;for(let c=0;c<o.length;){let t=c,e=o[c],a=u(n,f,e);const g=[];for(;++t<o.length;){const r=o[t],s=u(n,f+e,r);if(!(s>0))break;a+=s,g.push(f+e),e+=r}const p=i.length;s(i,n,f,f+e,g,2,r);const m=h(i,n,p,i.length,r),x=Math.abs(a);if(Math.abs((m-x)/Math.max(1e-7,x))>l)return i.length=0,!1;c=t,f+=e}return!0}function m(e){const{coords:n,lengths:o}=e,{buffer:r}=t(n,o);return r}function x(t,e,n){let o=0;for(let r=0;r<t.lengths.length;r++){const s=t.lengths[r];for(let r=0;r<s;r++){const s=t.coords[2*(r+o)],l=t.coords[2*(r+o)+1];if(s<e||s>n||l<e||l>n)return!0}o+=s}return!1}function d(t,e){if(null==t)return null;if(!x(t,-128,r+128))return t;i.setPixelMargin(e),i.reset(3);const{stride:n,lengths:s,coords:l}=t;let f=0;for(const o of s){const t=f+o*n;for(i.moveTo(l[f],l[f+1]),f+=n;f<t;)i.lineTo(l[f],l[f+1]),f+=n;i.close()}const c=i.result(!1);if(!c)return null;const u=new o;for(const o of c){for(const{x:t,y:e}of o)u.coords.push(t,e);u.lengths.push(o.length)}return u}function y(t,e){f.setPixelMargin(e);const n=f,o=-e,s=r+e;let l=[],i=!1;if(!t.nextPath())return null;let c=t.pathLength(),u=!0;for(;u;){t.seekPathStart();const e=[];if(!t.pathSize)return null;n.reset(2),t.nextPoint();let r=t.x,f=t.y;if(i)n.moveTo(r,f);else{if(r<o||r>s||f<o||f>s){i=!0;continue}e.push({x:r,y:f})}let h=!1;for(;t.nextPoint();)if(r=t.x,f=t.y,i)n.lineTo(r,f);else{if(r<o||r>s||f<o||f>s){h=!0;break}e.push({x:r,y:f})}if(h)i=!0;else{if(i){const t=n.resultWithStarts();if(t)for(const e of t)l.push({...e,pathLength:c})}else l.push({line:e,start:0,pathLength:c});u=t.nextPath(),c=u?t.pathLength():0,i=!1}}return l=l.filter(t=>t.line.length>1),0===l.length?null:l}i.setExtent(r),f.setExtent(r);export{u as area,y as clipLinesMarshall,d as clipMarshall,h as triangleAreaArray,p as triangulateEarcut,m as triangulateLibtess,g as triangulateSyncUnsafe,a as triangulateUnsafe};