Advertisement
Robomatics

Line Scanner

Jun 19th, 2015
459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 8.12 KB | None | 0 0
  1. 'This includes an ENABLED timer with an interval of 1
  2. '5 Trackbars with a max of 255
  3. '1 numeric up down with a max of 100
  4. '3 buttons
  5. '6 labels
  6. '2 pictureboxs
  7. '1 Savefiledialog
  8.  
  9. Imports TouchlessLib
  10.  
  11. Public Class Form1
  12.  
  13.     Dim Touchless As New TouchlessLib.TouchlessMgr
  14.     Dim Camera1 As TouchlessLib.Camera
  15.     Dim picsize As Size = New Size(1280, 720)
  16.     Dim bitmapz As Bitmap = New Bitmap(picsize.Width, picsize.Height)
  17.     Dim vectordata As New List(Of pointz)
  18.     Dim rec As Boolean = False
  19.     Dim R As Integer = 220
  20.     Dim G As Integer = 255
  21.     Dim B As Integer = 255
  22.     Dim t As Integer = 0
  23.     Dim PicMin As Integer = 0
  24.     Dim PicMax As Integer = picsize.Width
  25.  
  26.     Structure pointz
  27.         Public X As Single
  28.         Public Y As Single
  29.         Public z As Single
  30.     End Structure
  31.  
  32.     Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
  33.  
  34.         bitmapz = Touchless.CurrentCamera.GetCurrentImage
  35.         If bitmapz IsNot Nothing Then
  36.             PictureBox1.Image = bitmapz.Clone
  37.             FindCycle()
  38.             PictureBox2.Image = bitmapz.Clone
  39.             Label3.Text = "Z:" & t
  40.             Label4.Text = "R:" & R
  41.             Label5.Text = "G:" & G
  42.             Label6.Text = "B:" & B
  43.             If rec = True Then
  44.                 t = t + 1
  45.             End If
  46.         End If
  47.     End Sub
  48.  
  49.     Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
  50.         TrackBar4.Maximum = picsize.Width
  51.         TrackBar1.Value = R
  52.         TrackBar2.Value = G
  53.         TrackBar3.Value = B
  54.         TrackBar4.Maximum = picsize.Width
  55.         TrackBar5.Maximum = picsize.Width
  56.         TrackBar5.Value = picsize.Width
  57.         Try
  58.             Camera1 = Touchless.Cameras.ElementAt(1)
  59.         Catch ex As Exception
  60.             Try
  61.                 Camera1 = Touchless.Cameras.ElementAt(0)
  62.             Catch ex2 As Exception
  63.                 MsgBox("No Camera")
  64.             End Try
  65.  
  66.         End Try
  67.         Touchless.CurrentCamera = Camera1
  68.         Touchless.CurrentCamera.CaptureWidth = picsize.Width
  69.         Touchless.CurrentCamera.CaptureHeight = picsize.Height
  70.  
  71.     End Sub
  72.  
  73.     Private Sub FindCycle()
  74.         Try
  75.             Dim rect As New Rectangle(0, 0, picsize.Width, picsize.Height)
  76.             Dim bmpData As System.Drawing.Imaging.BitmapData = bitmapz.LockBits(rect, _
  77.                 Drawing.Imaging.ImageLockMode.ReadWrite, bitmapz.PixelFormat)
  78.             Dim ptr As IntPtr = bmpData.Scan0
  79.             Dim bytes As Integer = bmpData.Stride * picsize.Height
  80.             Dim rgbValues(bytes - 1) As Byte
  81.             System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)
  82.  
  83.             Dim secondcounter As Integer = 0
  84.             Dim tempred As Integer
  85.             Dim tempblue As Integer
  86.             Dim tempgreen As Integer
  87.             Dim tempalpha As Integer
  88.             Dim tempx As Integer
  89.             Dim tempy As Integer
  90.             Dim xfound(picsize.Height) As Boolean
  91.  
  92.             While secondcounter < rgbValues.Length
  93.                 tempblue = rgbValues(secondcounter)
  94.                 tempgreen = rgbValues(secondcounter + 1)
  95.                 tempred = rgbValues(secondcounter + 2)
  96.                 tempalpha = rgbValues(secondcounter + 3)
  97.                 tempalpha = 255
  98.  
  99.                 tempy = Math.Floor(((secondcounter * 0.25) / picsize.Width))
  100.                 tempx = (secondcounter * 0.25) - (tempy * picsize.Width)
  101.                 If tempx < 0 Then
  102.                     tempx = tempx + picsize.Width
  103.                 End If
  104.  
  105.                 If tempred > R And tempblue > B And tempgreen > G And xfound(tempy) = False And tempx >= PicMin And tempx <= PicMax Then
  106.                     If rec = True Then
  107.                         Dim v As New pointz
  108.                         v.X = tempx
  109.                         v.Y = tempy
  110.                         v.z = t
  111.                         vectordata.Add(v)
  112.                     End If
  113.                     xfound(tempy) = True
  114.                     tempred = 255
  115.                     tempblue = 0
  116.                     tempgreen = 0
  117.                 Else
  118.                     If tempx = PicMin Then
  119.                         tempred = 0
  120.                         tempblue = 255
  121.                         tempgreen = 0
  122.                     ElseIf tempx = PicMax Then
  123.                         tempred = 0
  124.                         tempblue = 0
  125.                         tempgreen = 255
  126.                     Else
  127.                         tempred = 0
  128.                         tempblue = 0
  129.                         tempgreen = 0
  130.                     End If
  131.                 End If
  132.  
  133.                 rgbValues(secondcounter) = tempblue
  134.                 rgbValues(secondcounter + 1) = tempgreen
  135.                 rgbValues(secondcounter + 2) = tempred
  136.                 rgbValues(secondcounter + 3) = tempalpha
  137.  
  138.                 secondcounter = secondcounter + 4
  139.             End While
  140.             ' Copy the RGB values back to the bitmap
  141.             System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes)
  142.  
  143.             ' Unlock the bits.
  144.             bitmapz.UnlockBits(bmpData)
  145.  
  146.         Catch ex As Exception
  147.  
  148.         End Try
  149.  
  150.     End Sub
  151.  
  152.     Private Sub writefile()
  153.         Dim Max As Integer = 0
  154.         Dim Min As Integer = 999999
  155.         For i = 0 To vectordata.Count - 1
  156.             If vectordata(i).X > Max Then Max = vectordata(i).X
  157.             If vectordata(i).X < Min Then Min = vectordata(i).X
  158.         Next
  159.         Dim Mid As Single = (Max - Min) / 2
  160.         Dim colordata(vectordata.Count - 1) As Color
  161.         For i = 0 To colordata.Count - 1
  162.             If (vectordata(i).X - Min) >= Mid Then
  163.                 colordata(i) = Color.FromArgb(((((vectordata(i).X - Min) - Mid) / Mid) * 255),
  164.                     255 - ((((vectordata(i).X - Min) - Mid) / Mid) * 255), 0)
  165.  
  166.             ElseIf (vectordata(i).X - Min) < Mid Then
  167.                 colordata(i) = Color.FromArgb(0, (((vectordata(i).X - Min) / Mid) * 255),
  168.                                               255 - (((vectordata(i).X - Min) / Mid) * 255))
  169.             End If
  170.         Next
  171.  
  172.         Dim pointstring(vectordata.Count - 1) As String
  173.         For i = 0 To vectordata.Count - 1
  174.             Dim Scale As Single = NumericUpDown1.Value
  175.             pointstring(i) = "v " & vectordata(i).X.ToString & " " & vectordata(i).Y.ToString & " " & (vectordata(i).z / Scale).ToString & " " & (colordata(i).R / 255) & " " & (colordata(i).G / 255) & " " & (colordata(i).B / 255)
  176.         Next
  177.         GC.Collect()
  178.         IO.File.WriteAllLines(SaveFileDialog1.FileName, pointstring)
  179.         GC.Collect()
  180.     End Sub
  181.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  182.         SaveFileDialog1.ShowDialog()
  183.     End Sub
  184.     Private Sub SaveFileDialog1_FileOk(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk
  185.         writefile()
  186.     End Sub
  187.  
  188.     Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
  189.         vectordata.Clear()
  190.         t = 0
  191.     End Sub
  192.  
  193.     Private Sub TrackBar1_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar1.Scroll
  194.         R = TrackBar1.Value
  195.     End Sub
  196.     Private Sub TrackBar2_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar2.Scroll
  197.         G = TrackBar2.Value
  198.     End Sub
  199.     Private Sub TrackBar3_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar3.Scroll
  200.         B = TrackBar3.Value
  201.     End Sub
  202.     Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
  203.         If rec = False Then
  204.             Button3.Text = "stop"
  205.             rec = True
  206.         Else
  207.             Button3.Text = "rec"
  208.             rec = False
  209.         End If
  210.     End Sub
  211.  
  212.     Private Sub TrackBar4_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar4.Scroll
  213.         PicMin = TrackBar4.Value
  214.     End Sub
  215.     Private Sub TrackBar5_Scroll(sender As System.Object, e As System.EventArgs) Handles TrackBar5.Scroll
  216.         PicMax = TrackBar5.Value
  217.     End Sub
  218. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement