"""Door robot arm: previews/cycles/cycles_compare_sheet.png, each reference beside its Cycles view (2 pairs a row). Run with any Python that has Pillow (not Blender): python build/dra_compare_sheet.py """ import os from PIL import Image, ImageDraw ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) REF = os.path.join(ROOT, "reference") CYC = os.path.join(ROOT, "previews", "cycles") PAIRS = [("ref1_side_left.jpg", "cycles_ref1_A.png"), ("ref2_three_quarter_left.jpg", "cycles_ref2_A.png"), ("ref3_three_quarter_right.jpg", "cycles_ref3_A.png"), ("ref4_base_wire_closeup.jpg", "cycles_close_ref4.png"), ("ref5_lower_arm_wire_closeup.jpg", "cycles_close_ref5.png"), ("ref6_wrist_redline_no_grab_limbs.png", "cycles_close_ref6A.png"), ("ref6_wrist_redline_no_grab_limbs.png", "cycles_close_ref6B.png"), ("ref7_front_base_wire.jpg", "cycles_close_ref7.png")] S = 500 def tile(path, label): im = Image.open(path).convert("RGB") im.thumbnail((S, S)) t = Image.new("RGB", (S, S), (40, 40, 40)) t.paste(im, ((S - im.width) // 2, (S - im.height) // 2)) d = ImageDraw.Draw(t) w = d.textlength(label) d.rectangle((4, 4, 12 + w, 22), fill=(0, 0, 0)) d.text((8, 7), label, fill=(255, 255, 255)) return t def main(): sheet = Image.new("RGB", (4 * S, ((len(PAIRS) + 1) // 2) * S), (40, 40, 40)) for i, (r, c) in enumerate(PAIRS): x, y = (i % 2) * 2 * S, (i // 2) * S sheet.paste(tile(os.path.join(REF, r), "reference: " + r), (x, y)) sheet.paste(tile(os.path.join(CYC, c), "model: " + c), (x + S, y)) out = os.path.join(CYC, "cycles_compare_sheet.png") sheet.save(out) print("written", out, sheet.size) if __name__ == "__main__": main()