Bläddra i källkod

更新组态软件-新增测试案例

样式分支
fyf 2 år sedan
förälder
incheckning
ebef215f46
20 ändrade filer med 588 tillägg och 69 borttagningar
  1. +0
    -4
      BPASmartClient.Compiler/BPASmartClient.Compiler.csproj
  2. +1
    -1
      BPASmartClient.Compiler/IExecutable.cs
  3. +27
    -0
      BPASmartClient.MessageName/Enum/物料仓/SilosRunEnum.cs
  4. +27
    -0
      BPASmartClient.MessageName/Enum/运行状态/RunEnum.cs
  5. +1
    -0
      BPASmartClient.MessageName/MessageName.cs
  6. +2
    -1
      BPASmartClient.SCADAControl/ArcGauge.cs
  7. +1
    -0
      BPASmartClient.SCADAControl/BPASmartClient.SCADAControl.csproj
  8. +72
    -45
      BPASmartClient.SCADAControl/NewConveyorBelt.xaml.cs
  9. +91
    -17
      BPASmartClient.SCADAControl/Silos.xaml.cs
  10. +9
    -0
      SCADA.Test/App.xaml
  11. +17
    -0
      SCADA.Test/App.xaml.cs
  12. +10
    -0
      SCADA.Test/AssemblyInfo.cs
  13. +32
    -0
      SCADA.Test/Converters/ZoomConverter.cs
  14. +18
    -0
      SCADA.Test/MainWindow.xaml
  15. +74
    -0
      SCADA.Test/MainWindow.xaml.cs
  16. +32
    -0
      SCADA.Test/RunCanvas.xaml
  17. +132
    -0
      SCADA.Test/RunCanvas.xaml.cs
  18. +15
    -0
      SCADA.Test/SCADA.Test.csproj
  19. Binär
     
  20. +27
    -1
      SmartClient.sln

+ 0
- 4
BPASmartClient.Compiler/BPASmartClient.Compiler.csproj Visa fil

@@ -6,10 +6,6 @@
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<Folder Include="Hepler\" />
</ItemGroup>

<ItemGroup>
<Reference Include="Antlr3.Runtime">
<HintPath>DLL\Antlr3.Runtime.dll</HintPath>


BPASmartClient.SCADAControl/IExecutable.cs → BPASmartClient.Compiler/IExecutable.cs Visa fil

