diff --git a/DebugVisualizerExtension.slnx b/DebugVisualizerExtension.slnx index e2c4a1d..c78d95b 100644 --- a/DebugVisualizerExtension.slnx +++ b/DebugVisualizerExtension.slnx @@ -7,6 +7,7 @@ + diff --git a/NrxDebuggerVisualizerProvider/ExtensionEntrypoint.cs b/NrxDebuggerVisualizerProvider/ExtensionEntrypoint.cs index 9313538..83eb5e5 100644 --- a/NrxDebuggerVisualizerProvider/ExtensionEntrypoint.cs +++ b/NrxDebuggerVisualizerProvider/ExtensionEntrypoint.cs @@ -14,7 +14,7 @@ namespace NrxDebugVisualizer { Metadata = new( id: "Vector3Visualizer.3c0400c3-acec-4b09-b561-c11fac7b10a7", - version: this.ExtensionAssemblyVersion, + version: ExtensionAssemblyVersion, publisherName: "Nrx Visualizer", displayName: "Vector3Visualizer", description: "Visualizer for MailAdress"), diff --git a/NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj b/NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj index 8cf7a50..b1e6638 100644 --- a/NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj +++ b/NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj @@ -20,7 +20,7 @@ - + diff --git a/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs b/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs index 46654aa..c9dde1a 100644 --- a/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs +++ b/NrxVisualizerObjectSource/NrxVisualizerObjectSource.cs @@ -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; +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); - var tuple = (ValueTuple)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 enumerable) + if(target is IEnumerable 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 stringList = []; - foreach (var item in enumerable) + 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) { - 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); } } \ No newline at end of file diff --git a/NrxVisualizerObjectSource/VisualizerModel.cs b/NrxVisualizerObjectSource/VisualizerModel.cs index 494d318..9c72b3f 100644 --- a/NrxVisualizerObjectSource/VisualizerModel.cs +++ b/NrxVisualizerObjectSource/VisualizerModel.cs @@ -1,11 +1,29 @@ -using System.Numerics; +using System; +using System.Numerics; using System.Runtime.Serialization; namespace NrxVisualizerObjectSource; - +using Frame = ValueTuple; [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; } } diff --git a/Vector3VisualizerTest/Program.cs b/Vector3VisualizerTest/Program.cs index 4adc770..74f0566 100644 --- a/Vector3VisualizerTest/Program.cs +++ b/Vector3VisualizerTest/Program.cs @@ -1,12 +1,21 @@  using System.Numerics; +using Num.Roto.Visualization.Math.Geometry; -var a = new Vector3(1,2,3); -var typeName = a.GetType().AssemblyQualifiedName; +#region points +var point0 = new Vector3(1,2,3); +var point1 = new Vector3(5, 6, 7); +Vector3[] pointArray = [point0, point1]; +List pointList = [.. pointArray]; +#endregion -var b = new Vector3(5, 6, 7); -Vector3[] v3Array = [a, b]; -List v3List = [.. v3Array]; +#region frames -var quaternion = new Quaternion(1,2,3,4); +var orientation = Quaternion.CreateFromAxisAngle(Vector3.UnitZ,1); +var frame = new Frame(point0,1, orientation); +Frame[] frameArray = [frame, frame with { Translation = point1}]; +var frameList = frameArray.ToList(); +#endregion + +//var typeName = point0.GetType().AssemblyQualifiedName; return; \ No newline at end of file diff --git a/Vector3VisualizerTest/Vector3VisualizerTest.csproj b/Vector3VisualizerTest/Vector3VisualizerTest.csproj index 2150e37..45abf08 100644 --- a/Vector3VisualizerTest/Vector3VisualizerTest.csproj +++ b/Vector3VisualizerTest/Vector3VisualizerTest.csproj @@ -2,9 +2,13 @@ Exe - net8.0 + net10.0 enable enable + + + + diff --git a/Vector3VisualizerTest/Vector3VisualizerTest.slnx b/Vector3VisualizerTest/Vector3VisualizerTest.slnx index 4a0b9ac..24f0f0a 100644 --- a/Vector3VisualizerTest/Vector3VisualizerTest.slnx +++ b/Vector3VisualizerTest/Vector3VisualizerTest.slnx @@ -1,3 +1,4 @@ +