private static Size GetPrimitiveSize(PathPrimitive primitive, out Point min) { var minX = 0.0; var minY = 0.0; var maxX = 0.0; var maxY = 0.0; void updateMinMax(Point point) { minX = Math.Min(minX, point.x); minY = Math.Min(minY, point.y); maxX = Math.Max(maxX, point.x); maxY = Math.Max(maxY, point.y); } foreach (var command in primitive.Path) { switch (command.Type) { case PathCommandType.PathMoveTo: { var cmd = (MoveToCommand)command; var point = cmd.Point; updateMinMax(point); break; } case PathCommandType.PathLineTo: { var cmd = (LineToCommand)command; var point = cmd.Point; updateMinMax(point); break; } case PathCommandType.PathCurveTo: { var cmd = (CurveToCommand)command; var c0 = cmd.ControlPoint0; var c1 = cmd.ControlPoint1; var end = cmd.EndPoint; updateMinMax(c0); updateMinMax(c1); updateMinMax(end); break; } case PathCommandType.PathArc: { var cmd = (ArcCommand)command; var c0 = cmd.Center; var v = new Vector(cmd.Radius, cmd.Radius); var minPoint = c0 - v; var maxPoint = c0 + v; updateMinMax(minPoint); updateMinMax(maxPoint); break; } case PathCommandType.PathClosePath: case PathCommandType.Stroke: case PathCommandType.Fill: break; default: throw new ArgumentOutOfRangeException(); } } min = new Point(minX, minY); return(new Size(maxX - minX, maxY - minY)); }
public static PointD ToPointD(this ImGui.Common.Primitive.Point point) { return(new PointD(point.x, point.y)); }