Страница: 1 |
Вопрос: Как перевернуть строку на 180 градусов ? | Добавлено: 28.11.06 15:00 |
Автор вопроса: ![]() |
Есть задача - вывести точки,линии, полигон, не суть важно) это не проблема. Подписать - тоже вполне выполнимая задача.
Но начало координат нужно установить не в верхнем левом углу, а в нижнем левом - тоже решается применением ScaleTransform Само по себе все решается просто, код примерно такой: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics = Me.CreateGraphics 'точки графика Dim Points() As PointF = _ {New PointF(0, 0), New PointF(50, 75), New PointF(100, 200), New PointF(200, 100)} 'Размеры графика Dim minX, maxX, minY, maxY As Single minX = Single.MaxValue maxX = -Single.MaxValue minY = Single.MaxValue maxY = -Single.MaxValue For i As Integer = 0 To Points.Length - 1 minX = Math.Min(minX, Points(i).X) maxX = Math.Max(maxX, Points(i).X) minY = Math.Min(minY, Points(i).Y) maxY = Math.Max(maxY, Points(i).Y) Next 'график Dim mPath As New Drawing2D.GraphicsPath mPath.AddLines(Points) 'преобразуем координаты g.ResetTransform() 'смещение от края g.TranslateTransform(10, 10) 'коэффициент масштабирования Dim ratio As Single ratio = Math.Min((Me.ClientSize.Width - 20) / (maxX - minX), _ (Me.ClientSize.Height - 20) / (maxY - minY)) g.ScaleTransform(ratio, -ratio) 'смещение на начало графика g.TranslateTransform(-minX, -maxY) 'перо с масштабированной толщиной линии Dim mPen As Pen = New Pen(Color.Azure, 1 / ratio) 'отображаем график g.DrawPath(mPen, mPath) 'подписи к точкам For i As Integer = 0 To Points.Length - 1 Dim mFont As Font = New Font(Me.Font.Name, 10 / ratio) Dim mRect As RectangleF = New RectangleF(Points(i).X - 5, Points(i).Y - 5, 10, 10) g.DrawString(i.ToString, mFont, Brushes.Black, mRect) Next End Sub но вот одна загвоздка - подписи получаются "вверх ногами" :( отсюда вопрос: как перевернуть строку на 180 градусов? |
Ответы | Всего ответов: 3 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 3 Ответов: 164 |
Профиль | Цитата | #1 | Добавлено: 28.11.06 20:32 |
Непонятно, чего ты хочешь.. "вверх ногами" - это и есть поворот текста на 180 градусов.
Могу предположить, что надо получить зеркальное отображение текста, а не поворот? |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 3 Ответов: 164 |
Профиль | Цитата | #2 | Добавлено: 28.11.06 20:40 |
Ага. Перечитал и въехал. ![]() Думаю, надо юзать API (конкретно структурку LOGFONT - там, кажись, насчет поворота что-то есть). Класс System.Drawing.Font поддерживает использование этой структуры. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #3 | Добавлено: 28.11.06 21:04 |
(имхо) Нифига не выйдет.. у тебя Graphics перевернут.. а DrawString поддерживает только DirectionVertical и DirectionRightToLeft но они тут бесполезны.. Вариантов я вижу два:
Восстановить все как было через ResetTransform, но тогда придется делать перерасчет точек относительно твоей системы координат. Либо создавать в памяти Bitmap, писать на нем что надо.., переворачивать его как надо и переносить в нужное место. |
Страница: 1 |
|