Enhanced VisualizerModel and Vector3VisualizerTest

This commit is contained in:
Matthias Heil
2026-04-07 11:16:24 +02:00
parent 26864a695f
commit 8038c76307
8 changed files with 90 additions and 26 deletions
+1
View File
@@ -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"),
@@ -20,7 +20,7 @@
<Content Include="$(MSBuildThisFileDirectory)..\bin\$(Configuration)\net8.0-windows8.0\MessagePack.dll" Link="netstandard2.0\MessagePack.dll" CopyToOutputDirectory="PreserveNewest" /> <Content Include="$(MSBuildThisFileDirectory)..\bin\$(Configuration)\net8.0-windows8.0\MessagePack.dll" Link="netstandard2.0\MessagePack.dll" CopyToOutputDirectory="PreserveNewest" />
<Content Include="$(MSBuildThisFileDirectory)..\bin\$(Configuration)\net8.0-windows8.0\MessagePack.Annotations.dll" Link="netstandard2.0\MessagePack.Annotations.dll" CopyToOutputDirectory="PreserveNewest" /> <Content Include="$(MSBuildThisFileDirectory)..\bin\$(Configuration)\net8.0-windows8.0\MessagePack.Annotations.dll" Link="netstandard2.0\MessagePack.Annotations.dll" CopyToOutputDirectory="PreserveNewest" />
<Content Include="$(MSBuildThisFileDirectory)..\bin\$(Configuration)\net8.0-windows8.0\CommunityToolkit.Mvvm.dll" Link="netstandard2.0\CommunityToolkit.Mvvm.dll" CopyToOutputDirectory="PreserveNewest" /> <Content Include="$(MSBuildThisFileDirectory)..\bin\$(Configuration)\net8.0-windows8.0\CommunityToolkit.Mvvm.dll" Link="netstandard2.0\CommunityToolkit.Mvvm.dll" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Vector3VisualizerUserControl.xaml" /> <EmbeddedResource Include="Vector3VisualizerUserControl.xaml" />
</ItemGroup> </ItemGroup>
@@ -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);
} }
} }
+20 -2
View File
@@ -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; }
} }
+15 -6
View File
@@ -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>