Files
DebugVisualizerExtension/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs
T

95 lines
4.1 KiB
C#
Raw Normal View History

2026-04-01 12:46:48 +02:00
using Microsoft.VisualStudio.DebuggerVisualizers;
2026-04-07 12:21:37 +02:00
using NamedPipes;
2026-04-02 15:20:12 +02:00
using System;
2026-04-01 12:46:48 +02:00
using System.Collections.Generic;
2026-04-02 15:20:12 +02:00
using System.ComponentModel;
2026-04-01 12:46:48 +02:00
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Numerics;
using Frame = System.ValueTuple<System.Numerics.Vector3, System.Numerics.Quaternion, float>;
namespace NrxVisualizerObjectSource;
2026-04-02 10:09:10 +02:00
public class NrxVisualizerObjectSource : VisualizerObjectSource
2026-04-01 12:46:48 +02:00
{
2026-04-02 10:09:10 +02:00
public NrxVisualizerObjectSource()
2026-04-01 12:46:48 +02:00
{
Debug.WriteLine($"new {nameof(NrxVisualizerObjectSource)}");
2026-04-01 12:46:48 +02:00
}
public override void GetData(object target, Stream outgoingData)
{
2026-04-02 15:20:12 +02:00
var fullname = target.GetType().FullName;
Trace.WriteLine("GetData: objectType is: " + fullname);
VisualizerModel visualizerModel = new();
switch (fullname)
2026-04-01 12:46:48 +02:00
{
2026-04-02 15:20:12 +02:00
case "System.Numerics.Vector3":
visualizerModel.Point = (Vector3)target;
2026-04-02 15:20:12 +02:00
visualizerModel.Content = target.ToString();
2026-04-01 12:46:48 +02:00
break;
2026-04-02 15:20:12 +02:00
case "System.Numerics.Quaternion":
visualizerModel.Orientation = (Quaternion)target;
2026-04-02 15:20:12 +02:00
visualizerModel.Content = target.ToString();
2026-04-01 12:46:48 +02:00
break;
2026-04-02 15:20:12 +02:00
case "Num.Roto.Visualization.Math.Geometry.Frame":
var frame = (Frame)TypeDescriptor.GetConverter(target).ConvertTo(target, VisualizerModel.FrameType);
visualizerModel.Frame = frame;
visualizerModel.Content = frame.ToString();
2026-04-01 12:46:48 +02:00
break;
}
if(target is IEnumerable<Vector3> enumerableVector3)
2026-04-02 15:20:12 +02:00
{
Trace.WriteLine($"enumerable type is {typeof(Vector3)}");
if (enumerableVector3 is not null)
2026-04-02 15:20:12 +02:00
{
List<string> stringList = [];
List<Vector3> pointList = [];
foreach (var item in enumerableVector3)
2026-04-02 15:20:12 +02:00
{
pointList.Add(item);
2026-04-02 15:20:12 +02:00
stringList.Add(TypeDescriptor.GetConverter(item).ConvertToString(item));
}
visualizerModel.PointArray = [.. pointList];
2026-04-02 15:20:12 +02:00
visualizerModel.Content = string.Join(Environment.NewLine, stringList);
}
}
else if (target is IEnumerable<object> enumerable)
{
var objectType = enumerable.First().GetType().FullName;
Trace.WriteLine($"IEnumerable<object> objectType is {objectType}");
switch (objectType)
{
case "Num.Roto.Visualization.Math.Geometry.Frame":
{
List<Frame> frameList = [];
foreach (var item in enumerable)
{
var frame = (Frame)TypeDescriptor.GetConverter(item).ConvertTo(item, VisualizerModel.FrameType);
frameList.Add(frame);
}
visualizerModel.FrameArray = [.. frameList];
visualizerModel.Content = string.Join(Environment.NewLine, frameList);
Trace.WriteLine($"I visualizerModel.Content is {visualizerModel.Content}");
break;
}
default:
visualizerModel.Content = $"unsupported enumerable of {objectType}";
break;
}
}
2026-04-02 15:20:12 +02:00
Trace.WriteLine($"visualizerModel.Content = {visualizerModel.Content}");
SerializeAsJson(outgoingData, visualizerModel);
2026-04-01 12:46:48 +02:00
}
2026-04-02 10:09:10 +02:00
public override object CreateReplacementObject(object target, Stream incomingData)
{
throw new NotImplementedException();
//Debug.WriteLine("CreateReplacementObject: objectType is: " + target.GetType().FullName);
//return base.CreateReplacementObject(target, incomingData);
2026-04-02 10:09:10 +02:00
}
public override void TransferData(object target, Stream incomingData, Stream outgoingData)
{
throw new NotImplementedException();
//Debug.WriteLine("TransferData: objectType is: " + target.GetType().FullName);
//base.TransferData(target, incomingData, outgoingData);
2026-04-02 10:09:10 +02:00
}
2026-04-01 12:46:48 +02:00
}