feat(tahuantinsuyu): fase 27 — Lots helenísticos + 9 fixed stars
Dos módulos astrológicos pluggables más: - LotsModule: 7 Arabic Parts vía `all_lots(natal)` (Fortune, Spirit, Eros, Necessity, Courage, Victory, Nemesis). Glifos `lot:Fo` en ring 0.54, hover muestra el nombre completo. - FixedStarsModule: 9 estrellas notables (Aldebaran, Regulus, Antares, Fomalhaut, Spica, Sirius, Algol, Vega, Pollux) con longitudes tropicales J2000 + precesión general de 50.29″/año proyectada al año natal. Marcadores `✦Xxx` en ring 1.04. Registry pasa de 9 a 11 módulos; test actualizado. Sin cambios de esquema en RenderModel — los `LayerKind::Lots` y `LayerKind::FixedStars` ya existían. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -140,6 +140,8 @@ impl Registry {
|
||||
r.register(Box::new(midpoints::MidpointsModule));
|
||||
r.register(Box::new(composite::CompositeModule));
|
||||
r.register(Box::new(uranian::UranianModule));
|
||||
r.register(Box::new(lots::LotsModule));
|
||||
r.register(Box::new(fixed_stars::FixedStarsModule));
|
||||
r
|
||||
}
|
||||
|
||||
@@ -665,12 +667,99 @@ mod tests {
|
||||
assert!(r.find("midpoints").is_some());
|
||||
assert!(r.find("composite").is_some());
|
||||
assert!(r.find("uranian").is_some());
|
||||
// Natal kind tiene 9 módulos aplicables.
|
||||
assert_eq!(r.for_kind(ChartKind::Natal).len(), 9);
|
||||
assert!(r.find("lots").is_some());
|
||||
assert!(r.find("fixed_stars").is_some());
|
||||
// Natal kind tiene 11 módulos aplicables.
|
||||
assert_eq!(r.for_kind(ChartKind::Natal).len(), 11);
|
||||
assert!(r.for_kind(ChartKind::Synastry).is_empty());
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================================================
|
||||
// LotsModule — Lots helenísticos (Fortune, Spirit, Eros, …)
|
||||
// =====================================================================
|
||||
|
||||
pub mod lots {
|
||||
use super::*;
|
||||
|
||||
/// Calcula los 7 Lots arábigos clásicos via eternal-astrology y
|
||||
/// los renderea como pequeños labels en un ring justo debajo de
|
||||
/// los cuerpos natales. Hover muestra el nombre completo.
|
||||
pub struct LotsModule;
|
||||
|
||||
impl Module for LotsModule {
|
||||
fn id(&self) -> &'static str {
|
||||
"lots"
|
||||
}
|
||||
fn label(&self) -> &'static str {
|
||||
"Lots (helenísticos)"
|
||||
}
|
||||
fn description(&self) -> &'static str {
|
||||
"Fortune, Spirit, Eros, Necessity, Courage, Victory, Nemesis."
|
||||
}
|
||||
fn applies_to(&self, kind: ChartKind) -> bool {
|
||||
matches!(kind, ChartKind::Natal)
|
||||
}
|
||||
fn enabled_by_default(&self) -> bool {
|
||||
false
|
||||
}
|
||||
fn controls(&self) -> Vec<Control> {
|
||||
vec![Control::Toggle {
|
||||
key: "enabled".into(),
|
||||
label: "Activar".into(),
|
||||
default: false,
|
||||
hotkey: None,
|
||||
}]
|
||||
}
|
||||
fn compute_layers(&self, _chart: &Chart, _cfg: &serde_json::Value) -> Vec<Layer> {
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================================================
|
||||
// FixedStarsModule — 9 estrellas astrológicamente notables
|
||||
// =====================================================================
|
||||
|
||||
pub mod fixed_stars {
|
||||
use super::*;
|
||||
|
||||
/// 9 estrellas fijas (Aldebaran, Regulus, Antares, Fomalhaut,
|
||||
/// Spica, Sirius, Algol, Vega, Pollux) con posición tropical
|
||||
/// aproximada (J2000 + precesión simple). Marcadores chicos en el
|
||||
/// margen exterior del sign dial.
|
||||
pub struct FixedStarsModule;
|
||||
|
||||
impl Module for FixedStarsModule {
|
||||
fn id(&self) -> &'static str {
|
||||
"fixed_stars"
|
||||
}
|
||||
fn label(&self) -> &'static str {
|
||||
"Estrellas fijas"
|
||||
}
|
||||
fn description(&self) -> &'static str {
|
||||
"9 estrellas notables — conjunciones con planetas natales."
|
||||
}
|
||||
fn applies_to(&self, kind: ChartKind) -> bool {
|
||||
matches!(kind, ChartKind::Natal)
|
||||
}
|
||||
fn enabled_by_default(&self) -> bool {
|
||||
false
|
||||
}
|
||||
fn controls(&self) -> Vec<Control> {
|
||||
vec![Control::Toggle {
|
||||
key: "enabled".into(),
|
||||
label: "Activar".into(),
|
||||
default: false,
|
||||
hotkey: None,
|
||||
}]
|
||||
}
|
||||
fn compute_layers(&self, _chart: &Chart, _cfg: &serde_json::Value) -> Vec<Layer> {
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =====================================================================
|
||||
// UranianModule — ejes del dial uraniano de 90° (versión textual)
|
||||
// =====================================================================
|
||||
|
||||
Reference in New Issue
Block a user