@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPASmartClient.SCADAControl
namespace BPASmartClient.Compiler
{
public interface IExecutable
{

+ 27
- 0
BPASmartClient.MessageName/Enum/物料仓/SilosRunEnum.cs Visa fil

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPASmartClient.MessageName.Enum.物料仓
{
/// <summary>
/// 物料仓数据设置-Model
/// </summary>
public class SilosMessageModel
{
/// <summary>
/// 物料仓:仓号
/// </summary>
public string id { get; set; }
/// <summary>
/// 物料仓:标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 物料仓:重量(G) 35.23
/// </summary>
public string Value { get; set; }
}
}

+ 27
- 0
BPASmartClient.MessageName/Enum/运行状态/RunEnum.cs Visa fil

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BPASmartClient.MessageName.Enum.运行状态
{
/// <summary>
/// 运行状态-枚举
/// </summary>
public enum RunEnum
{
/// <summary>
/// 运行(滚动线默认右转)
/// </summary>
Run,
/// <summary>
/// 运行-左转(滚动线独有)
/// </summary>
Run_Left,
/// <summary>
/// 停止
/// </summary>
Stop
}
}

+ 1
- 0
BPASmartClient.MessageName/MessageName.cs Visa fil

@@ -66,6 +66,7 @@ namespace BPASmartClient.MessageName
/// 物料仓数据设置
/// </summary>
SilosSetData,

/// <summary>
/// 滚动线运行状态
/// </summary>


+ 2
- 1
BPASmartClient.SCADAControl/ArcGauge.cs Visa fil

@@ -1,4 +1,5 @@
using System;
using BPASmartClient.Compiler;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;


+ 1
- 0
BPASmartClient.SCADAControl/BPASmartClient.SCADAControl.csproj Visa fil

@@ -12,6 +12,7 @@

<ItemGroup>
<ProjectReference Include="..\BPASmartClient.Compiler\BPASmartClient.Compiler.csproj" />
<ProjectReference Include="..\BPASmartClient.MessageCommunication\BPASmartClient.MessageCommunication.csproj" />
<ProjectReference Include="..\BPASmartClient.MessageName\BPASmartClient.MessageName.csproj" />
</ItemGroup>



+ 72
- 45
BPASmartClient.SCADAControl/NewConveyorBelt.xaml.cs Visa fil

@@ -1,4 +1,8 @@
using BPASmartClient.MessageName;
using BPASmartClient.Compiler;
using BPASmartClient.MessageCommunication;
using BPASmartClient.MessageCommunication.MsgControl;
using BPASmartClient.MessageName;
using BPASmartClient.MessageName.Enum.运行状态;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -24,10 +28,14 @@ namespace BPASmartClient.SCADAControl
/// </summary>
public partial class NewConveyorBelt : UserControl, IExecutable
{
#region 临时变量
Path Path_mp = null;
Path Path_cb = null;
Storyboard storyboard = new Storyboard();
Storyboard storyboard1 = new Storyboard();
#endregion


public NewConveyorBelt()
{
InitializeComponent();
@@ -43,7 +51,6 @@ namespace BPASmartClient.SCADAControl
}

public string ControlType => "滚动线";

private bool isExecuteState;
public bool IsExecuteState
{
@@ -60,11 +67,7 @@ namespace BPASmartClient.SCADAControl
}
}

public void Register()
{

}

#region 内部函数
public void VisualStateManagerData()
{
storyboard.RepeatBehavior = RepeatBehavior.Forever;
@@ -163,35 +166,13 @@ namespace BPASmartClient.SCADAControl
}
}
}
#endregion

#region 属性
private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
(d as NewConveyorBelt)?.Refursh();
}

private void Refursh()
{
if (Direction == 1)
{
storyboard.Begin();
storyboard1.Stop();
// VisualStateManager.GoToState(this, "Left", false);
}
else if (Direction == 2)
{
storyboard.Stop();
storyboard1.Begin();
//VisualStateManager.GoToState(this, "Right", false);
}
else
{
storyboard.Stop();
storyboard1.Stop();
//VisualStateManager.GoToState(this, "Stop", false);
}
}


