"""Blender 导入脚本。

用法：
  # 仅导入到当前 Blender（在 Blender 内“运行脚本”）
  blender --background --python import_to_blender.py -- <model.glb>

  # 无头导入并另存为 .blend
  blender --background --python import_to_blender.py -- <model.glb> --blend <out.blend>

说明：在 Blender 内直接“运行脚本”时会把模型导入当前场景；用 --blend 时可
在脚本结束后得到一个 .blend 文件，双击即可在 Blender 打开。
"""

import argparse
import bpy
import sys


def parse_args(argv):
    # 兼容不同调用方式，提取脚本自身参数
    if "import_to_blender.py" in argv:
        rest = argv[argv.index("import_to_blender.py") + 1:]
    elif "--" in argv:
        rest = argv[argv.index("--") + 1:]
    else:
        rest = argv[1:]
    p = argparse.ArgumentParser()
    p.add_argument("glb")
    p.add_argument("--blend", default=None, help="另存为 .blend 的路径")
    return p.parse_args(rest)


def main():
    args = parse_args(sys.argv)

    # 清空默认场景（默认立方体/相机/灯光）
    bpy.ops.wm.read_factory_settings(use_empty=True)

    bpy.ops.import_scene.gltf(filepath=args.glb)

    objs = [o for o in bpy.context.scene.objects if o.type == "MESH"]
    if objs:
        for o in objs:
            bpy.context.view_layer.objects.active = o
            o.select_set(True)
        bpy.ops.object.origin_set(type="ORIGIN_GEOMETRY", center="BOUNDS")
        for o in objs:
            o.location = (0.0, 0.0, 0.0)

    if args.blend:
        bpy.ops.wm.save_as_mainfile(filepath=args.blend)
        print("已保存:", args.blend)
    else:
        print("已导入", len(objs), "个网格对象。")


if __name__ == "__main__":
    main()
