|
Public Class MainWindow
Private RhtHindLeg_A_Tr As New RotateTransform
Private RhtHindLeg_B_Tr As New RotateTransform
Private RhtHindLeg_C_Tr As New RotateTransform
Private RhtHindPawTr As New RotateTransform
Private LeftHindLeg_A_Tr As New RotateTransform
Private LeftHindLeg_B_Tr As New RotateTransform
Private LeftHindLeg_C_Tr As New RotateTransform
Private LeftHindPawTr As New RotateTransform
Private RhtForeLeg_A_Tr As New RotateTransform
Private RhtForeLeg_B_Tr As New RotateTransform
Private RhtForeLeg_C_Tr As New RotateTransform
Private RhtForePawTr As New RotateTransform
Private LeftForeLeg_A_Tr As New RotateTransform
Private LeftForeLeg_B_Tr As New RotateTransform
Private LeftForeLeg_C_Tr As New RotateTransform
Private LeftForePawTr As New RotateTransform
Private TreadmillRedTr As New RotateTransform
Private FocusOnRightHind As Boolean = True
Private MoveRhtLegBackwards As Boolean = True
Private MoveLeftLegBackwards As Boolean = True
Private speed As Integer = 2
Private Y_Pos As Double
Private Sub MainWindow_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles Me.KeyDown
If e.Key = Key.Right Then
WalkForward()
End If
End Sub
Private Sub WalkForward()
If FocusOnRightHind = True Then
If MoveRhtLegBackwards = True Then
RightHindBack()
Else
RightHindForward()
End If
Else
If MoveLeftLegBackwards = True Then
LeftHindBack()
Else
LeftHindForward()
End If
End If
TreadmillRedTr.Angle -= 5
RightHindLeg_A.RenderTransform = RhtHindLeg_A_Tr
RightHindLeg_B.RenderTransform = RhtHindLeg_B_Tr
RightHindLeg_C.RenderTransform = RhtHindLeg_C_Tr
RightHindLegPaw.RenderTransform = RhtHindPawTr
LeftHindLeg_A.RenderTransform = LeftHindLeg_A_Tr
LeftHindLeg_B.RenderTransform = LeftHindLeg_B_Tr
LeftHindLeg_C.RenderTransform = LeftHindLeg_C_Tr
LeftHindLegPaw.RenderTransform = LeftHindPawTr
RightForeLeg_A.RenderTransform = RhtForeLeg_A_Tr
RightForeLeg_B.RenderTransform = RhtForeLeg_B_Tr
RightForeLeg_C.RenderTransform = RhtForeLeg_C_Tr
RightForeLegPaw.RenderTransform = RhtForePawTr
LeftForeLeg_A.RenderTransform = LeftForeLeg_A_Tr
LeftForeLeg_B.RenderTransform = LeftForeLeg_B_Tr
LeftForeLeg_C.RenderTransform = LeftForeLeg_C_Tr
LeftForeLegPaw.RenderTransform = LeftForePawTr
TreadmillRedGroup.RenderTransform = TreadmillRedTr
End Sub
Private Sub RightHindBack()
' Get to Phase 1. This executes only once.
If RhtHindLeg_A_Tr.Angle < 4 Then
RhtHindLeg_A_Tr.Angle += 1 * speed
RhtHindLeg_B_Tr.Angle += 1 * speed
RhtHindLeg_C_Tr.Angle -= 1 * speed
RhtHindPawTr.Angle -= 1 * speed
LeftHindLeg_A_Tr.Angle -= LeftHindLeg_A_Shift1 * speed
LeftHindLeg_B_Tr.Angle -= LeftHindLeg_B_Shift1 * speed
LeftHindLeg_C_Tr.Angle += LeftHindLeg_C_Shift1 * speed
LeftHindPawTr.Angle += LeftHindLegPawShift1 * speed
RhtForeLeg_A_Tr.Angle += RhtForeLeg_A_Shift1 * speed
RhtForeLeg_B_Tr.Angle += RhtForeLeg_B_Shift1 * speed
RhtForePawTr.Angle -= RhtForeLegPawShift1 * speed
LeftForeLeg_A_Tr.Angle += LeftForeLeg_A_Shift1 * speed
LeftForeLeg_B_Tr.Angle -= LeftForeLeg_B_Shift1 * speed
LeftForeLeg_C_Tr.Angle += LeftForeLeg_C_Shift1 * speed
LeftForePawTr.Angle -= LeftForeLegPawShift1 * speed
End If
' Get to Phase 2
If RhtHindLeg_A_Tr.Angle >= 4 And RhtHindLeg_A_Tr.Angle < 8 Then
RhtHindLeg_A_Tr.Angle += 1 * speed
RhtHindLeg_B_Tr.Angle += RhtHindLeg_B_Shift2 * speed
RhtHindLeg_C_Tr.Angle -= RhtHindLeg_C_Shift2 * speed
RhtHindPawTr.Angle += RhtHindLegPawShift2 * speed
LeftHindLeg_A_Tr.Angle += LeftHindLeg_A_Shift2 * speed
LeftHindLeg_B_Tr.Angle -= LeftHindLeg_B_Shift2 * speed
LeftHindLeg_C_Tr.Angle += LeftHindLeg_C_Shift2 * speed
LeftHindPawTr.Angle += LeftHindLegPawShift2 * speed
RhtForeLeg_A_Tr.Angle += RhtForeLeg_A_Shift2 * speed
RhtForeLeg_B_Tr.Angle += RhtForeLeg_B_Shift2 * speed
RhtForePawTr.Angle -= RhtForeLegPawShift2 * speed
LeftForeLeg_A_Tr.Angle += LeftForeLeg_A_Shift2 * speed
LeftForeLeg_B_Tr.Angle -= LeftForeLeg_B_Shift2 * speed
LeftForeLeg_C_Tr.Angle -= LeftForeLeg_C_Shift2 * speed
LeftForePawTr.Angle += LeftForeLegPawShift2 * speed
End If
' Get to Phase 3
If RhtHindLeg_A_Tr.Angle >= 8 And RhtHindLeg_A_Tr.Angle < 14 Then
RhtHindLeg_A_Tr.Angle += 1 * speed
RhtHindLeg_B_Tr.Angle += RhtHindLeg_B_Shift3 * speed
RhtHindLeg_C_Tr.Angle -= RhtHindLeg_C_Shift3 * speed
RhtHindPawTr.Angle += RhtHindLegPawShift3 * speed
LeftHindLeg_A_Tr.Angle += LeftHindLeg_A_Shift3 * speed
LeftHindLeg_B_Tr.Angle -= LeftHindLeg_B_Shift3 * speed
LeftHindLeg_C_Tr.Angle += LeftHindLeg_C_Shift3 * speed
LeftHindPawTr.Angle -= LeftHindLegPawShift3 * speed
RhtForeLeg_A_Tr.Angle += RhtForeLeg_A_Shift3 * speed
RhtForeLeg_B_Tr.Angle += RhtForeLeg_B_Shift3 * speed
RhtForePawTr.Angle -= RhtForeLegPawShift3 * speed
LeftForeLeg_A_Tr.Angle -= LeftForeLeg_A_Shift3 * speed
LeftForeLeg_B_Tr.Angle += LeftForeLeg_B_Shift3 * speed
LeftForeLeg_C_Tr.Angle -= LeftForeLeg_C_Shift3 * speed
LeftForePawTr.Angle += LeftForeLegPawShift3 * speed
End If
If RhtHindLeg_A_Tr.Angle = 14 Then
MoveRhtLegBackwards = False
End If
End Sub
Private Sub RightHindForward()
' Get to Phase 4
If RhtHindLeg_A_Tr.Angle <= 14 And RhtHindLeg_A_Tr.Angle > -4 Then
RhtHindLeg_A_Tr.Angle -= 1 * speed
RhtHindLeg_B_Tr.Angle += RhtHindLeg_B_Shift4 * speed
RhtHindLeg_C_Tr.Angle -= RhtHindLeg_C_Shift4 * speed
RhtHindPawTr.Angle += RhtHindLegPawShift4 * speed
LeftHindLeg_A_Tr.Angle += LeftHindLeg_A_Shift4 * speed
LeftHindLeg_B_Tr.Angle += LeftHindLeg_B_Shift4 * speed
LeftHindLeg_C_Tr.Angle -= LeftHindLeg_C_Shift4 * speed
LeftHindPawTr.Angle -= LeftHindLegPawShift4 * speed
RhtForeLeg_A_Tr.Angle += RhtForeLeg_A_Shift4 * speed
RhtForeLeg_C_Tr.Angle += RhtForeLeg_C_Shift4 * speed
RhtForePawTr.Angle -= RhtForeLegPawShift4 * speed
LeftForeLeg_A_Tr.Angle -= LeftForeLeg_A_Shift4 * speed
LeftForeLeg_B_Tr.Angle += LeftForeLeg_B_Shift4 * speed
LeftForeLeg_C_Tr.Angle -= LeftForeLeg_C_Shift4 * speed
LeftForePawTr.Angle += LeftForeLegPawShift4 * speed
ShiftAvalonaUp()
End If
If RhtHindLeg_A_Tr.Angle = -4 Then
LeftForeLeg_C_Tr.Angle = 0
End If
' Get to Phase 5
If RhtHindLeg_A_Tr.Angle <= -4 And RhtHindLeg_A_Tr.Angle > -14 Then
' Multiply by 0.5 since Phase 8 in the original sequence
' was jumped when creating the 5 Phase sequence.
RhtHindLeg_A_Tr.Angle -= 1 * speed * 0.5
RhtHindLeg_B_Tr.Angle -= RhtHindLeg_B_Shift5 * speed * 0.5
RhtHindLeg_C_Tr.Angle += RhtHindLeg_C_Shift5 * speed * 0.5
RhtHindPawTr.Angle -= RhtHindLegPawShift5 * speed * 0.5
LeftHindLeg_A_Tr.Angle += LeftHindLeg_A_Shift5 * speed * 0.5
LeftHindLeg_B_Tr.Angle += LeftHindLeg_B_Shift5 * speed * 0.5
LeftHindLeg_C_Tr.Angle -= LeftHindLeg_C_Shift5 * speed * 0.5
LeftHindPawTr.Angle -= LeftHindLegPawShift5 * speed * 0.5
RhtForeLeg_A_Tr.Angle -= RhtForeLeg_A_Shift5 * speed * 0.5
RhtForeLeg_B_Tr.Angle -= RhtForeLeg_B_Shift5 * speed * 0.5
RhtForeLeg_C_Tr.Angle += RhtForeLeg_C_Shift5 * speed * 0.5
RhtForePawTr.Angle += RhtForeLegPawShift5 * speed * 0.5
LeftForeLeg_A_Tr.Angle += LeftForeLeg_A_Shift5 * speed * 0.5
LeftForeLeg_B_Tr.Angle += LeftForeLeg_B_Shift5 * speed * 0.5
LeftForePawTr.Angle -= LeftForeLegPawShift5 * speed * 0.5
ShiftAvalonaDown()
End If
If RhtHindLeg_A_Tr.Angle = -14 Then
FocusOnRightHind = False
' Set angles to Phase 5 stance
RhtHndFocusPhase5Stance()
End If
End Sub
Private Sub LeftHindBack()
' Get to Phase 2
If LeftHindLeg_A_Tr.Angle >= 4 And LeftHindLeg_A_Tr.Angle < 8 Then
LeftHindLeg_A_Tr.Angle += 1 * speed
LeftHindLeg_B_Tr.Angle += RhtHindLeg_B_Shift2 * speed
LeftHindLeg_C_Tr.Angle -= RhtHindLeg_C_Shift2 * speed
LeftHindPawTr.Angle += RhtHindLegPawShift2 * speed
RhtHindLeg_A_Tr.Angle += LeftHindLeg_A_Shift2 * speed
RhtHindLeg_B_Tr.Angle -= LeftHindLeg_B_Shift2 * speed
RhtHindLeg_C_Tr.Angle += LeftHindLeg_C_Shift2 * speed
RhtHindPawTr.Angle += LeftHindLegPawShift2 * speed
LeftForeLeg_A_Tr.Angle += RhtForeLeg_A_Shift2 * speed
LeftForeLeg_B_Tr.Angle += RhtForeLeg_B_Shift2 * speed
LeftForePawTr.Angle -= RhtForeLegPawShift2 * speed
RhtForeLeg_A_Tr.Angle += LeftForeLeg_A_Shift2 * speed
RhtForeLeg_B_Tr.Angle -= LeftForeLeg_B_Shift2 * speed
RhtForeLeg_C_Tr.Angle -= LeftForeLeg_C_Shift2 * speed
RhtForePawTr.Angle += LeftForeLegPawShift2 * speed
End If
' Get to Phase 3
If LeftHindLeg_A_Tr.Angle >= 8 And LeftHindLeg_A_Tr.Angle < 14 Then
LeftHindLeg_A_Tr.Angle += 1 * speed
LeftHindLeg_B_Tr.Angle += RhtHindLeg_B_Shift3 * speed
LeftHindLeg_C_Tr.Angle -= RhtHindLeg_C_Shift3 * speed
LeftHindPawTr.Angle += RhtHindLegPawShift3 * speed
RhtHindLeg_A_Tr.Angle += LeftHindLeg_A_Shift3 * speed
RhtHindLeg_B_Tr.Angle -= LeftHindLeg_B_Shift3 * speed
RhtHindLeg_C_Tr.Angle += LeftHindLeg_C_Shift3 * speed
RhtHindPawTr.Angle -= LeftHindLegPawShift3 * speed
LeftForeLeg_A_Tr.Angle += RhtForeLeg_A_Shift3 * speed
LeftForeLeg_B_Tr.Angle += RhtForeLeg_B_Shift3 * speed
LeftForePawTr.Angle -= RhtForeLegPawShift3 * speed
RhtForeLeg_A_Tr.Angle -= LeftForeLeg_A_Shift3 * speed
RhtForeLeg_B_Tr.Angle += LeftForeLeg_B_Shift3 * speed
RhtForeLeg_C_Tr.Angle -= LeftForeLeg_C_Shift3 * speed
RhtForePawTr.Angle += LeftForeLegPawShift3 * speed
End If
If LeftHindLeg_A_Tr.Angle = 14 Then
MoveLeftLegBackwards = False
End If
End Sub
Private Sub LeftHindForward()
' Get to Phase 4
If LeftHindLeg_A_Tr.Angle <= 14 And LeftHindLeg_A_Tr.Angle > -4 Then
LeftHindLeg_A_Tr.Angle -= 1 * speed
LeftHindLeg_B_Tr.Angle += RhtHindLeg_B_Shift4 * speed
LeftHindLeg_C_Tr.Angle -= RhtHindLeg_C_Shift4 * speed
LeftHindPawTr.Angle += RhtHindLegPawShift4 * speed
RhtHindLeg_A_Tr.Angle += LeftHindLeg_A_Shift4 * speed
RhtHindLeg_B_Tr.Angle += LeftHindLeg_B_Shift4 * speed
RhtHindLeg_C_Tr.Angle -= LeftHindLeg_C_Shift4 * speed
RhtHindPawTr.Angle -= LeftHindLegPawShift4 * speed
LeftForeLeg_A_Tr.Angle += RhtForeLeg_A_Shift4 * speed
LeftForeLeg_B_Tr.Angle += RhtForeLeg_B_Shift4 * speed
LeftForeLeg_C_Tr.Angle += RhtForeLeg_C_Shift4 * speed
LeftForePawTr.Angle -= RhtForeLegPawShift4 * speed
RhtForeLeg_A_Tr.Angle -= LeftForeLeg_A_Shift4 * speed
RhtForeLeg_B_Tr.Angle += LeftForeLeg_B_Shift4 * speed
RhtForeLeg_C_Tr.Angle -= LeftForeLeg_C_Shift4 * speed
RhtForePawTr.Angle += LeftForeLegPawShift4 * speed
ShiftAvalonaUp()
End If
If LeftHindLeg_A_Tr.Angle = -4 Then
RhtForeLeg_C_Tr.Angle = 0
End If
' Get to Phase 5
If LeftHindLeg_A_Tr.Angle <= -4 And LeftHindLeg_A_Tr.Angle > -14 Then
' Multiply by 0.5 since Phase 8 in the original sequence
' was jumped when creating the 5 Phase sequence.
LeftHindLeg_A_Tr.Angle -= 1 * speed * 0.5
LeftHindLeg_B_Tr.Angle -= RhtHindLeg_B_Shift5 * speed * 0.5
LeftHindLeg_C_Tr.Angle += RhtHindLeg_C_Shift5 * speed * 0.5
LeftHindPawTr.Angle -= RhtHindLegPawShift5 * speed * 0.5
RhtHindLeg_A_Tr.Angle += LeftHindLeg_A_Shift5 * speed * 0.5
RhtHindLeg_B_Tr.Angle += LeftHindLeg_B_Shift5 * speed * 0.5
RhtHindLeg_C_Tr.Angle -= LeftHindLeg_C_Shift5 * speed * 0.5
RhtHindPawTr.Angle -= LeftHindLegPawShift5 * speed * 0.5
LeftForeLeg_A_Tr.Angle -= RhtForeLeg_A_Shift5 * speed * 0.5
LeftForeLeg_B_Tr.Angle -= RhtForeLeg_B_Shift5 * speed * 0.5
LeftForeLeg_C_Tr.Angle += RhtForeLeg_C_Shift5 * speed * 0.5
LeftForePawTr.Angle += RhtForeLegPawShift5 * speed * 0.5
RhtForeLeg_A_Tr.Angle += LeftForeLeg_A_Shift5 * speed * 0.5
RhtForeLeg_B_Tr.Angle += LeftForeLeg_B_Shift5 * speed * 0.5
RhtForePawTr.Angle -= LeftForeLegPawShift5 * speed * 0.5
ShiftAvalonaDown()
End If
If LeftHindLeg_A_Tr.Angle = -14 Then
FocusOnRightHind = True
MoveRhtLegBackwards = True
MoveLeftLegBackwards = True
LeftHndFocusPhase5Stance()
End If
End Sub
' Set angles to Phase 5 stance.
Private Sub RhtHndFocusPhase5Stance()
RhtHindLeg_A_Tr.Angle = -14
RhtHindLeg_B_Tr.Angle = -10
RhtHindLeg_C_Tr.Angle = 4
RhtHindPawTr.Angle = 20
LeftHindLeg_A_Tr.Angle = 4
LeftHindLeg_B_Tr.Angle = 4
LeftHindLeg_C_Tr.Angle = -4
LeftHindPawTr.Angle = -4
RhtForeLeg_A_Tr.Angle = 6
RhtForeLeg_B_Tr.Angle = -41
RhtForeLeg_C_Tr.Angle = 68
RhtForePawTr.Angle = -31
LeftForeLeg_A_Tr.Angle = 3
LeftForeLeg_B_Tr.Angle = 2
LeftForeLeg_C_Tr.Angle = 0
LeftForePawTr.Angle = -5
Canvas.SetTop(Avalona, Y_Pos)
End Sub
Private Sub LeftHndFocusPhase5Stance()
LeftHindLeg_A_Tr.Angle = -14
LeftHindLeg_B_Tr.Angle = -10
LeftHindLeg_C_Tr.Angle = 4
LeftHindPawTr.Angle = 20
RhtHindLeg_A_Tr.Angle = 4
RhtHindLeg_B_Tr.Angle = 4
RhtHindLeg_C_Tr.Angle = -4
RhtHindPawTr.Angle = -4
LeftForeLeg_A_Tr.Angle = 6
LeftForeLeg_B_Tr.Angle = -41
LeftForeLeg_C_Tr.Angle = 68
LeftForePawTr.Angle = -31
RhtForeLeg_A_Tr.Angle = 3
RhtForeLeg_B_Tr.Angle = 2
RhtForeLeg_C_Tr.Angle = 0
RhtForePawTr.Angle = -5
Canvas.SetTop(Avalona, Y_Pos)
End Sub
Private Sub ShiftAvalonaUp()
Dim Avalona_Y As Double = Canvas.GetTop(Avalona)
' 4.3 is the distance from Avalona's paw base
' and the treadmill surface, when the base of Avalona's
' paw has shifted below the treadmill surface
' during the shift from Phase 3 to 4.
Dim Y_Shift As Double = (4.3 / 18) * speed
Canvas.SetTop(Avalona, (Avalona_Y - Y_Shift))
End Sub
Private Sub ShiftAvalonaDown()
Dim Avalona_Y As Double = Canvas.GetTop(Avalona)
Dim Y_Shift As Double = (4 / 18) * speed * 0.5
Canvas.SetTop(Avalona, (Avalona_Y + Y_Shift))
End Sub
Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
Y_Pos = Canvas.GetTop(Avalona)
End Sub
End Class
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.