Code/AutoRig/Formats/MeshLoader.cs

Static helper that dispatches mesh loading based on file extension. It exposes supported extensions and Load(byte[] data, string fileName) which picks the appropriate importer (OBJ, glTF/GLB, FBX) and returns a RigMesh or throws FormatException for unknown extensions.

using AutoRig.Formats.Fbx;
using AutoRig.Formats.Gltf;
using AutoRig.Formats.Wavefront;
using AutoRig.Mesh;

namespace AutoRig.Formats;

/// <summary>Extension-dispatched mesh loading for all supported formats.</summary>
public static class MeshLoader
{
    /// <summary>Supported file extensions (lower case, with dot).</summary>
    public static readonly string[] Extensions = [ ".obj", ".glb", ".gltf", ".fbx" ];

    /// <exception cref="FormatException">Unknown extension or malformed content.</exception>
    public static RigMesh Load( byte[] data, string fileName )
    {
        ArgumentNullException.ThrowIfNull( data );
        ArgumentNullException.ThrowIfNull( fileName );

        var dot = fileName.LastIndexOf( '.' );
        var extension = dot >= 0 ? fileName[dot..].ToLowerInvariant() : "";
        return extension switch
        {
            ".obj" => ObjImporter.Import( data, fileName ),
            ".glb" or ".gltf" => GltfMeshImporter.Import( data, fileName ),
            ".fbx" => FbxMeshImporter.Import( data, fileName ),
            _ => throw new FormatException(
                $"Unsupported model format '{extension}' - supported: {string.Join( ", ", Extensions )}." ),
        };
    }
}