Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Radial Designer tool #210

Draft
wants to merge 14 commits into
base: master
Choose a base branch
from
117 changes: 117 additions & 0 deletions Mapping_Tools/Viewmodels/RadialDesignerVm.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using Mapping_Tools.Classes.SystemTools;
using Newtonsoft.Json;

namespace Mapping_Tools.Viewmodels {
public class RadialDesignerVm : BindableBase {
#region Properties

[JsonIgnore]
public string[] Paths {
get; set;
}

[JsonIgnore]
public bool Quick {
get; set;
}

private int copies;
public int Copies {
get => copies;
set => Set(ref copies, value);
}

private double distance;
public double Distance {
get => distance;
set => Set(ref distance, value);
}

private double localRotation;
public double LocalRotation {
get => localRotation;
set => Set(ref localRotation, value);
}

private double globalRotation;
public double GlobalRotation {
get => globalRotation;
set => Set(ref globalRotation, value);
}
private string importTimeCode;
public string ImportTimeCode {
get => importTimeCode;
set => Set(ref importTimeCode, value);
}

private string exportTimeCode;
public string ExportTimeCode {
get => exportTimeCode;
set => Set(ref exportTimeCode, value);
}

public enum ImportMode {
Selected,
Bookmarked,
Time,
Everything
}

private ImportMode importModeSetting;
public ImportMode ImportModeSetting {
get => importModeSetting;
set {
if (Set(ref importModeSetting, value)) {
RaisePropertyChanged(nameof(ImportTimeCodeBoxVisibility));
}
}
}

[JsonIgnore]
public IEnumerable<ImportMode> ImportModes => Enum.GetValues(typeof(ImportMode)).Cast<ImportMode>();

[JsonIgnore]
public Visibility ImportTimeCodeBoxVisibility =>
ImportModeSetting == ImportMode.Time ? Visibility.Visible : Visibility.Collapsed;

public enum ExportMode {
Auto,
Current,
Time,
}

private ExportMode exportModeSetting;
public ExportMode ExportModeSetting {
get => exportModeSetting;
set {
if (Set(ref exportModeSetting, value)) {
RaisePropertyChanged(nameof(ExportTimeCodeBoxVisibility));
}
}
}


[JsonIgnore]
public IEnumerable<ExportMode> ExportModes => Enum.GetValues(typeof(ExportMode)).Cast<ExportMode>();

[JsonIgnore]
public Visibility ExportTimeCodeBoxVisibility =>
ExportModeSetting == ExportMode.Time ? Visibility.Visible : Visibility.Collapsed;

#endregion

public RadialDesignerVm() {
Copies = 1;
Distance = 0;
LocalRotation = 0;
GlobalRotation = 0;

ImportModeSetting = ImportMode.Selected;
ImportTimeCode = "";
}
}
}
154 changes: 154 additions & 0 deletions Mapping_Tools/Views/RadialDesigner/RadialDesignerView.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<local:SingleRunMappingTool x:Class="Mapping_Tools.Views.RadialDesigner.RadialDesignerView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Mapping_Tools.Views"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:objectVisualiser="clr-namespace:Mapping_Tools.Components.ObjectVisualiser"
xmlns:domain="clr-namespace:Mapping_Tools.Components.Domain"
mc:Ignorable="d"
x:Name="This"
d:DesignHeight="450" Width="800" d:DataContext="{d:DesignData RadialDesignerVM}">
<local:SingleRunMappingTool.Resources>
<domain:DoubleToStringConverter x:Key="DoubleToStringConverter"/>
<domain:TimeToStringConverter x:Key="TimeToStringConverter"/>
<domain:CircleSizeToThicknessConverter x:Key="CircleSizeToThicknessConverter"/>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<domain:EnumToBoolConverter x:Key="EnumToBoolConverter"/>
</local:SingleRunMappingTool.Resources>
<Grid Name="MasterGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" MinWidth="200"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*" MinWidth="300"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Name="FirstGrid" Grid.Column="0" Grid.Row="0" Margin="10">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="32" FontWeight="Bold" Foreground="{DynamicResource PrimaryHueMidBrush}">
<Run Text="Radial Designer"/>
</TextBlock>
<materialDesign:PopupBox Margin="10" VerticalAlignment="Bottom" ToolTip="Click me!">
<materialDesign:PopupBox.ToggleContent>
<materialDesign:PackIcon Kind="HelpCircle" Width="24" Height="24" Foreground="{DynamicResource SecondaryHueMidBrush}"/>
</materialDesign:PopupBox.ToggleContent>
<TextBlock TextWrapping="Wrap" MaxWidth="600" Padding="5">
Generate radial patterns by copying and rotating hit objects around a center point.
<LineBreak/>
Adjust the number of copies, distance, and rotation to create various circular patterns.
</TextBlock>
</materialDesign:PopupBox>
</StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<ComboBox Grid.Column="0" ItemsSource="{Binding ImportModes}" SelectedItem="{Binding ImportModeSetting}" Margin="0 0 5 0"
ToolTip="Object selection mode"
Style="{StaticResource MaterialDesignFloatingHintComboBox}"
materialDesign:HintAssist.Hint="Import mode"/>