public DoubleCollection StrokeDashArray
{
get { return (DoubleCollection)GetValue(StrokeDashArrayProperty); }
@@ -252,7 +233,7 @@ namespace BPASmartClient.SCADAControl
DependencyProperty.Register("Direction", typeof(int), typeof(NewConveyorBelt),
new PropertyMetadata(0, new PropertyChangedCallback(OnPropertyChanged)));

[Category("主题订阅")]
public string ConveyorBeltLeft
{
@@ -278,22 +259,68 @@ namespace BPASmartClient.SCADAControl
public static readonly DependencyProperty ConveyorBeltStopProperty =
DependencyProperty.Register("ConveyorBeltStop", typeof(string), typeof(NewConveyorBelt), new PropertyMetadata(string.Empty));

//[Category("事件名称集合")]
//public ObservableCollection<string> EventList
//{
// get { return (ObservableCollection<string>)GetValue(EventListProperty); }
// set { SetValue(EventListProperty, value); }
//}
//public static readonly DependencyProperty EventListProperty =
// DependencyProperty.Register("EventList", typeof(ObservableCollection<string>), typeof(NewConveyorBelt), new PropertyMetadata(new ObservableCollection<string>()));

[Category("消息名称")]
public MessageNameEnum EventName
public MessageNameEnum EventRunName
{
get { return (MessageNameEnum)GetValue(EventRunNameProperty); }
set { SetValue(EventRunNameProperty, value); }
}
public static readonly DependencyProperty EventRunNameProperty =
DependencyProperty.Register("EventRunName", typeof(MessageNameEnum), typeof(NewConveyorBelt), new PropertyMetadata(MessageNameEnum.Null, onEventRunNameChanged));
private static void onEventRunNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as NewConveyorBelt)?.RunNameRefresh();
#endregion

#region 属性变更事件
public void Register()
{
Class_InnerMessageBus.GetInstance().ListenMessage(this, EventRunName.ToString(), "EventRunNameHandler");
}

public void EventRunNameHandler(object sender, InnerMessageEventArgs e)
{
try
{
if (IsExecuteState = true)
{
if (e.obj_MessageObj is RunEnum)
{
RunEnum runEnum = (RunEnum)e.obj_MessageObj;

Direction = runEnum == RunEnum.Run ? 1 : ((runEnum == RunEnum.Run_Left)?2:0);
}
}
}
catch (Exception ex)
{

}
}

private void Refursh()
{
if (Direction == 1)
{
storyboard.Begin();
storyboard1.Stop();
}
else if (Direction == 2)
{
storyboard.Stop();
storyboard1.Begin();
}
else
{
storyboard.Stop();
storyboard1.Stop();
}
}

public void RunNameRefresh()
{
get { return (MessageNameEnum)GetValue(EventNameProperty); }
set { SetValue(EventNameProperty, value); }
}
public static readonly DependencyProperty EventNameProperty =
DependencyProperty.Register("EventName", typeof(MessageNameEnum), typeof(NewConveyorBelt), new PropertyMetadata(MessageNameEnum.Null));
#endregion
}




+ 91
- 17
BPASmartClient.SCADAControl/Silos.xaml.cs Visa fil

@@ -1,4 +1,9 @@
using BPASmartClient.MessageName;
using BPASmartClient.Compiler;
using BPASmartClient.MessageCommunication;
using BPASmartClient.MessageCommunication.MsgControl;
using BPASmartClient.MessageName;
using BPASmartClient.MessageName.Enum.物料仓;
using BPASmartClient.MessageName.Enum.运行状态;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -24,26 +29,26 @@ namespace BPASmartClient.SCADAControl
/// </summary>
public partial class Silos : UserControl, IExecutable
{
#region 临时变量
TextBlock textBlockCLKZ = null;
Ellipse ellipseControl = null;
Storyboard storyboard = new Storyboard();
#endregion

public Silos()
{
InitializeComponent();
this.DataContext = this;
Width = 180;
Height = 270;
Value = 25.23;
Value = "25.23";
Title = "香料";
Text = "1";
this.SizeChanged += Silos_SizeChanged; ;
}


public string ControlType => "物料仓";

private bool isExecuteState;
public bool IsExecuteState
{
@@ -127,16 +132,13 @@ namespace BPASmartClient.SCADAControl

#region 属性
[Category("值设定")]
public double Value
public string Value
{
get { return (double)GetValue(ValueProperty); }
get { return (string)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(double), typeof(Silos), new PropertyMetadata(0d, OnValueChanged));

private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as Silos)?.Refresh();

DependencyProperty.Register("Value", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty));
[Category("值设定")]
public string Text
{
@@ -156,14 +158,23 @@ namespace BPASmartClient.SCADAControl
DependencyProperty.Register("Title", typeof(string), typeof(Silos), new PropertyMetadata(string.Empty));

[Category("消息名称")]
public MessageNameEnum EventName
public MessageNameEnum EventRunName
{
get { return (MessageNameEnum)GetValue(EventNameProperty); }
set { SetValue(EventNameProperty, value); }
get { return (MessageNameEnum)GetValue(EventRunNameProperty); }
set { SetValue(EventRunNameProperty, value); }
}
public static readonly DependencyProperty EventNameProperty =
DependencyProperty.Register("EventName", typeof(MessageNameEnum), typeof(Silos), new PropertyMetadata(MessageNameEnum.Null,onEventValueChanged));
private static void onEventValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as Silos)?.Refresh();
public static readonly DependencyProperty EventRunNameProperty =
DependencyProperty.Register("EventRunName", typeof(MessageNameEnum), typeof(Silos), new PropertyMetadata(MessageNameEnum.Null, onEventRunNameChanged));
private static void onEventRunNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as Silos)?.RunNameRefresh();
[Category("消息名称")]
public MessageNameEnum EventDataName
{
get { return (MessageNameEnum)GetValue(EventDataNameProperty); }
set { SetValue(EventDataNameProperty, value); }
}
public static readonly DependencyProperty EventDataNameProperty =
DependencyProperty.Register("EventDataName", typeof(MessageNameEnum), typeof(Silos), new PropertyMetadata(MessageNameEnum.Null, onEventDataNameChanged));
private static void onEventDataNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => (d as Silos)?.DataNameRefresh();
[Category("值设定")]
public int Direction
{
@@ -180,6 +191,9 @@ namespace BPASmartClient.SCADAControl
#endregion

#region 函数
/// <summary>
/// 值变化刷新
/// </summary>
public void Refresh()
{
if (ellipseControl != null)
@@ -204,12 +218,72 @@ namespace BPASmartClient.SCADAControl
}
}
}
/// <summary>
/// 运行名称变化事件
/// </summary>
public void RunNameRefresh()
{
}
/// <summary>
/// 数据名称变化事件
/// </summary>
public void DataNameRefresh()
{

}
#endregion

