[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57449] trunk/blender/source/blender/ blenkernel: utility function BKE_mesh_edge_poly_map_create(), currently unused.

Campbell Barton ideasman42 at gmail.com
Fri Jun 14 09:15:38 CEST 2013


Revision: 57449
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57449
Author:   campbellbarton
Date:     2013-06-14 07:15:38 +0000 (Fri, 14 Jun 2013)
Log Message:
-----------
utility function BKE_mesh_edge_poly_map_create(), currently unused.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_mesh.h
    trunk/blender/source/blender/blenkernel/intern/mesh.c

Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mesh.h	2013-06-14 06:34:37 UTC (rev 57448)
+++ trunk/blender/source/blender/blenkernel/BKE_mesh.h	2013-06-14 07:15:38 UTC (rev 57449)
@@ -310,6 +310,11 @@
 void BKE_mesh_vert_edge_map_create(MeshElemMap **r_map, int **r_mem,
                                    const struct MEdge *medge, int totvert, int totedge);
 
+void BKE_mesh_edge_poly_map_create(MeshElemMap **r_map, int **r_mem,
+                                   const struct MEdge *medge, const int totedge,
+                                   const struct MPoly *mpoly, const int totpoly,
+                                   const struct MLoop *mloop, const int totloop);
+
 /* vertex level transformations & checks (no derived mesh) */
 
 int BKE_mesh_minmax(struct Mesh *me, float r_min[3], float r_max[3]);

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-06-14 06:34:37 UTC (rev 57448)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2013-06-14 07:15:38 UTC (rev 57449)
@@ -2524,6 +2524,51 @@
 	*r_mem = indices;
 }
 
+void BKE_mesh_edge_poly_map_create(MeshElemMap **r_map, int **r_mem,
+                                   const MEdge *UNUSED(medge), const int totedge,
+                                   const MPoly *mpoly, const int totpoly,
+                                   const MLoop *mloop, const int totloop)
+{
+	MeshElemMap *map = MEM_callocN(sizeof(MeshElemMap) * totedge, "edge-poly map");
+	int *indices = MEM_mallocN(sizeof(int) * totloop, "edge-poly map mem");
+	int *index_step;
+	const MPoly *mp;
+	int i;
+
+	/* count face users */
+	for (i = 0, mp = mpoly; i < totpoly; mp++, i++) {
+		const MLoop *ml;
+		int j = mp->totloop;
+		for (ml = &mloop[mp->loopstart]; j--; ml++) {
+			map[ml->e].count++;
+		}
+	}
+
+	/* create offsets */
+	index_step = indices;
+	for (i = 0; i < totedge; i++) {
+		map[i].indices = index_step;
+		index_step += map[i].count;
+
+		/* re-count, using this as an index below */
+		map[i].count = 0;
+
+	}
+
+	/* assign poly-edge users */
+	for (i = 0, mp = mpoly; i < totpoly; mp++, i++) {
+		const MLoop *ml;
+		int j = mp->totloop;
+		for (ml = &mloop[mp->loopstart]; j--; ml++) {
+			MeshElemMap *map_ele = &map[ml->e];
+			map_ele->indices[map_ele->count++] = i;
+		}
+	}
+
+	*r_map = map;
+	*r_mem = indices;
+}
+
 void BKE_mesh_loops_to_mface_corners(CustomData *fdata, CustomData *ldata,
                                      CustomData *pdata, int lindex[4], int findex,
                                      const int polyindex,




More information about the Bf-blender-cvs mailing list