<TextBox Grid.Column="1" Text="{Binding ImportTimeCode}" Visibility="{Binding ImportTimeCodeBoxVisibility}" Margin="5 0 5 2" Width="100"
materialDesign:HintAssist.Hint="Time code"
ToolTip="Input a time code here. Example: 01:23:456 (1,2) " />

<Button Grid.Column="2" Style="{StaticResource MaterialDesignRaisedButton}" Command="{Binding DummyCommand}" Margin="5 0 0 0"
ToolTip="Import sliders into the preview." HorizontalAlignment="Right" VerticalAlignment="Top">
Dummy
</Button>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<ComboBox Grid.Column="0" ItemsSource="{Binding ExportModes}" SelectedItem="{Binding ExportModeSetting}" Margin="0 0 5 0"
ToolTip="Determines where to put the pattern"
Style="{StaticResource MaterialDesignFloatingHintComboBox}"
materialDesign:HintAssist.Hint="Export mode"/>

<TextBox Grid.Column="1" Text="{Binding ExportTimeCode}" Visibility="{Binding ExportTimeCodeBoxVisibility}" Margin="5 0 5 2" Width="100"
materialDesign:HintAssist.Hint="Time code"
ToolTip="Input a time code here. Example: 01:23:456 (1,2) " />
</Grid>
<TextBlock Text="Copies" FontWeight="Bold" Margin="0,20,0,0"/>
<Slider Value="{Binding Copies, Mode=TwoWay}"
Minimum="1" Maximum="20"
TickFrequency="1"
IsSnapToTickEnabled="True"
Style="{StaticResource MaterialDesignDiscreteSlider}"
ToolTip="Number of copies to generate."
/>

<TextBlock Text="Distance" FontWeight="Bold" Margin="0,10,0,0"/>
<Slider Value="{Binding Distance, Mode=TwoWay}"
Minimum="0" Maximum="500"
Style="{StaticResource MaterialDesignDiscreteSlider}"
ToolTip="The distance between each copy."
/>

<TextBlock Text="Local Rotation" FontWeight="Bold" Margin="0,10,0,0"/>
<Slider Value="{Binding LocalRotation, Mode=TwoWay}"
Minimum="0" Maximum="360"
Style="{StaticResource MaterialDesignDiscreteSlider}"
ToolTip="Rotation applied locally to each copy."
/>

<TextBlock Text="Global Rotation" FontWeight="Bold" Margin="0,10,0,0"/>
<Slider Value="{Binding GlobalRotation, Mode=TwoWay}"
Minimum="0" Maximum="360"
Style="{StaticResource MaterialDesignDiscreteSlider}"
ToolTip="Overall rotation applied to the radial pattern."
/>
</StackPanel>
</Grid>

<GridSplitter Grid.Column="1" Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Stretch"
Width="5"
Background="{DynamicResource MaterialDesignDivider}"
ShowsPreview="True"/>

<Grid Name="SecondGrid" Grid.Column="2" Grid.Row="0" Margin="10">
<materialDesign:Card Padding="10" ToolTip="Result preview">
<TextBlock Text="Placeholder" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</materialDesign:Card>
</Grid>

<Grid Name="BottomGrid" Grid.Row="1" Grid.ColumnSpan="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<WrapPanel VerticalAlignment="Bottom">
<TextBlock TextWrapping="NoWrap" Text="Made by Ferro" FontWeight="Bold" Opacity="0.58"/>
</WrapPanel>
</Grid>
<Grid Grid.Column="1">
<ProgressBar Value="{Binding ElementName=This, Path=Progress}" Margin="20,0,20,0" Height="20" Background="{x:Null}" BorderBrush="{x:Null}"/>
</Grid>
</Grid>

<Viewbox VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="70" Grid.ColumnSpan="3" Grid.Row="0" Margin="10">
<Button
IsEnabled="{Binding ElementName=This, Path=CanRun}"
Style="{StaticResource MaterialDesignFloatingActionButton}"
Click="Start_Click"
ToolTip="Run this tool.">
<materialDesign:PackIcon
Kind="Play" Height="36" Width="36" />
</Button>
</Viewbox>
</Grid>
</local:SingleRunMappingTool>
Loading