[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17509] branches/soc-2008-nicholasbishop/ source/blender/blenkernel: Starting to merge some work related to fixing tangent calculation.

Nicholas Bishop nicholasbishop at gmail.com
Thu Nov 20 04:33:51 CET 2008


Revision: 17509
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17509
Author:   nicholasbishop
Date:     2008-11-20 04:33:49 +0100 (Thu, 20 Nov 2008)

Log Message:
-----------
Starting to merge some work related to fixing tangent calculation.

* Removed some unused static functions
* Added a vert_edge map to complement the ones for faces

Modified Paths:
--------------
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-11-20 00:34:24 UTC (rev 17508)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-11-20 03:33:49 UTC (rev 17509)
@@ -45,6 +45,8 @@
 
 void create_vert_face_map(ListBase **map, IndexNode **mem, const struct MFace *mface,
 			  const int totvert, const int totface);
+void create_vert_edge_map(ListBase **map, IndexNode **mem, const struct MEdge *medge,
+			  const int totvert, const int totedge);
 
 /* MultiresDM */
 struct Mesh *MultiresDM_get_mesh(struct DerivedMesh *dm);
@@ -53,6 +55,7 @@
 void *MultiresDM_get_orco(struct DerivedMesh *);
 struct MVert *MultiresDM_get_subco(struct DerivedMesh *);
 struct ListBase *MultiresDM_get_vert_face_map(struct DerivedMesh *);
+struct ListBase *MultiresDM_get_vert_edge_map(struct DerivedMesh *);
 int MultiresDM_get_totlvl(struct DerivedMesh *);
 int MultiresDM_get_lvl(struct DerivedMesh *);
 void MultiresDM_set_update(struct DerivedMesh *, void (*)(struct DerivedMesh*));

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c	2008-11-20 00:34:24 UTC (rev 17508)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c	2008-11-20 03:33:49 UTC (rev 17509)
@@ -1162,8 +1162,8 @@
 
 	float (*norm)[3];
 
-	ListBase *vert_face_map;
-	IndexNode *vert_face_map_mem;
+	ListBase *vert_face_map, *vert_edge_map;
+	IndexNode *vert_face_map_mem, *vert_edge_map_mem;
 
 	Mesh *me;
 	int flags;
@@ -1187,6 +1187,10 @@
 			MEM_freeN(mrdm->vert_face_map);
 		if(mrdm->vert_face_map_mem)
 			MEM_freeN(mrdm->vert_face_map_mem);
+		if(mrdm->vert_edge_map)
+			MEM_freeN(mrdm->vert_edge_map);
+		if(mrdm->vert_edge_map_mem)
+			MEM_freeN(mrdm->vert_edge_map_mem);
 		MEM_freeN(mrdm);
 	}
 }
@@ -1326,6 +1330,17 @@
 	return mrdm->vert_face_map;
 }
 
+ListBase *MultiresDM_get_vert_edge_map(DerivedMesh *dm)
+{
+	MultiresDM *mrdm = (MultiresDM*)dm;
+
+	if(!mrdm->vert_edge_map)
+		create_vert_edge_map(&mrdm->vert_edge_map, &mrdm->vert_edge_map_mem, mrdm->me->medge,
+				     mrdm->me->totvert, mrdm->me->totedge);
+
+	return mrdm->vert_edge_map;
+}
+
 int *MultiresDM_get_flags(DerivedMesh *dm)
 {
 	return &((MultiresDM*)dm)->flags;

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-11-20 00:34:24 UTC (rev 17508)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-11-20 03:33:49 UTC (rev 17509)
@@ -74,6 +74,24 @@
 	}
 }
 
+void create_vert_edge_map(ListBase **map, IndexNode **mem, const MEdge *medge, const int totvert, const int totedge)
+{
+	int i, j;
+	IndexNode *node = NULL;
+ 
+	(*map) = MEM_callocN(sizeof(ListBase) * totvert, "vert edge map");
+	(*mem) = MEM_callocN(sizeof(IndexNode) * totedge * 2, "vert edge map mem");
+	node = *mem;
+       
+	/* Find the users */
+	for(i = 0; i < totedge; ++i){
+		for(j = 0; j < 2; ++j, ++node) {
+			node->index = i;
+			BLI_addtail(&(*map)[((unsigned int*)(&medge[i].v1))[j]], node);
+		}
+	}
+}
+
 /* MULTIRES MODIFIER */
 static const int multires_max_levels = 13;
 static const int multires_quad_tot[] = {4, 9, 25, 81, 289, 1089, 4225, 16641, 66049, 263169, 1050625, 4198401, 16785409};
@@ -211,28 +229,6 @@
 	VecMulf(out, d ? 0.25 : 1.0 / 3.0);
 }
 
-static void calc_norm(float *norm, float *a, float *b, float *c, float *d)
-{
-	if(d)
-		CalcNormFloat4(a, b, c, d, norm);
-	else
-		CalcNormFloat(a, b, c, norm);
-}
-
-static void calc_face_ts_mat(float out[][3], float *v1, float *v2, float *v3, float *v4)
-{
-	float center[3], norm[3];
-
-	face_center(center, v1, v2, v3, v4);
-	calc_norm(norm, v1, v2, v3, v4);
-	calc_ts_mat(out, center, v1, norm);
-}
-
-static void calc_face_ts_mat_dm(float out[][3], float (*orco)[3], MFace *f)
-{
-	calc_face_ts_mat(out, orco[f->v1], orco[f->v2], orco[f->v3], (f->v4 ? orco[f->v4] : NULL));
-}
-
 static void calc_face_ts_partial(float center[3], float target[3], float norm[][3], float (*orco)[3], MFace *f)
 {
 	face_center(center, orco[f->v1], orco[f->v2], orco[f->v3], (f->v4 ? orco[f->v4] : NULL));





More information about the Bf-blender-cvs mailing list