Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Как перевернуть строку на 180 градусов ? Добавлено: 28.11.06 15:00  

Автор вопроса:  КОТ | Web-сайт: kostik-k.hotbox.ru | ICQ: 96702618 
Есть задача - вывести точки,линии, полигон, не суть важно) это не проблема. Подписать - тоже вполне выполнимая задача.
Но начало координат нужно установить не в верхнем левом углу, а в нижнем левом - тоже решается применением 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
Автор ответа:
 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, писать на нем что надо.., переворачивать его как надо и переносить в нужное место.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам