diff --git a/README.md b/README.md index 2714973..0166310 100644 --- a/README.md +++ b/README.md @@ -75,49 +75,51 @@ Mypy likes to see the return type of `__init__` methods explicitly declared as ` BAT can be used as a Python library to inspect the contents of blend files, without having to open Blender itself. Here is an example showing how to determine the render engine used: - #!/usr/bin/env python3.7 - import json - import sys - from pathlib import Path +```python +#!/usr/bin/env python3.7 +import json +import sys +from pathlib import Path - from blender_asset_tracer import blendfile - from blender_asset_tracer.blendfile import iterators +from blender_asset_tracer import blendfile +from blender_asset_tracer.blendfile import iterators - if len(sys.argv) != 2: - print(f'Usage: {sys.argv[0]} somefile.blend', file=sys.stderr) - sys.exit(1) +if len(sys.argv) != 2: + print(f'Usage: {sys.argv[0]} somefile.blend', file=sys.stderr) + sys.exit(1) - bf_path = Path(sys.argv[1]) - bf = blendfile.open_cached(bf_path) +bf_path = Path(sys.argv[1]) +bf = blendfile.open_cached(bf_path) - # Get the first window manager (there is probably exactly one). - window_managers = bf.find_blocks_from_code(b'WM') - assert window_managers, 'The Blend file has no window manager' - window_manager = window_managers[0] +# Get the first window manager (there is probably exactly one). +window_managers = bf.find_blocks_from_code(b'WM') +assert window_managers, 'The Blend file has no window manager' +window_manager = window_managers[0] - # Get the scene from the first window. - windows = window_manager.get_pointer((b'windows', b'first')) - for window in iterators.listbase(windows): - scene = window.get_pointer(b'scene') - break +# Get the scene from the first window. +windows = window_manager.get_pointer((b'windows', b'first')) +for window in iterators.listbase(windows): + scene = window.get_pointer(b'scene') + break - # BAT can only return simple values, so it can't return the embedded - # struct 'r'. 'r.engine' is a simple string, though. - engine = scene[b'r', b'engine'].decode('utf8') - xsch = scene[b'r', b'xsch'] - ysch = scene[b'r', b'ysch'] - size = scene[b'r', b'size'] / 100.0 +# BAT can only return simple values, so it can't return the embedded +# struct 'r'. 'r.engine' is a simple string, though. +engine = scene[b'r', b'engine'].decode('utf8') +xsch = scene[b'r', b'xsch'] +ysch = scene[b'r', b'ysch'] +size = scene[b'r', b'size'] / 100.0 - render_info = { - 'engine': engine, - 'frame_pixels': { - 'x': int(xsch * size), - 'y': int(ysch * size), - }, - } +render_info = { + 'engine': engine, + 'frame_pixels': { + 'x': int(xsch * size), + 'y': int(ysch * size), + }, +} - json.dump(render_info, sys.stdout, indent=4, sort_keys=True) - print() +json.dump(render_info, sys.stdout, indent=4, sort_keys=True) +print() +``` To understand the naming of the properties, look at Blender's `DNA_xxxx.h` files with struct definitions. It is those names that are accessed via `blender_asset_tracer.blendfile`. The