// scaled when put into GroupData
pub size: Vec<f64>,
+ #[serde(default)]
+ /// If specified, the input is first scaled from `orig_size` to
+ /// `size`. If both `size` and `orig_size` are 2 elements, may
+ /// scale by different amounts in x and y.
+ pub orig_size: Vec<f64>,
+
#[serde(default)]
/// Default if not supplied is `[0,0]`.
pub centre: [f64; 2],
#[throws(LLE)]
fn from_group(d: &GroupDetails) -> Self {
let centre = d.centre;
- let scale = d.scale;
- FaceTransform { centre, scale: [scale,scale] }
+ let scale = if ! d.orig_size.is_empty() && ! d.size.is_empty() {
+ // by this point d.size has already been scaled by scale
+ izip!(&d.orig_size, &d.size)
+ .map(|(&orig_size, &target_size)| {
+ target_size / orig_size
+ })
+ .cycle()
+ .take(2)
+ .collect::<ArrayVec<[_;2]>>()
+ .into_inner()
+ .unwrap()
+ } else {
+ let s = d.scale;
+ [s,s]
+ };
+ FaceTransform { centre, scale }
}
#[throws(IE)]