Esempio n. 1
0
File: io.go Progetto: nat-n/shapeset
/* 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
}