From 9fe93f3c92f2f4186aafaea9e0a8441d5ef08ca6 Mon Sep 17 00:00:00 2001 From: ud18010 Date: Mon, 20 Jul 2026 12:23:55 +0800 Subject: [PATCH] =?UTF-8?q?ModelTranslator:=20uvgate=20=E5=9B=9E=E9=80=80?= =?UTF-8?q?=E6=A0=87=E6=B3=A8=E6=94=B9=E5=89=8D=E7=BC=80=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E2=80=94=E2=80=94=E5=85=BC=E5=AE=B9=20+uvpm=20=E5=90=8E?= =?UTF-8?q?=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 seam_fallback_label 纯函数:前缀匹配转换 seam* → seam_fallback*,保留后缀 - main() 调用改为函数式,避免等值判断失效 - 测试覆盖:plain seam、seam+uvpm、smart_fallback 透传 Co-Authored-By: Claude Haiku 4.5 --- Tools/ModelTranslator/bl_uvgate.py | 10 ++++++-- Tools/ModelTranslator/tests/test_bl_uvgate.py | 23 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 Tools/ModelTranslator/tests/test_bl_uvgate.py diff --git a/Tools/ModelTranslator/bl_uvgate.py b/Tools/ModelTranslator/bl_uvgate.py index 92963415..d1390217 100644 --- a/Tools/ModelTranslator/bl_uvgate.py +++ b/Tools/ModelTranslator/bl_uvgate.py @@ -7,6 +7,13 @@ import sys sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +def seam_fallback_label(mode): + """回退产物标注:seam 系模式改 seam_fallback(保留 +uvpm 等后缀)。""" + if mode.startswith("seam"): + return "seam_fallback" + mode[len("seam"):] + return mode + + def main(): import bpy import json @@ -42,8 +49,7 @@ def main(): warnings.append("%s 输出无 UV,回退 seam" % mode_label) m = _do_unwrap(obj, "seam", warnings) # 内部自带 smart 回退 - if m["mode"] == "seam": - m["mode"] = "seam_fallback" + m["mode"] = seam_fallback_label(m["mode"]) bpy.ops.object.select_all(action='DESELECT') obj.select_set(True) bpy.ops.export_scene.fbx(filepath=os.path.abspath(fbx), use_selection=True, diff --git a/Tools/ModelTranslator/tests/test_bl_uvgate.py b/Tools/ModelTranslator/tests/test_bl_uvgate.py new file mode 100644 index 00000000..583bebb4 --- /dev/null +++ b/Tools/ModelTranslator/tests/test_bl_uvgate.py @@ -0,0 +1,23 @@ +import os +import sys +import unittest + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import bl_uvgate as bg + + +class TestSeamFallbackLabel(unittest.TestCase): + def test_plain_seam(self): + self.assertEqual(bg.seam_fallback_label("seam"), "seam_fallback") + + def test_seam_with_uvpm_suffix(self): + self.assertEqual(bg.seam_fallback_label("seam+uvpm"), "seam_fallback+uvpm") + + def test_smart_fallback_untouched(self): + self.assertEqual(bg.seam_fallback_label("smart_fallback"), "smart_fallback") + self.assertEqual(bg.seam_fallback_label("smart_fallback+uvpm"), + "smart_fallback+uvpm") + + +if __name__ == "__main__": + unittest.main()