[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24266] branches/bmesh/blender/source/ blender: a bug fix and a compile fix

Joseph Eagar joeedh at gmail.com
Tue Nov 3 06:06:07 CET 2009


Revision: 24266
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24266
Author:   joeedh
Date:     2009-11-03 06:06:04 +0100 (Tue, 03 Nov 2009)

Log Message:
-----------
a bug fix and a compile fix

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
    branches/bmesh/blender/source/blender/editors/include/ED_util.h
    branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h	2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h	2009-11-03 05:06:04 UTC (rev 24266)
@@ -60,10 +60,13 @@
 /*
   this function recreates a tesselation.
   returns number of tesselation faces.
+
+  use_poly_origindex sets whether or not the tesselation faces' origindex
+  layer should point to original poly indices or real poly indices.
  */
 int mesh_recalcTesselation(struct CustomData *fdata, struct CustomData *ldata, 
 	struct CustomData *pdata, struct MVert *mvert, int totface, 
-	int totloop, int totpoly);
+	int totloop, int totpoly, int use_poly_origindex);
 
 /*calculates a face normal.*/
 void mesh_calc_poly_normal(struct MPoly *mpoly, struct MLoop *loopstart, 

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2009-11-03 05:06:04 UTC (rev 24266)
@@ -1310,11 +1310,24 @@
 	CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
 
 	dm->numFaceData = mesh_recalcTesselation(&dm->faceData, &dm->loopData, 
-		&dm->polyData, cddm->mvert, dm->numFaceData, dm->numLoopData, dm->numPolyData);
+		&dm->polyData, cddm->mvert, dm->numFaceData, dm->numLoopData, 
+		dm->numPolyData, 1);
 	
 	cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
 }
 
+/*ignores original poly origindex layer*/
+static void cdDM_recalcTesselation2(DerivedMesh *dm)
+{
+	CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
+
+	dm->numFaceData = mesh_recalcTesselation(&dm->faceData, &dm->loopData, 
+		&dm->polyData, cddm->mvert, dm->numFaceData, dm->numLoopData, 
+		dm->numPolyData, 0);
+	
+	cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
+}
+
 static void cdDM_release(DerivedMesh *dm)
 {
 	CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
@@ -2010,7 +2023,7 @@
 
 	/*recalc tesselation to ensure we have valid origindex values
 	  for mface->mpoly lookups.*/
-	cdDM_recalcTesselation(dm);
+	cdDM_recalcTesselation2(dm);
 
 	numFaces = dm->numFaceData;
 
@@ -2029,7 +2042,6 @@
 	}
 
 	face_nors = MEM_callocN(sizeof(float)*3*dm->numFaceData, "face_nors cdderivedmesh.c");
-	CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_ASSIGN, face_nors, dm->numFaceData);
 	origIndex = CustomData_get_layer(&dm->faceData, CD_ORIGINDEX);
 
 	mf = cddm->mface;
@@ -2057,6 +2069,13 @@
 
 	MEM_freeN(temp_nors);
 	MEM_freeN(vert_nors);
+
+	/*this restores original poly origindex -> tessface origindex mapping,
+	  instead of the poly index -> tessface origindex one we generated
+	  with cdDM_recalcTesselation2*/
+	cdDM_recalcTesselation(dm);
+	CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_ASSIGN, 
+		face_nors, dm->numFaceData);
 }
 
 void CDDM_calc_edges(DerivedMesh *dm)

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2009-11-03 05:06:04 UTC (rev 24266)
@@ -1604,7 +1604,7 @@
 int mesh_recalcTesselation(CustomData *fdata, 
                            CustomData *ldata, CustomData *pdata,
                            MVert *mvert, int totface, int totloop, 
-                           int totpoly)
+                           int totpoly, int use_poly_origindex)
 {
 	MPoly *mp, *mpoly;
 	MLoop *ml, *mloop;
@@ -1624,7 +1624,7 @@
 	
 	k = 0;
 	mp = mpoly;
-	polyorigIndex = CustomData_get_layer(pdata, CD_ORIGINDEX);
+	polyorigIndex = use_poly_origindex? CustomData_get_layer(pdata, CD_ORIGINDEX) : NULL;
 	for (i=0; i<totpoly; i++, mp++) {
 		ml = mloop + mp->loopstart;
 		firstv = NULL;

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c	2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c	2009-11-03 05:06:04 UTC (rev 24266)
@@ -2507,7 +2507,7 @@
 	cddm->numFaceData = mesh_recalcTesselation(&cddm->faceData, 
 		&cddm->loopData, &cddm->polyData, 
 		mvert, cddm->numFaceData, 
-		cddm->numLoopData, cddm->numPolyData);
+		cddm->numLoopData, cddm->numPolyData, 1);
 
 	CDDM_set_mface(cddm, DM_get_tessface_data_layer(cddm, CD_MFACE));
 	CDDM_calc_normals(cddm);

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2009-11-03 05:06:04 UTC (rev 24266)
@@ -32,15 +32,6 @@
 #include "bmesh.h"
 
 /*
-  HACK: we're using the old keyindex shape key hack for now, where each
-  vertex is assigned an index on entering editmode, which is used to retrieve
-  the original shapekey coordinates on exiting editmode.
-
-  this should be replaced by proper use of customdata layers, but I'm not
-  sure if that's such a good idea before merging with trunk or not.
-*/
-
-/*
  * MESH CONV.C
  *
  * This file contains functions

Modified: branches/bmesh/blender/source/blender/editors/include/ED_util.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_util.h	2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/editors/include/ED_util.h	2009-11-03 05:06:04 UTC (rev 24266)
@@ -54,8 +54,8 @@
 void undo_editmode_push(struct bContext *C, char *name, 
 						void * (*getdata)(struct bContext *C),
 						void (*freedata)(void *), 
-						void (*to_editmode)(void *, void *),  
-						void *(*from_editmode)(void *),
+						void (*to_editmode)(void *, void *, void *),  
+						void *(*from_editmode)(void *, void *),
 						int (*validate_undo)(void *, void *));
 
 						

Modified: branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c	2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c	2009-11-03 05:06:04 UTC (rev 24266)
@@ -1287,7 +1287,7 @@
 	/*we can't assume mfaces have a correct origindex layer that indices to mpolys.
 	  so instead we have to regenerate the tesselation faces altogether.*/
 	me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, &me->pdata, 
-		me->mvert, me->totface, me->totloop, me->totpoly);
+		me->mvert, me->totface, me->totloop, me->totpoly, 1);
 	mesh_update_customdata_pointers(me);
 	makeDerivedMesh(scene, ob, NULL, CD_MASK_BAREMESH);
 
@@ -1717,7 +1717,7 @@
 	/*we can't assume mfaces have a correct origindex layer that indices to mpolys.
 	  so instead we have to regenerate the tesselation faces altogether.*/
 	me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, &me->pdata, 
-		me->mvert, me->totface, me->totloop, me->totpoly);
+		me->mvert, me->totface, me->totloop, me->totpoly, 1);
 	mesh_update_customdata_pointers(me);
 	makeDerivedMesh(scene, ob, NULL, CD_MASK_BAREMESH);
 





More information about the Bf-blender-cvs mailing list