home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 6_2008-2009.ISO / data / zips / Wave_Gener2149494112009.psc / Demo / WG_Demo3.frm < prev    next >
Text File  |  2009-04-11  |  5KB  |  179 lines

  1. VERSION 5.00
  2. Begin VB.Form Art 
  3.    BackColor       =   &H00000000&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "Lissajou Art"
  6.    ClientHeight    =   5820
  7.    ClientLeft      =   3885
  8.    ClientTop       =   3450
  9.    ClientWidth     =   6090
  10.    LinkTopic       =   "Form1"
  11.    MaxButton       =   0   'False
  12.    MinButton       =   0   'False
  13.    ScaleHeight     =   5820
  14.    ScaleWidth      =   6090
  15.    Begin VB.Timer TMR 
  16.       Interval        =   500
  17.       Left            =   480
  18.       Top             =   300
  19.    End
  20. End
  21. Attribute VB_Name = "Art"
  22. Attribute VB_GlobalNameSpace = False
  23. Attribute VB_Creatable = False
  24. Attribute VB_PredeclaredId = True
  25. Attribute VB_Exposed = False
  26. Option Explicit
  27. ' Lissajou art
  28. ' Modulating values for X and values for Y
  29. ' produce some interesting patterns.
  30.  
  31. Private osc(0 To 5) As SimpleOsc
  32. Private Ticker As ComplexOsc     ' Main oscillator
  33. Private Run As Long              ' Number of ticks to finish art
  34. Private Group As Long            ' Image ID
  35. Private Delay As Date            ' Image delay time
  36.  
  37. Private Sub Form_Load()
  38.    Set Ticker = New ComplexOsc
  39.    ReSizeMe
  40. End Sub
  41.  
  42. Sub Group0()
  43.    Set osc(0) = Simple(1000, 0, 25, wgSinusoidal)
  44.    Set osc(1) = Simple(0.3, 0.6, 276, wgSinusoidal)
  45.    Set osc(2) = Simple(900, 0, 75, wgSinusoidal)
  46.    Set osc(3) = Simple(0, 0, 0, wgSinusoidal)
  47.    Set osc(4) = Simple(0, 0, 0, wgSinusoidal)
  48.    Set osc(5) = Simple(0, 0, 0, wgSinusoidal)
  49.    AddPhase osc(0), 0.25
  50.    Run = 1000
  51. End Sub
  52.  
  53. Sub Group1()
  54.    Set osc(0) = Simple(600, 0, 0.25, wgSinusoidal)
  55.    Set osc(1) = Simple(0, 1, 0, wgSinusoidal)
  56.    Set osc(2) = Simple(500, 0, 0.25, wgSinusoidal)
  57.    Set osc(3) = Simple(200, 0, 64, wgSinusoidal)
  58.    Set osc(4) = Simple(0, 1, 0, wgSinusoidal)
  59.    Set osc(5) = Simple(400, 0, 32, wgSinusoidal)
  60.    AddPhase osc(0), 0.25
  61.    Run = 4000
  62. End Sub
  63.  
  64. Sub Group2()
  65.    Set osc(0) = Simple(240, 0, 35, wgSinusoidal)
  66.    Set osc(1) = Simple(0, 1, 0, wgSinusoidal)
  67.    Set osc(2) = Simple(240, 0, 35, wgSinusoidal)
  68.    Set osc(3) = Simple(600, 0, 0.2, wgSinusoidal)
  69.    Set osc(4) = Simple(0.4, 0.8, 1, wgSinusoidal)
  70.    Set osc(5) = Simple(600, 0, 0.2, wgSinusoidal)
  71.    AddPhase osc(0), 0.25
  72.    AddPhase osc(3), 0.25
  73.    Run = 6000
  74. End Sub
  75.  
  76. Sub Group3()
  77.    Set osc(0) = Simple(1000, 0, 25, wgSinusoidal)
  78.    Set osc(1) = Simple(0.3, 0.6, 26, wgSinusoidal)
  79.    Set osc(2) = Simple(900, 0, 50, wgSinusoidal)
  80.    Set osc(3) = Simple(0, 0, 0, wgSinusoidal)
  81.    Set osc(4) = Simple(0, 0, 0, wgSinusoidal)
  82.    Set osc(5) = Simple(0, 0, 0, wgSinusoidal)
  83.    AddPhase osc(0), 0.25
  84.    Run = 1000
  85. End Sub
  86.  
  87. Sub Group4()
  88.    Set osc(0) = Simple(300, 0, 4, wgSinusoidal)
  89.    Set osc(1) = Simple(0.6, 0.3, 75, wgSinusoidal)
  90.    Set osc(2) = Simple(300, 0, 4, wgSinusoidal)
  91.    Set osc(3) = Simple(200, 0, 0.75, wgSinusoidal)
  92.    Set osc(4) = Simple(0, 3, 0, wgSinusoidal)
  93.    Set osc(5) = Simple(200, 0, 0.75, wgSinusoidal)
  94.    AddPhase osc(0), 0.25
  95.    AddPhase osc(3), 0.25
  96.    Run = 8000
  97. End Sub
  98.  
  99. Sub Draw()
  100. Dim ITR As Long
  101. Dim XX As Single, YY As Single
  102.    ' Draws waveform
  103.    Set Me.Picture = Nothing
  104.    Ticker.Tick
  105.    For ITR = 1 To Run
  106.      PSet (osc(0).Value * osc(1).Value + osc(3).Value * osc(4).Value, osc(2).Value * osc(1).Value + osc(5).Value * osc(4).Value), vbWhite
  107.      Ticker.Tick
  108.      Line -(osc(0).Value * osc(1).Value + osc(3).Value * osc(4).Value, osc(2).Value * osc(1).Value + osc(5).Value * osc(4).Value), vbWhite
  109.    Next
  110. End Sub
  111.  
  112. Function Simple(Amp As Single, Bias As Single, Freq As Single, Shape As WaveType) As SimpleOsc
  113.    ' Helper routine to build an oscillator
  114.    Set Simple = New SimpleOsc
  115.    With Simple
  116.      .Amplitude = Amp
  117.      .Bias = Bias
  118.      .Frequency = Freq
  119.      .Shape = Shape
  120.    End With
  121. End Function
  122.  
  123. Function Hybrid(Amp As SimpleOsc, Bias As SimpleOsc, Freq As SimpleOsc, Shape As WaveType) As HybridOsc
  124.    ' Helper routine to build an oscillator
  125.    Set Hybrid = New HybridOsc
  126.    With Hybrid
  127.      Set .Amplitude = Amp
  128.      Set .Bias = Bias
  129.      Set .Frequency = Freq
  130.      .Shape = Shape
  131.    End With
  132. End Function
  133.  
  134. Sub Gather()
  135.    ' Assigns oscillator array to single complex oscillator
  136.    Set Ticker.Amplitude = Hybrid(osc(0), osc(1), osc(2), wgSinusoidal)
  137.    Set Ticker.Frequency = Hybrid(osc(3), osc(4), osc(5), wgSinusoidal)
  138. End Sub
  139.  
  140. Sub AddPhase(osc As SimpleOsc, ByVal phase As Single)
  141. Dim ticks As Long
  142.    ' Advances wave by phase %
  143.    ticks = (1000 / osc.Frequency) * phase
  144.    While ticks > 0
  145.      osc.Tick
  146.      ticks = ticks - 1
  147.    Wend
  148. End Sub
  149.  
  150. Sub ReSizeMe()
  151. Dim bdr As Long, ttl As Long
  152. Dim wid As Long, hgt As Long
  153.    ' Makes client area square
  154.    bdr = Width - ScaleWidth
  155.    ttl = Height - ScaleHeight - bdr
  156.    wid = 6000 + bdr
  157.    hgt = 6000 + ttl + bdr
  158.    ' Center form / Add scale
  159.    Me.Move (Screen.Width - wid) / 2, (Screen.Height - hgt) / 2, wid, hgt
  160.    Me.Scale (-1000, 1000)-(1000, -1000)
  161. End Sub
  162.  
  163. Private Sub TMR_Timer()
  164.    ' Cycles through artwork
  165.    If Now > Delay Then
  166.      Delay = DateAdd("s", 8, Now)
  167.      Select Case Group
  168.      Case 0: Group0
  169.      Case 1: Group1
  170.      Case 2: Group2
  171.      Case 3: Group3
  172.      Case 4: Group4: Group = -1
  173.      End Select
  174.      Gather
  175.      Draw
  176.      Group = Group + 1
  177.    End If
  178. End Sub
  179.