Added Algorithm Selection

This commit is contained in:
Ano-sys
2026-01-03 15:13:33 +01:00
parent 55850a961b
commit a0d8ed79b7
2 changed files with 75 additions and 55 deletions
@@ -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;
+66 -51
View File
@@ -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">