This repository was archived by the owner on Apr 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,10 +37,10 @@
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth1"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth2"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth3"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth4"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth1" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth2" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth3" Width="*"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth4" Width="Auto"/>
</Grid.ColumnDefinitions>
<Button FontSize="20" Grid.Column="0" Visibility="{Binding CanMoveLeft,Converter={StaticResource visibilityHiddenConverter}}" CommandParameter="{Binding ColumnOrder}" Command="{Binding MoveLeft}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<media:Arrow_In_circle>
Expand All@@ -53,8 +53,9 @@
<media:Arrow_In_circle>
</media:Arrow_In_circle>
</Button>
<ContentPresenter Grid.Column="2" Content="{Binding .}" Margin="3" />
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<ContentPresenter Content="{Binding .}" Margin="3" Grid.Column="2"/>
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}"
Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center" HorizontalAlignment="Right">
<media:CrossIcon/>
</Button>
</Grid>
Expand Down
46 changes: 27 additions & 19 deletions Application/AnnotationPlane/ColumnSettings/ColumnSettingsView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,17 +12,32 @@
<local:ColumnDefinitionView HorizontalAlignment="Center" />
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,30,0,30">
<TextBlock VerticalAlignment="Center" FontSize="20">Добавить колонку:</TextBlock>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft" HorizontalAlignment="Stretch" PanningMode="Both">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>

<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>

<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Center" Margin="5,10,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="17">Добавить колонку:</TextBlock>
<WrapPanel>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddDepthCommand}">Шкала глубин</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddPhotoCommand}">Фото</Button>
Expand All@@ -34,14 +49,7 @@
<Button Style="{StaticResource MetroButton}" Command="{Binding AddIconsCommand}">Значки</Button>
</WrapPanel>
</StackPanel>
</Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>
</ScrollViewer>

</Grid>
</UserControl>
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,40 +4,43 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CoreSampleAnnotation.AnnotationPlane.ColumnSettings"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
mc:Ignorable="d">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,15,0,15">
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
</UserControl>
37 changes: 31 additions & 6 deletions Application/AnnotationPlane/Columns/Drawing.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,12 +20,12 @@ public static IEnumerable<Point> GetRightPolyline(double width, double height, I
return result;
}

