80 lines
2.7 KiB
C#
80 lines
2.7 KiB
C#
|
|
using NamedPipes;
|
||
|
|
using NrxDebugVisualizer.Scenes;
|
||
|
|
using Num.Roto.Visualization.Math.Geometry;
|
||
|
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Linq;
|
||
|
|
using System.Numerics;
|
||
|
|
using System.Threading;
|
||
|
|
using KontractFrame = System.ValueTuple<System.Numerics.Vector3, System.Numerics.Quaternion, float>;
|
||
|
|
namespace NrxDebugVisualizer.Models;
|
||
|
|
|
||
|
|
internal sealed class PipeServer
|
||
|
|
{
|
||
|
|
private string PipeName { get; }
|
||
|
|
private NamedPipesServer? NamedPipesServer { get; set; }
|
||
|
|
public PipeServer(string pipeName, DebugVisualizerScene debuggerScene,CancellationToken cancellationToken)
|
||
|
|
{
|
||
|
|
PipeName = pipeName;
|
||
|
|
DebugVisualizerScene = debuggerScene;
|
||
|
|
StartPipeServer(cancellationToken);
|
||
|
|
}
|
||
|
|
private void NamedPipesServer_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||
|
|
{
|
||
|
|
if (e.PropertyName != nameof(NamedPipesServer.VisualizerModel)) return;
|
||
|
|
var visualizerObject = NamedPipesServer?.VisualizerModel;
|
||
|
|
if (visualizerObject is null) return;
|
||
|
|
|
||
|
|
SetPoint(visualizerObject.Point);
|
||
|
|
SetPointList(visualizerObject.PointArray);
|
||
|
|
SetFrame(visualizerObject.Frame);
|
||
|
|
SetFrameList(visualizerObject.FrameArray);
|
||
|
|
}
|
||
|
|
|
||
|
|
#region NamedPipesServer
|
||
|
|
private async void StartPipeServer(CancellationToken cancellationToken)
|
||
|
|
{
|
||
|
|
NamedPipesServer = new NamedPipesServer(PipeName, logger: Console.WriteLine);
|
||
|
|
NamedPipesServer.PropertyChanged += NamedPipesServer_PropertyChanged;
|
||
|
|
await NamedPipesServer.RunAsync(cancellationToken);
|
||
|
|
}
|
||
|
|
#endregion
|
||
|
|
|
||
|
|
#region DebugVisualizerScene
|
||
|
|
private DebugVisualizerScene DebugVisualizerScene { get; }
|
||
|
|
private static Frame ToFrame(KontractFrame kontractFrame)
|
||
|
|
{
|
||
|
|
var (translation, orientation, scale) = kontractFrame;
|
||
|
|
return new Frame(translation, scale, orientation);
|
||
|
|
}
|
||
|
|
private static Frame[] ToFrameArray(IEnumerable<KontractFrame> frameList)
|
||
|
|
{
|
||
|
|
return [.. frameList.Select(ToFrame)];
|
||
|
|
}
|
||
|
|
|
||
|
|
private void SetPoint(Vector3? point)
|
||
|
|
{
|
||
|
|
if (point is null) return;
|
||
|
|
DebugVisualizerScene.AddPointGeometry(point.Value, 20f);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void SetPointList(Vector3[]? pointList)
|
||
|
|
{
|
||
|
|
if (pointList == null || pointList.Length < 1) return;
|
||
|
|
DebugVisualizerScene.AddPointListGeometry(pointList, 5);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void SetFrame(KontractFrame? kontractFrame)
|
||
|
|
{
|
||
|
|
if (kontractFrame is null) return;
|
||
|
|
DebugVisualizerScene.AddFrameGeometry(ToFrame(kontractFrame.Value), 1);
|
||
|
|
}
|
||
|
|
|
||
|
|
private void SetFrameList(KontractFrame[]? frameArray)
|
||
|
|
{
|
||
|
|
if (frameArray == null || frameArray.Length < 1) return;
|
||
|
|
DebugVisualizerScene.AddFrameListGeometry(ToFrameArray(frameArray), 1);
|
||
|
|
}
|
||
|
|
#endregion
|
||
|
|
}
|