Delaunay Triangulation - currently with DelaunatorSharp - VoronoiDiagram work in progress
This commit is contained in:
@@ -15,8 +15,8 @@
|
||||
ExtendClientAreaTitleBarHeightHint="32"
|
||||
TransparencyLevelHint="AcrylicBlur, Blur, Transparent"
|
||||
Background="Transparent"
|
||||
Width="{Binding Width}"
|
||||
Height="{Binding Height}"
|
||||
Width="{Binding Width, Mode=TwoWay}"
|
||||
Height="{Binding Height, Mode=TwoWay}"
|
||||
>
|
||||
|
||||
<Design.DataContext>
|
||||
@@ -42,24 +42,61 @@
|
||||
</Border>
|
||||
<Grid Grid.Row="1" ZIndex="1000" Margin="20">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<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 ColumnDefinitions="4*,1*">
|
||||
<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>
|
||||
<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"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding PointCount, Mode=TwoWay}" FontSize="18" Foreground="White" Background="#30ffffff" 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"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding MinPointDistance, Mode=TwoWay}" FontSize="18" Foreground="White" Background="#30ffffff" 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"/>
|
||||
<TextBox Grid.Column="1" Text="{Binding GenerationDelay, Mode=TwoWay}" FontSize="18" Foreground="White" Background="#30ffffff" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Classes="InnerCard">
|
||||
<StackPanel Orientation="Vertical">
|
||||
<TextBlock Text="Enabled Visuals:" Foreground="White"/>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<CheckBox Content="Points" IsChecked="{Binding PointsVisible}" Foreground="White" Margin="10,0"/>
|
||||
<CheckBox Content="Convex Hull" IsChecked="{Binding EdgesVisible}" Foreground="White" Margin="10,0"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<CheckBox Content="Circles" IsChecked="{Binding CirclesVisible}" Foreground="White" Margin="10,0"/>
|
||||
<CheckBox Content="Triangles" IsChecked="{Binding TrianglesVisible}" Foreground="White" Margin="10,0"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</StackPanel>
|
||||
<Button Grid.Row="1" Foreground="White" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="Generate" Command="{Binding GenerateCommand}"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
</Grid>
|
||||
<Canvas Grid.Row="0" Grid.RowSpan="2"
|
||||
@@ -84,14 +121,19 @@
|
||||
IsHitTestVisible="False">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<Canvas/>
|
||||
<Canvas IsVisible="{Binding EdgesVisible}"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="models:Geometries+Edge">
|
||||
<Line StartPoint="{Binding Start}"
|
||||
EndPoint="{Binding End}"
|
||||
Stroke="LightGray" StrokeThickness="1"/>
|
||||
Stroke="GreenYellow" StrokeThickness="2"
|
||||
>
|
||||
<Line.RenderTransform>
|
||||
<TranslateTransform X="{Binding Start}" Y="{Binding End}"/>
|
||||
</Line.RenderTransform>
|
||||
</Line>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
@@ -101,7 +143,7 @@
|
||||
IsHitTestVisible="False">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<Canvas/>
|
||||
<Canvas IsVisible="{Binding CirclesVisible}"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
@@ -109,9 +151,33 @@
|
||||
<Ellipse Stroke="DarkOrange" StrokeThickness="1.5"
|
||||
Width="{Binding Diameter}"
|
||||
Height="{Binding Diameter}"
|
||||
Canvas.Left="{Binding Left}"
|
||||
Canvas.Top="{Binding Top}"
|
||||
/>
|
||||
>
|
||||
<Ellipse.RenderTransform>
|
||||
<TranslateTransform X="{Binding Left}" Y="{Binding Top}"/>
|
||||
</Ellipse.RenderTransform>
|
||||
</Ellipse>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
<ItemsControl ItemsSource="{Binding VoronoiDiagram}"
|
||||
Width="{Binding Bounds.Width, ElementName=Scene}"
|
||||
Height="{Binding Bounds.Height, ElementName=Scene}"
|
||||
IsHitTestVisible="False">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<Canvas IsVisible="{Binding CirclesVisible}"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="models:Geometries+Edge">
|
||||
<Line StartPoint="{Binding Start}"
|
||||
EndPoint="{Binding End}"
|
||||
Stroke="GreenYellow" StrokeThickness="2"
|
||||
>
|
||||
<Line.RenderTransform>
|
||||
<TranslateTransform X="{Binding Start}" Y="{Binding End}"/>
|
||||
</Line.RenderTransform>
|
||||
</Line>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
@@ -122,23 +188,40 @@
|
||||
>
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<Canvas/>
|
||||
<Canvas IsVisible="{Binding PointsVisible}"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="models:Geometries+Point">
|
||||
<Ellipse Fill="White" Stroke="Black" StrokeThickness="1"
|
||||
<Ellipse Fill="Transparent" Stroke="White" StrokeThickness="1"
|
||||
Width="{Binding Size}"
|
||||
Height="{Binding Size}"
|
||||
>
|
||||
<Ellipse.RenderTransform>
|
||||
<!-- Nutze Left/Top aus dem VM (oder X/Y, wenn das deine Top-Left-Koords sind) -->
|
||||
<TranslateTransform X="{Binding Left}" Y="{Binding Top}"/>
|
||||
</Ellipse.RenderTransform>
|
||||
</Ellipse>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
<ItemsControl ItemsSource="{Binding Triangles}"
|
||||
Width="{Binding Bounds.Width, ElementName=Scene}"
|
||||
Height="{Binding Bounds.Height, ElementName=Scene}"
|
||||
IsHitTestVisible="False"
|
||||
>
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<Canvas IsVisible="{Binding TrianglesVisible}"/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="models:Geometries+Triangle">
|
||||
<Canvas>
|
||||
<Polygon Points="{Binding Vertices}" Stroke="CornflowerBlue" StrokeThickness="1" Fill="Transparent"/>
|
||||
</Canvas>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
</Canvas>
|
||||
</Canvas>
|
||||
</Grid>
|
||||
|
||||
Reference in New Issue
Block a user