VectorOfPoint2d.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System.Runtime.InteropServices;
  2. using OpenCvSharp.Internal.Util;
  3. namespace OpenCvSharp.Internal.Vectors;
  4. /// <summary>
  5. /// </summary>
  6. // ReSharper disable once InconsistentNaming
  7. public class VectorOfPoint2d : DisposableCvObject, IStdVector<Point2d>
  8. {
  9. /// <summary>
  10. /// Constructor
  11. /// </summary>
  12. public VectorOfPoint2d()
  13. {
  14. ptr = NativeMethods.vector_Point2d_new1();
  15. }
  16. /// <summary>
  17. /// Releases unmanaged resources
  18. /// </summary>
  19. protected override void DisposeUnmanaged()
  20. {
  21. NativeMethods.vector_Point2d_delete(ptr);
  22. base.DisposeUnmanaged();
  23. }
  24. /// <summary>
  25. /// vector.size()
  26. /// </summary>
  27. public int Size
  28. {
  29. get
  30. {
  31. var res = NativeMethods.vector_Point2d_getSize(ptr);
  32. GC.KeepAlive(this);
  33. return (int)res;
  34. }
  35. }
  36. /// <summary>
  37. /// &amp;vector[0]
  38. /// </summary>
  39. public IntPtr ElemPtr
  40. {
  41. get
  42. {
  43. var res = NativeMethods.vector_Point2d_getPointer(ptr);
  44. GC.KeepAlive(this);
  45. return res;
  46. }
  47. }
  48. /// <summary>
  49. /// Converts std::vector to managed array
  50. /// </summary>
  51. /// <returns></returns>
  52. public Point2d[] ToArray()
  53. {
  54. var size = Size;
  55. if (size == 0)
  56. {
  57. return Array.Empty<Point2d>();
  58. }
  59. var dst = new Point2d[size];
  60. using (var dstPtr = new ArrayAddress1<Point2d>(dst))
  61. {
  62. long bytesToCopy = Marshal.SizeOf<Point2d>() * dst.Length;
  63. unsafe
  64. {
  65. Buffer.MemoryCopy(ElemPtr.ToPointer(), dstPtr.Pointer.ToPointer(), bytesToCopy, bytesToCopy);
  66. }
  67. }
  68. GC.KeepAlive(this); // ElemPtr is IntPtr to memory held by this object, so
  69. // make sure we are not disposed until finished with copy.
  70. return dst;
  71. }
  72. }