Enhanced VisualizerModel and Vector3VisualizerTest
This commit is contained in:
@@ -7,6 +7,7 @@
|
|||||||
<Project Path="TestServer/TestServer.csproj" Id="c81154ef-d854-4f1e-9d14-2cf674885291" />
|
<Project Path="TestServer/TestServer.csproj" Id="c81154ef-d854-4f1e-9d14-2cf674885291" />
|
||||||
<Project Path="Vector3VisualizerTest/Vector3VisualizerTest.csproj" />
|
<Project Path="Vector3VisualizerTest/Vector3VisualizerTest.csproj" />
|
||||||
</Folder>
|
</Folder>
|
||||||
|
<Project Path="../Num.Roto.Visualization/Math/Num.Roto.Visualization.Math.csproj" />
|
||||||
<Project Path="NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj">
|
<Project Path="NrxDebuggerVisualizerProvider/NrxDebugVisualizer.csproj">
|
||||||
<Deploy />
|
<Deploy />
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace NrxDebugVisualizer
|
|||||||
{
|
{
|
||||||
Metadata = new(
|
Metadata = new(
|
||||||
id: "Vector3Visualizer.3c0400c3-acec-4b09-b561-c11fac7b10a7",
|
id: "Vector3Visualizer.3c0400c3-acec-4b09-b561-c11fac7b10a7",
|
||||||
version: this.ExtensionAssemblyVersion,
|
version: ExtensionAssemblyVersion,
|
||||||
publisherName: "Nrx Visualizer",
|
publisherName: "Nrx Visualizer",
|
||||||
displayName: "Vector3Visualizer",
|
displayName: "Vector3Visualizer",
|
||||||
description: "Visualizer for MailAdress"),
|
description: "Visualizer for MailAdress"),
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
using Microsoft.VisualStudio.DebuggerVisualizers;
|
using Microsoft.VisualStudio.DebuggerVisualizers;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
namespace NrxVisualizerObjectSource;
|
using Frame = System.ValueTuple<System.Numerics.Vector3, System.Numerics.Quaternion, float>;
|
||||||
|
|
||||||
|
namespace NrxVisualizerObjectSource;
|
||||||
public class NrxVisualizerObjectSource : VisualizerObjectSource
|
public class NrxVisualizerObjectSource : VisualizerObjectSource
|
||||||
{
|
{
|
||||||
public NrxVisualizerObjectSource()
|
public NrxVisualizerObjectSource()
|
||||||
{
|
{
|
||||||
Debug.WriteLine("new Vector3ObjectSource");
|
Debug.WriteLine($"new {nameof(NrxVisualizerObjectSource)}");
|
||||||
}
|
}
|
||||||
public override void GetData(object target, Stream outgoingData)
|
public override void GetData(object target, Stream outgoingData)
|
||||||
{
|
{
|
||||||
@@ -23,42 +23,73 @@ public class NrxVisualizerObjectSource : VisualizerObjectSource
|
|||||||
switch (fullname)
|
switch (fullname)
|
||||||
{
|
{
|
||||||
case "System.Numerics.Vector3":
|
case "System.Numerics.Vector3":
|
||||||
|
visualizerModel.Point = (Vector3)target;
|
||||||
visualizerModel.Content = target.ToString();
|
visualizerModel.Content = target.ToString();
|
||||||
break;
|
break;
|
||||||
case "System.Numerics.Quaternion":
|
case "System.Numerics.Quaternion":
|
||||||
|
visualizerModel.Orientation = (Quaternion)target;
|
||||||
visualizerModel.Content = target.ToString();
|
visualizerModel.Content = target.ToString();
|
||||||
break;
|
break;
|
||||||
case "Num.Roto.Visualization.Math.Geometry.Frame":
|
case "Num.Roto.Visualization.Math.Geometry.Frame":
|
||||||
var tupleType = typeof(ValueTuple<Vector3,Quaternion,float>);
|
var frame = (Frame)TypeDescriptor.GetConverter(target).ConvertTo(target, VisualizerModel.FrameType);
|
||||||
var tuple = (ValueTuple<Vector3, Quaternion, float>)TypeDescriptor.GetConverter(target).ConvertTo(target, tupleType);
|
visualizerModel.Frame = frame;
|
||||||
visualizerModel.Content = tuple.ToString();
|
visualizerModel.Content = frame.ToString();
|
||||||
//visualizerModel.Content = (string)TypeDescriptor.GetConverter(target).ConvertTo(target, typeof(string));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(target is IEnumerable<object> enumerable)
|
if(target is IEnumerable<Vector3> enumerableVector3)
|
||||||
{
|
{
|
||||||
Trace.WriteLine($"enumerable is not null = {enumerable is not null}");
|
Trace.WriteLine($"enumerable type is {typeof(Vector3)}");
|
||||||
if (enumerable is not null)
|
if (enumerableVector3 is not null)
|
||||||
{
|
{
|
||||||
List<string> stringList = [];
|
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));
|
stringList.Add(TypeDescriptor.GetConverter(item).ConvertToString(item));
|
||||||
}
|
}
|
||||||
|
visualizerModel.PointArray = [.. pointList];
|
||||||
visualizerModel.Content = string.Join(Environment.NewLine, stringList);
|
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}");
|
Trace.WriteLine($"visualizerModel.Content = {visualizerModel.Content}");
|
||||||
SerializeAsJson(outgoingData, visualizerModel);
|
SerializeAsJson(outgoingData, visualizerModel);
|
||||||
}
|
}
|
||||||
public override object CreateReplacementObject(object target, Stream incomingData)
|
public override object CreateReplacementObject(object target, Stream incomingData)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("CreateReplacementObject: objectType is: " + target.GetType().FullName);
|
throw new NotImplementedException();
|
||||||
return base.CreateReplacementObject(target, incomingData);
|
//Debug.WriteLine("CreateReplacementObject: objectType is: " + target.GetType().FullName);
|
||||||
|
//return base.CreateReplacementObject(target, incomingData);
|
||||||
}
|
}
|
||||||
public override void TransferData(object target, Stream incomingData, Stream outgoingData)
|
public override void TransferData(object target, Stream incomingData, Stream outgoingData)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("TransferData: objectType is: " + target.GetType().FullName);
|
throw new NotImplementedException();
|
||||||
base.TransferData(target, incomingData, outgoingData);
|
//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;
|
using System.Runtime.Serialization;
|
||||||
namespace NrxVisualizerObjectSource;
|
namespace NrxVisualizerObjectSource;
|
||||||
|
using Frame = ValueTuple<Vector3, Quaternion, float>;
|
||||||
[DataContract]
|
[DataContract]
|
||||||
public class VisualizerModel
|
public class VisualizerModel
|
||||||
{
|
{
|
||||||
|
public static Type FrameType => typeof(Frame);
|
||||||
|
|
||||||
[DataMember]
|
[DataMember]
|
||||||
public string? Content { get; set; }
|
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; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,21 @@
|
|||||||
|
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
using Num.Roto.Visualization.Math.Geometry;
|
||||||
|
|
||||||
var a = new Vector3(1,2,3);
|
#region points
|
||||||
var typeName = a.GetType().AssemblyQualifiedName;
|
var point0 = new Vector3(1,2,3);
|
||||||
|
var point1 = new Vector3(5, 6, 7);
|
||||||
|
Vector3[] pointArray = [point0, point1];
|
||||||
|
List<Vector3> pointList = [.. pointArray];
|
||||||
|
#endregion
|
||||||
|
|
||||||
var b = new Vector3(5, 6, 7);
|
#region frames
|
||||||
Vector3[] v3Array = [a, b];
|
|
||||||
List<Vector3> v3List = [.. v3Array];
|
|
||||||
|
|
||||||
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;
|
return;
|
||||||
@@ -2,9 +2,13 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\Num.Roto.Visualization\Math\Num.Roto.Visualization.Math.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
<Solution>
|
<Solution>
|
||||||
|
<Project Path="../../Num.Roto.Visualization/Math/Num.Roto.Visualization.Math.csproj" />
|
||||||
<Project Path="Vector3VisualizerTest.csproj" />
|
<Project Path="Vector3VisualizerTest.csproj" />
|
||||||
</Solution>
|
</Solution>
|
||||||
|
|||||||
Reference in New Issue
Block a user