2012-05-07 5 views
0

Я хотел бы сделать декартовую систему координат в форме Windows и иметь возможность строить в ней (x, y) координаты.Система декартовых координат VB.NET

Как это сделать? Я уже занимался исследованиями, но, к сожалению, я только нахожусь на «чартах», а не в картезианском плане.

Любые ссылки, касающиеся моей проблемы поможет ... спасибо ...

+0

Слово "декартова" не поможет вам в вашем поиске. просто используйте термин «x-y plot». Декартово - это импликация и редко упоминается. Есть много примеров, если вы это сделаете. –

+0

@jaime показалось мне, что ваше редактирование превратило это в вопрос о простых x-y разбросах. Я думаю, что OP хочет иметь возможность создавать собственные 2D-чертежи – MarkJ

+0

@user вам нужно создать собственные 2D-чертежи или просто стандартный график рассеяния x-y? – MarkJ

ответ

2

Вы должны создать собственный UserControl и использовать краску даже рисовать на поверхности управления. Событие Paint предоставляет вам объект Graphics, который вы можете использовать для рисования графика. Однако важно знать, что вам нужно будет поменять ось Y. В окнах верхний левый экран равен 0,0, а не внизу слева.

Так, например, следующий код будет рисовать оси х и у графа на Contorl:

Public Class CartesianGraph 
    Public Property BottomLeftExtent() As Point 
     Get 
      Return _bottomLeftExtent 
     End Get 
     Set(ByVal value As Point) 
      _bottomLeftExtent = value 
     End Set 
    End Property 
    Private _bottomLeftExtent As Point = New Point(-100, -100) 


    Public Property TopRightExtent() As Point 
     Get 
      Return _topRightExtent 
     End Get 
     Set(ByVal value As Point) 
      _topRightExtent = value 
     End Set 
    End Property 
    Private _topRightExtent As Point = New Point(100, 100) 


    Private Sub CartesianGraph_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 
     Dim extentHeight As Integer = _topRightExtent.Y - _bottomLeftExtent.Y 
     Dim extentWidth As Integer = _topRightExtent.X - _bottomLeftExtent.X 
     If (extentHeight <> 0) And (extentWidth <> 0) Then 
      If (_bottomLeftExtent.Y <= 0) And (_topRightExtent.Y >= 0) Then 
       Dim xAxis As Integer = e.ClipRectangle.Height - (_bottomLeftExtent.Y * -1 * e.ClipRectangle.Height \ extentHeight) 
       e.Graphics.DrawLine(New Pen(ForeColor), 0, xAxis, e.ClipRectangle.Width, xAxis) 
      End If 
      If (_bottomLeftExtent.X <= 0) And (_topRightExtent.X >= 0) Then 
       Dim yAxis As Integer = e.ClipRectangle.Width * _bottomLeftExtent.X * -1 \ extentWidth 
       e.Graphics.DrawLine(New Pen(ForeColor), yAxis, 0, yAxis, e.ClipRectangle.Height) 
      End If 
     End If 
    End Sub 
End Class 
+0

Спасибо, что предоставили мне этот образец, но я действительно новичок в этом событии Paint. Не знал, что простая линия, пересекающая друг друга, займет много кодов. Я изучу этот объект Paint и графический объект и использую его как ссылку ... Еще раз спасибо. –

+0

Рисование линии очень просто. Это вычисление того, куда идет линия, которая принимает все мысли и усилия. Как вы можете видеть в моем примере, я предоставил свойства для установки внешних экстентов графика, поэтому мой код должен вычислить масштаб графика. Если бы у вас был простой пиксель на экране в одной точке графика, код был бы намного проще. –

+0

Пользовательский контроль пользователя кажется чрезмерным. Почему бы просто не нарисовать на PictureBox, как говорит Хейнзи в своем ответе? – MarkJ

2

В WinForms, вы можете использовать PictureBox управления, а затем обратить на него с помощью примитивы, такие как DrawLine, DrawEllipse и т.д. Следующий вопрос содержит SO пример:

В WPF вы можете использовать Canvas управления аналогичным образом:

Если вы хотите автоматические оси и маркировки, Диаграммы действительно путь. Для вашего случая использования точки диаграмма кажется, правильное решение:

0

.NET имеет библиотеку графиков, но есть несколько проектов с открытым исходным кодом, которые делают такие вещи довольно хорошо. Если вы хотите построить координаты, Zedgraph делает это относительно простым и довольно гибким.

ZedGraph Example

Dynamic Data Display также стоит посмотреть, но это WPF, а не Windows Forms