using Microsoft.VisualStudio.DebuggerVisualizers; using NamedPipes; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Numerics; using Frame = System.ValueTuple; namespace NrxVisualizerObjectSource; public class NrxVisualizerObjectSource : VisualizerObjectSource { public NrxVisualizerObjectSource() { Debug.WriteLine($"new {nameof(NrxVisualizerObjectSource)}"); } 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.Point = (Vector3)target; visualizerModel.Content = target.ToString(); break; case "System.Numerics.Quaternion": visualizerModel.Orientation = (Quaternion)target; visualizerModel.Content = target.ToString(); break; case "Num.Roto.Visualization.Math.Geometry.Frame": var frame = (Frame)TypeDescriptor.GetConverter(target).ConvertTo(target, VisualizerModel.FrameType); visualizerModel.Frame = frame; visualizerModel.Content = frame.ToString(); break; } if(target is IEnumerable enumerableVector3) { Trace.WriteLine($"enumerable type is {typeof(Vector3)}"); if (enumerableVector3 is not null) { List stringList = []; List pointList = []; foreach (var item in enumerableVector3) { pointList.Add(item); stringList.Add(TypeDescriptor.GetConverter(item).ConvertToString(item)); } visualizerModel.PointArray = [.. pointList]; visualizerModel.Content = string.Join(Environment.NewLine, stringList); } } else if (target is IEnumerable enumerable) { var objectType = enumerable.First().GetType().FullName; Trace.WriteLine($"IEnumerable objectType is {objectType}"); switch (objectType) { case "Num.Roto.Visualization.Math.Geometry.Frame": { List 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; } } Trace.WriteLine($"visualizerModel.Content = {visualizerModel.Content}"); SerializeAsJson(outgoingData, visualizerModel); } public override object CreateReplacementObject(object target, Stream incomingData) { throw new NotImplementedException(); //Debug.WriteLine("CreateReplacementObject: objectType is: " + target.GetType().FullName); //return base.CreateReplacementObject(target, incomingData); } 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); } }