poikilos
1 year ago
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