/// <summary> /// /// </summary> /// <param name="subdiv"></param> /// <param name="img"></param> private void PaintVoronoi(CvSubdiv2D subdiv, IplImage img) { CvSeqReader reader = new CvSeqReader(); int total = subdiv.Edges.Total; int elem_size = subdiv.Edges.ElemSize; subdiv.CalcVoronoi2D(); subdiv.Edges.StartRead(reader, false); for (int i = 0; i < total; i++) { CvQuadEdge2D edge = CvQuadEdge2D.FromSeqReader(reader); //CvQuadEdge2D edge = CvQuadEdge2D.FromPtr(reader.Ptr); if (Cv.IS_SET_ELEM(edge)) { CvSubdiv2DEdge e = edge.ToCvSubdiv2DEdge(); // left DrawSubdivFacet(img, e.RotateEdge(RotateEdgeFlag.Rotate)); // right DrawSubdivFacet(img, e.RotateEdge(RotateEdgeFlag.ReverseRotate)); } reader.NextSeqElem(elem_size); //Cv.NEXT_SEQ_ELEM(elem_size, reader); } }
/// <summary> /// /// </summary> /// <param name="img"></param> /// <param name="subdiv"></param> /// <param name="delaunay_color"></param> /// <param name="voronoi_color"></param> private void DrawSubdiv(IplImage img, CvSubdiv2D subdiv, CvColor delaunay_color, CvColor voronoi_color) { CvSeqReader reader = new CvSeqReader(); int total = subdiv.Edges.Total; int elem_size = subdiv.Edges.ElemSize; subdiv.Edges.StartRead(reader, false); for (int i = 0; i < total; i++) { //CvQuadEdge2D edge = (CvQuadEdge2D)reader.CvPtr; CvQuadEdge2D edge = CvQuadEdge2D.FromSeqReader(reader); if (Cv.IS_SET_ELEM(edge)) { DrawSubdivEdge(img, (CvSubdiv2DEdge)edge + 1, voronoi_color); DrawSubdivEdge(img, (CvSubdiv2DEdge)edge, delaunay_color); } //reader.NextSeqElem(elem_size); Cv.NEXT_SEQ_ELEM(elem_size, reader); } }