public void Transform(Transform transform) { var t = new Matrix(); t.SetValues(new[] { (float) transform.A, (float) transform.C, (float) transform.E, (float) transform.B, (float) transform.D, (float) transform.F, 0, 0, 1 }); t.PostConcat(graphics.Matrix); graphics.Matrix = t; }
Transform ReadTransform(string raw) { if (string.IsNullOrWhiteSpace(raw)) return Transform.Identity; var s = raw.Trim(); var calls = s.Split(new[] { ')' }, StringSplitOptions.RemoveEmptyEntries); var t = Transform.Identity; foreach (var c in calls) { var args = c.Split(new[] { '(', ',', ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); var nt = Transform.Identity; switch (args[0]) { case "matrix": if (args.Length == 7) { nt = new Transform( _valuesParser.ReadNumber(args[1]), _valuesParser.ReadNumber(args[2]), _valuesParser.ReadNumber(args[3]), _valuesParser.ReadNumber(args[4]), _valuesParser.ReadNumber(args[5]), _valuesParser.ReadNumber(args[6])); } else { throw new NotSupportedException("Matrices are expected to have 6 elements, this one has " + (args.Length - 1)); } break; case "translate": if (args.Length >= 3) { nt = Transform.Translate(new Size(_valuesParser.ReadNumber(args[1]), _valuesParser.ReadNumber(args[2]))); } else if (args.Length >= 2) { nt = Transform.Translate(new Size(_valuesParser.ReadNumber(args[1]), 0)); } break; case "scale": if (args.Length >= 3) { nt = Transform.Scale(new Size(_valuesParser.ReadNumber(args[1]), _valuesParser.ReadNumber(args[2]))); } else if (args.Length >= 2) { var sx = _valuesParser.ReadNumber(args[1]); nt = Transform.Scale(new Size(sx, sx)); } break; case "rotate": var a = _valuesParser.ReadNumber(args[1]); if (args.Length >= 4) { var x = _valuesParser.ReadNumber(args[2]); var y = _valuesParser.ReadNumber(args[3]); var t1 = Transform.Translate(new Size(x, y)); var t2 = Transform.Rotate(a); var t3 = Transform.Translate(new Size(-x, -y)); nt = t1 * t2 * t3; } else { nt = Transform.Rotate(a); } break; default: throw new NotSupportedException("Can't transform " + args[0]); } t = t * nt; } return t; }
public void Transform(Transform transform) { try { graphics.MultiplyTransform(new Matrix( (float)transform.A, (float)transform.B, (float)transform.C, (float)transform.D, (float)transform.E, (float)transform.F), MatrixOrder.Prepend); } catch (Exception ex) { Console.WriteLine(ex); } }
public void Transform(Transform transform) { }