public static IEnumerable<Point> GetBottomPolyline(double width, double height, ISideCurveGenerator bottomSideCurve)
public static IEnumerable<Point> GetBottomPolyline(double xOffset, double width, double height, ISideCurveGenerator bottomSideCurve)
{
List<Point> result = new List<Point>();

IEnumerable<Point> bottomSidePoints = bottomSideCurve.GenerateSide(width).
Select(p => new Point(p.X, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)
Select(p => new Point(p.X + xOffset, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)

result.AddRange(bottomSidePoints);

Expand DownExpand Up@@ -78,24 +78,29 @@ public interface IOscillationGenerator
IEnumerable<Point> GeneratePeriod(double xPeriod, double signalMaxY);
}

public enum OscillationAlignment { Left, Center, Right }

/// <summary>
/// Generates a side curve by repeating integer repeating periods provided by oscillationGenerator
/// </summary>
public class OscillatingSignalCurveGenerator : ISideCurveGenerator
{
private double xPeriod, signalMaxY;
private OscillationAlignment alignment;
IOscillationGenerator generator;

/// <param name="xPeriod">The period of the pattern allong X axis</param>
/// <param name="signalMaxY">the avsolute hight of the pattern along Y axis</param>
/// <param name="signalMaxY">the absolute hight of the pattern along Y axis</param>
/// <param name="generator">Which signal to generate</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator)
/// <param name="alignment">Where the straight part will be / where to stick the signal curve</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator, OscillationAlignment alignment)
{
if (signalMaxY < 0)
throw new ArgumentException("signalMaxY must be non-negative");
this.xPeriod = xPeriod;
this.signalMaxY = signalMaxY;
this.generator = generator;
this.alignment = alignment;
}

public IEnumerable<Point> GenerateSide(double length)
Expand All@@ -104,15 +109,35 @@ public IEnumerable<Point> GenerateSide(double length)
double straitEndsLength = length - periods * xPeriod;

List<Point> result = new List<Point>();

double leftOffset = 0.0;
double rightOffset = 0.0;
switch (alignment)
{
case OscillationAlignment.Center:
leftOffset = straitEndsLength / 2;
rightOffset = straitEndsLength / 2;
break;
case OscillationAlignment.Left:
leftOffset = 0.0;
rightOffset = straitEndsLength;
break;
case OscillationAlignment.Right:
leftOffset = straitEndsLength;
rightOffset = 0.0;
break;
}


//starting straight line
result.Add(new Point(0.0, 0.0));
result.Add(new Point(straitEndsLength * 0.5, 0.0));
result.Add(new Point(leftOffset, 0.0));

//drawing curves
double miniStep = xPeriod * 0.5;
for (int i = 0; i < periods; i++)
{
double xOffset = straitEndsLength * 0.5 + i * xPeriod;
double xOffset = leftOffset + i * xPeriod;
IEnumerable<Point> periodPoints = generator.GeneratePeriod(xPeriod, signalMaxY).Select(p => new Point(p.X + xOffset, p.Y));

result.AddRange(periodPoints);
Expand Down
6 changes: 3 additions & 3 deletions Application/AnnotationPlane/Columns/VisualColumnView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,13 +43,13 @@
<Polyline Stroke="Black" StrokeThickness="1" StrokeDashCap="Round">
<Polyline.Points>
<MultiBinding Converter="{StaticResource bottomSidePointsConverter}">
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="BottomSideForm"></Binding>
<Binding Path="Width"></Binding>
<Binding Path="Height"></Binding>
<Binding Path="BottomSideForm"></Binding>
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="Width"></Binding>
</MultiBinding>
</Polyline.Points>
<Polyline.StrokeDashArray>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm"/>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm" RelativeSource="{RelativeSource Mode=PreviousData}"/>
</Polyline.StrokeDashArray>
</Polyline>
<Polygon Fill="{Binding BackgroundBrush}" Stroke="Transparent">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Apr 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,10 +37,10 @@
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth1"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth2"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth3"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth4"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth1" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth2" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth3" Width="*"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth4" Width="Auto"/>
</Grid.ColumnDefinitions>
<Button FontSize="20" Grid.Column="0" Visibility="{Binding CanMoveLeft,Converter={StaticResource visibilityHiddenConverter}}" CommandParameter="{Binding ColumnOrder}" Command="{Binding MoveLeft}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<media:Arrow_In_circle>
Expand All@@ -53,8 +53,9 @@
<media:Arrow_In_circle>
</media:Arrow_In_circle>
</Button>
<ContentPresenter Grid.Column="2" Content="{Binding .}" Margin="3" />
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<ContentPresenter Content="{Binding .}" Margin="3" Grid.Column="2"/>
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}"
Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center" HorizontalAlignment="Right">
<media:CrossIcon/>
</Button>
</Grid>
Expand Down
46 changes: 27 additions & 19 deletions Application/AnnotationPlane/ColumnSettings/ColumnSettingsView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,17 +12,32 @@
<local:ColumnDefinitionView HorizontalAlignment="Center" />
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,30,0,30">
<TextBlock VerticalAlignment="Center" FontSize="20">Добавить колонку:</TextBlock>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft" HorizontalAlignment="Stretch" PanningMode="Both">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>

<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>

<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Center" Margin="5,10,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="17">Добавить колонку:</TextBlock>
<WrapPanel>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddDepthCommand}">Шкала глубин</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddPhotoCommand}">Фото</Button>
Expand All@@ -34,14 +49,7 @@
<Button Style="{StaticResource MetroButton}" Command="{Binding AddIconsCommand}">Значки</Button>
</WrapPanel>
</StackPanel>
</Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>
</ScrollViewer>

</Grid>
</UserControl>
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,40 +4,43 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CoreSampleAnnotation.AnnotationPlane.ColumnSettings"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
mc:Ignorable="d">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,15,0,15">
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
</UserControl>
37 changes: 31 additions & 6 deletions Application/AnnotationPlane/Columns/Drawing.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,12 +20,12 @@ public static IEnumerable<Point> GetRightPolyline(double width, double height, I
return result;
}

public static IEnumerable<Point> GetBottomPolyline(double width, double height, ISideCurveGenerator bottomSideCurve)
public static IEnumerable<Point> GetBottomPolyline(double xOffset, double width, double height, ISideCurveGenerator bottomSideCurve)
{
List<Point> result = new List<Point>();

IEnumerable<Point> bottomSidePoints = bottomSideCurve.GenerateSide(width).
Select(p => new Point(p.X, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)
Select(p => new Point(p.X + xOffset, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)

result.AddRange(bottomSidePoints);

Expand DownExpand Up@@ -78,24 +78,29 @@ public interface IOscillationGenerator
IEnumerable<Point> GeneratePeriod(double xPeriod, double signalMaxY);
}

public enum OscillationAlignment { Left, Center, Right }

/// <summary>
/// Generates a side curve by repeating integer repeating periods provided by oscillationGenerator
/// </summary>
public class OscillatingSignalCurveGenerator : ISideCurveGenerator
{
private double xPeriod, signalMaxY;
private OscillationAlignment alignment;
IOscillationGenerator generator;

/// <param name="xPeriod">The period of the pattern allong X axis</param>
/// <param name="signalMaxY">the avsolute hight of the pattern along Y axis</param>
/// <param name="signalMaxY">the absolute hight of the pattern along Y axis</param>
/// <param name="generator">Which signal to generate</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator)
/// <param name="alignment">Where the straight part will be / where to stick the signal curve</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator, OscillationAlignment alignment)
{
if (signalMaxY < 0)
throw new ArgumentException("signalMaxY must be non-negative");
this.xPeriod = xPeriod;
this.signalMaxY = signalMaxY;
this.generator = generator;
this.alignment = alignment;
}

public IEnumerable<Point> GenerateSide(double length)
Expand All@@ -104,15 +109,35 @@ public IEnumerable<Point> GenerateSide(double length)
double straitEndsLength = length - periods * xPeriod;

List<Point> result = new List<Point>();

double leftOffset = 0.0;
double rightOffset = 0.0;
switch (alignment)
{
case OscillationAlignment.Center:
leftOffset = straitEndsLength / 2;
rightOffset = straitEndsLength / 2;
break;
case OscillationAlignment.Left:
leftOffset = 0.0;
rightOffset = straitEndsLength;
break;
case OscillationAlignment.Right:
leftOffset = straitEndsLength;
rightOffset = 0.0;
break;
}


//starting straight line
result.Add(new Point(0.0, 0.0));
result.Add(new Point(straitEndsLength * 0.5, 0.0));
result.Add(new Point(leftOffset, 0.0));

//drawing curves
double miniStep = xPeriod * 0.5;
for (int i = 0; i < periods; i++)
{
double xOffset = straitEndsLength * 0.5 + i * xPeriod;
double xOffset = leftOffset + i * xPeriod;
IEnumerable<Point> periodPoints = generator.GeneratePeriod(xPeriod, signalMaxY).Select(p => new Point(p.X + xOffset, p.Y));

result.AddRange(periodPoints);
Expand Down
6 changes: 3 additions & 3 deletions Application/AnnotationPlane/Columns/VisualColumnView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,13 +43,13 @@
<Polyline Stroke="Black" StrokeThickness="1" StrokeDashCap="Round">
<Polyline.Points>
<MultiBinding Converter="{StaticResource bottomSidePointsConverter}">
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="BottomSideForm"></Binding>
<Binding Path="Width"></Binding>
<Binding Path="Height"></Binding>
<Binding Path="BottomSideForm"></Binding>
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="Width"></Binding>
</MultiBinding>
</Polyline.Points>
<Polyline.StrokeDashArray>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm"/>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm" RelativeSource="{RelativeSource Mode=PreviousData}"/>
</Polyline.StrokeDashArray>
</Polyline>
<Polygon Fill="{Binding BackgroundBrush}" Stroke="Transparent">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Apr 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,10 +37,10 @@
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth1"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth2"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth3"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth4"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth1" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth2" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth3" Width="*"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth4" Width="Auto"/>
</Grid.ColumnDefinitions>
<Button FontSize="20" Grid.Column="0" Visibility="{Binding CanMoveLeft,Converter={StaticResource visibilityHiddenConverter}}" CommandParameter="{Binding ColumnOrder}" Command="{Binding MoveLeft}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<media:Arrow_In_circle>
Expand All@@ -53,8 +53,9 @@
<media:Arrow_In_circle>
</media:Arrow_In_circle>
</Button>
<ContentPresenter Grid.Column="2" Content="{Binding .}" Margin="3" />
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<ContentPresenter Content="{Binding .}" Margin="3" Grid.Column="2"/>
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}"
Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center" HorizontalAlignment="Right">
<media:CrossIcon/>
</Button>
</Grid>
Expand Down
46 changes: 27 additions & 19 deletions Application/AnnotationPlane/ColumnSettings/ColumnSettingsView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,17 +12,32 @@
<local:ColumnDefinitionView HorizontalAlignment="Center" />
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,30,0,30">
<TextBlock VerticalAlignment="Center" FontSize="20">Добавить колонку:</TextBlock>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft" HorizontalAlignment="Stretch" PanningMode="Both">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>

<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>

<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Center" Margin="5,10,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="17">Добавить колонку:</TextBlock>
<WrapPanel>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddDepthCommand}">Шкала глубин</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddPhotoCommand}">Фото</Button>
Expand All@@ -34,14 +49,7 @@
<Button Style="{StaticResource MetroButton}" Command="{Binding AddIconsCommand}">Значки</Button>
</WrapPanel>
</StackPanel>
</Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>
</ScrollViewer>

</Grid>
</UserControl>
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,40 +4,43 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CoreSampleAnnotation.AnnotationPlane.ColumnSettings"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
mc:Ignorable="d">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,15,0,15">
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
</UserControl>
37 changes: 31 additions & 6 deletions Application/AnnotationPlane/Columns/Drawing.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,12 +20,12 @@ public static IEnumerable<Point> GetRightPolyline(double width, double height, I
return result;
}

public static IEnumerable<Point> GetBottomPolyline(double width, double height, ISideCurveGenerator bottomSideCurve)
public static IEnumerable<Point> GetBottomPolyline(double xOffset, double width, double height, ISideCurveGenerator bottomSideCurve)
{
List<Point> result = new List<Point>();

IEnumerable<Point> bottomSidePoints = bottomSideCurve.GenerateSide(width).
Select(p => new Point(p.X, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)
Select(p => new Point(p.X + xOffset, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)

result.AddRange(bottomSidePoints);

Expand DownExpand Up@@ -78,24 +78,29 @@ public interface IOscillationGenerator
IEnumerable<Point> GeneratePeriod(double xPeriod, double signalMaxY);
}

public enum OscillationAlignment { Left, Center, Right }

/// <summary>
/// Generates a side curve by repeating integer repeating periods provided by oscillationGenerator
/// </summary>
public class OscillatingSignalCurveGenerator : ISideCurveGenerator
{
private double xPeriod, signalMaxY;
private OscillationAlignment alignment;
IOscillationGenerator generator;

/// <param name="xPeriod">The period of the pattern allong X axis</param>
/// <param name="signalMaxY">the avsolute hight of the pattern along Y axis</param>
/// <param name="signalMaxY">the absolute hight of the pattern along Y axis</param>
/// <param name="generator">Which signal to generate</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator)
/// <param name="alignment">Where the straight part will be / where to stick the signal curve</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator, OscillationAlignment alignment)
{
if (signalMaxY < 0)
throw new ArgumentException("signalMaxY must be non-negative");
this.xPeriod = xPeriod;
this.signalMaxY = signalMaxY;
this.generator = generator;
this.alignment = alignment;
}

public IEnumerable<Point> GenerateSide(double length)
Expand All@@ -104,15 +109,35 @@ public IEnumerable<Point> GenerateSide(double length)
double straitEndsLength = length - periods * xPeriod;

List<Point> result = new List<Point>();

double leftOffset = 0.0;
double rightOffset = 0.0;
switch (alignment)
{
case OscillationAlignment.Center:
leftOffset = straitEndsLength / 2;
rightOffset = straitEndsLength / 2;
break;
case OscillationAlignment.Left:
leftOffset = 0.0;
rightOffset = straitEndsLength;
break;
case OscillationAlignment.Right:
leftOffset = straitEndsLength;
rightOffset = 0.0;
break;
}


//starting straight line
result.Add(new Point(0.0, 0.0));
result.Add(new Point(straitEndsLength * 0.5, 0.0));
result.Add(new Point(leftOffset, 0.0));

//drawing curves
double miniStep = xPeriod * 0.5;
for (int i = 0; i < periods; i++)
{
double xOffset = straitEndsLength * 0.5 + i * xPeriod;
double xOffset = leftOffset + i * xPeriod;
IEnumerable<Point> periodPoints = generator.GeneratePeriod(xPeriod, signalMaxY).Select(p => new Point(p.X + xOffset, p.Y));

result.AddRange(periodPoints);
Expand Down
6 changes: 3 additions & 3 deletions Application/AnnotationPlane/Columns/VisualColumnView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,13 +43,13 @@
<Polyline Stroke="Black" StrokeThickness="1" StrokeDashCap="Round">
<Polyline.Points>
<MultiBinding Converter="{StaticResource bottomSidePointsConverter}">
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="BottomSideForm"></Binding>
<Binding Path="Width"></Binding>
<Binding Path="Height"></Binding>
<Binding Path="BottomSideForm"></Binding>
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="Width"></Binding>
</MultiBinding>
</Polyline.Points>
<Polyline.StrokeDashArray>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm"/>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm" RelativeSource="{RelativeSource Mode=PreviousData}"/>
</Polyline.StrokeDashArray>
</Polyline>
<Polygon Fill="{Binding BackgroundBrush}" Stroke="Transparent">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Apr 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,10 +37,10 @@
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth1"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth2"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth3"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth4"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth1" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth2" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth3" Width="*"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth4" Width="Auto"/>
</Grid.ColumnDefinitions>
<Button FontSize="20" Grid.Column="0" Visibility="{Binding CanMoveLeft,Converter={StaticResource visibilityHiddenConverter}}" CommandParameter="{Binding ColumnOrder}" Command="{Binding MoveLeft}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<media:Arrow_In_circle>
Expand All@@ -53,8 +53,9 @@
<media:Arrow_In_circle>
</media:Arrow_In_circle>
</Button>
<ContentPresenter Grid.Column="2" Content="{Binding .}" Margin="3" />
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<ContentPresenter Content="{Binding .}" Margin="3" Grid.Column="2"/>
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}"
Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center" HorizontalAlignment="Right">
<media:CrossIcon/>
</Button>
</Grid>
Expand Down
46 changes: 27 additions & 19 deletions Application/AnnotationPlane/ColumnSettings/ColumnSettingsView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,17 +12,32 @@
<local:ColumnDefinitionView HorizontalAlignment="Center" />
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,30,0,30">
<TextBlock VerticalAlignment="Center" FontSize="20">Добавить колонку:</TextBlock>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft" HorizontalAlignment="Stretch" PanningMode="Both">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>

<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>

<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Center" Margin="5,10,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="17">Добавить колонку:</TextBlock>
<WrapPanel>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddDepthCommand}">Шкала глубин</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddPhotoCommand}">Фото</Button>
Expand All@@ -34,14 +49,7 @@
<Button Style="{StaticResource MetroButton}" Command="{Binding AddIconsCommand}">Значки</Button>
</WrapPanel>
</StackPanel>
</Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>
</ScrollViewer>

</Grid>
</UserControl>
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,40 +4,43 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CoreSampleAnnotation.AnnotationPlane.ColumnSettings"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
mc:Ignorable="d">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,15,0,15">
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
</UserControl>
37 changes: 31 additions & 6 deletions Application/AnnotationPlane/Columns/Drawing.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,12 +20,12 @@ public static IEnumerable<Point> GetRightPolyline(double width, double height, I
return result;
}

public static IEnumerable<Point> GetBottomPolyline(double width, double height, ISideCurveGenerator bottomSideCurve)
public static IEnumerable<Point> GetBottomPolyline(double xOffset, double width, double height, ISideCurveGenerator bottomSideCurve)
{
List<Point> result = new List<Point>();

IEnumerable<Point> bottomSidePoints = bottomSideCurve.GenerateSide(width).
Select(p => new Point(p.X, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)
Select(p => new Point(p.X + xOffset, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)

result.AddRange(bottomSidePoints);

Expand DownExpand Up@@ -78,24 +78,29 @@ public interface IOscillationGenerator
IEnumerable<Point> GeneratePeriod(double xPeriod, double signalMaxY);
}

public enum OscillationAlignment { Left, Center, Right }

/// <summary>
/// Generates a side curve by repeating integer repeating periods provided by oscillationGenerator
/// </summary>
public class OscillatingSignalCurveGenerator : ISideCurveGenerator
{
private double xPeriod, signalMaxY;
private OscillationAlignment alignment;
IOscillationGenerator generator;

/// <param name="xPeriod">The period of the pattern allong X axis</param>
/// <param name="signalMaxY">the avsolute hight of the pattern along Y axis</param>
/// <param name="signalMaxY">the absolute hight of the pattern along Y axis</param>
/// <param name="generator">Which signal to generate</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator)
/// <param name="alignment">Where the straight part will be / where to stick the signal curve</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator, OscillationAlignment alignment)
{
if (signalMaxY < 0)
throw new ArgumentException("signalMaxY must be non-negative");
this.xPeriod = xPeriod;
this.signalMaxY = signalMaxY;
this.generator = generator;
this.alignment = alignment;
}

public IEnumerable<Point> GenerateSide(double length)
Expand All@@ -104,15 +109,35 @@ public IEnumerable<Point> GenerateSide(double length)
double straitEndsLength = length - periods * xPeriod;

List<Point> result = new List<Point>();

double leftOffset = 0.0;
double rightOffset = 0.0;
switch (alignment)
{
case OscillationAlignment.Center:
leftOffset = straitEndsLength / 2;
rightOffset = straitEndsLength / 2;
break;
case OscillationAlignment.Left:
leftOffset = 0.0;
rightOffset = straitEndsLength;
break;
case OscillationAlignment.Right:
leftOffset = straitEndsLength;
rightOffset = 0.0;
break;
}


//starting straight line
result.Add(new Point(0.0, 0.0));
result.Add(new Point(straitEndsLength * 0.5, 0.0));
result.Add(new Point(leftOffset, 0.0));

//drawing curves
double miniStep = xPeriod * 0.5;
for (int i = 0; i < periods; i++)
{
double xOffset = straitEndsLength * 0.5 + i * xPeriod;
double xOffset = leftOffset + i * xPeriod;
IEnumerable<Point> periodPoints = generator.GeneratePeriod(xPeriod, signalMaxY).Select(p => new Point(p.X + xOffset, p.Y));

result.AddRange(periodPoints);
Expand Down
6 changes: 3 additions & 3 deletions Application/AnnotationPlane/Columns/VisualColumnView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,13 +43,13 @@
<Polyline Stroke="Black" StrokeThickness="1" StrokeDashCap="Round">
<Polyline.Points>
<MultiBinding Converter="{StaticResource bottomSidePointsConverter}">
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="BottomSideForm"></Binding>
<Binding Path="Width"></Binding>
<Binding Path="Height"></Binding>
<Binding Path="BottomSideForm"></Binding>
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="Width"></Binding>
</MultiBinding>
</Polyline.Points>
<Polyline.StrokeDashArray>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm"/>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm" RelativeSource="{RelativeSource Mode=PreviousData}"/>
</Polyline.StrokeDashArray>
</Polyline>
<Polygon Fill="{Binding BackgroundBrush}" Stroke="Transparent">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Apr 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,10 +37,10 @@
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth1"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth2"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth3"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth4"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth1" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth2" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth3" Width="*"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth4" Width="Auto"/>
</Grid.ColumnDefinitions>
<Button FontSize="20" Grid.Column="0" Visibility="{Binding CanMoveLeft,Converter={StaticResource visibilityHiddenConverter}}" CommandParameter="{Binding ColumnOrder}" Command="{Binding MoveLeft}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<media:Arrow_In_circle>
Expand All@@ -53,8 +53,9 @@
<media:Arrow_In_circle>
</media:Arrow_In_circle>
</Button>
<ContentPresenter Grid.Column="2" Content="{Binding .}" Margin="3" />
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<ContentPresenter Content="{Binding .}" Margin="3" Grid.Column="2"/>
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}"
Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center" HorizontalAlignment="Right">
<media:CrossIcon/>
</Button>
</Grid>
Expand Down
46 changes: 27 additions & 19 deletions Application/AnnotationPlane/ColumnSettings/ColumnSettingsView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,17 +12,32 @@
<local:ColumnDefinitionView HorizontalAlignment="Center" />
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,30,0,30">
<TextBlock VerticalAlignment="Center" FontSize="20">Добавить колонку:</TextBlock>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft" HorizontalAlignment="Stretch" PanningMode="Both">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>

<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>

<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Center" Margin="5,10,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="17">Добавить колонку:</TextBlock>
<WrapPanel>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddDepthCommand}">Шкала глубин</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddPhotoCommand}">Фото</Button>
Expand All@@ -34,14 +49,7 @@
<Button Style="{StaticResource MetroButton}" Command="{Binding AddIconsCommand}">Значки</Button>
</WrapPanel>
</StackPanel>
</Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>
</ScrollViewer>

</Grid>
</UserControl>
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,40 +4,43 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CoreSampleAnnotation.AnnotationPlane.ColumnSettings"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
mc:Ignorable="d">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,15,0,15">
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
</UserControl>
37 changes: 31 additions & 6 deletions Application/AnnotationPlane/Columns/Drawing.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,12 +20,12 @@ public static IEnumerable<Point> GetRightPolyline(double width, double height, I
return result;
}

public static IEnumerable<Point> GetBottomPolyline(double width, double height, ISideCurveGenerator bottomSideCurve)
public static IEnumerable<Point> GetBottomPolyline(double xOffset, double width, double height, ISideCurveGenerator bottomSideCurve)
{
List<Point> result = new List<Point>();

IEnumerable<Point> bottomSidePoints = bottomSideCurve.GenerateSide(width).
Select(p => new Point(p.X, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)
Select(p => new Point(p.X + xOffset, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)

result.AddRange(bottomSidePoints);

Expand DownExpand Up@@ -78,24 +78,29 @@ public interface IOscillationGenerator
IEnumerable<Point> GeneratePeriod(double xPeriod, double signalMaxY);
}

public enum OscillationAlignment { Left, Center, Right }

/// <summary>
/// Generates a side curve by repeating integer repeating periods provided by oscillationGenerator
/// </summary>
public class OscillatingSignalCurveGenerator : ISideCurveGenerator
{
private double xPeriod, signalMaxY;
private OscillationAlignment alignment;
IOscillationGenerator generator;

/// <param name="xPeriod">The period of the pattern allong X axis</param>
/// <param name="signalMaxY">the avsolute hight of the pattern along Y axis</param>
/// <param name="signalMaxY">the absolute hight of the pattern along Y axis</param>
/// <param name="generator">Which signal to generate</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator)
/// <param name="alignment">Where the straight part will be / where to stick the signal curve</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator, OscillationAlignment alignment)
{
if (signalMaxY < 0)
throw new ArgumentException("signalMaxY must be non-negative");
this.xPeriod = xPeriod;
this.signalMaxY = signalMaxY;
this.generator = generator;
this.alignment = alignment;
}

public IEnumerable<Point> GenerateSide(double length)
Expand All@@ -104,15 +109,35 @@ public IEnumerable<Point> GenerateSide(double length)
double straitEndsLength = length - periods * xPeriod;

List<Point> result = new List<Point>();

double leftOffset = 0.0;
double rightOffset = 0.0;
switch (alignment)
{
case OscillationAlignment.Center:
leftOffset = straitEndsLength / 2;
rightOffset = straitEndsLength / 2;
break;
case OscillationAlignment.Left:
leftOffset = 0.0;
rightOffset = straitEndsLength;
break;
case OscillationAlignment.Right:
leftOffset = straitEndsLength;
rightOffset = 0.0;
break;
}


//starting straight line
result.Add(new Point(0.0, 0.0));
result.Add(new Point(straitEndsLength * 0.5, 0.0));
result.Add(new Point(leftOffset, 0.0));

//drawing curves
double miniStep = xPeriod * 0.5;
for (int i = 0; i < periods; i++)
{
double xOffset = straitEndsLength * 0.5 + i * xPeriod;
double xOffset = leftOffset + i * xPeriod;
IEnumerable<Point> periodPoints = generator.GeneratePeriod(xPeriod, signalMaxY).Select(p => new Point(p.X + xOffset, p.Y));

result.AddRange(periodPoints);
Expand Down
6 changes: 3 additions & 3 deletions Application/AnnotationPlane/Columns/VisualColumnView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,13 +43,13 @@
<Polyline Stroke="Black" StrokeThickness="1" StrokeDashCap="Round">
<Polyline.Points>
<MultiBinding Converter="{StaticResource bottomSidePointsConverter}">
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="BottomSideForm"></Binding>
<Binding Path="Width"></Binding>
<Binding Path="Height"></Binding>
<Binding Path="BottomSideForm"></Binding>
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="Width"></Binding>
</MultiBinding>
</Polyline.Points>
<Polyline.StrokeDashArray>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm"/>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm" RelativeSource="{RelativeSource Mode=PreviousData}"/>
</Polyline.StrokeDashArray>
</Polyline>
<Polygon Fill="{Binding BackgroundBrush}" Stroke="Transparent">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Apr 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,10 +37,10 @@
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth1"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth2"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth3"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth4"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth1" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth2" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth3" Width="*"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth4" Width="Auto"/>
</Grid.ColumnDefinitions>
<Button FontSize="20" Grid.Column="0" Visibility="{Binding CanMoveLeft,Converter={StaticResource visibilityHiddenConverter}}" CommandParameter="{Binding ColumnOrder}" Command="{Binding MoveLeft}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<media:Arrow_In_circle>
Expand All@@ -53,8 +53,9 @@
<media:Arrow_In_circle>
</media:Arrow_In_circle>
</Button>
<ContentPresenter Grid.Column="2" Content="{Binding .}" Margin="3" />
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<ContentPresenter Content="{Binding .}" Margin="3" Grid.Column="2"/>
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}"
Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center" HorizontalAlignment="Right">
<media:CrossIcon/>
</Button>
</Grid>
Expand Down
46 changes: 27 additions & 19 deletions Application/AnnotationPlane/ColumnSettings/ColumnSettingsView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,17 +12,32 @@
<local:ColumnDefinitionView HorizontalAlignment="Center" />
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,30,0,30">
<TextBlock VerticalAlignment="Center" FontSize="20">Добавить колонку:</TextBlock>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft" HorizontalAlignment="Stretch" PanningMode="Both">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>

<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>

<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Center" Margin="5,10,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="17">Добавить колонку:</TextBlock>
<WrapPanel>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddDepthCommand}">Шкала глубин</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddPhotoCommand}">Фото</Button>
Expand All@@ -34,14 +49,7 @@
<Button Style="{StaticResource MetroButton}" Command="{Binding AddIconsCommand}">Значки</Button>
</WrapPanel>
</StackPanel>
</Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>
</ScrollViewer>

</Grid>
</UserControl>
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,40 +4,43 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CoreSampleAnnotation.AnnotationPlane.ColumnSettings"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
mc:Ignorable="d">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,15,0,15">
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
</UserControl>
37 changes: 31 additions & 6 deletions Application/AnnotationPlane/Columns/Drawing.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,12 +20,12 @@ public static IEnumerable<Point> GetRightPolyline(double width, double height, I
return result;
}

public static IEnumerable<Point> GetBottomPolyline(double width, double height, ISideCurveGenerator bottomSideCurve)
public static IEnumerable<Point> GetBottomPolyline(double xOffset, double width, double height, ISideCurveGenerator bottomSideCurve)
{
List<Point> result = new List<Point>();

IEnumerable<Point> bottomSidePoints = bottomSideCurve.GenerateSide(width).
Select(p => new Point(p.X, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)
Select(p => new Point(p.X + xOffset, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)

result.AddRange(bottomSidePoints);

Expand DownExpand Up@@ -78,24 +78,29 @@ public interface IOscillationGenerator
IEnumerable<Point> GeneratePeriod(double xPeriod, double signalMaxY);
}

public enum OscillationAlignment { Left, Center, Right }

/// <summary>
/// Generates a side curve by repeating integer repeating periods provided by oscillationGenerator
/// </summary>
public class OscillatingSignalCurveGenerator : ISideCurveGenerator
{
private double xPeriod, signalMaxY;
private OscillationAlignment alignment;
IOscillationGenerator generator;

/// <param name="xPeriod">The period of the pattern allong X axis</param>
/// <param name="signalMaxY">the avsolute hight of the pattern along Y axis</param>
/// <param name="signalMaxY">the absolute hight of the pattern along Y axis</param>
/// <param name="generator">Which signal to generate</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator)
/// <param name="alignment">Where the straight part will be / where to stick the signal curve</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator, OscillationAlignment alignment)
{
if (signalMaxY < 0)
throw new ArgumentException("signalMaxY must be non-negative");
this.xPeriod = xPeriod;
this.signalMaxY = signalMaxY;
this.generator = generator;
this.alignment = alignment;
}

public IEnumerable<Point> GenerateSide(double length)
Expand All@@ -104,15 +109,35 @@ public IEnumerable<Point> GenerateSide(double length)
double straitEndsLength = length - periods * xPeriod;

List<Point> result = new List<Point>();

double leftOffset = 0.0;
double rightOffset = 0.0;
switch (alignment)
{
case OscillationAlignment.Center:
leftOffset = straitEndsLength / 2;
rightOffset = straitEndsLength / 2;
break;
case OscillationAlignment.Left:
leftOffset = 0.0;
rightOffset = straitEndsLength;
break;
case OscillationAlignment.Right:
leftOffset = straitEndsLength;
rightOffset = 0.0;
break;
}


//starting straight line
result.Add(new Point(0.0, 0.0));
result.Add(new Point(straitEndsLength * 0.5, 0.0));
result.Add(new Point(leftOffset, 0.0));

//drawing curves
double miniStep = xPeriod * 0.5;
for (int i = 0; i < periods; i++)
{
double xOffset = straitEndsLength * 0.5 + i * xPeriod;
double xOffset = leftOffset + i * xPeriod;
IEnumerable<Point> periodPoints = generator.GeneratePeriod(xPeriod, signalMaxY).Select(p => new Point(p.X + xOffset, p.Y));

result.AddRange(periodPoints);
Expand Down
6 changes: 3 additions & 3 deletions Application/AnnotationPlane/Columns/VisualColumnView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,13 +43,13 @@
<Polyline Stroke="Black" StrokeThickness="1" StrokeDashCap="Round">
<Polyline.Points>
<MultiBinding Converter="{StaticResource bottomSidePointsConverter}">
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="BottomSideForm"></Binding>
<Binding Path="Width"></Binding>
<Binding Path="Height"></Binding>
<Binding Path="BottomSideForm"></Binding>
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="Width"></Binding>
</MultiBinding>
</Polyline.Points>
<Polyline.StrokeDashArray>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm"/>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm" RelativeSource="{RelativeSource Mode=PreviousData}"/>
</Polyline.StrokeDashArray>
</Polyline>
<Polygon Fill="{Binding BackgroundBrush}" Stroke="Transparent">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Apr 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,10 +37,10 @@
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth1"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth2"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth3"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth4"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth1" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth2" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth3" Width="*"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth4" Width="Auto"/>
</Grid.ColumnDefinitions>
<Button FontSize="20" Grid.Column="0" Visibility="{Binding CanMoveLeft,Converter={StaticResource visibilityHiddenConverter}}" CommandParameter="{Binding ColumnOrder}" Command="{Binding MoveLeft}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<media:Arrow_In_circle>
Expand All@@ -53,8 +53,9 @@
<media:Arrow_In_circle>
</media:Arrow_In_circle>
</Button>
<ContentPresenter Grid.Column="2" Content="{Binding .}" Margin="3" />
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<ContentPresenter Content="{Binding .}" Margin="3" Grid.Column="2"/>
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}"
Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center" HorizontalAlignment="Right">
<media:CrossIcon/>
</Button>
</Grid>
Expand Down
46 changes: 27 additions & 19 deletions Application/AnnotationPlane/ColumnSettings/ColumnSettingsView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,17 +12,32 @@
<local:ColumnDefinitionView HorizontalAlignment="Center" />
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,30,0,30">
<TextBlock VerticalAlignment="Center" FontSize="20">Добавить колонку:</TextBlock>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft" HorizontalAlignment="Stretch" PanningMode="Both">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>

<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>

<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Center" Margin="5,10,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="17">Добавить колонку:</TextBlock>
<WrapPanel>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddDepthCommand}">Шкала глубин</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddPhotoCommand}">Фото</Button>
Expand All@@ -34,14 +49,7 @@
<Button Style="{StaticResource MetroButton}" Command="{Binding AddIconsCommand}">Значки</Button>
</WrapPanel>
</StackPanel>
</Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>
</ScrollViewer>

</Grid>
</UserControl>
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,40 +4,43 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CoreSampleAnnotation.AnnotationPlane.ColumnSettings"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
mc:Ignorable="d">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,15,0,15">
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
</UserControl>
37 changes: 31 additions & 6 deletions Application/AnnotationPlane/Columns/Drawing.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,12 +20,12 @@ public static IEnumerable<Point> GetRightPolyline(double width, double height, I
return result;
}

public static IEnumerable<Point> GetBottomPolyline(double width, double height, ISideCurveGenerator bottomSideCurve)
public static IEnumerable<Point> GetBottomPolyline(double xOffset, double width, double height, ISideCurveGenerator bottomSideCurve)
{
List<Point> result = new List<Point>();

IEnumerable<Point> bottomSidePoints = bottomSideCurve.GenerateSide(width).
Select(p => new Point(p.X, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)
Select(p => new Point(p.X + xOffset, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)

result.AddRange(bottomSidePoints);

Expand DownExpand Up@@ -78,24 +78,29 @@ public interface IOscillationGenerator
IEnumerable<Point> GeneratePeriod(double xPeriod, double signalMaxY);
}

public enum OscillationAlignment { Left, Center, Right }

/// <summary>
/// Generates a side curve by repeating integer repeating periods provided by oscillationGenerator
/// </summary>
public class OscillatingSignalCurveGenerator : ISideCurveGenerator
{
private double xPeriod, signalMaxY;
private OscillationAlignment alignment;
IOscillationGenerator generator;

/// <param name="xPeriod">The period of the pattern allong X axis</param>
/// <param name="signalMaxY">the avsolute hight of the pattern along Y axis</param>
/// <param name="signalMaxY">the absolute hight of the pattern along Y axis</param>
/// <param name="generator">Which signal to generate</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator)
/// <param name="alignment">Where the straight part will be / where to stick the signal curve</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator, OscillationAlignment alignment)
{
if (signalMaxY < 0)
throw new ArgumentException("signalMaxY must be non-negative");
this.xPeriod = xPeriod;
this.signalMaxY = signalMaxY;
this.generator = generator;
this.alignment = alignment;
}

public IEnumerable<Point> GenerateSide(double length)
Expand All@@ -104,15 +109,35 @@ public IEnumerable<Point> GenerateSide(double length)
double straitEndsLength = length - periods * xPeriod;

List<Point> result = new List<Point>();

double leftOffset = 0.0;
double rightOffset = 0.0;
switch (alignment)
{
case OscillationAlignment.Center:
leftOffset = straitEndsLength / 2;
rightOffset = straitEndsLength / 2;
break;
case OscillationAlignment.Left:
leftOffset = 0.0;
rightOffset = straitEndsLength;
break;
case OscillationAlignment.Right:
leftOffset = straitEndsLength;
rightOffset = 0.0;
break;
}


//starting straight line
result.Add(new Point(0.0, 0.0));
result.Add(new Point(straitEndsLength * 0.5, 0.0));
result.Add(new Point(leftOffset, 0.0));

//drawing curves
double miniStep = xPeriod * 0.5;
for (int i = 0; i < periods; i++)
{
double xOffset = straitEndsLength * 0.5 + i * xPeriod;
double xOffset = leftOffset + i * xPeriod;
IEnumerable<Point> periodPoints = generator.GeneratePeriod(xPeriod, signalMaxY).Select(p => new Point(p.X + xOffset, p.Y));

result.AddRange(periodPoints);
Expand Down
6 changes: 3 additions & 3 deletions Application/AnnotationPlane/Columns/VisualColumnView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,13 +43,13 @@
<Polyline Stroke="Black" StrokeThickness="1" StrokeDashCap="Round">
<Polyline.Points>
<MultiBinding Converter="{StaticResource bottomSidePointsConverter}">
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="BottomSideForm"></Binding>
<Binding Path="Width"></Binding>
<Binding Path="Height"></Binding>
<Binding Path="BottomSideForm"></Binding>
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="Width"></Binding>
</MultiBinding>
</Polyline.Points>
<Polyline.StrokeDashArray>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm"/>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm" RelativeSource="{RelativeSource Mode=PreviousData}"/>
</Polyline.StrokeDashArray>
</Polyline>
<Polygon Fill="{Binding BackgroundBrush}" Stroke="Transparent">
Expand Down
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Apr 5, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -37,10 +37,10 @@
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth1"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth2"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth3"/>
<ColumnDefinition Width="auto" SharedSizeGroup="ColumnDefinitionWidth4"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth1" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth2" Width="Auto"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth3" Width="*"/>
<ColumnDefinition SharedSizeGroup="ColumnDefinitionWidth4" Width="Auto"/>
</Grid.ColumnDefinitions>
<Button FontSize="20" Grid.Column="0" Visibility="{Binding CanMoveLeft,Converter={StaticResource visibilityHiddenConverter}}" CommandParameter="{Binding ColumnOrder}" Command="{Binding MoveLeft}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<media:Arrow_In_circle>
Expand All@@ -53,8 +53,9 @@
<media:Arrow_In_circle>
</media:Arrow_In_circle>
</Button>
<ContentPresenter Grid.Column="2" Content="{Binding .}" Margin="3" />
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}" Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center">
<ContentPresenter Content="{Binding .}" Margin="3" Grid.Column="2"/>
<Button FontSize="20" Grid.Column="3" Command="{Binding RemoveCommand}" CommandParameter="{Binding ColumnOrder}"
Style="{StaticResource MetroButton}" Width="50" VerticalAlignment="Center" HorizontalAlignment="Right">
<media:CrossIcon/>
</Button>
</Grid>
Expand Down
46 changes: 27 additions & 19 deletions Application/AnnotationPlane/ColumnSettings/ColumnSettingsView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,17 +12,32 @@
<local:ColumnDefinitionView HorizontalAlignment="Center" />
</DataTemplate>
</UserControl.Resources>
<Grid>
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Row="0" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>
<StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,30,0,30">
<TextBlock VerticalAlignment="Center" FontSize="20">Добавить колонку:</TextBlock>

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<ScrollViewer Grid.Row="0" Grid.Column="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" FlowDirection="RightToLeft" HorizontalAlignment="Stretch" PanningMode="Both">
<ItemsControl HorizontalAlignment="Right" ItemsSource="{Binding OrderedColumnDefinitions}" VerticalAlignment="Center" Grid.IsSharedSizeScope="True" FlowDirection="LeftToRight"/>
</ScrollViewer>

<StackPanel Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>

<ScrollViewer Grid.Row="1" Grid.ColumnSpan="2" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" VerticalAlignment="Center" Margin="5,10,0,10">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="17">Добавить колонку:</TextBlock>
<WrapPanel>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddDepthCommand}">Шкала глубин</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding AddPhotoCommand}">Фото</Button>
Expand All@@ -34,14 +49,7 @@
<Button Style="{StaticResource MetroButton}" Command="{Binding AddIconsCommand}">Значки</Button>
</WrapPanel>
</StackPanel>
</Grid>
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Right">
<Button Style="{StaticResource MetroButton}" HorizontalAlignment="Right" Width="50" Height="50" Command="{Binding ActivateAnnotationPlaneCommand}">
<media:TableIcon></media:TableIcon>
</Button>
<Button Style="{StaticResource MetroButton}" Command="{Binding ImportFromFileCommnad}" Content="Загрузить столбцы"/>
<Button Style="{StaticResource MetroButton}" Command="{Binding ExportToFileCommand}" Content="Сохранить столбцы"/>
</StackPanel>
</ScrollViewer>

</Grid>
</UserControl>
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,40 +4,43 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CoreSampleAnnotation.AnnotationPlane.ColumnSettings"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="15,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="15" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
mc:Ignorable="d">
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" Margin="0,15,0,15">
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Крап</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBackgroundImageProps}" SelectedItem="{Binding SelectedBackgroundImageProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Ширина</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableWidthProps}" SelectedItem="{Binding SelectedWidthProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center">Правая граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableRightSideProps}" SelectedItem="{Binding SelectedRightSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock VerticalAlignment="Center" FontSize="20" HorizontalAlignment="Center" Margin="5,0,0,0">Нижняя граница</TextBlock>
<ComboBox VerticalAlignment="Center" FontSize="20" MinWidth="150" Margin="5,0,0,0" ItemsSource="{Binding AvailableBottomSideProps}" SelectedItem="{Binding SelectedBottomSideProp}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding PropertyName}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
</UserControl>
37 changes: 31 additions & 6 deletions Application/AnnotationPlane/Columns/Drawing.cs
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,12 +20,12 @@ public static IEnumerable<Point> GetRightPolyline(double width, double height, I
return result;
}

public static IEnumerable<Point> GetBottomPolyline(double width, double height, ISideCurveGenerator bottomSideCurve)
public static IEnumerable<Point> GetBottomPolyline(double xOffset, double width, double height, ISideCurveGenerator bottomSideCurve)
{
List<Point> result = new List<Point>();

IEnumerable<Point> bottomSidePoints = bottomSideCurve.GenerateSide(width).
Select(p => new Point(p.X, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)
Select(p => new Point(p.X + xOffset, p.Y + height)); // parallel shift, so that (0.0;0.0);(width;0.0) is shifted to (0.0;height);(width;height)

result.AddRange(bottomSidePoints);

Expand DownExpand Up@@ -78,24 +78,29 @@ public interface IOscillationGenerator
IEnumerable<Point> GeneratePeriod(double xPeriod, double signalMaxY);
}

public enum OscillationAlignment { Left, Center, Right }

/// <summary>
/// Generates a side curve by repeating integer repeating periods provided by oscillationGenerator
/// </summary>
public class OscillatingSignalCurveGenerator : ISideCurveGenerator
{
private double xPeriod, signalMaxY;
private OscillationAlignment alignment;
IOscillationGenerator generator;

/// <param name="xPeriod">The period of the pattern allong X axis</param>
/// <param name="signalMaxY">the avsolute hight of the pattern along Y axis</param>
/// <param name="signalMaxY">the absolute hight of the pattern along Y axis</param>
/// <param name="generator">Which signal to generate</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator)
/// <param name="alignment">Where the straight part will be / where to stick the signal curve</param>
public OscillatingSignalCurveGenerator(double xPeriod, double signalMaxY, IOscillationGenerator generator, OscillationAlignment alignment)
{
if (signalMaxY < 0)
throw new ArgumentException("signalMaxY must be non-negative");
this.xPeriod = xPeriod;
this.signalMaxY = signalMaxY;
this.generator = generator;
this.alignment = alignment;
}

public IEnumerable<Point> GenerateSide(double length)
Expand All@@ -104,15 +109,35 @@ public IEnumerable<Point> GenerateSide(double length)
double straitEndsLength = length - periods * xPeriod;

List<Point> result = new List<Point>();

double leftOffset = 0.0;
double rightOffset = 0.0;
switch (alignment)
{
case OscillationAlignment.Center:
leftOffset = straitEndsLength / 2;
rightOffset = straitEndsLength / 2;
break;
case OscillationAlignment.Left:
leftOffset = 0.0;
rightOffset = straitEndsLength;
break;
case OscillationAlignment.Right:
leftOffset = straitEndsLength;
rightOffset = 0.0;
break;
}


//starting straight line
result.Add(new Point(0.0, 0.0));
result.Add(new Point(straitEndsLength * 0.5, 0.0));
result.Add(new Point(leftOffset, 0.0));

//drawing curves
double miniStep = xPeriod * 0.5;
for (int i = 0; i < periods; i++)
{
double xOffset = straitEndsLength * 0.5 + i * xPeriod;
double xOffset = leftOffset + i * xPeriod;
IEnumerable<Point> periodPoints = generator.GeneratePeriod(xPeriod, signalMaxY).Select(p => new Point(p.X + xOffset, p.Y));

result.AddRange(periodPoints);
Expand Down
6 changes: 3 additions & 3 deletions Application/AnnotationPlane/Columns/VisualColumnView.xaml
Original file line numberDiff line numberDiff line change
Expand Up@@ -43,13 +43,13 @@
<Polyline Stroke="Black" StrokeThickness="1" StrokeDashCap="Round">
<Polyline.Points>
<MultiBinding Converter="{StaticResource bottomSidePointsConverter}">
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="BottomSideForm"></Binding>
<Binding Path="Width"></Binding>
<Binding Path="Height"></Binding>
<Binding Path="BottomSideForm"></Binding>
<Binding RelativeSource="{RelativeSource Mode=PreviousData}" Path="Width"></Binding>
</MultiBinding>
</Polyline.Points>
<Polyline.StrokeDashArray>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm"/>
<Binding Converter="{StaticResource bottomSideStrokeConverter}" Path="BottomSideForm" RelativeSource="{RelativeSource Mode=PreviousData}"/>
</Polyline.StrokeDashArray>
</Polyline>
<Polygon Fill="{Binding BackgroundBrush}" Stroke="Transparent">
Expand Down
Loading