#region 运行事件
public void Register()
{
Class_InnerMessageBus.GetInstance().ListenMessage(this, EventRunName.ToString(), "EventRunNameHandler");
Class_InnerMessageBus.GetInstance().ListenMessage(this, EventDataName.ToString(), "EventDataNameHandler");
}

public void EventRunNameHandler(object sender, InnerMessageEventArgs e)
{
try
{
if (IsExecuteState = true)
{
if (e.obj_MessageObj is RunEnum)
{
RunEnum runEnum = (RunEnum)e.obj_MessageObj;
Direction = runEnum == RunEnum.Run ? 1 : 2;
}
}
}
catch (Exception ex)
{

}
}

public void EventDataNameHandler(object sender, InnerMessageEventArgs e)
{
try
{
if (IsExecuteState = true)
{
if (e.obj_MessageObj is SilosMessageModel)
{
SilosMessageModel silosMessageModel = (SilosMessageModel)e.obj_MessageObj;
if (silosMessageModel.id == Text)
{
Title=silosMessageModel.Title;
Value= silosMessageModel.Value;
}
}
}
}
catch (Exception ex)
{

}
}
#endregion

}
}

+ 9
- 0
SCADA.Test/App.xaml Visa fil

@@ -0,0 +1,9 @@
<Application x:Class="SCADA.Test.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SCADA.Test"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>

+ 17
- 0
SCADA.Test/App.xaml.cs Visa fil

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace SCADA.Test
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

+ 10
- 0
SCADA.Test/AssemblyInfo.cs Visa fil

@@ -0,0 +1,10 @@
using System.Windows;

[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]

+ 32
- 0
SCADA.Test/Converters/ZoomConverter.cs Visa fil

@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;


