VectorOfVectorPoint2f.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using OpenCvSharp.Internal.Util;
  2. namespace OpenCvSharp.Internal.Vectors;
  3. /// <summary>
  4. /// </summary>
  5. // ReSharper disable once InconsistentNaming
  6. public class VectorOfVectorPoint2f : DisposableCvObject, IStdVector<Point2f[]>
  7. {
  8. /// <summary>
  9. /// Constructor
  10. /// </summary>
  11. public VectorOfVectorPoint2f()
  12. {
  13. ptr = NativeMethods.vector_vector_Point2f_new1();
  14. }
  15. /// <summary>
  16. /// Releases unmanaged resources
  17. /// </summary>
  18. protected override void DisposeUnmanaged()
  19. {
  20. NativeMethods.vector_vector_Point2f_delete(ptr);
  21. base.DisposeUnmanaged();
  22. }
  23. /// <summary>
  24. /// vector.size()
  25. /// </summary>
  26. public int GetSize1()
  27. {
  28. var res = NativeMethods.vector_vector_Point2f_getSize1(ptr);
  29. GC.KeepAlive(this);
  30. return (int)res;
  31. }
  32. /// <summary>
  33. ///
  34. /// </summary>
  35. public int Size => GetSize1();
  36. /// <summary>
  37. /// vector[i].size()
  38. /// </summary>
  39. public IReadOnlyList<long> GetSize2()
  40. {
  41. var size1 = GetSize1();
  42. var size2 = new nuint[size1];
  43. NativeMethods.vector_vector_Point2f_getSize2(ptr, size2);
  44. GC.KeepAlive(this);
  45. return size2.Select(s => (long)s).ToArray();
  46. }
  47. /// <summary>
  48. /// Converts std::vector to managed array
  49. /// </summary>
  50. /// <returns></returns>
  51. public Point2f[][] ToArray()
  52. {
  53. var size1 = GetSize1();
  54. if (size1 == 0)
  55. return Array.Empty<Point2f[]>();
  56. var size2 = GetSize2();
  57. var ret = new Point2f[size1][];
  58. for (var i = 0; i < size1; i++)
  59. {
  60. ret[i] = new Point2f[size2[i]];
  61. }
  62. using var retPtr = new ArrayAddress2<Point2f>(ret);
  63. NativeMethods.vector_vector_Point2f_copy(ptr, retPtr.GetPointer());
  64. GC.KeepAlive(this);
  65. return ret;
  66. }
  67. }