Страница: 1 |
Страница: 1 |
Вопрос: Как перевернуть строку на 180 градусов ?
Добавлено: 28.11.06 15:00
Автор вопроса: КОТ | Web-сайт:
Есть задача - вывести точки,линии, полигон, не суть важно) это не проблема. Подписать - тоже вполне выполнимая задача.
Но начало координат нужно установить не в верхнем левом углу, а в нижнем левом - тоже решается применением ScaleTransform
Само по себе все решается просто, код примерно такой:
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
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #1
Добавлено: 28.11.06 20:32
Непонятно, чего ты хочешь.. "вверх ногами" - это и есть поворот текста на 180 градусов.
Могу предположить, что надо получить зеркальное отображение текста, а не поворот?
Номер ответа: 2
Автор ответа:
el-paso
Вопросов: 3
Ответов: 164
Профиль | | #2
Добавлено: 28.11.06 20:40
Ага. Перечитал и въехал.
Думаю, надо юзать API (конкретно структурку LOGFONT - там, кажись, насчет поворота что-то есть). Класс System.Drawing.Font поддерживает использование этой структуры.
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 28.11.06 21:04
(имхо) Нифига не выйдет.. у тебя Graphics перевернут.. а DrawString поддерживает только DirectionVertical и DirectionRightToLeft но они тут бесполезны.. Вариантов я вижу два:
Восстановить все как было через ResetTransform, но тогда придется делать перерасчет точек относительно твоей системы координат. Либо создавать в памяти Bitmap, писать на нем что надо.., переворачивать его как надо и переносить в нужное место.