///|
// MaxN reads the projection again at its raw-step stage. This is distinct
// from Logit's earlier polar gate and can observe a different getter result.
fn LogitLocator::maxn_raw_step_transform(
self : LogitLocator,
step : Double,
) -> Double raise @core.DataError {
match self.projection_provider {
Some(provider) => {
let projection = provider()
if projection == "3d" {
let scaled = step * 23.0
scaled / 24.0
} else {
step
}
}
None => step
}
}
///|
fn LogitLocator::maxn_fallback_ticks(
self : LogitLocator,
lower : Double,
upper : Double,
) -> Array[Double] raise @core.DataError {
maxn_tick_values_with_context(
self.maxn,
lower,
upper,
raw_step_transform=step => self.maxn_raw_step_transform(step),
require_tick_space=self.is_bound(),
)
}
///|
fn LogitLocator::inherited_view_limits(
self : LogitLocator,
lower : Double,
upper : Double,
) -> (Double, Double) raise @core.DataError {
maxn_view_limits_with_context(
self.maxn,
lower,
upper,
raw_step_transform=step => self.maxn_raw_step_transform(step),
require_tick_space=self.is_bound(),
)
}