namespace SCADA.Test.Converters
{
public class ZoomConverter : IValueConverter
{
public bool IsHeight { get; set; }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (double.TryParse(value.ToString(), out double zoom))
{
return IsHeight ? zoom * 1080 : zoom * 1920;
}
else
{
return IsHeight ? 1080 : 1920;
}
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
}

+ 18
- 0
SCADA.Test/MainWindow.xaml Visa fil

@@ -0,0 +1,18 @@
<Window x:Class="SCADA.Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SCADA.Test"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Click="Button_Click">加载文件</Button>

<local:RunCanvas Grid.Row="1" x:Name="runCanvas"/>
</Grid>
</Window>

+ 74
- 0
SCADA.Test/MainWindow.xaml.cs Visa fil

@@ -0,0 +1,74 @@
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace SCADA.Test
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
List<FrameworkElement> Children = new List<FrameworkElement>();

public MainWindow()
{
InitializeComponent();
}

#region 加载数据
/// <summary>
/// 加载数据
/// </summary>
public void LoadingData(string path)
{
//加载控件
Children.Clear();
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Unicode))
{
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
//if (!str.Contains("NewConveyorBelt"))
{
var ele = XamlReader.Parse(str) as FrameworkElement;
Children.Add(ele);
}

}
}
if (Children.Count > 0)
{
runCanvas.Run(Children);
}
}
#endregion

private void Button_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "布局文件|*.lay";
if (ofd.ShowDialog() ==true)
{
LoadingData(ofd.FileName);
}

}
}
}

+ 32
- 0
SCADA.Test/RunCanvas.xaml Visa fil

@@ -0,0 +1,32 @@
<UserControl x:Class="SCADA.Test.RunCanvas"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:con="clr-namespace:SCADA.Test.Converters"
xmlns:local="clr-namespace:SCADA.Test"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<con:ZoomConverter x:Key="ZoomX" IsHeight="False"/>
<con:ZoomConverter x:Key="ZoomY" IsHeight="True"/>
</UserControl.Resources>
<Grid ClipToBounds="True">
<Canvas x:Name="RootCanvas" ClipToBounds="True" Background="Transparent" MouseLeftButtonUp="RootCanvas_MouseLeftButtonUp"
MouseMove="RootCanvas_MouseMove" MouseLeftButtonDown="RootCanvas_MouseLeftButtoDown" MouseWheel="RootCanvas_MouseWheel">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform x:Name="Scale"/>
<TranslateTransform x:Name="Translate"/>
</TransformGroup>
</Canvas.RenderTransform>
</Canvas>

<Grid VerticalAlignment="Bottom" Background="#4B959595">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="8 0">
<CheckBox x:Name="DragEnable" Content="拖动" Margin="4"/>
<CheckBox x:Name="ZoomEnable" Content="缩放" Margin="4"/>
</StackPanel>
</Grid>
</Grid>
</UserControl>

+ 132
- 0
SCADA.Test/RunCanvas.xaml.cs Visa fil

@@ -0,0 +1,132 @@
using BPASmartClient.Compiler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace SCADA.Test
{
/// <summary>
/// RunCanvas.xaml 的交互逻辑
/// </summary>
public partial class RunCanvas : UserControl
{
public RunCanvas()
{
InitializeComponent();
Unloaded += (s, e) => Destory();
}

/// <summary>
/// Dispose子集
/// </summary>
public void Destory()
{
foreach (var item in RootCanvas.Children)
{
if (item is IDisposable disposable)
{
disposable.Dispose();
}
}
}

public void Run(List<FrameworkElement> canvas)
{
RootCanvas.Children.Clear();
foreach (FrameworkElement element in canvas)
{
if (element.GetType().GetInterface("IExecutable") != null)
{
element.GetType().GetProperty("IsExecuteState").SetValue(element, true);
}

if (element is IExecutable executable)
executable.IsExecuteState = true;

RootCanvas.Children.Add(element);
RegisterJsName(element);
}
}

// 注册名称到Js
static void RegisterJsName(FrameworkElement element)
{
Config.GetInstance().SetVariable(element.Name, element);
if (element is Panel panel)
{
foreach (var item in panel.Children)
{
RegisterJsName(item as FrameworkElement);
}
}
}

#region 拖动与缩放
private void RootCanvas_MouseMove(object sender, MouseEventArgs e)
{
if (DragEnable.IsChecked == false)
{
return;
}

if (e.LeftButton == MouseButtonState.Pressed && isPressed)
{
Point point = e.GetPosition(this);
var movex = (point.X - last.X);
var movey = (point.Y - last.Y);

Translate.X += movex;
Translate.Y += movey;
last = point;

}
}

bool isPressed = false;
Point last;//记录上次鼠标坐标位置
private void RootCanvas_MouseLeftButtoDown(object sender, MouseButtonEventArgs e)
{
last = e.GetPosition(this);
isPressed = true;
}

private void RootCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
isPressed = false;
}

// 缩放
private void RootCanvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
if (ZoomEnable.IsChecked == false)
{
return;
}
var zoomS = (e.Delta / 960d);
var zoom = zoomS + Scale.ScaleX;
if (zoom > 3 || zoom < 0.8)
{
return;
}
Scale.ScaleX = Scale.ScaleY = zoom;

Point mouse = e.GetPosition(RootCanvas);
Point newMouse = new Point(mouse.X * zoomS, mouse.Y * zoomS);

Translate.X -= newMouse.X;
Translate.Y -= newMouse.Y;
}
#endregion
}
}

