/* Create a new shapeset from a json labels file and a directory of meshes. */ func CreateNew(meshes_dir, labels_path string) (ss *ShapeSet, err error) { // Ensure meshes_dir ends with a slash if meshes_dir[len(meshes_dir)-1] != 47 { meshes_dir += "/" } // Attempt to read given paths var label_data []byte label_data, err = ioutil.ReadFile(labels_path) if err != nil { return } var files []os.FileInfo files, err = ioutil.ReadDir(meshes_dir) if err != nil { return } // Load labels from json file labels := make(map[string]string, 0) var labels_temp interface{} json.Unmarshal(label_data, &labels_temp) for key, val := range labels_temp.(map[string]interface{}) { labels[key] = val.(string) } // Load all meshes with the expected filename pattern (.obj) from the // directory at meshes path. meshes := make([]*Mesh, 0) for _, f := range files { r, _ := regexp.Compile(`^(\d+-\d+).obj$`) if r.MatchString(f.Name()) == true { mesh_file_path := meshes_dir + f.Name() var m *gomesh.Mesh m, err = gomesh.ReadOBJFile(mesh_file_path) if err != nil { return } m.Name = string(r.FindSubmatch([]byte(f.Name()))[1]) meshes = append(meshes, WrapMesh(m)) } } // Compose shapeset ss = New("New ShapeSet", labels, meshes) return }