import bpy, sys import numpy as np W = r"C:\Users\Jeremy\tinqs\animation\characters\female\lena_nude\hires_claude" bpy.ops.wm.open_mainfile(filepath=W + r"\00_welded.blend") ob = max([o for o in bpy.data.objects if o.type=='MESH'], key=lambda o: len(o.data.vertices)) n = len(ob.data.vertices) co0 = np.empty(n*3); ob.data.vertices.foreach_get("co", co0); co0 = co0.reshape(-1,3) bpy.ops.wm.open_mainfile(filepath=W + r"\03_sculpted.blend") ob = max([o for o in bpy.data.objects if o.type=='MESH'], key=lambda o: len(o.data.vertices)) co1 = np.empty(n*3); ob.data.vertices.foreach_get("co", co1); co1 = co1.reshape(-1,3) disp = np.linalg.norm(co1-co0, axis=1) M = np.load(W + r"\masks.npz") A = np.load(W + r"\masks_active.npz") act = A["active"]; garment = M["garment"]; cups = M["cups"]; shield = M["shield"] # regions to interrogate (welded coords) zones = { "bow": (np.abs(co0[:,0])<0.03) & (co0[:,2]>0.715) & (co0[:,2]<0.760) & (co0[:,1]<-0.05), "strap_tuft":(np.abs(co0[:,0])>0.035)&(np.abs(co0[:,0])<0.09)&(co0[:,2]>0.80)&(co0[:,2]<0.86), "armpit": (np.abs(co0[:,0])>0.10)&(np.abs(co0[:,0])<0.15)&(co0[:,2]>0.66)&(co0[:,2]<0.75)&(co0[:,1]>-0.02), "good_cup": (np.abs(co0[:,0])>0.03)&(np.abs(co0[:,0])<0.06)&(co0[:,2]>0.66)&(co0[:,2]<0.70)&(co0[:,1]<-0.06), } for nm, m in zones.items(): if not m.sum(): print(nm, "EMPTY"); continue print(f"{nm}: n={m.sum():6d} garment={100*garment[m].mean():5.1f}% act={100*act[m].mean():5.1f}% " f"disp mm p50={np.median(disp[m])*1000:.2f} p90={np.percentile(disp[m],90)*1000:.2f}") print("DBG_BOW_DONE")