private static Coordinate[] GetRectanglePoints(Coordinate center, double angle, double halfBoundary) { var angleRad = ((360 - angle) % 360) * Math.PI / 180; Coordinate[] rect = new Coordinate[] { new Coordinate(center.X - halfBoundary, center.Y + halfBoundary), new Coordinate(center.X + halfBoundary, center.Y + halfBoundary), new Coordinate(center.X + halfBoundary, center.Y - halfBoundary), new Coordinate(center.X - halfBoundary, center.Y - halfBoundary), new Coordinate(center.X - halfBoundary, center.Y + halfBoundary) }; return(LocateUtils.RotateTransform(rect, angleRad, center)); }
/// <summary> /// Нанесение Text на Graphics. /// </summary> /// <param name="g">Graphics.</param> /// <param name="text">Текст надписи.</param> /// <param name="angle">Угол поворота текста.</param> /// <param name="coord">Координата, где начинается надпись.</param> protected virtual void DrawText(Graphics g, Coordinate coord, string text, double angle) { var center = new Coordinate(coord.X, coord.Y); var l = new List <Coordinate> { new Coordinate(center.X + _itemMaxSizePx, center.Y) }; var coordText = LocateUtils.RotateTransform(l, -((angle - 90) * Math.PI / 180), center)[0]; var x = (float)coordText.X; var y = (float)coordText.Y; var textStyle = _style as ITextStyle; if (textStyle != null) { g.TextRenderingHint = TextRenderingHint.AntiAlias; var size = g.MeasureString(text, textStyle.Font, 1000000, StringFormat.GenericTypographic); var cont = g.BeginContainer(); // Сдвигаем строку на место отрисовки. g.TranslateTransform(x, y); // Делаем надпись зеркальной. g.ScaleTransform(1, -1); //Сдвиг по размеру текста. x = -size.Width / 2; y = -size.Height / 2; // Поворачиваем строку на заданный угол. g.RotateTransform((float)(angle)); // Отрисовка белой каёмочки вокруг текста. const float dx = 0.02f; using (var brushWhite = new SolidBrush(Color.White)) { g.DrawString(text, textStyle.Font, brushWhite, new PointF(x - dx, y - dx)); g.DrawString(text, textStyle.Font, brushWhite, new PointF(x + dx, y + dx)); } using (var brushStyled = new SolidBrush(textStyle.TextColor)) { g.DrawString(text, textStyle.Font, brushStyled, x, y); } g.EndContainer(cont); } }