chaitanya.gorupina Ответов: 2

как нарисовать текст по кругу в C#


Может ли кто-нибудь помочь мне найти это?...

2 Ответов

Рейтинг:
0

OriginalGriff

Вы можете посмотреть здесь: Текст на пути с VB.NET[^]


Рейтинг:
0

Fredrik Bornander

Трудно ответить без дополнительной информации, прежде всего мне нужно знать, какие ограничения у вас есть на интервал.

Если вы просто пытаетесь равномерно распределить текст по всему кругу, то что-то вроде этого может сделать трюк для вас;

using System;
using System.Drawing;
using System.Windows.Forms;

namespace CircleText {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            SizeChanged += (s, e) => Invalidate();
        }

        protected override void OnPaint(PaintEventArgs e) {
            base.OnPaint(e);

            var center = new Point(Width/2, Height/2);
            var radius = Math.Min(Width, Height) / 3;
            var text = "ABCDEFGHIJLKMNOPQRSTUVWXYZ";

            var font = new Font(FontFamily.GenericSansSerif, 24, FontStyle.Bold);
            for (var i = 0; i < text.Length; ++i)
            {
                var c = new String(text[i], 1);

                var size = e.Graphics.MeasureString(c, font);
                var charRadius = radius + size.Height;

                var angle = (((float)i / text.Length) - 0.25) * 2 * Math.PI;

                var x = (int)(center.X + Math.Cos(angle) * charRadius);
                var y = (int)(center.Y + Math.Sin(angle) * charRadius);


                e.Graphics.TranslateTransform(x, y);

                e.Graphics.RotateTransform((float)(90 + 360 * angle / (2 * Math.PI)));
                e.Graphics.DrawString(c, font, Brushes.Red, 0, 0);

                e.Graphics.ResetTransform();


                e.Graphics.DrawArc(new Pen(Brushes.DarkGreen, 2.0f), center.X - radius, center.Y - radius, radius*2, radius*2, 0, 360);
            }
   }
    }
}


Надеюсь, это поможет