Skip to content

Commit

Permalink
Add gravity slider animation
Browse files Browse the repository at this point in the history
  • Loading branch information
lelandjobson committed Jul 24, 2018
1 parent c8b64ea commit 85069bd
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 7 deletions.
13 changes: 6 additions & 7 deletions Frixel.UI/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -66,23 +66,22 @@
</Grid>
<TextBlock x:Name="tb_GridSize" TextWrapping="Wrap" Margin="5,0,0,3" Height="16" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="82" Grid.Row="3" FontSize="10" Grid.ColumnSpan="2"/>
<GroupBox x:Name="grp_Results_Copy" Header="Loading" Margin="10,0" Grid.Column="3" Background="#FFF9F9F9" Grid.Row="1">
<Grid Grid.Column="1">
<Grid Grid.Column="1" Height="84" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Margin="5,10,88,0" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="9" RenderTransformOrigin="1.062,1.295" Height="12" FontWeight="Bold"/>
<Slider x:Name="sld_GravLoad" ValueChanged="sld_GravLoad_ValueChanged" Margin="10,0,10,9" RenderTransformOrigin="0.379,0.13" Maximum="1" LargeChange="0.25" SmallChange="0.05" Height="18" VerticalAlignment="Bottom"/>
<TextBlock Margin="10,0,10,30" TextWrapping="Wrap" TextAlignment="Center" Text="Gravity Load" FontStyle="Italic" Height="16" VerticalAlignment="Bottom" HorizontalAlignment="Center" Width="96"/>
<TextBlock x:Name="tb_GravLoad" Margin="24,5,22,0" TextWrapping="Wrap" Text="0" TextAlignment="Center" FontSize="24" HorizontalAlignment="Center" Width="74" Height="33" VerticalAlignment="Top" Foreground="#FF444444"/>
<Slider x:Name="sld_GravLoad" ValueChanged="sld_GravLoad_ValueChanged" Margin="10,57,32,9" RenderTransformOrigin="0.379,0.13" Maximum="1" LargeChange="0.25" SmallChange="0.05"/>
<TextBlock Margin="12,36,12,0" TextWrapping="Wrap" TextAlignment="Center" Text="Gravity Load" FontStyle="Italic" Height="16" VerticalAlignment="Top" HorizontalAlignment="Center" Width="96"/>
<TextBlock x:Name="tb_GravLoad" Margin="24,3,22,0" TextWrapping="Wrap" Text="0" TextAlignment="Center" FontSize="24" HorizontalAlignment="Center" Width="74" Height="33" VerticalAlignment="Top" Foreground="#FF444444"/>
<Button x:Name="btn_PlayDisp" Content="" HorizontalAlignment="Right" Margin="0,57,5,7" Width="22" Background="White" BorderBrush="#FFC9C9C9" Foreground="#FF919191" Click="btn_PlayDisp_Click"/>
</Grid>
</GroupBox>
<GroupBox x:Name="grp_Results_Copy1" Header="Loading" Margin="10,0,10,10" Grid.Column="3" Background="#FFF9F9F9" Grid.Row="2">
<Grid Grid.Column="1">
<Grid Grid.Column="1" Height="87" VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="70*"/>
</Grid.ColumnDefinitions>
<TextBlock Margin="0,10,88,0" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="9" RenderTransformOrigin="1.062,1.295" Grid.Column="1" Height="12" FontWeight="Bold"/>
<Slider x:Name="sld_WindLoad" ValueChanged="sld_WindLoad_ValueChanged" Grid.Column="1" Margin="10,0,10,9" RenderTransformOrigin="0.379,0.13" Maximum="1" LargeChange="0.25" SmallChange="0.05" Height="18" VerticalAlignment="Bottom"/>
<TextBlock Margin="5,0,10,30" TextAlignment="Center" TextWrapping="Wrap" Text="Wind Load" FontStyle="Italic" Grid.Column="1" Height="16" VerticalAlignment="Bottom" HorizontalAlignment="Center" Width="96"/>
<TextBlock x:Name="tb_WindLoad" Margin="17,5,61,0" TextWrapping="Wrap" Text="0" TextAlignment="Right" Grid.Column="1" FontSize="24" HorizontalAlignment="Center" Width="37" Height="36" VerticalAlignment="Top" Foreground="#FF444444"/>
Expand Down
71 changes: 71 additions & 0 deletions Frixel.UI/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ public partial class MainWindow : Window
/// Margin of canvas in pixels
/// </summary>
const double CanvasMargin = 60;
/// <summary>
/// Length of an animation cycle in milliseconds
/// </summary>
const int AnimationLoopDuration = 2000;

