MCPcopy Create free account
hub / github.com/Notgnoshi/generative / affine_transform

Function affine_transform

tools/transform.rs:181–224  ·  view source on GitHub ↗
(
    geometries: impl Iterator<Item = Geometry> + 'static,
    args: &CmdlineOptions,
)

Source from the content-addressed store, hash-verified

179}
180
181fn affine_transform(
182 geometries: impl Iterator<Item = Geometry> + 'static,
183 args: &CmdlineOptions,
184) -> Box<dyn Iterator<Item = Geometry> + '_> {
185 match args.center {
186 TransformCenter::Origin => {
187 let center = coord! {x:0.0, y: 0.0};
188 let transform = build_transform(args, center);
189 Box::new(geometries.map(move |geom| geom.affine_transform(&transform)))
190 }
191 TransformCenter::EachGeometry => {
192 let map = geometries.map(move |geom| {
193 let center = geom
194 .bounding_rect()
195 .unwrap_or_else(|| {
196 panic!(
197 "Geometry '{}' didn't have a bounding rectangle",
198 geom.to_wkt()
199 )
200 })
201 .center();
202 let transform = build_transform(args, center);
203 geom.affine_transform(&transform)
204 });
205 Box::new(map)
206 }
207 // more expensive for large numbers of geometries (has to load all of them into RAM before
208 // performing the transformations)
209 TransformCenter::WholeCollection => {
210 let geometries: Vec<_> = geometries.collect();
211 let rect = bounding_box(&geometries);
212 let center = rect.center();
213 let transform = build_transform(args, center);
214
215 // Instead of applying the transformation in-place all at once _and then_ writing the
216 // results, we lazily perform the transformation so that we can pipeline the
217 // transformation and the serialization.
218 let map = geometries
219 .into_iter()
220 .map(move |geom| geom.affine_transform(&transform));
221 Box::new(map)
222 }
223 }
224}
225
226fn from_polar(coord: Coord) -> Coord {
227 let r = coord.x;

Callers 1

mainFunction · 0.85

Calls 2

build_transformFunction · 0.85
bounding_boxFunction · 0.70

Tested by

no test coverage detected