MCPcopy Create free account
hub / github.com/cogentcore/core / DecodeFileFS

Function DecodeFileFS

xyz/io.go:78–122  ·  view source on GitHub ↗

DecodeFileFS decodes the given file from the given filesystem using a decoder based on the file extension. Returns decoder instance with full decoded state. Supported formats include: .obj = Wavefront OBJ format, including associated materials (.mtl) which must have same name as .obj, or a defaul

(fsys fs.FS, fname string)

Source from the content-addressed store, hash-verified

76//
77// must have same name as .obj, or a default material is used.
78func DecodeFileFS(fsys fs.FS, fname string) (Decoder, error) {
79 ext := filepath.Ext(fname)
80 dt, has := Decoders[ext]
81 if !has {
82 return nil, fmt.Errorf("xyz.DecodeFile: file extension: %v not found in Decoders list for file %v", ext, fname)
83 }
84 dec := dt.New()
85 fn := fname
86 subdir, fn := filepath.Split(fn)
87 var err error
88 if subdir != "" {
89 fsys, err = fs.Sub(fsys, subdir)
90 if err != nil {
91 return nil, fmt.Errorf("xyz.DecodeFile: file directory not found error: %v for file: %v", err, fname)
92 }
93 }
94 files, err := dec.SetFileFS(fsys, fn)
95 if err != nil {
96 return nil, fmt.Errorf("xyz.DecodeFile: file not found error: %v for file: %v", err, fname)
97 }
98 nf := len(files)
99
100 fs := make([]fs.File, nf)
101 rs := make([]io.Reader, nf)
102 defer func() {
103 for _, fi := range fs {
104 if fi != nil {
105 fi.Close()
106 }
107 }
108 }()
109
110 for i, f := range files {
111 fs[i], err = fsys.Open(f)
112 if err != nil {
113 return nil, err
114 }
115 rs[i] = fs[i]
116 }
117 err = dec.Decode(rs)
118 if err != nil {
119 return nil, err
120 }
121 return dec, nil
122}
123
124// OpenObj opens object(s) from given file into given group in scene,
125// using a decoder based on the file extension.

Callers 5

DecodeFileFunction · 0.85
OpenObjFSMethod · 0.85
OpenNewObjFSMethod · 0.85
OpenToLibraryFSMethod · 0.85
OpenSceneFSMethod · 0.85

Calls 8

SplitMethod · 0.80
ErrorfMethod · 0.65
NewMethod · 0.65
SetFileFSMethod · 0.65
CloseMethod · 0.65
OpenMethod · 0.65
DecodeMethod · 0.65
SubMethod · 0.45

Tested by

no test coverage detected