Commit 7ab98695 by 鲁志-悦动

落盘发给音视频start、end时间戳由算法提供

parent 28532903
...@@ -16,6 +16,11 @@ namespace VIZ.FGOUT.Connection ...@@ -16,6 +16,11 @@ namespace VIZ.FGOUT.Connection
/// </summary> /// </summary>
private static ILog log = LogManager.GetLogger(typeof(AlgorithmPackageProvider)); private static ILog log = LogManager.GetLogger(typeof(AlgorithmPackageProvider));
/// <summary>
/// 算法数据包处理器
/// </summary>
private List<IAlgorithmPackageProvider> providers = new List<IAlgorithmPackageProvider>();
public AlgorithmPackageProvider() public AlgorithmPackageProvider()
{ {
// AlgorithmRecvPackage__detect package = Newtonsoft.Json.JsonConvert.DeserializeObject<AlgorithmRecvPackage__detect>("{\"signal\": \"detect\", \"bboxes\": [[3392, 576, 3834, 1421], [755, 916, 1195, 1292], [3675, 710, 3839, 1103]]}"); // AlgorithmRecvPackage__detect package = Newtonsoft.Json.JsonConvert.DeserializeObject<AlgorithmRecvPackage__detect>("{\"signal\": \"detect\", \"bboxes\": [[3392, 576, 3834, 1421], [755, 916, 1195, 1292], [3675, 710, 3839, 1103]]}");
...@@ -25,14 +30,11 @@ namespace VIZ.FGOUT.Connection ...@@ -25,14 +30,11 @@ namespace VIZ.FGOUT.Connection
this.providers.Add(new AlgorithmProvider__crop_roi()); this.providers.Add(new AlgorithmProvider__crop_roi());
// 算法检测 // 算法检测
this.providers.Add(new AlgorithmProvider__detect()); this.providers.Add(new AlgorithmProvider__detect());
// 算法落盘
this.providers.Add(new AlgorithmProvider__start_end());
} }
/// <summary> /// <summary>
/// 算法数据包处理器
/// </summary>
private List<IAlgorithmPackageProvider> providers = new List<IAlgorithmPackageProvider>();
/// <summary>
/// 执行 /// 执行
/// </summary> /// </summary>
/// <param name="info">信息</param> /// <param name="info">信息</param>
......
...@@ -85,5 +85,10 @@ ...@@ -85,5 +85,10 @@
/// 稍等,等一下 /// 稍等,等一下
/// </summary> /// </summary>
public const string HOLD_ON = "hold_on"; public const string HOLD_ON = "hold_on";
/// <summary>
/// 落盘,开始结束时间戳
/// </summary>
public const string START_END = "start_end";
} }
} }
using System;
using VIZ.FGOUT.Domain;
using VIZ.Framework.Connection;
namespace VIZ.FGOUT.Connection
{
public class AlgorithmProvider__start_end : IAlgorithmPackageProvider
{
/// <summary>
/// 信号
/// </summary>
public string Signal { get; } = AlgorithmPackageSignal.START_END;
/// <summary>
/// 执行
/// </summary>
/// <param name="info"></param>
/// <exception cref="NotImplementedException"></exception>
public void Execute(ConnSingleJsonInfo info)
{
AlgorithmRecvPackage__start_end package = Newtonsoft.Json.JsonConvert.DeserializeObject<AlgorithmRecvPackage__start_end>(info.Json);
AlgorithmMessage__start_end message = new AlgorithmMessage__start_end();
message.AlgorithmID = package.id;
message.start = package.start;
message.end = package.end;
ApplicationDomainEx.MessageManager.Send(message);
}
}
}
namespace VIZ.FGOUT.Connection
{
public class AlgorithmRecvPackage__start_end : AlgorithmPackageBase
{
/// <summary>
/// 信号
/// <see cref="AlgorithmPackageSignal"/>
/// </summary>
public override string signal { get; set; } = AlgorithmPackageSignal.START_END;
/// <summary>
/// 开始时间戳
/// </summary>
public long start { get; set; }
/// <summary>
/// 结束时间戳
/// </summary>
public long end { get; set; }
}
}
namespace VIZ.FGOUT.Connection.UDP.Clip.Signal.Send
{
public class SaveMatImagePackage
{
public string type { get;set; }
public long start_time { get; set; }
public long end_time { get; set;}
}
}
...@@ -81,11 +81,13 @@ ...@@ -81,11 +81,13 @@
<Compile Include="UDP\Algorithm\Provider\AlgorithmProvider__checked_ok.cs" /> <Compile Include="UDP\Algorithm\Provider\AlgorithmProvider__checked_ok.cs" />
<Compile Include="UDP\Algorithm\Provider\AlgorithmProvider__crop_roi..cs" /> <Compile Include="UDP\Algorithm\Provider\AlgorithmProvider__crop_roi..cs" />
<Compile Include="UDP\Algorithm\Provider\AlgorithmProvider__detect.cs" /> <Compile Include="UDP\Algorithm\Provider\AlgorithmProvider__detect.cs" />
<Compile Include="UDP\Algorithm\Provider\AlgorithmProvider__start_end.cs" />
<Compile Include="UDP\Algorithm\Sender\AlgorithmSender.cs" /> <Compile Include="UDP\Algorithm\Sender\AlgorithmSender.cs" />
<Compile Include="UDP\Algorithm\Sender\AlgorithmSenderOption.cs" /> <Compile Include="UDP\Algorithm\Sender\AlgorithmSenderOption.cs" />
<Compile Include="UDP\Algorithm\Signal\Recv\AlgorithmRecvPackage__checked_ok.cs" /> <Compile Include="UDP\Algorithm\Signal\Recv\AlgorithmRecvPackage__checked_ok.cs" />
<Compile Include="UDP\Algorithm\Signal\Recv\AlgorithmRecvPackage__crop_roi.cs" /> <Compile Include="UDP\Algorithm\Signal\Recv\AlgorithmRecvPackage__crop_roi.cs" />
<Compile Include="UDP\Algorithm\Signal\Recv\AlgorithmRecvPackage__detect.cs" /> <Compile Include="UDP\Algorithm\Signal\Recv\AlgorithmRecvPackage__detect.cs" />
<Compile Include="UDP\Algorithm\Signal\Recv\AlgorithmRecvPackage__start_end.cs" />
<Compile Include="UDP\Algorithm\Signal\Send\AlgorithmPackage_Figout_sports_model.cs" /> <Compile Include="UDP\Algorithm\Signal\Send\AlgorithmPackage_Figout_sports_model.cs" />
<Compile Include="UDP\Algorithm\Signal\Send\AlgorithmPackage_Figout_new_model.cs" /> <Compile Include="UDP\Algorithm\Signal\Send\AlgorithmPackage_Figout_new_model.cs" />
<Compile Include="UDP\Algorithm\Signal\Send\AlgorithmPackage_Figout_model.cs" /> <Compile Include="UDP\Algorithm\Signal\Send\AlgorithmPackage_Figout_model.cs" />
...@@ -103,6 +105,7 @@ ...@@ -103,6 +105,7 @@
<Compile Include="UDP\Clip\Sender\ClipSender.cs" /> <Compile Include="UDP\Clip\Sender\ClipSender.cs" />
<Compile Include="UDP\Clip\Signal\Send\ClipPackage__crop_roi.cs" /> <Compile Include="UDP\Clip\Signal\Send\ClipPackage__crop_roi.cs" />
<Compile Include="UDP\Clip\Signal\Send\ReplayPackage.cs" /> <Compile Include="UDP\Clip\Signal\Send\ReplayPackage.cs" />
<Compile Include="UDP\Clip\Signal\Send\SaveMatImagePackage.cs" />
<Compile Include="UDP\Clip\Signal\Send\UEEvent.cs" /> <Compile Include="UDP\Clip\Signal\Send\UEEvent.cs" />
<Compile Include="UDP\Clip\Signal\Send\UEPackage.cs" /> <Compile Include="UDP\Clip\Signal\Send\UEPackage.cs" />
<Compile Include="UDP\Clip\Signal\Send\VideoData.cs" /> <Compile Include="UDP\Clip\Signal\Send\VideoData.cs" />
......
879982a20dca0c414aba6411ab84437d1681c4ab 6b5fc1ed04f1a72b04463bf148afef51d446d299
namespace VIZ.FGOUT.Domain
{
public class AlgorithmMessage__start_end : AlgorithmMessageBase
{
/// <summary>
/// 开始时间戳
/// </summary>
public long start { get; set; }
/// <summary>
/// 结束时间戳
/// </summary>
public long end { get; set; }
}
}
...@@ -73,6 +73,7 @@ ...@@ -73,6 +73,7 @@
<Compile Include="Message\Algorithm\Implementation\AlgorithmMessage__checked_ok.cs" /> <Compile Include="Message\Algorithm\Implementation\AlgorithmMessage__checked_ok.cs" />
<Compile Include="Message\Algorithm\Implementation\AlgorithmMessage__crop_roi.cs" /> <Compile Include="Message\Algorithm\Implementation\AlgorithmMessage__crop_roi.cs" />
<Compile Include="Message\Algorithm\Implementation\AlgorithmMessage__detect.cs" /> <Compile Include="Message\Algorithm\Implementation\AlgorithmMessage__detect.cs" />
<Compile Include="Message\Algorithm\Implementation\AlgorithmMessage__start_end.cs" />
<Compile Include="Message\Algorithm\Interface\IAlgorithmMessage__roi.cs" /> <Compile Include="Message\Algorithm\Interface\IAlgorithmMessage__roi.cs" />
<Compile Include="Message\Setting\CleanPlaceModel.cs" /> <Compile Include="Message\Setting\CleanPlaceModel.cs" />
<Compile Include="Message\Setting\EndPlaceModel.cs" /> <Compile Include="Message\Setting\EndPlaceModel.cs" />
......
94b031c27387c7e09c9e5e069835b4c5e228cb5d f7bf41927ace3a05c36b8a463696a418ba43880e
...@@ -8,6 +8,7 @@ using System.Threading.Tasks; ...@@ -8,6 +8,7 @@ using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Interop; using System.Windows.Interop;
using VIZ.FGOUT.Connection; using VIZ.FGOUT.Connection;
using VIZ.FGOUT.Connection.UDP.Clip.Signal.Send;
using VIZ.FGOUT.Domain; using VIZ.FGOUT.Domain;
using VIZ.FGOUT.Domain.Message.Setting; using VIZ.FGOUT.Domain.Message.Setting;
using VIZ.FGOUT.Storage; using VIZ.FGOUT.Storage;
...@@ -673,18 +674,24 @@ namespace VIZ.FGOUT.Module ...@@ -673,18 +674,24 @@ namespace VIZ.FGOUT.Module
/// </summary> /// </summary>
private void MatImageCommand() private void MatImageCommand()
{ {
ReplayPackage replayPackage = new ReplayPackage(); if (IsMatImage)
replayPackage.type = "LOADMASK"; {
VideoData data = new VideoData(); var config = ApplicationDomainEx.LiteDbContext.AlgorithmSaveMatImage.FindAll().FirstOrDefault();
if(IsMatImage) SaveMatImagePackage package = new SaveMatImagePackage();
data.loadFlag = 1; package.type = "LOADMASK";
else package.start_time = config.start;
data.loadFlag = 0; package.end_time = config.end;
replayPackage.data = data; // 发送UDP命令
// 发送UDP命令 UdpEndpointManager manager = ConnectionManager.UdpConnection.GetEndpointManager(NDIViewKeys.CAM_1__CLIP);
UdpEndpointManager manager = ConnectionManager.UdpConnection.GetEndpointManager(NDIViewKeys.CAM_1__CLIP); if (manager == null) return;
if (manager == null) return; manager.SendJson(package);
manager.SendJson(replayPackage); }
//ReplayPackage replayPackage = new ReplayPackage();
// data.loadFlag = 1;
//else
// data.loadFlag = 0;
//VideoData data = new VideoData();
//replayPackage.data = data;
} }
private bool isMatImage = false; private bool isMatImage = false;
......
...@@ -113,15 +113,10 @@ namespace VIZ.FGOUT.Module ...@@ -113,15 +113,10 @@ namespace VIZ.FGOUT.Module
public override void InitAlgorithm() public override void InitAlgorithm()
{ {
UdpEndpointManager manager = ConnectionManager.UdpConnection.GetEndpointManager(NDIViewKeys.CAM_1); UdpEndpointManager manager = ConnectionManager.UdpConnection.GetEndpointManager(NDIViewKeys.CAM_1);
AlgorithmSenderOption option = new AlgorithmSenderOption(); AlgorithmSenderOption option = new AlgorithmSenderOption();
AlgorithmPackage_Figout_model package = this.bulid(null, null); AlgorithmPackage_Figout_model package = this.bulid(null, null);
package.mode = AlgorithmPackageSignal.auto_mode; package.mode = AlgorithmPackageSignal.auto_mode;
AlgorithmSender.AutoMode(manager,package,option); AlgorithmSender.AutoMode(manager,package,option);
} }
/// <summary> /// <summary>
......
using SharpDX.Mathematics.Interop; using SharpDX.Mathematics.Interop;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using VIZ.FGOUT.Domain; using VIZ.FGOUT.Domain;
using VIZ.FGOUT.Storage; using VIZ.FGOUT.Storage;
using VIZ.Framework.Common; using VIZ.Framework.Common;
...@@ -14,6 +15,17 @@ namespace VIZ.FGOUT.Module ...@@ -14,6 +15,17 @@ namespace VIZ.FGOUT.Module
/// </summary> /// </summary>
public partial class NDIViewModel public partial class NDIViewModel
{ {
private void OnAlgorithmMessage__start_end(AlgorithmMessage__start_end msg)
{
var config = ApplicationDomainEx.LiteDbContext.AlgorithmSaveMatImage.FindAll().FirstOrDefault();
if (config == null)
config = new AlgorithmSaveMatImage();
config.start = msg.start;
config.end = msg.end;
ApplicationDomainEx.LiteDbContext.AlgorithmSaveMatImage.Upsert(config);
}
/// <summary> /// <summary>
/// 处理算法初始化完成消息 /// 处理算法初始化完成消息
/// </summary> /// </summary>
......
...@@ -123,6 +123,8 @@ namespace VIZ.FGOUT.Module ...@@ -123,6 +123,8 @@ namespace VIZ.FGOUT.Module
ApplicationDomainEx.MessageManager.Register<AlgorithmMessage__detect>(this, this.OnAlgorithmMessage__detect); ApplicationDomainEx.MessageManager.Register<AlgorithmMessage__detect>(this, this.OnAlgorithmMessage__detect);
// 算法跟踪消息--裁切 // 算法跟踪消息--裁切
ApplicationDomainEx.MessageManager.Register<AlgorithmMessage__crop_roi>(this, this.OnAlgorithmMessage__crop_roi); ApplicationDomainEx.MessageManager.Register<AlgorithmMessage__crop_roi>(this, this.OnAlgorithmMessage__crop_roi);
// 算法落盘开始、结束时间戳消息
ApplicationDomainEx.MessageManager.Register<AlgorithmMessage__start_end>(this, this.OnAlgorithmMessage__start_end);
NDIView nDIView = this.GetView<NDIView>(); NDIView nDIView = this.GetView<NDIView>();
// 开始的位置 // 开始的位置
......
using log4net; using log4net;
using System; using VIZ.FGOUT.Connection;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using VIZ.Framework.Core;
using VIZ.Framework.Connection;
using VIZ.Framework.Module;
using VIZ.FGOUT.Domain; using VIZ.FGOUT.Domain;
using VIZ.FGOUT.Storage; using VIZ.FGOUT.Storage;
using VIZ.FGOUT.Connection; using VIZ.Framework.Connection;
using VIZ.Framework.Core;
using VIZ.Framework.Module;
namespace VIZ.FGOUT.Module namespace VIZ.FGOUT.Module
{ {
...@@ -40,7 +33,6 @@ namespace VIZ.FGOUT.Module ...@@ -40,7 +33,6 @@ namespace VIZ.FGOUT.Module
UdpConnection conn = new UdpConnection(); UdpConnection conn = new UdpConnection();
// 算法包解析器 // 算法包解析器
conn.PackageProvider = new AlgorithmPackageProvider(); conn.PackageProvider = new AlgorithmPackageProvider();
// ----------------------------------------------------------------- // -----------------------------------------------------------------
// 客户端 // 客户端
string clientIP = ApplicationDomainEx.IniStorage.GetValue<UdpConfig, string>(p => p.UDP_BINDING_IP); string clientIP = ApplicationDomainEx.IniStorage.GetValue<UdpConfig, string>(p => p.UDP_BINDING_IP);
......
...@@ -79,8 +79,6 @@ namespace VIZ.FGOUT.Module ...@@ -79,8 +79,6 @@ namespace VIZ.FGOUT.Module
public long timecode { get; set; } public long timecode { get; set; }
public VCommand StopVideoCommand { get; set; } public VCommand StopVideoCommand { get; set; }
private void StopVideo() private void StopVideo()
......
...@@ -10,11 +10,11 @@ none ...@@ -10,11 +10,11 @@ none
false false
DEBUG;TRACE DEBUG;TRACE
22-1559853185 22-808211288
4-1529606353 4-699044453
90-1236168610 90-747441034
151915249285 151674092382
NDIMainView\View\NDIMainView.xaml;NDIPreviewView\View\NDIPreviewView.xaml;NDISettingView\View\AlgorithmSettingPanelView.xaml;NDISettingView\View\Algorithm\AlgorithmCablewayPanelView.xaml;NDISettingView\View\Algorithm\AlgorithmNearPanelView.xaml;NDISettingView\View\Algorithm\AlgorithmSinglePanelView.xaml;NDISettingView\View\Algorithm\AlgorithmSixteenPanelView.xaml;NDISettingView\View\Algorithm\AlgorithmTacticsPanelView.xaml;NDISettingView\View\NDISettingPanelView.xaml;NDISettingView\View\NDISettingView.xaml;NDIView\View\NDIView.xaml;SystemSetting\View\AboutPanelView.xaml;SystemSetting\View\CheckDataPanelView.xaml;SystemSetting\View\HotkeySettingPanelView.xaml;SystemSetting\View\MattingImagePanelView.xaml;SystemSetting\View\PackageSettingPanelView.xaml;SystemSetting\View\PreviewSettingPanelView.xaml;SystemSetting\View\ReplayPanelView.xaml;SystemSetting\View\StyleSettingPanelView.xaml;SystemSetting\View\SystemSettingView.xaml;SystemSetting\View\UEControlPanelView.xaml;SystemSetting\View\UESettingPanelView.xaml; NDIMainView\View\NDIMainView.xaml;NDIPreviewView\View\NDIPreviewView.xaml;NDISettingView\View\AlgorithmSettingPanelView.xaml;NDISettingView\View\Algorithm\AlgorithmCablewayPanelView.xaml;NDISettingView\View\Algorithm\AlgorithmNearPanelView.xaml;NDISettingView\View\Algorithm\AlgorithmSinglePanelView.xaml;NDISettingView\View\Algorithm\AlgorithmSixteenPanelView.xaml;NDISettingView\View\Algorithm\AlgorithmTacticsPanelView.xaml;NDISettingView\View\NDISettingPanelView.xaml;NDISettingView\View\NDISettingView.xaml;NDIView\View\NDIView.xaml;SystemSetting\View\AboutPanelView.xaml;SystemSetting\View\CheckDataPanelView.xaml;SystemSetting\View\HotkeySettingPanelView.xaml;SystemSetting\View\MattingImagePanelView.xaml;SystemSetting\View\PackageSettingPanelView.xaml;SystemSetting\View\PreviewSettingPanelView.xaml;SystemSetting\View\ReplayPanelView.xaml;SystemSetting\View\StyleSettingPanelView.xaml;SystemSetting\View\SystemSettingView.xaml;SystemSetting\View\UEControlPanelView.xaml;SystemSetting\View\UESettingPanelView.xaml;
True False
namespace VIZ.FGOUT.Storage
{
/// <summary>
/// 落盘
/// </summary>
public class AlgorithmSaveMatImage : AlgorithmBase
{
/// <summary>
/// 开始时间戳
/// </summary>
public long start { get; set; }
/// <summary>
/// 结束时间戳
/// </summary>
public long end { get; set; }
}
}
...@@ -36,6 +36,7 @@ namespace VIZ.FGOUT.Storage ...@@ -36,6 +36,7 @@ namespace VIZ.FGOUT.Storage
this.AlgorithmSixteen = this.Database.GetCollection<AlgorithmSixteen>(); this.AlgorithmSixteen = this.Database.GetCollection<AlgorithmSixteen>();
this.AlgorithmTactics = this.Database.GetCollection<AlgorithmTactics>(); this.AlgorithmTactics = this.Database.GetCollection<AlgorithmTactics>();
this.AlgorithmCableway = this.Database.GetCollection<AlgorithmCableway>(); this.AlgorithmCableway = this.Database.GetCollection<AlgorithmCableway>();
this.AlgorithmSaveMatImage = this.Database.GetCollection<AlgorithmSaveMatImage>();
// 视图设置 // 视图设置
this.ViewConfig = this.Database.GetCollection<NdiViewConfig>(); this.ViewConfig = this.Database.GetCollection<NdiViewConfig>();
// 系统设置 // 系统设置
...@@ -101,6 +102,11 @@ namespace VIZ.FGOUT.Storage ...@@ -101,6 +102,11 @@ namespace VIZ.FGOUT.Storage
public ILiteCollection<AlgorithmCableway> AlgorithmCableway { get; private set; } public ILiteCollection<AlgorithmCableway> AlgorithmCableway { get; private set; }
/// <summary> /// <summary>
/// 落盘
/// </summary>
public ILiteCollection<AlgorithmSaveMatImage> AlgorithmSaveMatImage { get; private set; }
/// <summary>
/// NDI视图配置 /// NDI视图配置
/// </summary> /// </summary>
public ILiteCollection<NdiViewConfig> ViewConfig { get; private set; } public ILiteCollection<NdiViewConfig> ViewConfig { get; private set; }
...@@ -151,6 +157,7 @@ namespace VIZ.FGOUT.Storage ...@@ -151,6 +157,7 @@ namespace VIZ.FGOUT.Storage
this.AlgorithmSixteen = null; this.AlgorithmSixteen = null;
this.AlgorithmTactics = null; this.AlgorithmTactics = null;
this.AlgorithmCableway = null; this.AlgorithmCableway = null;
this.AlgorithmSaveMatImage = null;
this.ViewConfig = null; this.ViewConfig = null;
this.SystemConfig = null; this.SystemConfig = null;
this.HotkeyConfig = null; this.HotkeyConfig = null;
......
...@@ -129,6 +129,7 @@ ...@@ -129,6 +129,7 @@
<Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmCableway.cs" /> <Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmCableway.cs" />
<Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmFiguerOut.cs" /> <Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmFiguerOut.cs" />
<Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmNear.cs" /> <Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmNear.cs" />
<Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmSaveMatImage.cs" />
<Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmSingle.cs" /> <Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmSingle.cs" />
<Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmSixteen.cs" /> <Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmSixteen.cs" />
<Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmTactics.cs" /> <Compile Include="LiteDB\Algorithm\Algorithm\AlgorithmTactics.cs" />
......
4fad8ca766fb1cf424b3dcb63ba8bf40d009466e 4ec977c9fb9ebf766bf03f594ec0377aa78207e0
...@@ -10,11 +10,11 @@ none ...@@ -10,11 +10,11 @@ none
false false
DEBUG;TRACE DEBUG;TRACE
C:\Projects\FGOUT\VIZ.FGOUT\VIZ.FGOUT\App.xaml C:\Projects\FGOUT\VIZ.FGOUT\VIZ.FGOUT\App.xaml
21265083526 2-1347366880
6-790135758 6968741766
421356718200 43-1958993781
CloseAlgorithmWindow.xaml;MainWindow.xaml; CloseAlgorithmWindow.xaml;MainWindow.xaml;
True False
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment