Works for IEnumerable
This commit is contained in:
@@ -27,17 +27,17 @@ internal sealed class NrxDebuggerVisualizerProvider : DebuggerVisualizerProvider
|
|||||||
};
|
};
|
||||||
public override async Task<IRemoteUserControl> CreateVisualizerAsync(VisualizerTarget visualizerTarget, CancellationToken cancellationToken)
|
public override async Task<IRemoteUserControl> CreateVisualizerAsync(VisualizerTarget visualizerTarget, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
Vector3Model? model = await visualizerTarget.ObjectSource.RequestDataAsync<Vector3Model?>(jsonSerializer: null, cancellationToken);
|
VisualizerModel? model = await visualizerTarget.ObjectSource.RequestDataAsync<VisualizerModel?>(jsonSerializer: null, cancellationToken);
|
||||||
SendToVisualizer(model);
|
SendToVisualizer(model);
|
||||||
//throw new InvalidOperationException("This is a test exception to demonstrate the visualizer. Please remove this line and implement the visualizer logic.");
|
//throw new InvalidOperationException("This is a test exception to demonstrate the visualizer. Please remove this line and implement the visualizer logic.");
|
||||||
var control = new Vector3VisualizerUserControl(dataContext: model);
|
var control = new Vector3VisualizerUserControl(dataContext: model);
|
||||||
return await Task.FromResult<IRemoteUserControl>(control);
|
return await Task.FromResult<IRemoteUserControl>(control);
|
||||||
}
|
}
|
||||||
private static NamedPipeClient? PipeClient { get; set; }
|
private static NamedPipeClient? PipeClient { get; set; }
|
||||||
private static void SendToVisualizer(Vector3Model? vector3Model)
|
private static void SendToVisualizer(VisualizerModel? visualizerModel)
|
||||||
{
|
{
|
||||||
if (vector3Model is null) return;
|
if (visualizerModel is null) return;
|
||||||
PipeClient ??= new NamedPipeClient("testPipe", serverName: @"TestServer", logger: (m) => Console.WriteLine(m));
|
PipeClient ??= new NamedPipeClient("testPipe", serverName: @"TestServer", logger: (m) => Console.WriteLine(m));
|
||||||
_ = PipeClient.SetMessageAsync($"Hello from {nameof(CreateVisualizerAsync)},vector3Model = {vector3Model.Vector3},{vector3Model.Quaternion}");
|
_ = PipeClient.SetMessageAsync($"Hello from {nameof(CreateVisualizerAsync)},visualizerModel.Content = {visualizerModel.Content}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ namespace NrxDebugVisualizer;
|
|||||||
|
|
||||||
internal sealed class Vector3VisualizerUserControl : RemoteUserControl
|
internal sealed class Vector3VisualizerUserControl : RemoteUserControl
|
||||||
{
|
{
|
||||||
public Vector3VisualizerUserControl(Vector3Model? dataContext) : base(dataContext)
|
public Vector3VisualizerUserControl(VisualizerModel? dataContext) : base(dataContext)
|
||||||
{
|
{
|
||||||
Vector3Model = (Vector3Model?)DataContext;
|
Vector3Model = (VisualizerModel?)DataContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector3Model? Vector3Model { get; }
|
public VisualizerModel? Vector3Model { get; }
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,5 @@
|
|||||||
<DataTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<DataTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<TextBox TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Content}" Grid.Column="1" Grid.Row="0" />
|
||||||
<ColumnDefinition Width="100"></ColumnDefinition>
|
|
||||||
<ColumnDefinition Width="*"></ColumnDefinition>
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="20"></RowDefinition>
|
|
||||||
<RowDefinition Height="20"></RowDefinition>
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<TextBlock Text="Vector3" Grid.Column="0" Grid.Row="0" />
|
|
||||||
<TextBlock Text="{Binding Vector3}" Grid.Column="1" Grid.Row="0" />
|
|
||||||
<TextBlock Text="Quaternion" Grid.Column="0" Grid.Row="1" />
|
|
||||||
<TextBlock Text="{Binding Quaternion}" Grid.Column="1" Grid.Row="1" />
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
using Microsoft.VisualStudio.DebuggerVisualizers;
|
using Microsoft.VisualStudio.DebuggerVisualizers;
|
||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -14,21 +17,39 @@ public class NrxVisualizerObjectSource : VisualizerObjectSource
|
|||||||
}
|
}
|
||||||
public override void GetData(object target, Stream outgoingData)
|
public override void GetData(object target, Stream outgoingData)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("GetData: objectType is: " + target.GetType().FullName);
|
var fullname = target.GetType().FullName;
|
||||||
Vector3Model vector3Model = new();
|
Trace.WriteLine("GetData: objectType is: " + fullname);
|
||||||
switch (target)
|
VisualizerModel visualizerModel = new();
|
||||||
|
switch (fullname)
|
||||||
{
|
{
|
||||||
case Vector3 vector3:
|
case "System.Numerics.Vector3":
|
||||||
vector3Model.Vector3 = vector3;
|
visualizerModel.Content = target.ToString();
|
||||||
break;
|
break;
|
||||||
case IEnumerable<Vector3> vector3List:
|
case "System.Numerics.Quaternion":
|
||||||
vector3Model.Vector3 = vector3List.Last();
|
visualizerModel.Content = target.ToString();
|
||||||
break;
|
break;
|
||||||
case Quaternion quaternion:
|
case "Num.Roto.Visualization.Math.Geometry.Frame":
|
||||||
vector3Model.Quaternion = quaternion;
|
var tupleType = typeof(ValueTuple<Vector3,Quaternion,float>);
|
||||||
|
var tuple = (ValueTuple<Vector3, Quaternion, float>)TypeDescriptor.GetConverter(target).ConvertTo(target, tupleType);
|
||||||
|
visualizerModel.Content = tuple.ToString();
|
||||||
|
//visualizerModel.Content = (string)TypeDescriptor.GetConverter(target).ConvertTo(target, typeof(string));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
SerializeAsJson(outgoingData, vector3Model);
|
if(target is IEnumerable<object> enumerable)
|
||||||
|
{
|
||||||
|
Trace.WriteLine($"enumerable is not null = {enumerable is not null}");
|
||||||
|
if (enumerable is not null)
|
||||||
|
{
|
||||||
|
List<string> stringList = [];
|
||||||
|
foreach (var item in enumerable)
|
||||||
|
{
|
||||||
|
stringList.Add(TypeDescriptor.GetConverter(item).ConvertToString(item));
|
||||||
|
}
|
||||||
|
visualizerModel.Content = string.Join(Environment.NewLine, stringList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Trace.WriteLine($"visualizerModel.Content = {visualizerModel.Content}");
|
||||||
|
SerializeAsJson(outgoingData, visualizerModel);
|
||||||
}
|
}
|
||||||
public override object CreateReplacementObject(object target, Stream incomingData)
|
public override object CreateReplacementObject(object target, Stream incomingData)
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-4
@@ -3,11 +3,9 @@ using System.Runtime.Serialization;
|
|||||||
namespace NrxVisualizerObjectSource;
|
namespace NrxVisualizerObjectSource;
|
||||||
|
|
||||||
[DataContract]
|
[DataContract]
|
||||||
public class Vector3Model
|
public class VisualizerModel
|
||||||
{
|
{
|
||||||
[DataMember]
|
[DataMember]
|
||||||
public Vector3? Vector3 { get; set; }
|
public string? Content { get; set; }
|
||||||
[DataMember]
|
|
||||||
public Quaternion? Quaternion { get; set;}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user