Skip to content

Commit

Permalink
restore Mat.Add
Browse files Browse the repository at this point in the history
  • Loading branch information
shimat committed Jun 19, 2019
1 parent 0da5025 commit d5b38f8
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 3 deletions.
59 changes: 56 additions & 3 deletions src/OpenCvSharp/Modules/core/Mat/MatOfT.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ private static MatType GetMatType()
throw new NotSupportedException($"Type parameter {type} is not supported by Mat<T>");
}


#region FromArray
#if LANG_JP
/// <summary>
Expand Down Expand Up @@ -125,6 +124,7 @@ public static Mat<TElem> FromArray(params TElem[] arr)

return mat;
}

#if LANG_JP
/// <summary>
/// M x N の行列として初期化し、指定した配列からデータをコピーする
Expand Down Expand Up @@ -965,11 +965,64 @@ public Mat<TElem> Reshape(params int[] newDims)
public void Add(TElem value)
{
ThrowIfDisposed();
//NativeMethods.core_Mat_push_back_Vec6f(ptr, value);
throw new NotImplementedException();

var methodInfo = typeof(AddFunctions).GetMethod(
"Run",
BindingFlags.Public | BindingFlags.Static,
null,
new[] { typeof(IntPtr), typeof(TElem) },
null);
if (methodInfo == null)
throw new NotSupportedException($"Invalid argument type {typeof(TElem)}");
methodInfo.Invoke(this, new object[] { ptr, value });

GC.KeepAlive(this);
}

