init
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
<base:BaseView x:Class="DTS.Viewer.Graph.GraphView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:base="clr-namespace:DTS.Common.Base;assembly=DTS.Common"
|
||||
xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common"
|
||||
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
|
||||
<base:BaseView.Resources>
|
||||
<ResourceDictionary >
|
||||
<converters:BooleanToOpacityConverter x:Key="BooleanToOpacityConverter" />
|
||||
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
|
||||
<converters:InverseBooleanToVisibilityConverter x:Key="InverseBooleanToVisibilityConverter"/>
|
||||
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="../Resources/CommonStyles.xaml"/>
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</base:BaseView.Resources>
|
||||
<ContentControl x:Name="GraphRegion" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
<ContentControl.Template>
|
||||
<ControlTemplate TargetType="ContentControl">
|
||||
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<ContentControl Content="{Binding DataSeriesView}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Visibility="{Binding Path=GraphVisibility, Converter={StaticResource BooleanToVisibilityConverter}}" Opacity="{Binding Path=ProgressVisibility, Converter={StaticResource BooleanToOpacityConverter}}" />
|
||||
<TextBlock Text="{Binding Path=MessageText, FallbackValue='This is a message', Mode=TwoWay}" FontWeight="Bold" FontSize="14" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
Visibility="{Binding Path=MessageVisibility, Converter={StaticResource BooleanToVisibilityConverter}, Mode=TwoWay}" TextAlignment="Center" />
|
||||
<StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Visibility="{Binding Path=ProgressVisibility, Converter={StaticResource BooleanToVisibilityConverter}, Mode=TwoWay}" >
|
||||
<TextBlock Text="{Binding Path=ProgressText, FallbackValue='This is a message', Mode=TwoWay}" FontWeight="Bold" FontSize="14" TextAlignment="Center" />
|
||||
<ProgressBar Value="{Binding Path=ProgressPercent, FallbackValue=0, Mode=TwoWay}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</ControlTemplate>
|
||||
</ContentControl.Template>
|
||||
</ContentControl>
|
||||
</base:BaseView>
|
||||
@@ -0,0 +1,16 @@
|
||||
using DTS.Common.Interface;
|
||||
// ReSharper disable CheckNamespace
|
||||
|
||||
namespace DTS.Viewer.Graph
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for GraphView.xaml
|
||||
/// </summary>
|
||||
public partial class GraphView : IGraphView
|
||||
{
|
||||
public GraphView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,313 @@
|
||||
<base:BaseView x:Class="DTS.Viewer.Graph.TestDataSeriesView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:base="clr-namespace:DTS.Common.Base;assembly=DTS.Common"
|
||||
xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"
|
||||
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="600" d:DesignWidth="800"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" x:Name="testDataSeriesView">
|
||||
<base:BaseView.Resources>
|
||||
|
||||
<ResourceDictionary >
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="../Resources/CommonStyles.xaml"/>
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
<Style TargetType="TextBlock" x:Key="OverlayStyle">
|
||||
<Setter Property="FontSize" Value="12"/>
|
||||
<Setter Property="Foreground" Value="#D0000000"/>
|
||||
</Style>
|
||||
<converters:BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
|
||||
<converters:InverseBooleanToVisibilityConverter x:Key="InverseBoolToVisConverter" />
|
||||
</ResourceDictionary>
|
||||
</base:BaseView.Resources>
|
||||
<Grid x:Name="GraphViewGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="White">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<c1:C1Chart x:Name="MainChart" Style="{DynamicResource LineChartStyle}" Margin="0"
|
||||
|
||||
MouseWheel="MainChart_OnMouseWheel" IsManipulationEnabled="True" >
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="ActionLeave">
|
||||
<i:InvokeCommandAction Command="{Binding ActionLeaveCommand}" CommandParameter="{Binding ElementName=MainChart}"/>
|
||||
</i:EventTrigger>
|
||||
<i:EventTrigger EventName="ActionEnter">
|
||||
<i:InvokeCommandAction Command="{Binding ActionEnterCommand}" CommandParameter="{Binding ElementName=MainChart}"/>
|
||||
</i:EventTrigger>
|
||||
<i:EventTrigger EventName="MouseUp">
|
||||
<i:InvokeCommandAction Command="{Binding MouseUpCommand}" CommandParameter="{Binding ElementName=MainChart}"/>
|
||||
</i:EventTrigger>
|
||||
<i:EventTrigger EventName="MouseDown">
|
||||
<i:InvokeCommandAction Command="{Binding MouseDownCommand}" CommandParameter="{Binding ElementName=MainChart}"/>
|
||||
</i:EventTrigger>
|
||||
<i:EventTrigger EventName="MouseMove">
|
||||
<i:InvokeCommandAction Command="{Binding MouseMoveCommand}" CommandParameter="{Binding ElementName=MainChart}"/>
|
||||
</i:EventTrigger>
|
||||
<i:EventTrigger EventName="GotFocus">
|
||||
<i:InvokeCommandAction Command="{Binding GotFocusCommand}" CommandParameter="{Binding ElementName=MainChart}"/>
|
||||
</i:EventTrigger>
|
||||
<i:EventTrigger EventName="KeyUp">
|
||||
<i:InvokeCommandAction Command="{Binding ChartOnKeyUpCommand}" />
|
||||
</i:EventTrigger>
|
||||
<!--<i:EventTrigger EventName="KeyUp">
|
||||
<ei:CallMethodAction MethodName="{Binding ChartOnKeyUpMethod}" TargetObject="{Binding}"/>
|
||||
</i:EventTrigger>-->
|
||||
</i:Interaction.Triggers>
|
||||
<c1:LineAreaOptions.OptimizationRadius>5</c1:LineAreaOptions.OptimizationRadius>
|
||||
<c1:C1Chart.Actions>
|
||||
<c1:ZoomAction Fill="{StaticResource Brush_ChartZoomBackground}" Stroke="{x:Null}" Block.IsHyphenationEnabled="False"/>
|
||||
<c1:TranslateAction Modifiers="Shift" />
|
||||
<c1:ScaleAction Modifiers="Control" />
|
||||
</c1:C1Chart.Actions>
|
||||
<c1:C1Chart.View >
|
||||
<c1:ChartView Focusable="True">
|
||||
<c1:ChartView.AxisX>
|
||||
<c1:Axis Style="{DynamicResource LineChartAxisStyle}" MajorGridStroke="#30000000" MajorGridStrokeThickness="1">
|
||||
<c1:Axis.ScrollBar>
|
||||
<c1:AxisScrollBar Margin="0,10,0,0" />
|
||||
</c1:Axis.ScrollBar>
|
||||
</c1:Axis>
|
||||
</c1:ChartView.AxisX>
|
||||
<c1:ChartView.AxisY>
|
||||
<c1:Axis Style="{DynamicResource LineChartAxisStyle}" MajorGridStroke="#30000000" MajorGridStrokeThickness="1">
|
||||
<c1:Axis.ScrollBar>
|
||||
<c1:AxisScrollBar Margin="0,10,0,0"/>
|
||||
</c1:Axis.ScrollBar>
|
||||
</c1:Axis>
|
||||
</c1:ChartView.AxisY>
|
||||
<!-- Markers layer -->
|
||||
<c1:ChartView.Layers>
|
||||
<c1:ChartPanel Visibility="{Binding Path=MarkerVisibilty}" >
|
||||
<!-- vertical line and dot markers -->
|
||||
<c1:ChartPanelObject x:Name="Label"
|
||||
Attach="DataX"
|
||||
Action="MouseMove"
|
||||
DataPoint="0,0"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalAlignment="Bottom" RenderTransformOrigin="0.5,0.5">
|
||||
<c1:ChartPanelObject.RenderTransform>
|
||||
<TransformGroup>
|
||||
<ScaleTransform/>
|
||||
<SkewTransform/>
|
||||
<RotateTransform/>
|
||||
<TranslateTransform X="5"/>
|
||||
<TranslateTransform Y="-5"/>
|
||||
</TransformGroup>
|
||||
</c1:ChartPanelObject.RenderTransform>
|
||||
<Grid DataContext="{Binding RelativeSource={x:Static RelativeSource.Self},Path=Parent}">
|
||||
<Rectangle Fill="Transparent" Opacity=".95" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
|
||||
<StackPanel Margin="5,2" Orientation="Horizontal">
|
||||
<!-- ReSharper disable once Xaml.BindingWithContextNotResolved -->
|
||||
<TextBlock x:Name="LabelY" Text="{Binding DataPoint.Y, StringFormat=F3}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
<TextBlock Text=" @ " VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
<!-- ReSharper disable once Xaml.BindingWithContextNotResolved -->
|
||||
<TextBlock x:Name="LabelX" Text="{Binding DataPoint.X, StringFormat=F3}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
<TextBlock x:Name="LabelTimeUnits" Text="ms" VerticalAlignment="Center" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</c1:ChartPanelObject>
|
||||
<c1:ChartPanelObject x:Name="Dot"
|
||||
Attach="DataX"
|
||||
Action="MouseMove"
|
||||
DataPoint="0,0"
|
||||
DataPointChanged="obj_DataPointChanged"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center">
|
||||
<Ellipse Fill="#55FFFFFF" Stroke="Black" StrokeThickness=".5" Width="10" Height="10" />
|
||||
</c1:ChartPanelObject>
|
||||
</c1:ChartPanel>
|
||||
</c1:ChartView.Layers>
|
||||
</c1:ChartView>
|
||||
</c1:C1Chart.View>
|
||||
<c1:C1ChartLegend Grid.Row="1" x:Name="Legend" Visibility="Collapsed" Foreground="{DynamicResource Brush_ChartForeground}"/>
|
||||
|
||||
</c1:C1Chart>
|
||||
<Grid HorizontalAlignment="Right" Background="#D0FFFFFF" VerticalAlignment="Top"
|
||||
Margin="10" Visibility="{Binding OverlayVisibility}"
|
||||
Width="300">
|
||||
<Grid.Style>
|
||||
<Style TargetType="Grid">
|
||||
<Style.Triggers>
|
||||
<EventTrigger RoutedEvent="Control.MouseEnter">
|
||||
<BeginStoryboard>
|
||||
<Storyboard >
|
||||
<DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="Opacity"/>
|
||||
</Storyboard>
|
||||
</BeginStoryboard>
|
||||
</EventTrigger>
|
||||
<EventTrigger RoutedEvent="Control.MouseLeave">
|
||||
<BeginStoryboard>
|
||||
<Storyboard >
|
||||
<DoubleAnimation Duration="0:0:0.2" To="1" Storyboard.TargetProperty="Opacity"/>
|
||||
</Storyboard>
|
||||
</BeginStoryboard>
|
||||
</EventTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Grid.Style>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Test Setup: " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding TestSetupName}" Style="{StaticResource OverlayStyle}" TextWrapping="Wrap"/>
|
||||
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Text="Test Id: " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding TestId}" Style="{StaticResource OverlayStyle}" TextWrapping="Wrap"/>
|
||||
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Group Name: " Style="{StaticResource OverlayStyle}" Visibility="Collapsed"/>
|
||||
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding GroupName}" Style="{StaticResource OverlayStyle}" Visibility="Collapsed"/>
|
||||
|
||||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Hardware Channel: " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding HardwareChannel}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<TextBlock Grid.Row="4" Grid.Column="0" Text="Serial Number: " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="4" Grid.Column="1" Text="{Binding SensorSN}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<TextBlock Grid.Row="5" Grid.Column="0" Text="Channel Description: " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="5" Grid.Column="1" Text="{Binding Description}" Style="{StaticResource OverlayStyle}" TextWrapping="Wrap"/>
|
||||
|
||||
<TextBlock Grid.Row="6" Grid.Column="0" Text="Channel User Code: " Style="{StaticResource OverlayStyle}" Visibility="{Binding UserVisibility}"/>
|
||||
<TextBlock Grid.Row="6" Grid.Column="1" Text="{Binding UserCode}" Style="{StaticResource OverlayStyle}" TextWrapping="Wrap" Visibility="{Binding UserVisibility}"/>
|
||||
|
||||
<TextBlock Grid.Row="7" Grid.Column="0" Text="Channel User Name: " Style="{StaticResource OverlayStyle}" Visibility="{Binding UserVisibility}"/>
|
||||
<TextBlock Grid.Row="7" Grid.Column="1" Text="{Binding UserChannelName}" Style="{StaticResource OverlayStyle}" TextWrapping="Wrap" Visibility="{Binding UserVisibility}"/>
|
||||
|
||||
<TextBlock Grid.Row="8" Grid.Column="0" Text="Channel ISO Code: " Style="{StaticResource OverlayStyle}" Visibility="{Binding ISOVisibility}"/>
|
||||
<TextBlock Grid.Row="8" Grid.Column="1" Text="{Binding ISOCode}" Style="{StaticResource OverlayStyle}" TextWrapping="Wrap" Visibility="{Binding ISOVisibility}"/>
|
||||
|
||||
<TextBlock Grid.Row="9" Grid.Column="0" Text="Channel ISO Name: " Style="{StaticResource OverlayStyle}" Visibility="{Binding ISOVisibility}"/>
|
||||
<TextBlock Grid.Row="9" Grid.Column="1" Text="{Binding ISOChannelName}" Style="{StaticResource OverlayStyle}" TextWrapping="Wrap" Visibility="{Binding ISOVisibility}"/>
|
||||
|
||||
<TextBlock Grid.Row="10" Grid.Column="0" Text="Channel Name: " Style="{StaticResource OverlayStyle}" Visibility="{Binding ChannelNameOnlyVisibility}"/>
|
||||
<TextBlock Grid.Row="10" Grid.Column="1" Text="{Binding UserChannelName}" Style="{StaticResource OverlayStyle}" TextWrapping="Wrap" Visibility="{Binding ChannelNameOnlyVisibility}"/>
|
||||
|
||||
<TextBlock Grid.Row="11" Grid.Column="0" Text="Recording Mode: " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="11" Grid.Column="1" Text="{Binding RecordingMode}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<TextBlock Grid.Row="12" Grid.Column="0" Text="Sample Rate (Hz): " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="12" Grid.Column="1" Text="{Binding SampleRate}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<TextBlock Grid.Row="13" Grid.Column="0" Text="Hardware Filter (Hz): " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="13" Grid.Column="1" Text="{Binding HWAAF}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<TextBlock Grid.Row="14" Grid.Column="0" Text="Software Filter Class: " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="14" Grid.Column="1" Text="{Binding SWAAF}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<TextBlock Grid.Row="15" Grid.Column="0" Text="Excitation (V): " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Grid.Row="15" Grid.Column="1" Text="{Binding Excitation}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<TextBlock Grid.Row="16" Grid.Column="0" Text="Polarity: " Style="{StaticResource OverlayStyle}" Visibility="{Binding PolarityVisibility}"/>
|
||||
<TextBlock Grid.Row="16" Grid.Column="1" Text="{Binding Polarity}" Style="{StaticResource OverlayStyle}" Visibility="{Binding PolarityVisibility}"/>
|
||||
|
||||
<Rectangle Grid.Row="17" Grid.ColumnSpan="2" Fill="#60000000" StrokeDashArray="" Height="1" Margin="5"/>
|
||||
|
||||
<StackPanel Grid.Row="18" Grid.Column="0" Orientation="Horizontal">
|
||||
<TextBlock Text="Min/Max (" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text="{Binding TitleY}" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text=") :" Style="{StaticResource OverlayStyle}"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="18" Grid.Column="1" Orientation="Horizontal">
|
||||
<TextBlock Text="{Binding MinY}" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text="/" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text="{Binding MaxY}" Style="{StaticResource OverlayStyle}"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="19" Grid.Column="0" Orientation="Horizontal">
|
||||
<TextBlock Text="Average (" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text="{Binding TitleY}" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text=") :" Style="{StaticResource OverlayStyle}"/>
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Row="19" Grid.Column="1" Text="{Binding AvgY}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<StackPanel Grid.Row="20" Grid.Column="0" Orientation="Horizontal">
|
||||
<TextBlock Text="StdDev (" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text="{Binding TitleY}" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text=") :" Style="{StaticResource OverlayStyle}"/>
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Row="20" Grid.Column="1" Text="{Binding StdDevY}" Style="{StaticResource OverlayStyle}"/>
|
||||
|
||||
<!-- T0 Value -->
|
||||
<StackPanel Grid.Row="21" Grid.Column="0" Orientation="Horizontal" Visibility="{Binding FFT, Converter={StaticResource InverseBoolToVisConverter}}">
|
||||
<TextBlock Text="Value @ T0 (" Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text="{Binding TitleY}" Style="{StaticResource OverlayStyle}" />
|
||||
<TextBlock Text=") :" Style="{StaticResource OverlayStyle}" />
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Row="21" Grid.Column="1" Text="{Binding T0EUValue}" Style="{StaticResource OverlayStyle}"
|
||||
Visibility="{Binding FFT, Converter={StaticResource InverseBoolToVisConverter}}" />
|
||||
|
||||
<!-- Cursor Value -->
|
||||
<StackPanel Grid.Row="22" Grid.Column="0" Orientation="Horizontal" Visibility="{Binding FFT, Converter={StaticResource InverseBoolToVisConverter}}">
|
||||
<TextBlock Text="Cursor - " Style="{StaticResource OverlayStyle}"/>
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Row="22" Grid.Column="1" Text="{Binding CursorValue}" Style="{StaticResource OverlayStyle}"
|
||||
Visibility="{Binding FFT, Converter={StaticResource InverseBoolToVisConverter}}" />
|
||||
<!-- Peek Frequency -->
|
||||
<StackPanel Grid.Row="22" Grid.Column="0" Orientation="Horizontal" Visibility="{Binding FFT, Converter={StaticResource BoolToVisConverter}}">
|
||||
<TextBlock Text="Peak Magnitude " Style="{StaticResource OverlayStyle}"/>
|
||||
<TextBlock Text="{Binding PeakMagnitude,StringFormat=N2}" Style="{StaticResource OverlayStyle}" />
|
||||
<TextBlock Text=" (dB) @ " />
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Row="22" Grid.Column="1" Orientation="Horizontal" Visibility="{Binding FFT, Converter={StaticResource BoolToVisConverter}}">
|
||||
<TextBlock Text="{Binding PeakFrequency,StringFormat=N2}" Style="{StaticResource OverlayStyle}" />
|
||||
<TextBlock Text=" (Hz)" />
|
||||
</StackPanel>
|
||||
<!-- HIC Value -->
|
||||
<StackPanel Grid.Row="23" Grid.Column="0" Orientation="Horizontal" Visibility="{Binding HIC, Converter={StaticResource BoolToVisConverter}}">
|
||||
<TextBlock Text="HIC :" Style="{StaticResource OverlayStyle}" />
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Row="23" Grid.Column="1" Text="{Binding HICValue}" Style="{StaticResource OverlayStyle}" Visibility="{Binding HIC, Converter={StaticResource BoolToVisConverter}}" />
|
||||
<!-- T1 Value -->
|
||||
<StackPanel Grid.Row="24" Grid.Column="0" Orientation="Horizontal" Visibility="{Binding HIC, Converter={StaticResource BoolToVisConverter}}">
|
||||
<TextBlock Text="T1 (ms) :" Style="{StaticResource OverlayStyle}"/>
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Row="24" Grid.Column="1" Text="{Binding T1Time}" Style="{StaticResource OverlayStyle}" Visibility="{Binding HIC, Converter={StaticResource BoolToVisConverter}}"/>
|
||||
<!-- T2 Value -->
|
||||
<StackPanel Grid.Row="25" Grid.Column="0" Orientation="Horizontal" Visibility="{Binding HIC, Converter={StaticResource BoolToVisConverter}}">
|
||||
<TextBlock Text="T2 (ms) :" Style="{StaticResource OverlayStyle}"/>
|
||||
</StackPanel>
|
||||
<TextBlock Grid.Row="25" Grid.Column="1" Text="{Binding T2Time}" Style="{StaticResource OverlayStyle}" Visibility="{Binding HIC, Converter={StaticResource BoolToVisConverter}}"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</base:BaseView>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,241 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media.Imaging;
|
||||
using C1.WPF.C1Chart;
|
||||
using C1.WPF.C1Chart.Extended;
|
||||
using C1.WPF.Pdf;
|
||||
using DTS.Common.Interface;
|
||||
using DTS.Common.Utilities.Logging;
|
||||
using DTS.Common.Utils;
|
||||
using KeyEventArgs = System.Windows.Input.KeyEventArgs;
|
||||
using System.Globalization;
|
||||
|
||||
// ReSharper disable CheckNamespace
|
||||
|
||||
namespace DTS.Viewer.Graph
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for TestDataSeriesView.xaml
|
||||
/// </summary>
|
||||
public partial class TestDataSeriesView : ITestDataSeriesView
|
||||
{
|
||||
public TestDataSeriesView()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
}
|
||||
private void obj_DataPointChanged(object sender, EventArgs e)
|
||||
{
|
||||
//// update label in code from marker
|
||||
//if (DataContext == null) return;
|
||||
|
||||
//var obj = (ChartPanelObject)sender;
|
||||
|
||||
//if (obj == null) return;
|
||||
|
||||
//var pt = MainChart.View.PointFromData(obj.DataPoint);
|
||||
|
||||
//var txt = String.Empty;
|
||||
|
||||
//for (var i = 0; i < MainChart.Data.Children.Count; i++)
|
||||
//{
|
||||
// double distance = 0; //distance calculated, but not used
|
||||
// var index = MainChart.View.DataIndexFromPoint(pt, i, MeasureOption.X, out distance);
|
||||
// if (index == -1) continue;
|
||||
// txt += Environment.NewLine + MainChart.Data.Children[i].Label + Environment.NewLine + "Y: " + MainChart.Data.Children[i].GetDataValue("Values", index) + Environment.NewLine + "X: " + MainChart.Data.Children[i].GetDataValue("XValues", index);
|
||||
//}
|
||||
//var viewModel = (ITestDataSeriesViewModel)DataContext;
|
||||
//viewModel.CurrentCursorValues = txt;
|
||||
}
|
||||
private void MainChart_OnMouseWheel(object sender, MouseWheelEventArgs e)
|
||||
{
|
||||
//if (Keyboard.Modifiers == ModifierKeys.Control && e.Delta == -120)
|
||||
//{
|
||||
// MainChart.View.AxisX.Scale += 0.1;
|
||||
// MainChart.View.AxisY.Scale += 0.1;
|
||||
//}
|
||||
//else if (Keyboard.Modifiers == ModifierKeys.Control && e.Delta == 120)
|
||||
//{
|
||||
// MainChart.View.AxisX.Scale -= 0.1;
|
||||
// MainChart.View.AxisY.Scale -= 0.1;
|
||||
//}
|
||||
}
|
||||
|
||||
private void MainChart_OnKeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public bool SaveReportToPDF(string directory)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(directory)) throw new DirectoryNotFoundException();
|
||||
|
||||
var indent = 10;
|
||||
var spacing = 2;
|
||||
// FB9152: Migrated from ReviewFile.xaml.cs
|
||||
// Generate Chart Image
|
||||
var ms = new MemoryStream();
|
||||
MainChart.SaveImage(ms, ImageFormat.Png);
|
||||
var bi = new BitmapImage();
|
||||
bi.BeginInit();
|
||||
bi.StreamSource = ms;
|
||||
bi.EndInit();
|
||||
var wBmp = new WriteableBitmap(bi);
|
||||
|
||||
var dataSeries = ((TestDataSeriesViewModel)MainChart.DataContext).GraphDataSeries;
|
||||
|
||||
// create and save pdf document
|
||||
var pdf = new C1PdfDocument
|
||||
{
|
||||
Landscape = false,
|
||||
PaperKind = System.Globalization.RegionInfo.CurrentRegion.IsMetric ? PaperKind.A4 : PaperKind.Letter,
|
||||
};
|
||||
var font = new C1.WPF.Pdf.Font(MainChart.FontFamily.Source, MainChart.FontSize);
|
||||
var pen = new Pen(System.Windows.Media.Colors.Black);
|
||||
|
||||
var drawHeight = indent;
|
||||
// write test info
|
||||
var testSetup = $"Test Setup: {dataSeries[0].TestSetupName}";
|
||||
var testId = $"Test ID: {dataSeries[0].TestId}";
|
||||
pdf.DrawString(testSetup, font, System.Windows.Media.Colors.Black, new Point(indent, drawHeight));
|
||||
drawHeight += (int)pdf.MeasureString(testSetup, font).Height;
|
||||
pdf.DrawString(testId, font, System.Windows.Media.Colors.Black, new Point(indent, drawHeight));
|
||||
drawHeight += (int)pdf.MeasureString(testId, font).Height;
|
||||
|
||||
// draw chart
|
||||
var chartWidth = pdf.PageSize.Width - indent - indent;
|
||||
var chartHeight = (chartWidth / MainChart.ActualWidth) * MainChart.ActualHeight;
|
||||
|
||||
pdf.DrawImage(wBmp, new Rect(indent,
|
||||
drawHeight,
|
||||
chartWidth,
|
||||
chartHeight));
|
||||
drawHeight += (int)chartHeight;
|
||||
|
||||
// write gRMS table
|
||||
var colStart = indent * 2;
|
||||
var col1X = colStart + spacing;
|
||||
var col2X = col1X + dataSeries.Max(ds => pdf.MeasureString(ds.ChannelName, font).Width) + spacing;
|
||||
var col3X = col2X + Math.Max(pdf.MeasureString("Sample Rate", font).Width, dataSeries.Max(ds => pdf.MeasureString(ds.SampleRate, font).Width)) + spacing;
|
||||
var colEnd = col3X + dataSeries.Max(ds => pdf.MeasureString(ds.GRMS.ToString(), font).Width) + spacing;
|
||||
|
||||
|
||||
pdf.DrawLine(pen, col1X, drawHeight, colEnd, drawHeight);
|
||||
pdf.DrawString("Name", font, System.Windows.Media.Colors.Black, new Point(col1X, drawHeight));
|
||||
pdf.DrawString("Sample Rate", font, System.Windows.Media.Colors.Black, new Point(col2X, drawHeight));
|
||||
pdf.DrawString("gRMS", font, System.Windows.Media.Colors.Black, new Point(col3X, drawHeight));
|
||||
var titleHeight = (int)pdf.MeasureString("gRMS", font).Height;
|
||||
pdf.DrawLine(pen, col1X, drawHeight, col1X, drawHeight + titleHeight);
|
||||
pdf.DrawLine(pen, col2X, drawHeight, col2X, drawHeight + titleHeight);
|
||||
pdf.DrawLine(pen, col3X, drawHeight, col3X, drawHeight + titleHeight);
|
||||
pdf.DrawLine(pen, colEnd, drawHeight, colEnd, drawHeight + titleHeight);
|
||||
drawHeight += titleHeight;
|
||||
pdf.DrawLine(pen, col1X, drawHeight, colEnd, drawHeight);
|
||||
|
||||
foreach (var ds in dataSeries)
|
||||
{
|
||||
var rowHeight = (int)pdf.MeasureString(ds.ChannelName, font).Height;
|
||||
pdf.FillRectangle((ds.GraphColor as System.Windows.Media.SolidColorBrush).Color, indent, drawHeight, indent, rowHeight);
|
||||
pdf.DrawString(ds.ChannelName, font, System.Windows.Media.Colors.Black, new Point(col1X, drawHeight));
|
||||
pdf.DrawString(ds.SampleRate, font, System.Windows.Media.Colors.Black, new Point(col2X, drawHeight));
|
||||
pdf.DrawString(ds.GRMS.ToString(), font, System.Windows.Media.Colors.Black, new Point(col3X, drawHeight));
|
||||
pdf.DrawLine(pen, col1X, drawHeight, col1X, drawHeight + rowHeight);
|
||||
pdf.DrawLine(pen, col2X, drawHeight, col2X, drawHeight + rowHeight);
|
||||
pdf.DrawLine(pen, col3X, drawHeight, col3X, drawHeight + rowHeight);
|
||||
pdf.DrawLine(pen, colEnd, drawHeight, colEnd, drawHeight + rowHeight);
|
||||
drawHeight += rowHeight;
|
||||
pdf.DrawLine(pen, col1X, drawHeight, colEnd, drawHeight);
|
||||
}
|
||||
|
||||
//pdf.ImageQuality = ImageQuality.High;
|
||||
|
||||
var pdfFileName = directory + "\\" +
|
||||
DateTime.Now.ToString("M'/'d'/'yyyy", CultureInfo.InvariantCulture).Replace("/", "_") + "_" +
|
||||
DateTime.Now.ToString("h':'mm' 'tt", CultureInfo.InvariantCulture).Replace(":", "_") + "_" + DateTime.Now.Second + "_" +
|
||||
DateTime.Now.Millisecond + ".pdf";
|
||||
if (!System.IO.Directory.Exists(directory)) System.IO.Directory.CreateDirectory(directory);
|
||||
var pdfPath = Path.Combine(directory, pdfFileName);
|
||||
pdf.Save(pdfPath);
|
||||
// 35532 log save path after successful write
|
||||
APILogger.Log($"Report saved to {pdfPath}");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 35532
|
||||
APILogger.Log("Error saving report to PDF");
|
||||
APILogger.LogException(ex);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool SaveReportToCSV(string directory)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!System.IO.Directory.Exists(directory)) System.IO.Directory.CreateDirectory(directory);
|
||||
var csvFileName = directory + "\\" +
|
||||
DateTime.Now.ToString("M'/'d'/'yyyy", CultureInfo.InvariantCulture).Replace("/", "_") + "_" +
|
||||
DateTime.Now.ToString("h':'mm' 'tt", CultureInfo.InvariantCulture).Replace(":", "_") + "_" + DateTime.Now.Second + "_" +
|
||||
DateTime.Now.Millisecond + ".PSD.csv";
|
||||
APILogger.Log("opening ", csvFileName);
|
||||
using (var fs = new FileStream(csvFileName, FileMode.Create))
|
||||
{
|
||||
|
||||
Encoding encoder;
|
||||
|
||||
try
|
||||
{
|
||||
encoder = Common.Utils.FileUtils.GetEncoding(Encoding.UTF8.CodePage);
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
APILogger.Log("Problem getting encoder", ex);
|
||||
encoder = Encoding.Default;
|
||||
}
|
||||
|
||||
using (var fileWriter = new StreamWriter(fs, encoder, 1024 * 1000))
|
||||
{
|
||||
var dataSeries = ((TestDataSeriesViewModel)MainChart.DataContext).GraphDataSeries;
|
||||
var header = "Frequency," + string.Join(",", dataSeries.Select(ds => ds.ChannelName).ToArray());
|
||||
fileWriter.WriteLine(header);
|
||||
var units = "Hz," + string.Join(",", dataSeries.Select(ds => ds.EngineeringUnits + "^2/Hz"));
|
||||
fileWriter.WriteLine(units);
|
||||
|
||||
for (var i = 0; dataSeries.All(ds => i < ds.Xvalue.Length && i < ds.Yvalue.Length); i++)
|
||||
{
|
||||
var line = dataSeries[0].Xvalue[i].ToString() + "," + string.Join(",", dataSeries.Select(ds => ds.Yvalue[i].ToString()).ToArray());
|
||||
fileWriter.WriteLine(line);
|
||||
}
|
||||
}
|
||||
|
||||
fs.Close();
|
||||
|
||||
// 35532 log save path after successful write
|
||||
APILogger.Log($"Report saved to {csvFileName}");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 35532
|
||||
APILogger.Log("Error saving report to CSV");
|
||||
APILogger.LogException(ex);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public static class AxisExtension
|
||||
{
|
||||
public static double GetDispMin(this Axis axis) { return axis.ActualMin + axis.Value * (axis.ActualMax - axis.ActualMin) * (1 - axis.Scale); }
|
||||
public static double GetDispMax(this Axis axis) { return axis.ActualMax - (1 - axis.Value) * (axis.ActualMax - axis.ActualMin) * (1 - axis.Scale); }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<base:BaseView x:Class="DTS.Viewer.Graph.TestDataView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:base="clr-namespace:DTS.Common.Base;assembly=DTS.Common"
|
||||
xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"
|
||||
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
|
||||
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
|
||||
xmlns:converters="clr-namespace:DTS.Common.Converters;assembly=DTS.Common"
|
||||
xmlns:behaviors="clr-namespace:DTS.Common.Behaviors;assembly=DTS.Common"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:graph="clr-namespace:DTS.Viewer.Graph"
|
||||
mc:Ignorable="d"
|
||||
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" d:DataContext="{d:DesignInstance graph:TestDataViewModel}">
|
||||
<base:BaseView.Resources>
|
||||
<ResourceDictionary >
|
||||
<converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="../Resources/CommonStyles.xaml"/>
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</base:BaseView.Resources>
|
||||
<Grid x:Name="GraphView" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<c1:C1FlexChart x:Name="MainChart" ChartType="Line" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
|
||||
ToolTipContent="{} Channel: {seriesName} Time: {x} Y: {y}" ScrollViewer.HorizontalScrollBarVisibility="Visible" >
|
||||
<i:Interaction.Behaviors>
|
||||
<behaviors:MouseCaptureBehavior Proxy="{Binding}" />
|
||||
</i:Interaction.Behaviors>
|
||||
<!--<c1:C1FlexChart.ContextMenu >
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Create Marker" Command="{Binding CreateMarkerCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}}" Visibility="{Binding Path=ShowCursor, Converter={StaticResource BooleanToVisibilityConverter}}" />
|
||||
</ContextMenu>
|
||||
</c1:C1FlexChart.ContextMenu>-->
|
||||
</c1:C1FlexChart>
|
||||
|
||||
|
||||
<Canvas x:Name="ReversibleFrameContainer" Visibility="Collapsed" Background="Transparent" IsHitTestVisible="False">
|
||||
<Path IsHitTestVisible="False" StrokeDashArray="2, 2" Stroke="Black">
|
||||
<Path.Data>
|
||||
<RectangleGeometry x:Name="ReversibleFrame"/>
|
||||
</Path.Data>
|
||||
</Path>
|
||||
</Canvas>
|
||||
</Grid>
|
||||
</base:BaseView>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
using C1.WPF.Chart;
|
||||
using DTS.Common.Interface;
|
||||
|
||||
// ReSharper disable CheckNamespace
|
||||
|
||||
namespace DTS.Viewer.Graph
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for TestDataSeriesView.xaml
|
||||
/// </summary>
|
||||
public partial class TestDataView : ITestDataView
|
||||
{
|
||||
//bool zooming = false;
|
||||
//Point ptStart = new Point();
|
||||
public TestDataView()
|
||||
{
|
||||
InitializeComponent();
|
||||
//Loaded += TestDataView_Loaded;
|
||||
}
|
||||
|
||||
//private void TestDataView_Loaded(object sender, RoutedEventArgs e)
|
||||
//{
|
||||
// SetupChart();
|
||||
//}
|
||||
|
||||
//void SetupChart()
|
||||
//{
|
||||
// MainChart.AddHandler(C1FlexChart.MouseLeftButtonDownEvent, new MouseButtonEventHandler(MainChart_MouseLeftButtonDown), true);
|
||||
// MainChart.AddHandler(C1FlexChart.MouseMoveEvent, new MouseEventHandler(MainChart_MouseMove), true);
|
||||
// MainChart.AddHandler(C1FlexChart.MouseLeftButtonUpEvent, new MouseButtonEventHandler(MainChart_MouseLeftButtonUp), true);
|
||||
//}
|
||||
//private void MainChart_MouseMove(object sender, MouseEventArgs e)
|
||||
//{
|
||||
// // when zooming update selection range
|
||||
// if (zooming)
|
||||
// {
|
||||
// var currentPosition = e.GetPosition(MainChart);
|
||||
// Point ptCurrent = currentPosition;
|
||||
// // Draw new frame
|
||||
// DrawReversibleRectangle(ptStart, ptCurrent);
|
||||
// }
|
||||
//}
|
||||
//private void MainChart_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
//{
|
||||
// ReversibleFrameContainer.Visibility = Visibility.Visible;
|
||||
// // // Start zooming
|
||||
// zooming = true;
|
||||
// // // Save starting point of selection rectangle
|
||||
// ptStart = e.GetPosition(MainChart);
|
||||
// MainChart.CaptureMouse();
|
||||
//}
|
||||
//private void MainChart_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
//{
|
||||
// //End zooming
|
||||
// zooming = false;
|
||||
// ReversibleFrameContainer.Visibility = Visibility.Collapsed;
|
||||
// ReversibleFrame.Rect = new Rect();
|
||||
// var currentPosition = e.GetPosition(MainChart);
|
||||
// PerformZoom(ptStart, currentPosition);
|
||||
// //Clean up
|
||||
// ptStart = new Point();
|
||||
// MainChart.ReleaseMouseCapture();
|
||||
//}
|
||||
//private void PerformZoom(Point ptStart, Point ptLast)
|
||||
//{
|
||||
// var p1 = MainChart.PointToData(ptStart);
|
||||
// var p2 = MainChart.PointToData(ptLast);
|
||||
// MainChart.BeginUpdate();
|
||||
// // Update axes with new limits
|
||||
// MainChart.AxisX.Min = Math.Min(p1.X, p2.X);
|
||||
// MainChart.AxisY.Min = Math.Min(p1.Y, p2.Y);
|
||||
// MainChart.AxisX.Max = Math.Max(p1.X, p2.X);
|
||||
// MainChart.AxisY.Max = Math.Max(p1.Y, p2.Y);
|
||||
// MainChart.EndUpdate();
|
||||
//}
|
||||
|
||||
//private void DrawReversibleRectangle(Point p1, Point p2)
|
||||
//{
|
||||
// // Normalize the rectangle
|
||||
// var rc = new Rect(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y),
|
||||
// Math.Abs(p2.X - p1.X), Math.Abs(p2.Y - p1.Y));
|
||||
|
||||
// // Draw the reversible frame
|
||||
// ReversibleFrame.Rect = rc;
|
||||
//}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user