public delegate FrixelReferenceData PixelStructurePass(double xSize, double ySize);
public static event PixelStructurePass ReferenceFromClient;
Expand Down Expand Up @@ -79,6 +83,8 @@ public partial class MainWindow : Window
private DisplayState _displayState = DisplayState.Default;
private Direction _windDirection = Direction.Right;
private DrawState _drawState = DrawState.DrawBracing;
private AnimationState _animationState = AnimationState.Static;

private bool _isRedrawing = false;

private SolidColorBrush _defaultBtnBgBrush = Brushes.White;
Expand Down Expand Up @@ -339,6 +345,7 @@ private void sld_WindLoad_ValueChanged(object sender, RoutedPropertyChangedEvent

private void sld_GravLoad_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
//if(_animationState == AnimationState.Animating) { return; }
tb_GravLoad.Text = Math.Round(sld_GravLoad.Value.Map(new Domain(0, 1), new Domain(0, 10))).ToString();
if (AnalysisResults == null) { return; }
Redisplace();
Expand Down Expand Up @@ -753,6 +760,64 @@ private void ChangeDrawState(DrawState newState)
//btn_DrawRect.Foreground = _defaultBtnFgBrush;
btn_DrawSupports.Foreground = _defaultBtnFgBrush;
}

private void AnimateGravityLoadSlider()
{
// LJ Not efficient to regenerate this storyboard every time
double maxValue = sld_GravLoad.Value;
Storyboard gravSliderAnimBoard = new Storyboard();
TimeSpan duration = new TimeSpan(0, 0, 0, 0, AnimationLoopDuration / 2);
gravSliderAnimBoard.Completed += GravSliderAnimBoard_Completed;
var gravSliderTo0 = new DoubleAnimation
{
From = maxValue,
To = 0,
Duration = new Duration(new TimeSpan(0, 0, 0, 0, AnimationLoopDuration / 2))
};
gravSliderTo0.BeginTime = new TimeSpan(0, 0, 0);
Storyboard.SetTargetName(gravSliderTo0, this.sld_GravLoad.Name);
Storyboard.SetTargetProperty(gravSliderTo0, new PropertyPath("Value", 0));
gravSliderAnimBoard.Children.Add(gravSliderTo0);

var gravSliderToMax = new DoubleAnimation
{
From = 0,
To = maxValue,
Duration = new Duration(new TimeSpan(0, 0, 0, 0, AnimationLoopDuration / 2))
};
gravSliderToMax.BeginTime = new TimeSpan(0, 0, 0, 0, AnimationLoopDuration / 2);
Storyboard.SetTargetName(gravSliderToMax, this.sld_GravLoad.Name);
Storyboard.SetTargetProperty(gravSliderToMax, new PropertyPath("Value", 0));
gravSliderAnimBoard.Children.Add(gravSliderToMax);

gravSliderAnimBoard.Begin(this.sld_GravLoad);
}

private void GravSliderAnimBoard_Completed(object sender, EventArgs e)
{
if(this._animationState == AnimationState.Animating)
{
AnimateGravityLoadSlider();
}
}

private void btn_PlayDisp_Click(object sender, RoutedEventArgs e)
{
// Don't animate if the value of the slider is zero
if (sld_GravLoad.Value == 0) { return; }

switch (this._animationState){
case AnimationState.Static:
btn_PlayDisp.Background = Brushes.Yellow;
this._animationState = AnimationState.Animating;
AnimateGravityLoadSlider();
break;
case AnimationState.Animating:
btn_PlayDisp.Background = Brushes.White;
this._animationState = AnimationState.Static;
break;
}
}
}

enum DrawState
Expand All @@ -763,4 +828,10 @@ enum DrawState
DrawRect,
DrawPolyline
}

enum AnimationState
{
Static,
Animating
}
}
Binary file added doc/Frixel_Play.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 85069bd

Please sign in to comment.