| 108 | } |
| 109 | |
| 110 | fn build_transform(args: &CmdlineOptions, center: Coord) -> AffineTransform { |
| 111 | let mut transform = AffineTransform::rotate(args.rotation, center); |
| 112 | |
| 113 | if let Some(scale) = args.scale { |
| 114 | transform = transform.scaled(scale, scale, center); |
| 115 | } |
| 116 | match (args.scale_x, args.scale_y) { |
| 117 | (Some(x), Some(y)) => { |
| 118 | transform = transform.scaled(x, y, center); |
| 119 | } |
| 120 | (Some(x), None) => { |
| 121 | transform = transform.scaled(x, 1.0, center); |
| 122 | } |
| 123 | (None, Some(y)) => { |
| 124 | transform = transform.scaled(1.0, y, center); |
| 125 | } |
| 126 | (None, None) => {} |
| 127 | } |
| 128 | match (args.offset_x, args.offset_y) { |
| 129 | (Some(x), Some(y)) => { |
| 130 | transform = transform.translated(x, y); |
| 131 | } |
| 132 | (Some(x), None) => { |
| 133 | transform = transform.translated(x, 0.0); |
| 134 | } |
| 135 | (None, Some(y)) => { |
| 136 | transform = transform.translated(0.0, y); |
| 137 | } |
| 138 | (None, None) => {} |
| 139 | } |
| 140 | match (args.skew_x, args.skew_y) { |
| 141 | (Some(x), Some(y)) => { |
| 142 | transform = transform.skewed(x, y, center); |
| 143 | } |
| 144 | (Some(x), None) => { |
| 145 | transform = transform.skewed(x, 0.0, center); |
| 146 | } |
| 147 | (None, Some(y)) => { |
| 148 | transform = transform.skewed(0.0, y, center); |
| 149 | } |
| 150 | (None, None) => {} |
| 151 | } |
| 152 | |
| 153 | transform |
| 154 | } |
| 155 | |
| 156 | fn bounding_box(geometries: &[Geometry]) -> Rect { |
| 157 | // Calculate the center of the bounding box; needed to build the AffineTransform |