Enhanced VisualizerModel and Vector3VisualizerTest
This commit is contained in:
@@ -1,19 +1,19 @@
|
||||
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;
|
||||
using Frame = System.ValueTuple<System.Numerics.Vector3, System.Numerics.Quaternion, float>;
|
||||
|
||||
namespace NrxVisualizerObjectSource;
|
||||
public class NrxVisualizerObjectSource : VisualizerObjectSource
|
||||
{
|
||||
public NrxVisualizerObjectSource()
|
||||
{
|
||||
Debug.WriteLine("new Vector3ObjectSource");
|
||||
Debug.WriteLine($"new {nameof(NrxVisualizerObjectSource)}");
|
||||
}
|
||||
public override void GetData(object target, Stream outgoingData)
|
||||
{
|
||||
@@ -23,42 +23,73 @@ public class NrxVisualizerObjectSource : VisualizerObjectSource
|
||||
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 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));
|
||||
var frame = (Frame)TypeDescriptor.GetConverter(target).ConvertTo(target, VisualizerModel.FrameType);
|
||||
visualizerModel.Frame = frame;
|
||||
visualizerModel.Content = frame.ToString();
|
||||
break;
|
||||
}
|
||||
if(target is IEnumerable<object> enumerable)
|
||||
if(target is IEnumerable<Vector3> enumerableVector3)
|
||||
{
|
||||
Trace.WriteLine($"enumerable is not null = {enumerable is not null}");
|
||||
if (enumerable is not null)
|
||||
Trace.WriteLine($"enumerable type is {typeof(Vector3)}");
|
||||
if (enumerableVector3 is not null)
|
||||
{
|
||||
List<string> stringList = [];
|
||||
foreach (var item in enumerable)
|
||||
List<Vector3> 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<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;
|
||||
}
|
||||
}
|
||||
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);
|
||||
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)
|
||||
{
|
||||
Debug.WriteLine("TransferData: objectType is: " + target.GetType().FullName);
|
||||
base.TransferData(target, incomingData, outgoingData);
|
||||
throw new NotImplementedException();
|
||||
//Debug.WriteLine("TransferData: objectType is: " + target.GetType().FullName);
|
||||
//base.TransferData(target, incomingData, outgoingData);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,29 @@
|
||||
using System.Numerics;
|
||||
using System;
|
||||
using System.Numerics;
|
||||
using System.Runtime.Serialization;
|
||||
namespace NrxVisualizerObjectSource;
|
||||
|
||||
using Frame = ValueTuple<Vector3, Quaternion, float>;
|
||||
[DataContract]
|
||||
public class VisualizerModel
|
||||
{
|
||||
public static Type FrameType => typeof(Frame);
|
||||
|
||||
[DataMember]
|
||||
public string? Content { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public Vector3? Point { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public Quaternion? Orientation { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public Vector3[]? PointArray { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public Frame? Frame { get; set; }
|
||||
|
||||
[DataMember]
|
||||
public Frame[]? FrameArray { get; set; }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user