From a672297015370858fb4aa627d08d38edc2d6547b Mon Sep 17 00:00:00 2001 From: ogoshen Date: Wed, 12 Jun 2019 17:30:26 +0300 Subject: [PATCH] SensorList back to non-generic --- .../csharp/Intel.RealSense/Devices/Device.cs | 8 +++---- .../csharp/Intel.RealSense/Frames/Frame.cs | 4 ++-- .../Intel.RealSense/Sensors/PoseSensor.cs | 23 +++++++++++-------- .../csharp/Intel.RealSense/Sensors/Sensor.cs | 20 ++++++++++++++++ .../Intel.RealSense/Sensors/SensorList.cs | 8 +++---- .../csharp/cs-tutorial-1-depth/Program.cs | 2 +- .../cs-tutorial-2-capture/Window.xaml.cs | 2 +- .../cs-tutorial-3-processing/Window.xaml.cs | 2 +- 8 files changed, 46 insertions(+), 23 deletions(-) diff --git a/wrappers/csharp/Intel.RealSense/Devices/Device.cs b/wrappers/csharp/Intel.RealSense/Devices/Device.cs index ced4143c65..8e8452cc9c 100644 --- a/wrappers/csharp/Intel.RealSense/Devices/Device.cs +++ b/wrappers/csharp/Intel.RealSense/Devices/Device.cs @@ -54,13 +54,13 @@ internal static T Create(IntPtr ptr, Base.Deleter deleter) /// create a static snapshot of all connected devices at the time of the call /// /// The list of sensors - public ReadOnlyCollection QuerySensors() where T: Sensor + public ReadOnlyCollection QuerySensors() { object error; var ptr = NativeMethods.rs2_query_sensors(Handle, out error); - using (var sl = new SensorList(ptr)) + using (var sl = new SensorList(ptr)) { - var a = new T[sl.Count]; + var a = new Sensor[sl.Count]; sl.CopyTo(a, 0); return Array.AsReadOnly(a); } @@ -70,7 +70,7 @@ public ReadOnlyCollection QuerySensors() where T: Sensor /// Gets a static snapshot of all connected devices at the time of the call /// /// The list of sensors - public ReadOnlyCollection Sensors => QuerySensors(); + public ReadOnlyCollection Sensors => QuerySensors(); /// /// Send hardware reset request to the device. The actual reset is asynchronous. diff --git a/wrappers/csharp/Intel.RealSense/Frames/Frame.cs b/wrappers/csharp/Intel.RealSense/Frames/Frame.cs index 02b9f620e0..063a04b6b5 100644 --- a/wrappers/csharp/Intel.RealSense/Frames/Frame.cs +++ b/wrappers/csharp/Intel.RealSense/Frames/Frame.cs @@ -183,12 +183,12 @@ public double Timestamp /// Gets the sensor owning the frame /// the pointer to the sensor owning the frame - public IntPtr Sensor + public Sensor Sensor { get { object error; - return NativeMethods.rs2_get_frame_sensor(Handle, out error); + return Sensor.Create(NativeMethods.rs2_get_frame_sensor(Handle, out error)); } } diff --git a/wrappers/csharp/Intel.RealSense/Sensors/PoseSensor.cs b/wrappers/csharp/Intel.RealSense/Sensors/PoseSensor.cs index 9e89dc383e..26179ac949 100644 --- a/wrappers/csharp/Intel.RealSense/Sensors/PoseSensor.cs +++ b/wrappers/csharp/Intel.RealSense/Sensors/PoseSensor.cs @@ -42,16 +42,19 @@ public byte[] ExportLocalizationMap() public bool ImportLocalizationMap(byte[] mapBytes) { - IntPtr nativeBytes = Marshal.AllocHGlobal(mapBytes.Length); - Marshal.Copy(mapBytes, 0, nativeBytes, mapBytes.Length); - - object error; - var res = NativeMethods.rs2_import_localization_map(Handle, nativeBytes, (uint)mapBytes.Length, out error); - - Marshal.FreeHGlobal(nativeBytes); - nativeBytes = IntPtr.Zero; - - return !(res == 0); + IntPtr nativeBytes = IntPtr.Zero; + try + { + nativeBytes = Marshal.AllocHGlobal(mapBytes.Length); + Marshal.Copy(mapBytes, 0, nativeBytes, mapBytes.Length); + object error; + var res = NativeMethods.rs2_import_localization_map(Handle, nativeBytes, (uint)mapBytes.Length, out error); + return !(res == 0); + } + finally + { + Marshal.FreeHGlobal(nativeBytes); + } } public bool SetStaticNode(string guid, Math.Vector position, Math.Quaternion rotation) diff --git a/wrappers/csharp/Intel.RealSense/Sensors/Sensor.cs b/wrappers/csharp/Intel.RealSense/Sensors/Sensor.cs index 56288b82b8..15b5b0dcb4 100644 --- a/wrappers/csharp/Intel.RealSense/Sensors/Sensor.cs +++ b/wrappers/csharp/Intel.RealSense/Sensors/Sensor.cs @@ -32,6 +32,17 @@ internal static T Create(IntPtr ptr) return ObjectPool.Get(ptr); } + /// Returns a strongly-typed clone + /// type or subclass + /// to clone + /// an instance of + public static T Create(Sensor other) + where T : Frame + { + object error; + return ObjectPool.Get(other.Handle); + } + internal Sensor(IntPtr sensor) : base(sensor, NativeMethods.rs2_delete_sensor) { @@ -183,6 +194,15 @@ public bool Is(Extension ext) return NativeMethods.rs2_is_sensor_extendable_to(Handle, ext, out error) != 0; } + /// Returns a strongly-typed clone + /// type or subclass + /// an instance of + public T As() + where T : Frame + { + return Create(this); + } + /// /// Gets the mapping between the units of the depth image and meters /// diff --git a/wrappers/csharp/Intel.RealSense/Sensors/SensorList.cs b/wrappers/csharp/Intel.RealSense/Sensors/SensorList.cs index 570b414ba3..80b614812c 100644 --- a/wrappers/csharp/Intel.RealSense/Sensors/SensorList.cs +++ b/wrappers/csharp/Intel.RealSense/Sensors/SensorList.cs @@ -13,7 +13,7 @@ namespace Intel.RealSense /// /// List of adjacent devices, sharing the same physical parent composite device /// - internal sealed class SensorList : Base.Object, IEnumerable, ICollection where T : Sensor + internal sealed class SensorList : Base.Object, IEnumerable, ICollection { internal SensorList(IntPtr ptr) : base(ptr, NativeMethods.rs2_delete_sensor_list) @@ -21,7 +21,7 @@ internal SensorList(IntPtr ptr) } /// - public IEnumerator GetEnumerator() + public IEnumerator GetEnumerator() { object error; @@ -29,7 +29,7 @@ public IEnumerator GetEnumerator() for (int i = 0; i < sensorCount; i++) { var ptr = NativeMethods.rs2_create_sensor(Handle, i, out error); - yield return Sensor.Create(ptr); + yield return Sensor.Create(ptr); } } @@ -80,7 +80,7 @@ public Sensor this[int index] { object error; var ptr = NativeMethods.rs2_create_sensor(Handle, index, out error); - return Sensor.Create(ptr); + return Sensor.Create(ptr); } } } diff --git a/wrappers/csharp/cs-tutorial-1-depth/Program.cs b/wrappers/csharp/cs-tutorial-1-depth/Program.cs index 513f17feef..9538a43df9 100644 --- a/wrappers/csharp/cs-tutorial-1-depth/Program.cs +++ b/wrappers/csharp/cs-tutorial-1-depth/Program.cs @@ -21,7 +21,7 @@ static void Main(string[] args) Console.WriteLine(" Serial number: {0}", dev.Info[CameraInfo.SerialNumber]); Console.WriteLine(" Firmware version: {0}", dev.Info[CameraInfo.FirmwareVersion]); - var depthSensor = dev.QuerySensors()[0]; + var depthSensor = dev.QuerySensors()[0]; var sp = depthSensor.StreamProfiles .Where(p => p.Stream == Stream.Depth) diff --git a/wrappers/csharp/cs-tutorial-2-capture/Window.xaml.cs b/wrappers/csharp/cs-tutorial-2-capture/Window.xaml.cs index 5e8e6c3779..cb9c47f869 100644 --- a/wrappers/csharp/cs-tutorial-2-capture/Window.xaml.cs +++ b/wrappers/csharp/cs-tutorial-2-capture/Window.xaml.cs @@ -80,7 +80,7 @@ public CaptureWindow() Dispatcher.Invoke(new Action(() => { - String depth_dev_sn = new Sensor.CameraInfos(depthFrame.Sensor)[CameraInfo.SerialNumber]; + String depth_dev_sn = depthFrame.Sensor.Info[CameraInfo.SerialNumber]; txtTimeStamp.Text = depth_dev_sn + " : " + String.Format("{0,-20:0.00}", depthFrame.Timestamp) + "(" + depthFrame.TimestampDomain.ToString() + ")"; })); } diff --git a/wrappers/csharp/cs-tutorial-3-processing/Window.xaml.cs b/wrappers/csharp/cs-tutorial-3-processing/Window.xaml.cs index 988724bb62..176c2d815d 100644 --- a/wrappers/csharp/cs-tutorial-3-processing/Window.xaml.cs +++ b/wrappers/csharp/cs-tutorial-3-processing/Window.xaml.cs @@ -55,7 +55,7 @@ public ProcessingWindow() var pp = pipeline.Start(cfg); // Get the recommended processing blocks for the depth sensor - var sensor = pp.Device.QuerySensors().First(s => s.Is(Extension.DepthSensor)); + var sensor = pp.Device.QuerySensors().First(s => s.Is(Extension.DepthSensor)); var blocks = sensor.ProcessingBlocks.ToList(); // Allocate bitmaps for rendring.