react-native-mask-segment-c.../dist/utils/maskOutlinePaths.js

2 lines
5.2 KiB
JavaScript
Raw Permalink Normal View History

"use strict";var k=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var $=Object.prototype.hasOwnProperty;var L=(t,n)=>{for(var i in n)k(t,i,{get:n[i],enumerable:!0})},E=(t,n,i,e)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of U(n))!$.call(t,r)&&r!==i&&k(t,r,{get:()=>n[r],enumerable:!(e=I(n,r))||e.enumerable});return t};var O=t=>E(k({},"__esModule",{value:!0}),t);var z={};L(z,{buildAllRegionOutlinePaths:()=>Y,buildRegionOutlinePathForRegion:()=>X,floodFillComponent:()=>S});module.exports=O(z);var p=require("@shopify/react-native-skia"),R=require("./maskSegmentRuntime");function P(t,n,i,e,r){return e>=0&&e<n&&r>=0&&r<i&&t[r*n+e]>0}function B(t,n,i){const e=[];for(let r=0;r<i;r++){const u=r*n;for(let o=0;o<n;o++)t[u+o]&&(P(t,n,i,o,r-1)||e.push({x0:o,y0:r,x1:o+1,y1:r}),P(t,n,i,o,r+1)||e.push({x0:o+1,y0:r+1,x1:o,y1:r+1}),P(t,n,i,o-1,r)||e.push({x0:o,y0:r+1,x1:o,y1:r}),P(t,n,i,o+1,r)||e.push({x0:o+1,y0:r,x1:o+1,y1:r+1}))}return e}function C(t){const n=new Map,i=u=>`${u.x0},${u.y0}->${u.x1},${u.y1}`;for(const u of t){const o=`${u.x0},${u.y0}`,s=n.get(o);s?s.push(u):n.set(o,[u])}const e=new Set,r=[];for(const u of t){const o=i(u);if(e.has(o))continue;const s=[{x:u.x0,y:u.y0}];let a=u;for(e.add(o),s.push({x:a.x1,y:a.y1});;){const f=`${a.x1},${a.y1}`,c=`${s[0].x},${s[0].y}`;if(f===c&&s.length>2)break;const h=n.get(f)?.find(d=>!e.has(i(d)));if(!h||(a=h,e.add(i(a)),s.push({x:a.x1,y:a.y1}),s.length>t.length+1))break}s.length>=4&&r.push(s)}return r}function j(t){if(t.length<=3)return t;const n=[t[0]];for(let i=1;i<t.length-1;i++){const e=n[n.length-1],r=t[i],u=t[i+1],o=e.x===r.x&&r.x===u.x,s=e.y===r.y&&r.y===u.y;!o&&!s&&n.push(r)}return n.push(t[t.length-1]),n}function K(t,n,i){const e=i.x-n.x,r=i.y-n.y;if(e===0&&r===0)return Math.hypot(t.x-n.x,t.y-n.y);const u=((t.x-n.x)*e+(t.y-n.y)*r)/(e*e+r*r),o=n.x+u*e,s=n.y+u*r;return Math.hypot(t.x-o,t.y-s)}function G(t,n){if(t.length<=2)return t;let i=0,e=0;const r=t.length-1,u=t[0],o=t[r];for(let s=1;s<r;s++){const a=t[s],f=K(a,u,o);f>i&&(i=f,e=s)}if(i>n){const s=G(t.slice(0,e+1),n),a=G(t.slice(e),n);return[...s.slice(0,-1),...a]}return[u,o]}function v(t,n,i,e){const r=p.Skia.Path.Make();for(const u of t){const o=j(u),s=G(o,1);if(s.length<2)continue;const[a,...f]=s;r.moveTo(e.x+a.x/n*e.w,e.y+a.y/i*e.h);for(const c of f)r.lineTo(e.x+c.x/n*e.w,e.y+c.y/i*e.h);r.close()}return r}function D(t,n,i){let e=!1;for(let r=0,u=i.length-1;r<i.length;u=r++){const o=i[r].x,s=i[r].y,a=i[u].x,f=i[u].y;s>n!=f>n&&t<(a-o)*(n-s)/(f-s+Number.EPSILON)+o&&(e=!e)}return e}function g(t){if(t.length===0)return 0;let n=t[0].x,i=t[0].x,e=t[0].y,r=t[0].y;for(const u of t)n=Math.min(n,u.x),i=Math.max(i,u.x),e=Math.min(e,u.y),r=Math.max(r,u.y);return(i-n)*(r-e)}function F(t,n,i,e){if(t.length===0)return t;const r=Math.max(16,Math.floor(n*i*5e-5)),u=t.filter(a=>g(a)>=r),o=u.length>0?u:t;if(e){const a=e.x+.5,f=e.y+.5,c=o.filter(x=>D(a,f,x));if(c.length>0)return c.sort((x,h)=>g(h)-g(x)),c}o.sort((a,f)=>g(f)-g(a));const s=g(o[0])*.05;return o.filter(a=>g(a)>=s)}function S(t,n,i,e,r){if(e<0||r<0||e>=n||r>=i||!t[r*n+e])return null;const u=new Uint8Array(n*i),o=[r*n+e];for(u[o[0]]=255;o.length>0;){const s=o.pop(),a=s%n,f=(s-a)/n;if(a>0){const c=s-1;t[c]&&!u[c]&&(u[c]=255,o.push(c))}if(a+1<n){const c=s+1;t[c]&&!u[c]&&(u[c]=255,o.push(c))}if(f>0){const c=s-n;t[c]&&!u[c]&&(u[c]=255,o.push(c))}if(f+1<i){const c=s+n;t[c]&&!u[c]&&(u[c]=255,o.push(c))}}return u}function N(t,n,i){const e=new Uint8Array(n*i);let r=0,u=null;for(let o=0;o<i;o++){const s=o*n;for(let a=0;a<n;a++){const f=s+a;if(!t[f]||e[f])continue;let c=0,x=0,h=0;const d=[f];for(e[f]=1;d.length>0;){const y=d.pop();c+=1;const l=y%n,b=(y-l)/n;if(x+=l,h+=b,l>0){const m=y-1;t[m]&&!e[m]&&(e[m]=1,d.push(m))}if(l+1<n){const m=y+1;t[m]&&!e[m]&&(e[m]=1,d.push(m))}if(b>0){const m=y-n;t[m]&&!e[m]&&(e[m]=1,d.push(m))}if(b+1<i){const m=y+n;t[m]&&!e[m]&&(e[m]=1,d.push(m))}}c>r&&(r=c,u={x:Math.floor(x/c),y:Math.floor(h/c)})}}return u}function w(t,n,i,e,r){let u=t;if(r){const f=S(t,n,i,r.x,r.y);if(!f)return p.Skia.Path.Make();u=f}co