From b2c9a4f63ea9c0a4e805763253b5e47e8658890f Mon Sep 17 00:00:00 2001 From: Jannik-Hm Date: Thu, 20 Nov 2025 23:50:28 +0100 Subject: [PATCH] added `GetModel` func + simplified gltf loader arg from ReadCloser to Reader --- main.go | 49 +++++++++++++++++++++++++++++++++++++++ pkg/file_handlers/gltf.go | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 854af57..f158f7d 100644 --- a/main.go +++ b/main.go @@ -1 +1,50 @@ package GDTFMeshReader + +import ( + "fmt" + "io" + "path/filepath" + + "github.com/Patch2PDF/GDTF-Mesh-Reader/pkg/MeshTypes" + FileHandlers "github.com/Patch2PDF/GDTF-Mesh-Reader/pkg/file_handlers" + Primitives "github.com/Patch2PDF/GDTF-Mesh-Reader/pkg/primitives" +) + +type ModelReaderConf struct { + File *io.Reader + Filename *string + PrimitiveType string +} + +func GetModel(conf ModelReaderConf, desiredSize MeshTypes.Vector) (*MeshTypes.Mesh, error) { + var mesh *MeshTypes.Mesh + + if conf.PrimitiveType == "undefined" && conf.File != nil && conf.Filename != nil && *conf.Filename != "" { + filetype := filepath.Ext(*conf.Filename) + switch filetype { + case ".gltf", ".glb": + meshes, err := FileHandlers.LoadGLTF(*conf.File, desiredSize) + if err != nil { + return nil, err + } + mesh = meshes[0] + case ".3ds": + data, err := io.ReadAll(*conf.File) + if err != nil { + return nil, err + } + mesh, err = FileHandlers.Load3DS(&data, &desiredSize) + if err != nil { + return nil, err + } + default: + return nil, fmt.Errorf("unknown model type %s", filetype) + } + } else if conf.PrimitiveType != "undefined" && Primitives.Primitives[conf.PrimitiveType] != nil { + tempMesh := Primitives.Primitives[conf.PrimitiveType].Copy() + mesh = &tempMesh + mesh.ScaleToDimensions(&desiredSize) + } + + return mesh, nil +} diff --git a/pkg/file_handlers/gltf.go b/pkg/file_handlers/gltf.go index aff7f97..b01f997 100644 --- a/pkg/file_handlers/gltf.go +++ b/pkg/file_handlers/gltf.go @@ -10,7 +10,7 @@ import ( "github.com/qmuntal/gltf" ) -func LoadGLTF(file io.ReadCloser, desiredSize Types.Vector) ([]*Types.Mesh, error) { +func LoadGLTF(file io.Reader, desiredSize Types.Vector) ([]*Types.Mesh, error) { var doc gltf.Document gltf.NewDecoder(file).Decode(&doc)