public static void DrawIntensity(this DrawingContext drawingContext, JmaIntensity intensity, Point point, double size, bool centerPosition = false, bool circle = false) { var halfSize = new Vector(size / 2, size / 2); var leftTop = centerPosition ? point - halfSize : point; if (circle) { drawingContext.DrawEllipse((Brush)Application.Current.FindResource($"{intensity}Background"), null, centerPosition ? point : point + halfSize, size / 2, size / 2); } else { drawingContext.DrawRectangle((Brush)Application.Current.FindResource($"{intensity}Background"), null, new Rect(leftTop, new Size(size, size))); } switch (intensity) { case JmaIntensity.Int5Lower: { var brush = (Brush)Application.Current.FindResource($"Int5LowerForeground"); drawingContext.DrawText(new FormattedText("5", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size, brush, 1), new Point(leftTop.X + size * .1, leftTop.Y - size * .25)); drawingContext.DrawText(new FormattedText("-", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size * .75, brush, 1), new Point(leftTop.X + size * .6, leftTop.Y - size * .27)); } return; case JmaIntensity.Int5Upper: { var brush = (Brush)Application.Current.FindResource($"Int5UpperForeground"); drawingContext.DrawText(new FormattedText("5", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size, brush, 1), new Point(leftTop.X + size * .1, leftTop.Y - size * .25)); drawingContext.DrawText(new FormattedText("+", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size * .75, brush, 1), new Point(leftTop.X + size * .5, leftTop.Y - size * .23)); } return; case JmaIntensity.Int6Lower: { var brush = (Brush)Application.Current.FindResource($"Int6LowerForeground"); drawingContext.DrawText(new FormattedText("6", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size, brush, 1), new Point(leftTop.X + size * .1, leftTop.Y - size * .25)); drawingContext.DrawText(new FormattedText("-", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size * .75, brush, 1), new Point(leftTop.X + size * .6, leftTop.Y - size * .27)); } return; case JmaIntensity.Int6Upper: { var brush = (Brush)Application.Current.FindResource($"Int6UpperForeground"); drawingContext.DrawText(new FormattedText("6", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size, brush, 1), new Point(leftTop.X + size * .1, leftTop.Y - size * .25)); drawingContext.DrawText(new FormattedText("+", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size * .75, brush, 1), new Point(leftTop.X + size * .5, leftTop.Y - size * .23)); } return; case JmaIntensity.Unknown: drawingContext.DrawText(new FormattedText("-", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size, (Brush)Application.Current.FindResource($"UnknownForeground"), 1), new Point(leftTop.X + size * .32, leftTop.Y - size * .3)); return; case JmaIntensity.Error: drawingContext.DrawText(new FormattedText("*", CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size, (Brush)Application.Current.FindResource($"ErrorForeground"), 1), new Point(leftTop.X + size * .25, leftTop.Y + size * .1)); return; } drawingContext.DrawText(new FormattedText(intensity.ToShortString(), CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, intensityFace, size, (Brush)Application.Current.FindResource($"{intensity}Foreground"), 1), new Point(leftTop.X + size * .22, leftTop.Y - size * .25)); }
/// <summary> /// 気象庁震度階級を長い形式の文字列に変換します。 /// </summary> /// <param name="shindo">変換するShindo</param> /// <returns>変換された文字列</returns> public static string ToLongString(this JmaIntensity shindo) { switch (shindo) { case JmaIntensity.Error: return("震度異常"); case JmaIntensity.Int0: return("震度0"); case JmaIntensity.Int1: return("震度1"); case JmaIntensity.Int2: return("震度2"); case JmaIntensity.Int3: return("震度3"); case JmaIntensity.Int4: return("震度4"); case JmaIntensity.Int5Lower: return("震度5弱"); case JmaIntensity.Int5Upper: return("震度5強"); case JmaIntensity.Int6Lower: return("震度6弱"); case JmaIntensity.Int6Upper: return("震度6強"); case JmaIntensity.Int7: return("震度7"); default: return("震度不明"); } }
/// <summary> /// 気象庁震度階級を短い形式の文字列に変換します。 /// </summary> /// <param name="shindo">変換するShindo</param> /// <returns>変換された文字列</returns> public static string ToShortString(this JmaIntensity shindo) { switch (shindo) { case JmaIntensity.Error: return("異常"); case JmaIntensity.Int0: return("0"); case JmaIntensity.Int1: return("1"); case JmaIntensity.Int2: return("2"); case JmaIntensity.Int3: return("3"); case JmaIntensity.Int4: return("4"); case JmaIntensity.Int5Lower: return("5-"); case JmaIntensity.Int5Upper: return("5+"); case JmaIntensity.Int6Lower: return("6-"); case JmaIntensity.Int6Upper: return("6+"); case JmaIntensity.Int7: return("7"); default: return("不明"); } }