Initial commit

This commit is contained in:
ti_mo
2025-10-20 19:55:15 +02:00
commit 0d108223f9
14 changed files with 444 additions and 0 deletions
@@ -0,0 +1,132 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:DelauneyTriangulation.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="using:DelauneyTriangulation.Models"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="DelauneyTriangulation.Views.MainWindow"
x:DataType="vm:MainWindowViewModel"
Icon="/Assets/avalonia-logo.ico"
Title="Delaunay Triangulation"
SystemDecorations="Full"
ExtendClientAreaToDecorationsHint="True"
ExtendClientAreaChromeHints="Default"
ExtendClientAreaTitleBarHeightHint="32"
TransparencyLevelHint="AcrylicBlur, Blur, Transparent"
Background="Transparent"
Width="{Binding Width}"
Height="{Binding Height}"
>
<Design.DataContext>
<!-- This only sets the DataContext for the previewer in an IDE,
to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) -->
<vm:MainWindowViewModel/>
</Design.DataContext>
<Window.Styles>
<Style Selector="Border.InnerCard">
<Setter Property="CornerRadius" Value="7.5"/>
<Setter Property="Background" Value="#30000000"/>
<Setter Property="BorderBrush" Value="#20FFFFFF"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="Padding" Value="10"/>
<Setter Property="Margin" Value="5"/>
</Style>
</Window.Styles>
<Panel>
<Grid RowDefinitions="30,*">
<Border ZIndex="1000" Grid.Row="0" Background="#30000000" PointerPressed="OnTitleBarPointerPressed" DoubleTapped="OnTitleBarDoubleTapped">
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Background="Transparent" Foreground="White" Text="Delaunay Triangulation - Timo Niemann"/>
</Border>
<Grid Grid.Row="1" ZIndex="1000" Margin="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border Classes="InnerCard">
<Border.Effect>
<DropShadowEffect BlurRadius="20" Color="#aa000000" OffsetX="5" OffsetY="5"/>
</Border.Effect>
<StackPanel Orientation="Vertical">
<Border Classes="InnerCard">
<TextBlock Text="Delaunay Triangulation" FontSize="18" Foreground="White"/>
</Border>
<Border Classes="InnerCard">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Slider Grid.Column="0" Value="{Binding PointCount, Mode=TwoWay}" Margin="5" Minimum="20" Maximum="500"/>
<TextBox Grid.Column="1" Text="{Binding PointCount, Mode=TwoWay}" FontSize="18" Foreground="White" Background="#30ffffff" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
</Grid>
</Border>
</StackPanel>
</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"
>
<Canvas x:Name="SceneContent">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="{Binding Zoom}" ScaleY="{Binding Zoom}"/>
<TranslateTransform X="{Binding PanX}" Y="{Binding PanY}"/>
</TransformGroup>
</Canvas.RenderTransform>
<ItemsControl ItemsSource="{Binding Edges}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate><Canvas/></ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="models:Geometries+GeomEdge">
<Line StartPoint="{Binding Start}"
EndPoint="{Binding End}"
Stroke="LightGray"
StrokeThickness="1"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding Circles}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate><Canvas/></ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="models:Geometries+GeomCircle">
<Ellipse Stroke="Lime" StrokeThickness="1.5"
Width="{Binding Diameter}"
Height="{Binding Diameter}"
Canvas.Left="{Binding Left}"
Canvas.Top="{Binding Top}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding Points}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate><Canvas/></ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="models:Geometries+GeomPoint">
<Ellipse Fill="White" Stroke="Black" StrokeThickness="1"
Width="{Binding Size}"
Height="{Binding Size}"
Canvas.Left="{Binding Left}"
Canvas.Top="{Binding Top}"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
</Canvas>
</Grid>
</Panel>
</Window>