3 changed files with 102 additions and 0 deletions
			
			
		| @ -0,0 +1,79 @@ | |||||
|  | #!/usr/bin/env python | ||||
|  | ''' | ||||
|  | Count the number of meshes in OBJ files. In the Wavefront OBJ format, | ||||
|  | these meshes are technically called "Objects" and the OBJ file can have | ||||
|  | any number of them. They are created by the "o" command in the file. | ||||
|  | 
 | ||||
|  | Alternative (OBJ or non-OBJ): | ||||
|  | - For support of any file that can be imported into Blender, try pasting | ||||
|  |   count_objects.py's contents (found in | ||||
|  |   EnlivenMinetest/utilities/blender/) into a Blender script Window | ||||
|  |   (Follow instructions in docstring at top of file). | ||||
|  | ''' | ||||
|  | from __future__ import print_function | ||||
|  | import sys | ||||
|  | import os | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | def echo0(*args, **kwargs): | ||||
|  |     dst = sys.stderr | ||||
|  |     if 'file' in kwargs: | ||||
|  |         dst = kwargs['file'] | ||||
|  |         del kwargs['file'] | ||||
|  |     print(*args, file=dst, **kwargs) | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | def usage(): | ||||
|  |     echo0(__doc__) | ||||
|  |     echo0() | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | def obj_stats(path): | ||||
|  |     results = { | ||||
|  |         'mesh_count': 0, | ||||
|  |     } | ||||
|  |     if not os.path.isfile(path): | ||||
|  |         raise FileNotFoundError(path) | ||||
|  |     lineN = 0 | ||||
|  |     with open(path, 'rb') as stream: | ||||
|  |         for rawL in stream: | ||||
|  |             lineN += 1  # counting numbers start at 1 | ||||
|  |             line = rawL.strip() | ||||
|  |             if not line.strip(): | ||||
|  |                 # blank line | ||||
|  |                 continue | ||||
|  |             parts = line.split() | ||||
|  |             if parts[0] == b"o": | ||||
|  |                 results['mesh_count'] += 1 | ||||
|  |             else: | ||||
|  |                 pass | ||||
|  |                 # echo0('line {}: Does not start with "o": {}' | ||||
|  |                 #       ''.format(lineN, parts)) | ||||
|  |     return results | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | def main(): | ||||
|  |     if len(sys.argv) < 2: | ||||
|  |         usage() | ||||
|  |         echo0("You must provide an OBJ filename.") | ||||
|  |         return 1 | ||||
|  |     path = sys.argv[1] | ||||
|  |     if not path.lower().endswith(".obj"): | ||||
|  |         usage() | ||||
|  |         echo0("Error: Only OBJ files can be analyzed. Try pasting" | ||||
|  |               " count_objects.py's contents into a Blender script window" | ||||
|  |               " (Follow instructions in docstring at top of file)") | ||||
|  |               " to analyze any file you can import into Blender." | ||||
|  |         return 1 | ||||
|  |     if not os.path.isfile(path): | ||||
|  |         # Avoid an exception & use CLI-style (pipe & filter) logic | ||||
|  |         usage() | ||||
|  |         echo0('Error: "{}" does not exist.'.format(path)) | ||||
|  |         return 1 | ||||
|  |     stats = obj_stats(path) | ||||
|  |     print(stats['mesh_count']) | ||||
|  |     return 0 | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | if __name__ == "__main__": | ||||
|  |     sys.exit(main()) | ||||
| @ -0,0 +1,19 @@ | |||||
|  | #!/usr/bin/env python | ||||
|  | ''' | ||||
|  | Count the number of meshes in OBJ files. In the Wavefront OBJ format, | ||||
|  | these meshes are technically called "Objects" and the OBJ file can have | ||||
|  | any number of them. They are created by the "o" command in the file. | ||||
|  | ''' | ||||
|  | from __future__ import print_function | ||||
|  | import sys | ||||
|  | import os | ||||
|  | 
 | ||||
|  | SCRIPTS_DIR = os.path.dirname(os.path.realpath(__file__)) | ||||
|  | REPO_DIR = os.path.dirname(SCRIPTS_DIR) | ||||
|  | 
 | ||||
|  | sys.path.insert(0, REPO_DIR)  # let import find pyenliven when it's not installed | ||||
|  | 
 | ||||
|  | from pyenliven.objanalyze import main | ||||
|  | 
 | ||||
|  | if __name__ == "__main__": | ||||
|  |     sys.exit(main()) | ||||
					Loading…
					
					
				
		Reference in new issue