ModelTranslator: UV 岛数/翻转/利用率纯逻辑(TDD)

This commit is contained in:
ud18010
2026-07-16 11:51:45 +08:00
parent c24d7b9999
commit 71416aa12a
2 changed files with 71 additions and 0 deletions
+32
View File
@@ -24,6 +24,38 @@ def within_tolerance(target, actual, tol=TOLERANCE):
return abs(actual - target) <= target * tol
UV_BAD_TOL = 0.02 # 质量门:UV 翻转/重叠面占比超此值则回退 smart_project
def count_islands(n_faces, adjacent_pairs):
"""union-find 数 UV 岛:n_faces 个面,adjacent_pairs 为 UV 连续的面索引对。"""
parent = list(range(n_faces))
def find(i):
while parent[i] != i:
parent[i] = parent[parent[i]]
i = parent[i]
return i
for a, b in adjacent_pairs:
ra, rb = find(a), find(b)
if ra != rb:
parent[ra] = rb
return len({find(i) for i in range(n_faces)})
def flipped_fraction(signed_areas):
"""UV 面签名面积为负(翻转)的占比。"""
if not signed_areas:
return 0.0
return sum(1 for a in signed_areas if a < 0) / float(len(signed_areas))
def fill_ratio(abs_areas):
"""UV 空间利用率:面积和(重叠会虚高,截断到 1.0)。"""
return min(1.0, sum(abs_areas))
# ---------------- 以下仅在 Blender 内执行 ----------------