react-native-mask-segment-c.../dist/utils/wallTextureSplit.js
a1518 8bc66a4ee9
Some checks failed
Publish to npm / publish (push) Has been cancelled
refactor: remove Chinese, add build obfuscation, polish README
- Remove all Chinese characters from src/, example/, ios/, patches/, tests/
- Add esbuild-based build obfuscation (minify + identifier mangle + no sourcemaps)
- Drop src/ from npm publish, only ship minified dist/
- Remove source maps and declaration maps from build output
- Add README icons and visual polish throughout
- Fix broken Table of Contents anchor links in README

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 19:07:32 -07:00

2 lines
6.2 KiB
JavaScript

"use strict";var j=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var X=Object.getOwnPropertyNames;var Y=Object.prototype.hasOwnProperty;var Z=(n,e)=>{for(var o in e)j(n,o,{get:e[o],enumerable:!0})},nn=(n,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of X(e))!Y.call(n,a)&&a!==o&&j(n,a,{get:()=>e[a],enumerable:!(r=V(e,a))||r.enumerable});return n};var en=n=>nn(j({},"__esModule",{value:!0}),n);var dn={};Z(dn,{WALL_SUB_LABEL_NONE:()=>D,isWallSubRegionName:()=>pn,splitWallRegionsByTexture:()=>yn});module.exports=en(dn);var J=require("./freqLayerPrep"),K=require("./maskSegmentRuntime"),Q=require("./maskSemanticPalette");const D=255;function T(){return(0,K.getMaskSegmentRuntimeConfig)().mask}function tn(n){return[{x:n.x,y:n.y},{x:n.x+n.w,y:n.y},{x:n.x+n.w,y:n.y+n.h},{x:n.x,y:n.y+n.h}]}function rn(n,e,o){const r=e*o,a=new Uint8Array(r),t=new Uint8Array(r);for(let i=0;i<r;i++){const b=i*3,f=(0,J.bgrToLab)(n[b],n[b+1],n[b+2]);a[i]=f.a,t[i]=f.b}return{aMap:a,bMap:t}}function v(n,e){const o=n-128,r=e-128;return Math.sqrt(o*o+r*r)}function on(n,e,o,r){const a=n-o,t=e-r;return a*a+t*t}function an(n,e,o,r,a){const t=v(n,e),i=v(o,r),b=a*2.2;if(t<=a&&i>b||i<=a&&t>b)return!0;if(t>a&&i>a){const f=Math.atan2(e-128,n-128),c=Math.atan2(r-128,o-128);let m=Math.abs(f-c);if(m>Math.PI&&(m=2*Math.PI-m),m>Math.PI/4)return!0}return!1}function L(n,e,o,r,a,t){return an(n,e,o,r,t)?!1:on(n,e,o,r)<=a}function un(){return T().semanticColors.findIndex(e=>e.name==="wall")}function G(n,e,o,r){return e[r]?!1:n[r]===o}function cn(n,e,o,r,a,t,i,b,f){const c=t*i,m=new Int32Array(c);m.fill(-1);let y=0;const l=new Int32Array(c);for(let d=0;d<i;d++)for(let x=0;x<t;x++){const C=d*t+x;if(!G(n,e,o,C)||m[C]>=0)continue;const R=y;y+=1;const S=r[C],u=a[C];let g=S,p=u,A=1,w=0,M=0;for(l[M++]=C,m[C]=R;w<M;){const U=l[w++],k=U%t,E=U/t|0,O=g/A,_=p/A,$=[U-1,U+1,U-t,U+t];for(const I of $){if(I<0||I>=c)continue;const B=I%t;if(Math.abs(B-k)>1||!G(n,e,o,I)||m[I]>=0)continue;const N=r[I],P=a[I],q=L(r[U],a[U],N,P,b*1.8,f),z=L(O,_,N,P,b,f),s=L(S,u,N,P,b*3,f);!q||!z||!s||(m[I]=R,g+=N,p+=P,A+=1,l[M++]=I)}}}return{compLabels:m,compCount:y}}function H(n,e,o,r){const a=Array.from({length:e},(t,i)=>({label:i,area:0,bbox:{x:o,y:r,w:0,h:0}}));for(let t=0;t<r;t++)for(let i=0;i<o;i++){const b=t*o+i,f=n[b];if(f<0)continue;const c=a[f];c.area+=1,i<c.bbox.x&&(c.bbox.x=i),t<c.bbox.y&&(c.bbox.y=t);const m=i+1,y=t+1;m>c.bbox.x+c.bbox.w&&(c.bbox.w=m-c.bbox.x),y>c.bbox.y+c.bbox.h&&(c.bbox.h=y-c.bbox.y)}return a}function mn(n,e,o,r,a,t){const i=new Float64Array(r),b=new Float64Array(r),f=new Float64Array(r),c=a*t;for(let l=0;l<c;l++){const d=n[l];d<0||(i[d]+=e[l],b[d]+=o[l],f[d]+=1)}const m=new Float64Array(r),y=new Float64Array(r);for(let l=0;l<r;l++)f[l]>0?(m[l]=i[l]/f[l],y[l]=b[l]/f[l]):(m[l]=128,y[l]=128);return{meanA:m,meanB:y}}function sn(n,e,o,r,a,t,i,b,f){const c=e.length,{meanA:m,meanB:y}=mn(n,o,r,c,a,t),l=new Map,d=(u,g)=>{if(u===g||u<0||g<0)return;let p=l.get(u);p||(p=new Map,l.set(u,p)),p.set(g,(p.get(g)??0)+1)};for(let u=0;u<t;u++)for(let g=0;g<a;g++){const p=u*a+g,A=n[p];if(!(A<0)){if(g+1<a){const w=n[p+1];w>=0&&d(A,w)}if(u+1<t){const w=n[p+a];w>=0&&d(A,w)}}}const x=new Int32Array(c);for(let u=0;u<c;u++)x[u]=u;const C=u=>{for(;x[u]!==u;)x[u]=x[x[u]],u=x[u];return u},R=(u,g)=>{const p=C(u),A=C(g);if(p===A)return;const w=e[p].area,M=e[A].area;w>=M?(x[A]=p,e[p].area+=e[A].area,e[A].area=0):(x[p]=A,e[A].area+=e[p].area,e[p].area=0)};for(let u=0;u<c;u++){if(e[u].area>=i)continue;const g=l.get(u);if(!g||g.size===0)continue;let p=-1,A=0;for(const[w,M]of g)M>A&&(A=M,p=w);if(p>=0){if(!L(m[u],y[u],m[p],y[p],b,f))continue;R(u,p)}}const S=a*t;for(let u=0;u<S;u++){const g=n[u];g<0||(n[u]=C(g))}}function fn(n,e,o){const r=e*o,a=new Map,t=new Int32Array(r);t.fill(-1);for(let f=0;f<r;f++){const c=n[f];if(c<0)continue;let m=a.get(c);m===void 0&&(m=a.size,a.set(c,m)),t[f]=m}const i=a.size,b=H(t,i,e,o);return{labels:t,compCount:i,stats:b}}function ln(n,e,o,r,a,t,i,b){const f=i*b,c=new Uint8Array(f),y=t.get("baseboard"),l=y===void 0?0:y+1;for(let d=0;d<f;d++){if(e[d]){l>0&&(c[d]=l);continue}if(n[d]===o&&r[d]!==D){const S=`wall-${r[d]+1}`,u=t.get(S);u!==void 0&&(c[d]=u+1);continue}const x=n[d];if(x===255)continue;const C=a[x];if(!C)continue;const R=t.get(C);R!==void 0&&(c[d]=R+1)}return c}function bn(n,e,o){const r=e*o,a=new Uint8Array(r);a.set(n);for(let t=1;t<o-1;t++)for(let i=1;i<e-1;i++){const b=t*e+i;if(n[b]!==0)continue;const f=[n[(t-1)*e+(i-1)],n[(t-1)*e+i],n[(t-1)*e+(i+1)],n[t*e+(i-1)],n[t*e+(i+1)],n[(t+1)*e+(i-1)],n[(t+1)*e+i],n[(t+1)*e+(i+1)]],c={};for(let m=0;m<8;m++){const y=f[m];y!==0&&(c[y]=(c[y]??0)+1)}for(const m of Object.keys(c)){const y=Number(m);if(c[y]>=4){a[b]=y;break}}}return a}function yn(n,e,o,r,a){const t=T();if(!t.splitWalls)return n;const i=n.regions.find(s=>s.name==="wall");if(!i)return n;const b=un();if(b<0)return n;const{labels:f,baseboardBinary:c,regions:m}=n,y=o*r;if(e.length<y*3)return n;const{aMap:l,bMap:d}=rn(e,o,r),x=t.splitWallsColorDistSq,C=t.splitWallsNeutralChromaMax,R=Math.max(a,Math.floor(o*r*t.splitWallsMinAreaRatio)),{compLabels:S,compCount:u}=cn(f,c,b,l,d,o,r,x,C);if(u===0)return n;let g=H(S,u,o,r);sn(S,g,l,d,o,r,R,x,C);const{labels:p,compCount:A,stats:w}=fn(S,o,r);if(A===0)return n;const M=w.map((s,h)=>({...s,origIdx:h})).filter(s=>s.area>0).sort((s,h)=>h.area-s.area).slice(0,t.splitWallsMaxCount),U=new Map;M.forEach((s,h)=>{U.set(s.origIdx,h)});const k=new Uint8Array(y);k.fill(D);for(let s=0;s<y;s++){const h=p[s];if(h<0)continue;const W=U.get(h);W!==void 0&&(k[s]=W)}const E=(0,Q.getSemanticColorByName)("wall"),O=E?.hex??i.hex,_=E?.bgr??i.color,$=m.filter(s=>s.name!=="wall"),I=M.map((s,h)=>{const W=s.bbox,F=tn(W);return{id:0,name:`wall-${h+1}`,hex:O,color:{..._},polygons:[F],outlinePolygons:[F],bbox:W,area:s.area}}),B=[...$,...I];B.sort((s,h)=>h.area-s.area),B.forEach((s,h)=>{s.id=h});const N=new Map(B.map(s=>[s.name,s.id])),P=t.semanticColors.map(s=>s.name),q=ln(f,c,b,k,P,N,o,r),z=bn(q,o,r);for(const s of B){if(!/^wall-\d+$/.test(s.name))continue;const h=Number(s.name.slice(5))-1;let W=0;for(let F=0;F<y;F++)k[F]===h&&(W+=1);s.area=W}return{regions:B,pickMap:{buffer:z,cols:o,rows:r},labels:f,baseboardBinary:c,segCols:o,segRows:r,wallSubLabels:k}}function pn(n){return/^wall-\d+$/.test(n)}