IDiagram ITranslatable.PerformTranslate(decimal x, decimal y) => Diagrams.Select(diagram => diagram.Offset(x, y)) .ToImmutableList() .Pipe(diagrams => new CompositeDiagram(diagrams, this.Bounds.Offset(x, y)));
IDiagram IScalable.PerformScaling(decimal x, decimal y) => Diagrams.Select(diagram => RescaleSubdiagram(diagram, this.Bounds.Center(), x, y)) .ToImmutableList() .Pipe(diagrams => new CompositeDiagram(diagrams, this.Bounds.Scale(x, y)));
IDiagram IRotatable.PerformRotate(Angle angle) => Diagrams.Select(diagram => diagram.RotateAbout(Bounds.Center(), angle)) .ToImmutableList() .Pipe(x => new CompositeDiagram(x, BoundingBox.Compose(x.Select(y => y.Bounds))));