Added Algorithm Selection
This commit is contained in:
@@ -31,6 +31,11 @@ public partial class MainWindowViewModel : ViewModelBase
|
||||
[ObservableProperty] private bool _voronoiVisible = true;
|
||||
[ObservableProperty] private bool _trianglesVisible = true;
|
||||
|
||||
[ObservableProperty] private bool _doConnectPoints = false;
|
||||
[ObservableProperty] private bool _doNearestTriangle = false;
|
||||
[ObservableProperty] private bool _doDelaunayLib = false;
|
||||
[ObservableProperty] private bool _doBowyerWatson = true;
|
||||
|
||||
[ObservableProperty] private int? _generationDelay = 20;
|
||||
private CancellationTokenSource? _genCts;
|
||||
|
||||
@@ -541,10 +546,10 @@ public partial class MainWindowViewModel : ViewModelBase
|
||||
VoronoiDiagram.Clear();
|
||||
|
||||
await GenerateRandomPoints(PointCount ?? 20, ct);
|
||||
// await ConnectPoints(ct);
|
||||
// await Triangulate(ct);
|
||||
// await DelaunayTriangulateAsync(ct);
|
||||
await BowyerWatson(ct);
|
||||
if(DoConnectPoints) await ConnectPoints(ct);
|
||||
if(DoNearestTriangle) await Triangulate(ct);
|
||||
if(DoDelaunayLib) await DelaunayTriangulateAsync(ct);
|
||||
if(DoBowyerWatson) await BowyerWatson(ct);
|
||||
}
|
||||
|
||||
private bool CanGenerate() => true;
|
||||
|
||||
@@ -55,57 +55,72 @@
|
||||
<Border.Effect>
|
||||
<DropShadowEffect BlurRadius="20" Color="#aa000000" OffsetX="5" OffsetY="5"/>
|
||||
</Border.Effect>
|
||||
<Grid RowDefinitions="*, auto">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<Border Classes="InnerCard">
|
||||
<TextBlock Text="Delaunay Triangulation" FontSize="18" Foreground="White"/>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Maximal Point Count" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="4*,1*">
|
||||
<Slider Grid.Column="0" Value="{Binding PointCount, Mode=TwoWay}" Margin="5" Minimum="20" Maximum="200"/>
|
||||
<NumericUpDown Height="20" Grid.Column="1" ShowButtonSpinner="False" Value="{Binding PointCount, Mode=TwoWay}" Minimum="1" Increment="1" FormatString="F0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Minimal Point Distance" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="4*,1*">
|
||||
<Slider Grid.Column="0" Value="{Binding MinPointDistance, Mode=TwoWay}" Margin="5" Minimum="1" Maximum="10"/>
|
||||
<NumericUpDown Height="20" Grid.Column="1" ShowButtonSpinner="False" Value="{Binding MinPointDistance, Mode=TwoWay}" Minimum="1" Increment="1" FormatString="F0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> </Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Genearation Speed" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="4*,1*">
|
||||
<Slider Grid.Column="0" Value="{Binding GenerationDelay, Mode=TwoWay}" Margin="5" Minimum="0" Maximum="1000"/>
|
||||
<NumericUpDown Height="20" Grid.Column="1" ShowButtonSpinner="False" Value="{Binding GenerationDelay, Mode=TwoWay}" Minimum="0" Increment="1" FormatString="F0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Enabled Visuals:" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="1*, 1*">
|
||||
<CheckBox HorizontalAlignment="Left" Content="Points" IsChecked="{Binding PointsVisible}" Foreground="White" Margin="10,0"/>
|
||||
<CheckBox Grid.Column="1" HorizontalAlignment="Left" Content="Convex Hull" IsChecked="{Binding EdgesVisible}" Foreground="White" Margin="10,0"/>
|
||||
</Grid>
|
||||
<Grid ColumnDefinitions="1*, 1*">
|
||||
<CheckBox HorizontalAlignment="Left" Content="Circles" IsChecked="{Binding CirclesVisible}" Foreground="White" Margin="10,0"/>
|
||||
<CheckBox Grid.Column="1" HorizontalAlignment="Left" Content="Triangles" IsChecked="{Binding TrianglesVisible}" Foreground="White" Margin="10,0"/>
|
||||
</Grid>
|
||||
<Grid ColumnDefinitions="1*, 1*">
|
||||
<CheckBox HorizontalAlignment="Left" Content="Voronoi" IsChecked="{Binding VoronoiVisible}" Foreground="White" Margin="10,0"/>
|
||||
<!-- <CheckBox Content="Triangles" IsChecked="{Binding TrianglesVisible}" Foreground="White" Margin="10,0"/> -->
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<Button Grid.Row="1" Foreground="White" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="Generate" Command="{Binding GenerateCommand}"/>
|
||||
</Grid>
|
||||
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
|
||||
<Grid RowDefinitions="*, auto">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<Border Classes="InnerCard">
|
||||
<TextBlock Text="Delaunay Triangulation" FontSize="18" Foreground="White"/>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Maximal Point Count" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="4*,1*">
|
||||
<Slider Grid.Column="0" Value="{Binding PointCount, Mode=TwoWay}" Margin="5" Minimum="20" Maximum="200"/>
|
||||
<NumericUpDown Height="20" Grid.Column="1" ShowButtonSpinner="False" Value="{Binding PointCount, Mode=TwoWay}" Minimum="1" Increment="1" FormatString="F0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Minimal Point Distance" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="4*,1*">
|
||||
<Slider Grid.Column="0" Value="{Binding MinPointDistance, Mode=TwoWay}" Margin="5" Minimum="1" Maximum="10"/>
|
||||
<NumericUpDown Height="20" Grid.Column="1" ShowButtonSpinner="False" Value="{Binding MinPointDistance, Mode=TwoWay}" Minimum="1" Increment="1" FormatString="F0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> </Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Genearation Speed" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="4*,1*">
|
||||
<Slider Grid.Column="0" Value="{Binding GenerationDelay, Mode=TwoWay}" Margin="5" Minimum="0" Maximum="1000"/>
|
||||
<NumericUpDown Height="20" Grid.Column="1" ShowButtonSpinner="False" Value="{Binding GenerationDelay, Mode=TwoWay}" Minimum="0" Increment="1" FormatString="F0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Enabled Visuals:" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="1*, 1*">
|
||||
<CheckBox HorizontalAlignment="Left" Content="Points" IsChecked="{Binding PointsVisible}" Foreground="White" Margin="10,0"/>
|
||||
<CheckBox Grid.Column="1" HorizontalAlignment="Left" Content="Convex Hull" IsChecked="{Binding EdgesVisible}" Foreground="White" Margin="10,0"/>
|
||||
</Grid>
|
||||
<Grid ColumnDefinitions="1*, 1*">
|
||||
<CheckBox HorizontalAlignment="Left" Content="Circles" IsChecked="{Binding CirclesVisible}" Foreground="White" Margin="10,0"/>
|
||||
<CheckBox Grid.Column="1" HorizontalAlignment="Left" Content="Triangles" IsChecked="{Binding TrianglesVisible}" Foreground="White" Margin="10,0"/>
|
||||
</Grid>
|
||||
<Grid ColumnDefinitions="1*, 1*">
|
||||
<CheckBox HorizontalAlignment="Left" Content="Voronoi" IsChecked="{Binding VoronoiVisible}" Foreground="White" Margin="10,0"/>
|
||||
<!-- <CheckBox Content="Triangles" IsChecked="{Binding TrianglesVisible}" Foreground="White" Margin="10,0"/> -->
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Used Algorithm:" Foreground="White"/>
|
||||
<Grid ColumnDefinitions="1*, 1*">
|
||||
<RadioButton GroupName="Algorithm" HorizontalAlignment="Left" Content="Connect Points" IsChecked="{Binding DoConnectPoints}" Foreground="White" Margin="10,0"/>
|
||||
<RadioButton Grid.Column="1" GroupName="Algorithm" HorizontalAlignment="Left" Content="Nearest Triangle" IsChecked="{Binding DoNearestTriangle}" Foreground="White" Margin="10,0"/>
|
||||
</Grid>
|
||||
<Grid ColumnDefinitions="1*, 1*">
|
||||
<RadioButton GroupName="Algorithm" HorizontalAlignment="Left" Content="BowyerWatson" IsChecked="{Binding DoBowyerWatson}" Foreground="White" Margin="10,0"/>
|
||||
<RadioButton Grid.Column="1" GroupName="Algorithm" HorizontalAlignment="Left" Content="Delaunay (Delaunator)" IsChecked="{Binding DoDelaunayLib}" Foreground="White" Margin="10,0"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<Button Grid.Row="1" Foreground="White" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="Generate" Command="{Binding GenerateCommand}"/>
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Grid>
|
||||
<Canvas Grid.Row="0" Grid.RowSpan="2" x:Name="Scene" Background="#dd000000" ClipToBounds="True" PointerPressed="Scene_OnPointerPressed" PointerMoved="Scene_OnPointerMoved" PointerReleased="Scene_OnPointerReleased" PointerWheelChanged="Scene_OnWheel">
|
||||
|
||||
Reference in New Issue
Block a user