+ 15
- 0
SCADA.Test/SCADA.Test.csproj Visa fil

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\BPASmartClient.Compiler\BPASmartClient.Compiler.csproj" />
<ProjectReference Include="..\BPASmartClient.SCADAControl\BPASmartClient.SCADAControl.csproj" />
</ItemGroup>

</Project>

Binär
Visa fil


+ 27
- 1
SmartClient.sln Visa fil

@@ -148,7 +148,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2.消息名称管理", "2.
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3.组态控件集", "3.组态控件集", "{5300552F-560D-474A-8D96-0A2747D08F64}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BPASmartClient.Compiler", "BPASmartClient.Compiler\BPASmartClient.Compiler.csproj", "{B6213013-2A0E-41DD-BA9F-775D53C19374}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BPASmartClient.Compiler", "BPASmartClient.Compiler\BPASmartClient.Compiler.csproj", "{B6213013-2A0E-41DD-BA9F-775D53C19374}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4.界面加载实例", "4.界面加载实例", "{309D579E-DDA8-4B01-A0AA-0F381BC37801}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SCADA.Test", "SCADA.Test\SCADA.Test.csproj", "{1696D557-C908-4136-A5F2-FF59D69E642C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -1384,6 +1388,26 @@ Global
{B6213013-2A0E-41DD-BA9F-775D53C19374}.Release|x64.Build.0 = Release|Any CPU
{B6213013-2A0E-41DD-BA9F-775D53C19374}.Release|x86.ActiveCfg = Release|Any CPU
{B6213013-2A0E-41DD-BA9F-775D53C19374}.Release|x86.Build.0 = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|ARM.Build.0 = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|ARM64.Build.0 = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|x64.ActiveCfg = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|x64.Build.0 = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|x86.ActiveCfg = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Debug|x86.Build.0 = Debug|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|Any CPU.Build.0 = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|ARM.ActiveCfg = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|ARM.Build.0 = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|ARM64.ActiveCfg = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|ARM64.Build.0 = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|x64.ActiveCfg = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|x64.Build.0 = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|x86.ActiveCfg = Release|Any CPU
{1696D557-C908-4136-A5F2-FF59D69E642C}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1453,6 +1477,8 @@ Global
{28BE5235-2399-4EBA-B1F0-88E0F32AC869} = {7B0175AD-BB74-4A98-B9A7-1E289032485E}
{5300552F-560D-474A-8D96-0A2747D08F64} = {7B0175AD-BB74-4A98-B9A7-1E289032485E}
{B6213013-2A0E-41DD-BA9F-775D53C19374} = {5300552F-560D-474A-8D96-0A2747D08F64}
{309D579E-DDA8-4B01-A0AA-0F381BC37801} = {7B0175AD-BB74-4A98-B9A7-1E289032485E}
{1696D557-C908-4136-A5F2-FF59D69E642C} = {309D579E-DDA8-4B01-A0AA-0F381BC37801}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9AEC9B81-0222-4DE9-B642-D915C29222AC}


Laddar…
Avbryt
Spara