Example of using string instead of typeof
This commit is contained in:
80
Vector3Visualizer/Vector3Visualizer/MyRemoteUserControl.cs
Normal file
80
Vector3Visualizer/Vector3Visualizer/MyRemoteUserControl.cs
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
using Microsoft.VisualStudio.RpcContracts.RemoteUI;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Vector3VisualizerSource;
|
||||||
|
namespace Vector3Visualizer;
|
||||||
|
|
||||||
|
public class MyRemoteUserControl : IRemoteWpfUserControl, IRemoteProxiedUserControl, IRemoteUserControl, IDisposable, IRemoteProxiedUserControl2
|
||||||
|
{
|
||||||
|
public Vector3Model? Model { get; }
|
||||||
|
|
||||||
|
public MyRemoteUserControl(Vector3Model? model) => Model = model;
|
||||||
|
private bool disposedValue;
|
||||||
|
|
||||||
|
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (!disposedValue)
|
||||||
|
{
|
||||||
|
if (disposing)
|
||||||
|
{
|
||||||
|
// TODO: dispose managed state (managed objects)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: free unmanaged resources (unmanaged objects) and override finalizer
|
||||||
|
// TODO: set large fields to null
|
||||||
|
disposedValue = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
|
||||||
|
// ~MyRemoteUserControl()
|
||||||
|
// {
|
||||||
|
// // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
|
||||||
|
// Dispose(disposing: false);
|
||||||
|
// }
|
||||||
|
|
||||||
|
void IDisposable.Dispose()
|
||||||
|
{
|
||||||
|
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
|
||||||
|
Dispose(disposing: true);
|
||||||
|
GC.SuppressFinalize(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<RemoteWpfUserControlDefinition> IRemoteWpfUserControl.InitializeAsync(IRemoteProxiedUserControlClient remoteUserControlClient, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.FromResult(new RemoteWpfUserControlDefinition());
|
||||||
|
}
|
||||||
|
|
||||||
|
Task IRemoteWpfUserControl.ControlLoadedAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<bool> IRemoteProxiedUserControl.GetObjectAsync(ObjectId id, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<bool> IRemoteProxiedUserControl.SetObjectPropertyAsync(ObjectId id, string propertyName, MessagePackFragment value, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<bool> IRemoteProxiedUserControl.SetCollectionEntryAsync(ObjectId id, int index, MessagePackFragment value, ObjectVersion? version, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<bool> IRemoteProxiedUserControl.InvokeAsync(ObjectId id, MessagePackFragment parameter, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Task<bool> IRemoteProxiedUserControl2.InvokeAsync(ObjectId id, MessagePackFragment parameter, IReadOnlyDictionary<string, string> context, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
using Vector3VisualizerSource;
|
using Microsoft.VisualStudio.Extensibility;
|
||||||
using Microsoft.VisualStudio.Extensibility;
|
|
||||||
using Microsoft.VisualStudio.Extensibility.DebuggerVisualizers;
|
using Microsoft.VisualStudio.Extensibility.DebuggerVisualizers;
|
||||||
using Microsoft.VisualStudio.RpcContracts.RemoteUI;
|
using Microsoft.VisualStudio.RpcContracts.RemoteUI;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Numerics;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Numerics;
|
using Vector3VisualizerSource;
|
||||||
namespace Vector3Visualizer;
|
namespace Vector3Visualizer;
|
||||||
|
|
||||||
[VisualStudioContribution]
|
[VisualStudioContribution]
|
||||||
@@ -14,20 +14,20 @@ internal class Vector3DebuggerVisualizerProvider : DebuggerVisualizerProvider
|
|||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("ConstantExpressionEvaluator", "CEE0027:String not localized", Justification = "<Pending>")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("ConstantExpressionEvaluator", "CEE0027:String not localized", Justification = "<Pending>")]
|
||||||
public override DebuggerVisualizerProviderConfiguration DebuggerVisualizerProviderConfiguration => new(
|
public override DebuggerVisualizerProviderConfiguration DebuggerVisualizerProviderConfiguration => new(
|
||||||
[
|
[
|
||||||
new VisualizerTargetType("Vector3 Visualizer", typeof(Vector3)),
|
new VisualizerTargetType("Vector3 Visualizer", "System.Numerics.Vector3, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"),
|
||||||
new VisualizerTargetType("QuaternionVisualizer", typeof(Quaternion))
|
new VisualizerTargetType("Vector3[] Visualizer", typeof(Vector3[])),
|
||||||
|
new VisualizerTargetType("List<Vector3> Visualizer", typeof(List<>)),
|
||||||
|
new VisualizerTargetType("Quaternion Visualizer", typeof(Quaternion))
|
||||||
])
|
])
|
||||||
{
|
{
|
||||||
VisualizerObjectSourceType = new VisualizerObjectSourceType(typeof(Vector3ObjectSource)),
|
VisualizerObjectSourceType = new VisualizerObjectSourceType(typeof(Vector3ObjectSource)),
|
||||||
Style = VisualizerStyle.ToolWindow,
|
Style = VisualizerStyle.ToolWindow,
|
||||||
};
|
};
|
||||||
|
|
||||||
public override async Task<IRemoteUserControl> CreateVisualizerAsync(
|
public override async Task<IRemoteUserControl> CreateVisualizerAsync(VisualizerTarget visualizerTarget, CancellationToken cancellationToken)
|
||||||
VisualizerTarget visualizerTarget, CancellationToken cancellationToken)
|
|
||||||
{
|
{
|
||||||
Vector3Model? model = await visualizerTarget.ObjectSource.RequestDataAsync<Vector3Model?>(jsonSerializer: null, CancellationToken.None);
|
Vector3Model? model = await visualizerTarget.ObjectSource.RequestDataAsync<Vector3Model?>(jsonSerializer: null, CancellationToken.None);
|
||||||
|
return await Task.FromResult<IRemoteUserControl>(new Vector3VisualizerUserControl(model));
|
||||||
return await Task.FromResult<IRemoteUserControl>(
|
//return await Task.FromResult<IRemoteUserControl>(new MyRemoteUserControl(model));
|
||||||
new Vector3VisualizerUserControl(model));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,12 @@
|
|||||||
using System.Numerics;
|
using System.Runtime.Serialization;
|
||||||
using System.Runtime.Serialization;
|
|
||||||
namespace Vector3VisualizerSource;
|
namespace Vector3VisualizerSource;
|
||||||
|
|
||||||
[DataContract]
|
[DataContract]
|
||||||
public class Vector3Model
|
public class Vector3Model
|
||||||
{
|
{
|
||||||
[DataMember]
|
[DataMember]
|
||||||
public string Vector3 { get; set; } = string.Empty;
|
public string Vector3 { get; set; } = "Null";
|
||||||
[DataMember]
|
[DataMember]
|
||||||
public string Quaternion { get; set; } = string.Empty;
|
public string Quaternion { get; set; } = "Null";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,30 @@
|
|||||||
using Microsoft.VisualStudio.DebuggerVisualizers;
|
using Microsoft.VisualStudio.DebuggerVisualizers;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
namespace Vector3VisualizerSource;
|
namespace Vector3VisualizerSource;
|
||||||
|
|
||||||
public class Vector3ObjectSource : VisualizerObjectSource
|
public class Vector3ObjectSource : VisualizerObjectSource
|
||||||
{
|
{
|
||||||
Vector3Model vector3Model = new();
|
public Vector3ObjectSource():base()
|
||||||
|
{
|
||||||
|
Debug.WriteLine("new Vector3ObjectSource");
|
||||||
|
}
|
||||||
public override void GetData(object target, Stream outgoingData)
|
public override void GetData(object target, Stream outgoingData)
|
||||||
{
|
{
|
||||||
|
Vector3Model vector3Model = new();
|
||||||
if (target is Vector3 vector3)
|
if (target is Vector3 vector3)
|
||||||
{
|
{
|
||||||
vector3Model.Vector3 = vector3.ToString();
|
vector3Model.Vector3 = vector3.ToString();
|
||||||
}
|
}
|
||||||
|
if (target is IEnumerable<Vector3> vector3List)
|
||||||
|
{
|
||||||
|
vector3Model.Vector3 = vector3List.Last().ToString();
|
||||||
|
}
|
||||||
|
|
||||||
if (target is Quaternion quaternion)
|
if (target is Quaternion quaternion)
|
||||||
{
|
{
|
||||||
vector3Model.Quaternion = quaternion.ToString();
|
vector3Model.Quaternion = quaternion.ToString();
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
|
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
var vector3 = new Vector3(1,2,3);
|
var a = new Vector3(1,2,3);
|
||||||
|
var typeName = a.GetType().AssemblyQualifiedName;
|
||||||
|
|
||||||
|
var b = new Vector3(5, 6, 7);
|
||||||
|
Vector3[] v3Array = [a, b];
|
||||||
|
List<Vector3> v3List = v3Array.ToList();
|
||||||
|
|
||||||
var quaternion = new Quaternion(1,2,3,4);
|
var quaternion = new Quaternion(1,2,3,4);
|
||||||
return;
|
return;
|
||||||
Reference in New Issue
Block a user