using Microsoft.VisualStudio.DebuggerVisualizers; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Numerics; namespace NrxVisualizerObjectSource; public class NrxVisualizerObjectSource : VisualizerObjectSource { public NrxVisualizerObjectSource() { Debug.WriteLine("new Vector3ObjectSource"); } public override void GetData(object target, Stream outgoingData) { var fullname = target.GetType().FullName; Trace.WriteLine("GetData: objectType is: " + fullname); VisualizerModel visualizerModel = new(); switch (fullname) { case "System.Numerics.Vector3": visualizerModel.Content = target.ToString(); break; case "System.Numerics.Quaternion": visualizerModel.Content = target.ToString(); break; case "Num.Roto.Visualization.Math.Geometry.Frame": var tupleType = typeof(ValueTuple); var tuple = (ValueTuple)TypeDescriptor.GetConverter(target).ConvertTo(target, tupleType); visualizerModel.Content = tuple.ToString(); //visualizerModel.Content = (string)TypeDescriptor.GetConverter(target).ConvertTo(target, typeof(string)); break; } if(target is IEnumerable enumerable) { Trace.WriteLine($"enumerable is not null = {enumerable is not null}"); if (enumerable is not null) { List 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) { Debug.WriteLine("CreateReplacementObject: objectType is: " + target.GetType().FullName); return base.CreateReplacementObject(target, incomingData); } public override void TransferData(object target, Stream incomingData, Stream outgoingData) { Debug.WriteLine("TransferData: objectType is: " + target.GetType().FullName); base.TransferData(target, incomingData, outgoingData); } }