README - code example to use Python syntax highlighting (#92894)

Added explicit code block  for Python syntax highlighting.

Reviewed-on: https://projects.blender.org/blender/blender-asset-tracer/pulls/92894
This commit is contained in:
Andrej730 2025-07-28 15:01:00 +02:00 committed by Sybren A. Stüvel
parent 8a17495566
commit 95165a0330

View File

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