using Microsoft.VisualStudio.Extensibility; using Microsoft.VisualStudio.Extensibility.DebuggerVisualizers; using Microsoft.VisualStudio.RpcContracts.RemoteUI; using NamedPipes; using System; using System.Collections; using System.Collections.Generic; using System.Numerics; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using Vector3VisualizerSource; namespace Vector3Visualizer; [VisualStudioContribution] internal sealed class Vector3DebuggerVisualizerProvider : DebuggerVisualizerProvider { [System.Diagnostics.CodeAnalysis.SuppressMessage("ConstantExpressionEvaluator", "CEE0027:String not localized", Justification = "")] public override DebuggerVisualizerProviderConfiguration DebuggerVisualizerProviderConfiguration => new( [ new VisualizerTargetType("Vector3 Visualizer", "System.Numerics.Vector3, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"), new VisualizerTargetType("Vector3[] Visualizer", typeof(Vector3[])), new VisualizerTargetType("Quaternion Visualizer", typeof(Quaternion)), new VisualizerTargetType("Frame Visualizer", "Num.Roto.Visualization.Math.Geometry.Frame, Num.Roto.Visualization.Math, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"), new VisualizerTargetType("Frame Array Visualizer", "Num.Roto.Visualization.Math.Geometry.Frame[], Num.Roto.Visualization.Math, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"), //not working new VisualizerTargetType("Frame List Visualizer", "System.Collections.Generic.List, Num.Roto.Visualization.Math, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"), ]) { VisualizerObjectSourceType = new VisualizerObjectSourceType(typeof(Vector3ObjectSource)), Style = VisualizerStyle.ToolWindow, }; private static NamedPipeClient? PipeClient { get; set; } private static void SendToVisualizer(Vector3Model? vector3Model) { if (vector3Model is null) return; PipeClient ??= new NamedPipeClient("testPipe", serverName: @"TestServer", logger: (m) => Console.WriteLine(m)); _ = PipeClient.SetMessageAsync($"Hello from {nameof(CreateVisualizerAsync)},vector3Model = {vector3Model.Vector3},{vector3Model.Quaternion}"); } public override async Task CreateVisualizerAsync(VisualizerTarget visualizerTarget, CancellationToken cancellationToken) { Vector3Model? model = await visualizerTarget.ObjectSource.RequestDataAsync(jsonSerializer: null, cancellationToken); SendToVisualizer(model); var control = new Vector3VisualizerUserControl(dataContext: model); return await Task.FromResult(control); //return await Task.FromResult(new MyRemoteUserControl(model)); } }