|
|
@@ -131,6 +131,16 @@ def _format_degree(deg_float: float) -> str:
|
|
|
return f"{d}\u00b0{m:02d}\u2019"
|
|
|
|
|
|
|
|
|
+def _to_roman(num: int) -> str:
|
|
|
+ """Convert an integer (1-12) to a Roman numeral string."""
|
|
|
+ roman_map = {
|
|
|
+ 1: "I", 2: "II", 3: "III", 4: "IV", 5: "V",
|
|
|
+ 6: "VI", 7: "VII", 8: "VIII", 9: "IX", 10: "X",
|
|
|
+ 11: "XI", 12: "XII",
|
|
|
+ }
|
|
|
+ return roman_map.get(num, str(num))
|
|
|
+
|
|
|
+
|
|
|
# ── Main natal wheel renderer ─────────────────────────────────────────
|
|
|
|
|
|
def render_natal_wheel(
|
|
|
@@ -314,10 +324,12 @@ def render_natal_wheel(
|
|
|
diff = (c1 - c2) % 360.0 # CCW distance from c1 to c2
|
|
|
mid_c = (c1 - diff / 2.0) % 360.0
|
|
|
hx, hy = _polar_to_cartesian(wheel_cx, wheel_cy, r_hnum, mid_c)
|
|
|
+ house_num = house.get("house", i + 1)
|
|
|
dwg.add(dwg.text(
|
|
|
- str(house.get("house", i + 1)), insert=(hx, hy),
|
|
|
+ _to_roman(house_num), insert=(hx, hy),
|
|
|
text_anchor="middle", dominant_baseline="central",
|
|
|
- class_="lbl", font_size="11px", fill=theme["degree_text"],
|
|
|
+ class_="lbl", font_size="10px", font_style="italic",
|
|
|
+ fill=theme["degree_text"],
|
|
|
))
|
|
|
|
|
|
# ── Angle axis lines (ASC-DSC and MC-IC) ─────────────────────────
|