diff --git a/crates/lox-orbits/src/python.rs b/crates/lox-orbits/src/python.rs index b0540a3b..49789935 100644 --- a/crates/lox-orbits/src/python.rs +++ b/crates/lox-orbits/src/python.rs @@ -738,12 +738,14 @@ impl PySgp4 { } #[pyfunction] -#[pyo3(signature = (times, gs, mask, sc, provider = None))] +#[pyo3(signature = (times, gs, mask, sc, ephemeris, bodies=None, provider=None))] pub fn visibility( times: &Bound<'_, PyList>, gs: PyGroundLocation, mask: &Bound<'_, PyElevationMask>, sc: &Bound<'_, PyTrajectory>, + ephemeris: &Bound<'_, PySpk>, + bodies: Option>, provider: Option<&Bound<'_, PyUt1Provider>>, ) -> PyResult> { let sc = sc.get(); @@ -759,12 +761,18 @@ pub fn visibility( .collect(); let provider = provider.map(|p| &p.get().0); let mask = &mask.borrow().0; - Ok( - crate::analysis::visibility_dyn(×, &gs.0, mask, &sc.0, provider) - .into_iter() - .map(PyWindow) - .collect(), + let ephemeris = &ephemeris.get().0; + let bodies: Vec = bodies + .unwrap_or_default() + .into_iter() + .map(|b| b.0) + .collect(); + Ok(crate::analysis::visibility_combined( + ×, &gs.0, mask, &bodies, &sc.0, ephemeris, provider, ) + .into_iter() + .map(PyWindow) + .collect()) } #[pyclass(name = "Ensemble", module = "lox_space", frozen)] diff --git a/crates/lox-space/lox_space.pyi b/crates/lox-space/lox_space.pyi index 87e1c681..438f517a 100644 --- a/crates/lox-space/lox_space.pyi +++ b/crates/lox-space/lox_space.pyi @@ -26,7 +26,9 @@ def visibility( gs: GroundLocation, mask: ElevationMask, sc: Trajectory, - provider: UT1Provider, + ephemeris: SPK, + bodies: list[Origin] | None = None, + provider: UT1Provider | None = None, ) -> list[Window]: ... def visibility_all( times: list[Time],