private static class AddFunctions
{
public static void Run(IntPtr ptr, byte v) => NativeMethods.core_Mat_push_back_uchar(ptr, v);
public static void Run(IntPtr ptr, sbyte v) => NativeMethods.core_Mat_push_back_char(ptr, v);
public static void Run(IntPtr ptr, ushort v) => NativeMethods.core_Mat_push_back_ushort(ptr, v);
public static void Run(IntPtr ptr, short v) => NativeMethods.core_Mat_push_back_short(ptr, v);
public static void Run(IntPtr ptr, int v) => NativeMethods.core_Mat_push_back_int(ptr, v);
public static void Run(IntPtr ptr, float v) => NativeMethods.core_Mat_push_back_float(ptr, v);
public static void Run(IntPtr ptr, double v) => NativeMethods.core_Mat_push_back_double(ptr, v);
public static void Run(IntPtr ptr, Vec2b v) => NativeMethods.core_Mat_push_back_Vec2b(ptr, v);
public static void Run(IntPtr ptr, Vec3b v) => NativeMethods.core_Mat_push_back_Vec3b(ptr, v);
public static void Run(IntPtr ptr, Vec4b v) => NativeMethods.core_Mat_push_back_Vec4b(ptr, v);
public static void Run(IntPtr ptr, Vec6b v) => NativeMethods.core_Mat_push_back_Vec6b(ptr, v);
public static void Run(IntPtr ptr, Vec2w v) => NativeMethods.core_Mat_push_back_Vec2w(ptr, v);
public static void Run(IntPtr ptr, Vec3w v) => NativeMethods.core_Mat_push_back_Vec3w(ptr, v);
public static void Run(IntPtr ptr, Vec4w v) => NativeMethods.core_Mat_push_back_Vec4w(ptr, v);
public static void Run(IntPtr ptr, Vec6w v) => NativeMethods.core_Mat_push_back_Vec6w(ptr, v);
public static void Run(IntPtr ptr, Vec2s v) => NativeMethods.core_Mat_push_back_Vec2s(ptr, v);
public static void Run(IntPtr ptr, Vec3s v) => NativeMethods.core_Mat_push_back_Vec3s(ptr, v);
public static void Run(IntPtr ptr, Vec4s v) => NativeMethods.core_Mat_push_back_Vec4s(ptr, v);
public static void Run(IntPtr ptr, Vec6s v) => NativeMethods.core_Mat_push_back_Vec6s(ptr, v);
public static void Run(IntPtr ptr, Vec2i v) => NativeMethods.core_Mat_push_back_Vec2i(ptr, v);
public static void Run(IntPtr ptr, Vec3i v) => NativeMethods.core_Mat_push_back_Vec3i(ptr, v);
public static void Run(IntPtr ptr, Vec4i v) => NativeMethods.core_Mat_push_back_Vec4i(ptr, v);
public static void Run(IntPtr ptr, Vec6i v) => NativeMethods.core_Mat_push_back_Vec6i(ptr, v);
public static void Run(IntPtr ptr, Vec2f v) => NativeMethods.core_Mat_push_back_Vec2f(ptr, v);
public static void Run(IntPtr ptr, Vec3f v) => NativeMethods.core_Mat_push_back_Vec3f(ptr, v);
public static void Run(IntPtr ptr, Vec4f v) => NativeMethods.core_Mat_push_back_Vec4f(ptr, v);
public static void Run(IntPtr ptr, Vec6f v) => NativeMethods.core_Mat_push_back_Vec6f(ptr, v);
public static void Run(IntPtr ptr, Vec2d v) => NativeMethods.core_Mat_push_back_Vec2d(ptr, v);
public static void Run(IntPtr ptr, Vec3d v) => NativeMethods.core_Mat_push_back_Vec3d(ptr, v);
public static void Run(IntPtr ptr, Vec4d v) => NativeMethods.core_Mat_push_back_Vec4d(ptr, v);
public static void Run(IntPtr ptr, Vec6d v) => NativeMethods.core_Mat_push_back_Vec6d(ptr, v);
public static void Run(IntPtr ptr, Point v) => NativeMethods.core_Mat_push_back_Point(ptr, v);
public static void Run(IntPtr ptr, Point2d v) => NativeMethods.core_Mat_push_back_Point2d(ptr, v);
public static void Run(IntPtr ptr, Point2f v) => NativeMethods.core_Mat_push_back_Point2f(ptr, v);
public static void Run(IntPtr ptr, Point3i v) => NativeMethods.core_Mat_push_back_Point3i(ptr, v);
public static void Run(IntPtr ptr, Point3d v) => NativeMethods.core_Mat_push_back_Point3d(ptr, v);
public static void Run(IntPtr ptr, Point3f v) => NativeMethods.core_Mat_push_back_Point3f(ptr, v);
public static void Run(IntPtr ptr, Size v) => NativeMethods.core_Mat_push_back_Size(ptr, v);
public static void Run(IntPtr ptr, Size2f v) => NativeMethods.core_Mat_push_back_Size2f(ptr, v);
public static void Run(IntPtr ptr, Rect v) => NativeMethods.core_Mat_push_back_Rect(ptr, v);
}

/// <summary>
/// Removes the first occurrence of a specific object from the ICollection&lt;T&gt;.
/// </summary>
Expand Down
2 changes: 2 additions & 0 deletions src/OpenCvSharp/PInvoke/core/NativeMethods_core_Mat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -508,6 +508,8 @@ public static extern unsafe int core_Mat_nGetRect(IntPtr obj, int row, int col,
[DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void core_Mat_push_back_Vec3d(IntPtr self, Vec3d v);
[DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void core_Mat_push_back_Vec4d(IntPtr self, Vec4d v);
[DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
public static extern void core_Mat_push_back_Vec6d(IntPtr self, Vec6d v);

[DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
Expand Down
16 changes: 16 additions & 0 deletions test/OpenCvSharp.Tests/core/MatTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,22 @@ public void Diag()
Assert.Equal(100, diag.Get<byte>(2, 2));
}
}

[Fact]
public void Add()
{
using (var m = new Mat<double>())
{
m.Add(1.2);
m.Add(3.4);
m.Add(5.6);

var indexer = m.GetIndexer();
Assert.Equal(1.2, m.Get<double>(0), 6);
Assert.Equal(3.4, m.Get<double>(1), 6);
Assert.Equal(5.6, m.Get<double>(2), 6);
}
}

[Fact]
public void MatOfDoubleFromArray()
Expand Down

0 comments on commit d5b38f8

Please sign in to comment.