• 0

vb.net Create a GraphicsPath to hold the line info


Question

I have written a simple program which receive data from serial port i.e (temperature) and display on a line graph. but i require accumlate the graph data upto 10 minutes on screen. after that it again accumlate next 10 minutes data.

**The Code of VB.Net program is below *

Help with Code Tags

VB.NET Syntax (Toggle Plain Text)

Imports System.Drawing.Image

Imports System.IO.Ports

Public Class frmGraph

Dim WithEvents port2 As SerialPort = _

New SerialPort("COM2", 19200, Parity.Even, 7, StopBits.One)

' Variables to store the changing values to be charted (previous and current)

Private OldValue As Single = 0

Private NewValue As Single = 0

Dim XMove As Integer = 4

Dim Chunks As Integer = 10

Private Sub frmGraph_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

SwitchMT500()

ReadLineAddress()

txtMin.Text = 620

txtMax.Text = 630

' Paint Guidelines on picGraph

picGraph.Image = DisplayGuidelines(picGraph, Chunks)

' Paint Guidelines and Numbers on picValues

picValues.Image = Me.DisplayVerticalValues(picValues, Chunks, CInt(txtMin.Text), CInt(txtMax.Text))

ReadTemperature()

End Sub

Private Function DisplayGuidelines(ByVal PicBox As PictureBox, ByVal chunks As Integer) As Bitmap

' Step 1

' Create a bitmap to draw on and grab its Graphics Object

Dim bm As New Bitmap(PicBox.Width, PicBox.Height)

Dim gr As Graphics = Graphics.FromImage(bm)

' Step 2

' Draw guidelines on main chart.

' Get the total height available and split it into chunks

Dim total As Integer = PicBox.Height

Dim chunk As Single = total / chunks

' Step 3

For i As Single = chunk To total Step chunk

gr.DrawLine(Pens.WhiteSmoke, 0, i, PicBox.Width, i)

Next i

' Step 4

' return the results.

Return bm

' Step 5

gr.Dispose()

End Function

Private Function DisplayVerticalValues(ByVal PB As PictureBox, ByVal HowManyChunks As Single, _

ByVal MinValue As Single, ByVal MaxValue As Single) As Bitmap

' Step 1

Dim bmp As New Bitmap(PB.Width, PB.Height)

Dim gv As Graphics = Graphics.FromImage(bmp)

' Step 2

' Draw guidelines on values strip

' Get the total height available and split it into chunks

' This value represents a number of pixels

Dim TotalPixels As Integer = PB.Height

Dim SingleChunk As Single = TotalPixels / HowManyChunks

For i As Single = SingleChunk To TotalPixels Step SingleChunk

gv.DrawLine(Pens.WhiteSmoke, 0, i, PB.Width, i)

Next i

' Step 3

' Draw Numbers as Text, correctly spaced vertically

' Begin with the highest value allowed

Dim NextMarker As Integer = MaxValue

' Calculate the plottable range

Dim ValueRange As Integer = MaxValue - MinValue

' Draw the numbers, decrementing values proportionately each time through the loop

For i As Single = 0 To TotalPixels Step SingleChunk

gv.DrawString(CStr(NextMarker), New Font("Verdana", 8, FontStyle.Regular), Brushes.Black, 1, i)

NextMarker -= (ValueRange / HowManyChunks)

Next

' Step 4

Return bmp

' Step 5

gv.Dispose()

End Function

Private Function DisplayGuidelinesAndChart(ByVal PicBox As PictureBox, ByVal chunks As Integer, _

ByVal XMove As Integer, ByVal NewValue As Single, ByVal Min As Single, ByVal Max As Single) As Bitmap

' Step 1

' Grab the current image (the latest version of the chart)

Dim bm As New Bitmap(PicBox.Width, PicBox.Height)

Dim gr As Graphics = Graphics.FromImage(bm)

' Step 2

' Get the total height available and split it into chunks

Dim total As Integer = PicBox.Height

Dim chunk As Single = total / chunks

' Tack missing guidelines to right hand side on the Graphics object.

For i As Single = chunk To total Step chunk

gr.DrawLine(Pens.WhiteSmoke, PicBox.Width - XMove, i, PicBox.Width, i)

Next i

' Step 3

' Draw this grabbed image, placing it XMove pixels to the left

If Not IsNothing(PicBox.Image) Then

gr.DrawImage(PicBox.Image, -XMove, 0)

End If

' Step 4

' Plot the new value.

' Calculate the scaling required to make full use of the height of

' the PictureBox

Dim ValueRange As Single = Max - Min

Dim vScale As Single = PicBox.Height / ValueRange

' Apply the scale to the current value

NewValue *= vScale

' Step 5

' Shift start point from top left to bottom left.

gr.TranslateTransform(0, PicBox.Height)

' Step 6

' Draw the next line segment on the Graphics object.

' If Min is > 0 then you need to shift the drawing down once again,

' this time to put the Min value on the horizontal axis

If Min > 0 Then gr.TranslateTransform(0, Min * vScale)

Dim p As Pen = New Pen(Color.Navy, 1)

gr.DrawLine(p, _

PicBox.Width - 1 - XMove, -OldValue, _

PicBox.Width - 1, -NewValue)

OldValue = NewValue

' Step 7

' Return the Bitmap .

Return bm

' Calculate length of baseline drawn by the code above

BaseLineLength = PicBox.Width

' Calculate the width of each line segment

LineWidth = (BaseLineLength / Sales.ToArray.Length)

' Step 8

' All done

gr.Dispose()

End Function

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

picValues.Image = Me.DisplayVerticalValues(picValues, Chunks, CInt(txtMin.Text), CInt(txtMax.Text))

ReadTemperature()

End Sub

Private Function ReadTemperature()

Dim strValue as string

strValue = port2.ReadExisting

'picGraph.Image = DisplayGuidelinesAndChart(picGraph, Chunks, XMove, strvalue, CInt(txtMin.Text), CInt(txtMax.Text))

picGraph.Image = DisplayGuidelinesAndChart(picGraph, Chunks, XMove, strvalue, CInt(txtMin.Text), CInt(txtMax.Text))

lblValue.Text = strvalue

End Function

End Class

Kindly provide code or functions so that i accumulate reading data from serial port on graph upto 10 minutes.

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

This seems a bit like homework help, what things have you looked into so far? The point of this sort of work is to understand how it works and how you can put it together yourself, not to get someone else to do it for you....

Link to comment
Share on other sites

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.