Subdiv2D.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. 
  2. using OpenCVForUnity.CoreModule;
  3. using OpenCVForUnity.UtilsModule;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Runtime.InteropServices;
  7. namespace OpenCVForUnity.ImgprocModule {
  8. // C++: class Subdiv2D
  9. //javadoc: Subdiv2D
  10. public class Subdiv2D : DisposableOpenCVObject {
  11. protected override void Dispose(bool disposing) {
  12. #if (UNITY_ANDROID && !UNITY_EDITOR)
  13. try {
  14. if (disposing) {
  15. }
  16. if (IsEnabledDispose) {
  17. if (nativeObj != IntPtr.Zero)
  18. imgproc_Subdiv2D_delete(nativeObj);
  19. nativeObj = IntPtr.Zero;
  20. }
  21. } finally {
  22. base.Dispose(disposing);
  23. }
  24. #else
  25. return;
  26. #endif
  27. }
  28. protected internal Subdiv2D(IntPtr addr) : base(addr) { }
  29. public IntPtr getNativeObjAddr() { return nativeObj; }
  30. // internal usage only
  31. public static Subdiv2D __fromPtr__(IntPtr addr) { return new Subdiv2D(addr); }
  32. // C++: enum <unnamed>
  33. public const int PTLOC_ERROR = -2;
  34. public const int PTLOC_OUTSIDE_RECT = -1;
  35. public const int PTLOC_INSIDE = 0;
  36. public const int PTLOC_VERTEX = 1;
  37. public const int PTLOC_ON_EDGE = 2;
  38. public const int NEXT_AROUND_ORG = 0x00;
  39. public const int NEXT_AROUND_DST = 0x22;
  40. public const int PREV_AROUND_ORG = 0x11;
  41. public const int PREV_AROUND_DST = 0x33;
  42. public const int NEXT_AROUND_LEFT = 0x13;
  43. public const int NEXT_AROUND_RIGHT = 0x31;
  44. public const int PREV_AROUND_LEFT = 0x20;
  45. public const int PREV_AROUND_RIGHT = 0x02;
  46. //
  47. // C++: cv::Subdiv2D::Subdiv2D(Rect rect)
  48. //
  49. //javadoc: Subdiv2D::Subdiv2D(rect)
  50. public Subdiv2D(Rect rect) {
  51. #if (UNITY_ANDROID && !UNITY_EDITOR)
  52. nativeObj = imgproc_Subdiv2D_Subdiv2D_10(rect.x, rect.y, rect.width, rect.height);
  53. return;
  54. #else
  55. return;
  56. #endif
  57. }
  58. //
  59. // C++: cv::Subdiv2D::Subdiv2D()
  60. //
  61. //javadoc: Subdiv2D::Subdiv2D()
  62. public Subdiv2D() {
  63. #if (UNITY_ANDROID && !UNITY_EDITOR)
  64. nativeObj = imgproc_Subdiv2D_Subdiv2D_11();
  65. return;
  66. #else
  67. return;
  68. #endif
  69. }
  70. //
  71. // C++: Point2f cv::Subdiv2D::getVertex(int vertex, int* firstEdge = 0)
  72. //
  73. //javadoc: Subdiv2D::getVertex(vertex, firstEdge)
  74. public Point getVertex(int vertex, int[] firstEdge) {
  75. ThrowIfDisposed();
  76. #if (UNITY_ANDROID && !UNITY_EDITOR)
  77. double[] firstEdge_out = new double[1];
  78. double[] tmpArray = new double[2];
  79. imgproc_Subdiv2D_getVertex_10(nativeObj, vertex, firstEdge_out, tmpArray);
  80. Point retVal = new Point(tmpArray);
  81. if (firstEdge != null) firstEdge[0] = (int)firstEdge_out[0];
  82. return retVal;
  83. #else
  84. return null;
  85. #endif
  86. }
  87. //javadoc: Subdiv2D::getVertex(vertex)
  88. public Point getVertex(int vertex) {
  89. ThrowIfDisposed();
  90. #if (UNITY_ANDROID && !UNITY_EDITOR)
  91. double[] tmpArray = new double[2];
  92. imgproc_Subdiv2D_getVertex_11(nativeObj, vertex, tmpArray);
  93. Point retVal = new Point(tmpArray);
  94. return retVal;
  95. #else
  96. return null;
  97. #endif
  98. }
  99. //
  100. // C++: int cv::Subdiv2D::edgeDst(int edge, Point2f* dstpt = 0)
  101. //
  102. //javadoc: Subdiv2D::edgeDst(edge, dstpt)
  103. public int edgeDst(int edge, Point dstpt) {
  104. ThrowIfDisposed();
  105. #if (UNITY_ANDROID && !UNITY_EDITOR)
  106. double[] dstpt_out = new double[2];
  107. int retVal = imgproc_Subdiv2D_edgeDst_10(nativeObj, edge, dstpt_out);
  108. if (dstpt != null) { dstpt.x = dstpt_out[0]; dstpt.y = dstpt_out[1]; }
  109. return retVal;
  110. #else
  111. return -1;
  112. #endif
  113. }
  114. //javadoc: Subdiv2D::edgeDst(edge)
  115. public int edgeDst(int edge) {
  116. ThrowIfDisposed();
  117. #if (UNITY_ANDROID && !UNITY_EDITOR)
  118. int retVal = imgproc_Subdiv2D_edgeDst_11(nativeObj, edge);
  119. return retVal;
  120. #else
  121. return -1;
  122. #endif
  123. }
  124. //
  125. // C++: int cv::Subdiv2D::edgeOrg(int edge, Point2f* orgpt = 0)
  126. //
  127. //javadoc: Subdiv2D::edgeOrg(edge, orgpt)
  128. public int edgeOrg(int edge, Point orgpt) {
  129. ThrowIfDisposed();
  130. #if (UNITY_ANDROID && !UNITY_EDITOR)
  131. double[] orgpt_out = new double[2];
  132. int retVal = imgproc_Subdiv2D_edgeOrg_10(nativeObj, edge, orgpt_out);
  133. if (orgpt != null) { orgpt.x = orgpt_out[0]; orgpt.y = orgpt_out[1]; }
  134. return retVal;
  135. #else
  136. return -1;
  137. #endif
  138. }
  139. //javadoc: Subdiv2D::edgeOrg(edge)
  140. public int edgeOrg(int edge) {
  141. ThrowIfDisposed();
  142. #if (UNITY_ANDROID && !UNITY_EDITOR)
  143. int retVal = imgproc_Subdiv2D_edgeOrg_11(nativeObj, edge);
  144. return retVal;
  145. #else
  146. return -1;
  147. #endif
  148. }
  149. //
  150. // C++: int cv::Subdiv2D::findNearest(Point2f pt, Point2f* nearestPt = 0)
  151. //
  152. //javadoc: Subdiv2D::findNearest(pt, nearestPt)
  153. public int findNearest(Point pt, Point nearestPt) {
  154. ThrowIfDisposed();
  155. #if (UNITY_ANDROID && !UNITY_EDITOR)
  156. double[] nearestPt_out = new double[2];
  157. int retVal = imgproc_Subdiv2D_findNearest_10(nativeObj, pt.x, pt.y, nearestPt_out);
  158. if (nearestPt != null) { nearestPt.x = nearestPt_out[0]; nearestPt.y = nearestPt_out[1]; }
  159. return retVal;
  160. #else
  161. return -1;
  162. #endif
  163. }
  164. //javadoc: Subdiv2D::findNearest(pt)
  165. public int findNearest(Point pt) {
  166. ThrowIfDisposed();
  167. #if (UNITY_ANDROID && !UNITY_EDITOR)
  168. int retVal = imgproc_Subdiv2D_findNearest_11(nativeObj, pt.x, pt.y);
  169. return retVal;
  170. #else
  171. return -1;
  172. #endif
  173. }
  174. //
  175. // C++: int cv::Subdiv2D::getEdge(int edge, int nextEdgeType)
  176. //
  177. //javadoc: Subdiv2D::getEdge(edge, nextEdgeType)
  178. public int getEdge(int edge, int nextEdgeType) {
  179. ThrowIfDisposed();
  180. #if (UNITY_ANDROID && !UNITY_EDITOR)
  181. int retVal = imgproc_Subdiv2D_getEdge_10(nativeObj, edge, nextEdgeType);
  182. return retVal;
  183. #else
  184. return -1;
  185. #endif
  186. }
  187. //
  188. // C++: int cv::Subdiv2D::insert(Point2f pt)
  189. //
  190. //javadoc: Subdiv2D::insert(pt)
  191. public int insert(Point pt) {
  192. ThrowIfDisposed();
  193. #if (UNITY_ANDROID && !UNITY_EDITOR)
  194. int retVal = imgproc_Subdiv2D_insert_10(nativeObj, pt.x, pt.y);
  195. return retVal;
  196. #else
  197. return -1;
  198. #endif
  199. }
  200. //
  201. // C++: int cv::Subdiv2D::locate(Point2f pt, int& edge, int& vertex)
  202. //
  203. //javadoc: Subdiv2D::locate(pt, edge, vertex)
  204. public int locate(Point pt, int[] edge, int[] vertex) {
  205. ThrowIfDisposed();
  206. #if (UNITY_ANDROID && !UNITY_EDITOR)
  207. double[] edge_out = new double[1];
  208. double[] vertex_out = new double[1];
  209. int retVal = imgproc_Subdiv2D_locate_10(nativeObj, pt.x, pt.y, edge_out, vertex_out);
  210. if (edge != null) edge[0] = (int)edge_out[0];
  211. if (vertex != null) vertex[0] = (int)vertex_out[0];
  212. return retVal;
  213. #else
  214. return -1;
  215. #endif
  216. }
  217. //
  218. // C++: int cv::Subdiv2D::nextEdge(int edge)
  219. //
  220. //javadoc: Subdiv2D::nextEdge(edge)
  221. public int nextEdge(int edge) {
  222. ThrowIfDisposed();
  223. #if (UNITY_ANDROID && !UNITY_EDITOR)
  224. int retVal = imgproc_Subdiv2D_nextEdge_10(nativeObj, edge);
  225. return retVal;
  226. #else
  227. return -1;
  228. #endif
  229. }
  230. //
  231. // C++: int cv::Subdiv2D::rotateEdge(int edge, int rotate)
  232. //
  233. //javadoc: Subdiv2D::rotateEdge(edge, rotate)
  234. public int rotateEdge(int edge, int rotate) {
  235. ThrowIfDisposed();
  236. #if (UNITY_ANDROID && !UNITY_EDITOR)
  237. int retVal = imgproc_Subdiv2D_rotateEdge_10(nativeObj, edge, rotate);
  238. return retVal;
  239. #else
  240. return -1;
  241. #endif
  242. }
  243. //
  244. // C++: int cv::Subdiv2D::symEdge(int edge)
  245. //
  246. //javadoc: Subdiv2D::symEdge(edge)
  247. public int symEdge(int edge) {
  248. ThrowIfDisposed();
  249. #if (UNITY_ANDROID && !UNITY_EDITOR)
  250. int retVal = imgproc_Subdiv2D_symEdge_10(nativeObj, edge);
  251. return retVal;
  252. #else
  253. return -1;
  254. #endif
  255. }
  256. //
  257. // C++: void cv::Subdiv2D::getEdgeList(vector_Vec4f& edgeList)
  258. //
  259. //javadoc: Subdiv2D::getEdgeList(edgeList)
  260. public void getEdgeList(MatOfFloat4 edgeList) {
  261. ThrowIfDisposed();
  262. if (edgeList != null) edgeList.ThrowIfDisposed();
  263. #if (UNITY_ANDROID && !UNITY_EDITOR)
  264. Mat edgeList_mat = edgeList;
  265. imgproc_Subdiv2D_getEdgeList_10(nativeObj, edgeList_mat.nativeObj);
  266. return;
  267. #else
  268. return;
  269. #endif
  270. }
  271. //
  272. // C++: void cv::Subdiv2D::getLeadingEdgeList(vector_int& leadingEdgeList)
  273. //
  274. //javadoc: Subdiv2D::getLeadingEdgeList(leadingEdgeList)
  275. public void getLeadingEdgeList(MatOfInt leadingEdgeList) {
  276. ThrowIfDisposed();
  277. if (leadingEdgeList != null) leadingEdgeList.ThrowIfDisposed();
  278. #if (UNITY_ANDROID && !UNITY_EDITOR)
  279. Mat leadingEdgeList_mat = leadingEdgeList;
  280. imgproc_Subdiv2D_getLeadingEdgeList_10(nativeObj, leadingEdgeList_mat.nativeObj);
  281. return;
  282. #else
  283. return;
  284. #endif
  285. }
  286. //
  287. // C++: void cv::Subdiv2D::getTriangleList(vector_Vec6f& triangleList)
  288. //
  289. //javadoc: Subdiv2D::getTriangleList(triangleList)
  290. public void getTriangleList(MatOfFloat6 triangleList) {
  291. ThrowIfDisposed();
  292. if (triangleList != null) triangleList.ThrowIfDisposed();
  293. #if (UNITY_ANDROID && !UNITY_EDITOR)
  294. Mat triangleList_mat = triangleList;
  295. imgproc_Subdiv2D_getTriangleList_10(nativeObj, triangleList_mat.nativeObj);
  296. return;
  297. #else
  298. return;
  299. #endif
  300. }
  301. //
  302. // C++: void cv::Subdiv2D::getVoronoiFacetList(vector_int idx, vector_vector_Point2f& facetList, vector_Point2f& facetCenters)
  303. //
  304. //javadoc: Subdiv2D::getVoronoiFacetList(idx, facetList, facetCenters)
  305. public void getVoronoiFacetList(MatOfInt idx, List<MatOfPoint2f> facetList, MatOfPoint2f facetCenters) {
  306. ThrowIfDisposed();
  307. if (idx != null) idx.ThrowIfDisposed();
  308. if (facetCenters != null) facetCenters.ThrowIfDisposed();
  309. #if (UNITY_ANDROID && !UNITY_EDITOR)
  310. Mat idx_mat = idx;
  311. Mat facetList_mat = new Mat();
  312. Mat facetCenters_mat = facetCenters;
  313. imgproc_Subdiv2D_getVoronoiFacetList_10(nativeObj, idx_mat.nativeObj, facetList_mat.nativeObj, facetCenters_mat.nativeObj);
  314. Converters.Mat_to_vector_vector_Point2f(facetList_mat, facetList);
  315. facetList_mat.release();
  316. return;
  317. #else
  318. return;
  319. #endif
  320. }
  321. //
  322. // C++: void cv::Subdiv2D::initDelaunay(Rect rect)
  323. //
  324. //javadoc: Subdiv2D::initDelaunay(rect)
  325. public void initDelaunay(Rect rect) {
  326. ThrowIfDisposed();
  327. #if (UNITY_ANDROID && !UNITY_EDITOR)
  328. imgproc_Subdiv2D_initDelaunay_10(nativeObj, rect.x, rect.y, rect.width, rect.height);
  329. return;
  330. #else
  331. return;
  332. #endif
  333. }
  334. //
  335. // C++: void cv::Subdiv2D::insert(vector_Point2f ptvec)
  336. //
  337. //javadoc: Subdiv2D::insert(ptvec)
  338. public void insert(MatOfPoint2f ptvec) {
  339. ThrowIfDisposed();
  340. if (ptvec != null) ptvec.ThrowIfDisposed();
  341. #if (UNITY_ANDROID && !UNITY_EDITOR)
  342. Mat ptvec_mat = ptvec;
  343. imgproc_Subdiv2D_insert_11(nativeObj, ptvec_mat.nativeObj);
  344. return;
  345. #else
  346. return;
  347. #endif
  348. }
  349. #if (UNITY_ANDROID && !UNITY_EDITOR)
  350. const string LIBNAME = "opencvforunity";
  351. // C++: cv::Subdiv2D::Subdiv2D(Rect rect)
  352. [DllImport(LIBNAME)]
  353. private static extern IntPtr imgproc_Subdiv2D_Subdiv2D_10(int rect_x, int rect_y, int rect_width, int rect_height);
  354. // C++: cv::Subdiv2D::Subdiv2D()
  355. [DllImport(LIBNAME)]
  356. private static extern IntPtr imgproc_Subdiv2D_Subdiv2D_11();
  357. // C++: Point2f cv::Subdiv2D::getVertex(int vertex, int* firstEdge = 0)
  358. [DllImport(LIBNAME)]
  359. private static extern void imgproc_Subdiv2D_getVertex_10(IntPtr nativeObj, int vertex, double[] firstEdge_out, double[] retVal);
  360. [DllImport(LIBNAME)]
  361. private static extern void imgproc_Subdiv2D_getVertex_11(IntPtr nativeObj, int vertex, double[] retVal);
  362. // C++: int cv::Subdiv2D::edgeDst(int edge, Point2f* dstpt = 0)
  363. [DllImport(LIBNAME)]
  364. private static extern int imgproc_Subdiv2D_edgeDst_10(IntPtr nativeObj, int edge, double[] dstpt_out);
  365. [DllImport(LIBNAME)]
  366. private static extern int imgproc_Subdiv2D_edgeDst_11(IntPtr nativeObj, int edge);
  367. // C++: int cv::Subdiv2D::edgeOrg(int edge, Point2f* orgpt = 0)
  368. [DllImport(LIBNAME)]
  369. private static extern int imgproc_Subdiv2D_edgeOrg_10(IntPtr nativeObj, int edge, double[] orgpt_out);
  370. [DllImport(LIBNAME)]
  371. private static extern int imgproc_Subdiv2D_edgeOrg_11(IntPtr nativeObj, int edge);
  372. // C++: int cv::Subdiv2D::findNearest(Point2f pt, Point2f* nearestPt = 0)
  373. [DllImport(LIBNAME)]
  374. private static extern int imgproc_Subdiv2D_findNearest_10(IntPtr nativeObj, double pt_x, double pt_y, double[] nearestPt_out);
  375. [DllImport(LIBNAME)]
  376. private static extern int imgproc_Subdiv2D_findNearest_11(IntPtr nativeObj, double pt_x, double pt_y);
  377. // C++: int cv::Subdiv2D::getEdge(int edge, int nextEdgeType)
  378. [DllImport(LIBNAME)]
  379. private static extern int imgproc_Subdiv2D_getEdge_10(IntPtr nativeObj, int edge, int nextEdgeType);
  380. // C++: int cv::Subdiv2D::insert(Point2f pt)
  381. [DllImport(LIBNAME)]
  382. private static extern int imgproc_Subdiv2D_insert_10(IntPtr nativeObj, double pt_x, double pt_y);
  383. // C++: int cv::Subdiv2D::locate(Point2f pt, int& edge, int& vertex)
  384. [DllImport(LIBNAME)]
  385. private static extern int imgproc_Subdiv2D_locate_10(IntPtr nativeObj, double pt_x, double pt_y, double[] edge_out, double[] vertex_out);
  386. // C++: int cv::Subdiv2D::nextEdge(int edge)
  387. [DllImport(LIBNAME)]
  388. private static extern int imgproc_Subdiv2D_nextEdge_10(IntPtr nativeObj, int edge);
  389. // C++: int cv::Subdiv2D::rotateEdge(int edge, int rotate)
  390. [DllImport(LIBNAME)]
  391. private static extern int imgproc_Subdiv2D_rotateEdge_10(IntPtr nativeObj, int edge, int rotate);
  392. // C++: int cv::Subdiv2D::symEdge(int edge)
  393. [DllImport(LIBNAME)]
  394. private static extern int imgproc_Subdiv2D_symEdge_10(IntPtr nativeObj, int edge);
  395. // C++: void cv::Subdiv2D::getEdgeList(vector_Vec4f& edgeList)
  396. [DllImport(LIBNAME)]
  397. private static extern void imgproc_Subdiv2D_getEdgeList_10(IntPtr nativeObj, IntPtr edgeList_mat_nativeObj);
  398. // C++: void cv::Subdiv2D::getLeadingEdgeList(vector_int& leadingEdgeList)
  399. [DllImport(LIBNAME)]
  400. private static extern void imgproc_Subdiv2D_getLeadingEdgeList_10(IntPtr nativeObj, IntPtr leadingEdgeList_mat_nativeObj);
  401. // C++: void cv::Subdiv2D::getTriangleList(vector_Vec6f& triangleList)
  402. [DllImport(LIBNAME)]
  403. private static extern void imgproc_Subdiv2D_getTriangleList_10(IntPtr nativeObj, IntPtr triangleList_mat_nativeObj);
  404. // C++: void cv::Subdiv2D::getVoronoiFacetList(vector_int idx, vector_vector_Point2f& facetList, vector_Point2f& facetCenters)
  405. [DllImport(LIBNAME)]
  406. private static extern void imgproc_Subdiv2D_getVoronoiFacetList_10(IntPtr nativeObj, IntPtr idx_mat_nativeObj, IntPtr facetList_mat_nativeObj, IntPtr facetCenters_mat_nativeObj);
  407. // C++: void cv::Subdiv2D::initDelaunay(Rect rect)
  408. [DllImport(LIBNAME)]
  409. private static extern void imgproc_Subdiv2D_initDelaunay_10(IntPtr nativeObj, int rect_x, int rect_y, int rect_width, int rect_height);
  410. // C++: void cv::Subdiv2D::insert(vector_Point2f ptvec)
  411. [DllImport(LIBNAME)]
  412. private static extern void imgproc_Subdiv2D_insert_11(IntPtr nativeObj, IntPtr ptvec_mat_nativeObj);
  413. // native support for java finalize()
  414. [DllImport(LIBNAME)]
  415. private static extern void imgproc_Subdiv2D_delete(IntPtr nativeObj);
  416. #endif
  417. }
  418. }