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

2 lines
6.0 KiB
JavaScript
Raw Permalink Normal View History

"use strict";var P=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var R=(e,t,n)=>t in e?P(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Y=(e,t)=>{for(var n in t)P(e,n,{get:t[n],enumerable:!0})},j=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of L(t))!V.call(e,r)&&r!==n&&P(e,r,{get:()=>t[r],enumerable:!(o=O(t,r))||o.enumerable});return e};var z=e=>j(P({},"__esModule",{value:!0}),e);var F=(e,t,n)=>R(e,typeof t!="symbol"?t+"":t,n);var lt={};Y(lt,{buildEnergyMap:()=>tt,buildWallAllowedMask:()=>Z,energyPointsToNorm:()=>st,extractCornerPoints:()=>at,filterVerticesToWallMask:()=>H,findShortestPath:()=>ot,isNormPointOnWallMask:()=>C,normToEnergyPoint:()=>it,resolveLassoWallDragPoint:()=>Q,snapNormPointToWallCornerOrEdge:()=>q,snapNormPointToWallEdge:()=>K,upscalePath:()=>ut});module.exports=z(lt);function C(e,t,n){const{labels:o,baseboardBinary:r,cols:c,rows:l,wallSemanticIdx:a}=n;if(a<0||c<=0||l<=0)return!1;const f=Math.min(c-1,Math.max(0,Math.floor(e*c))),h=Math.min(l-1,Math.max(0,Math.floor(t*l)))*c+f;return r[h]?!1:o[h]===a}function H(e,t){return e.filter(n=>C(n.x,n.y,t))}function v(e,t,n){const{labels:o,baseboardBinary:r,cols:c,rows:l,wallSemanticIdx:a}=e;if(t<0||n<0||t>=c||n>=l||a<0)return!1;const f=n*c+t;return r[f]?!1:o[f]===a}function G(e,t,n){if(!v(e,t,n))return!1;const{cols:o,rows:r}=e;return t===0||n===0||t===o-1||n===r-1?!0:!v(e,t-1,n)||!v(e,t+1,n)||!v(e,t,n-1)||!v(e,t,n+1)}function J(e,t,n){if(!G(e,t,n))return!1;const o=!v(e,t-1,n),r=!v(e,t+1,n),c=!v(e,t,n-1),l=!v(e,t,n+1);return(o||r)&&(c||l)}function K(e,t,n,o=12){return B(e,t,n,o,"edge")??{x:e,y:t}}function q(e,t,n,o=16){const r=B(e,t,n,o,"corner");return r||(B(e,t,n,o,"edge")??{x:e,y:t})}function Q(e,t,n,o=12){const r=q(e,t,n,o);return C(r.x,r.y,n)?r:C(e,t,n)?{x:e,y:t}:null}function B(e,t,n,o,r){const{cols:c,rows:l}=n;if(c<=0||l<=0)return null;const a=e*c,f=t*l,y=Math.floor(a),h=Math.floor(f),p=Math.max(1,Math.ceil(o)),M=o*o;let g=1/0,A=-1,s=-1;for(let i=-p;i<=p;i++)for(let b=-p;b<=p;b++){const u=y+b,m=h+i;if(u<0||m<0||u>=c||m>=l||!G(n,u,m)||r==="corner"&&!J(n,u,m))continue;const d=(a-(u+.5))**2+(f-(m+.5))**2;d<=M&&d<g&&(g=d,A=u,s=m)}return A<0?null:{x:(A+.5)/c,y:(s+.5)/l}}function Z(e,t,n){if(n<0)return null;const o=new Uint8Array(e.length);for(let r=0;r<e.length;r++)o[r]=e[r]===n&&!t[r]?1:0;return o}const $=.299,X=.587,k=.114;function tt(e,t,n,o=256,r){const c=Math.max(t,n),l=c>o?o/c:1,a=Math.max(1,Math.floor(t*l)),f=Math.max(1,Math.floor(n*l)),y=a*f,h=new Float32Array(y);for(let s=0;s<f;s++){const b=Math.min(n-1,Math.floor(s*n/f))*t;for(let u=0;u<a;u++){const m=Math.min(t-1,Math.floor(u*t/a)),d=(b+m)*3,E=$*e[d+2]+X*e[d+1]+k*e[d];h[s*a+u]=E}}const p=new Float32Array(y);let M=1;for(let s=1;s<f-1;s++)for(let i=1;i<a-1;i++){const b=s*a+i,u=h[(s-1)*a+(i-1)],m=h[(s-1)*a+i],x=h[(s-1)*a+(i+1)],d=h[s*a+(i-1)],E=h[s*a+i+1],W=h[(s+1)*a+(i-1)],w=h[(s+1)*a+i],S=h[(s+1)*a+(i+1)],T=-u+x-2*d+2*E-W+S,I=-u-2*m-x+W+2*w+S,U=Math.sqrt(T*T+I*I);p[b]=U,U>M&&(M=U)}if(r&&r.length===t*n)for(let s=0;s<f;s++)for(let i=0;i<a;i++){const b=s*a+i,u=Math.min(t-1,Math.floor(i*t/a)),m=Math.min(n-1,Math.floor(s*n/f));if(!r[m*t+u])continue;let x=u===0||m===0||u===t-1||m===n-1;if(!x){const d=r[m*t+(u-1)],E=r[m*t+(u+1)],W=r[(m-1)*t+u],w=r[(m+1)*t+u];x=d===0||E===0||W===0||w===0}x&&(p[b]=M)}const g=new Float32Array(y),A=r&&r.length===t*n?new Uint8Array(y):void 0;for(let s=0;s<f;s++)for(let i=0;i<a;i++){const b=s*a+i,u=Math.min(t-1,Math.floor(i*t/a)),m=Math.min(n-1,Math.floor(s*n/f)),x=!r||r[m*t+u]>0;A&&(A[b]=x?1:0),g[b]=x?1/(1+4*(p[b]/M)):1}return{map:g,w:a,h:f,scale:l,traversable:A}}const nt=[[-1,-1],[0,-1],[1,-1],[-1,0],[1,0],[-1,1],[0,1],[1,1]],N=1e4;class et{constructor(){F(this,"data",[])}push(t,n){this.data.push({idx:t,dist:n}),this.bubbleUp(this.data.length-1)}pop(){if(this.data.length===0)return;const t=this.data[0],n=this.data.pop();return this.data.length>0&&(this.data[0]=n,this.bubbleDown(0)),t}get length(){return this.data.length}bubbleUp(t){for(;t>0;){const