[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43894] branches/bmesh/blender/source/ blender: ensure tessface's are available while sculpting.

Campbell Barton ideasman42 at gmail.com
Sun Feb 5 08:12:47 CET 2012


Revision: 43894
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43894
Author:   campbellbarton
Date:     2012-02-05 07:12:46 +0000 (Sun, 05 Feb 2012)
Log Message:
-----------
ensure tessface's are available while sculpting.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
    branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
    branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
    branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
    branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
    branches/bmesh/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h	2012-02-05 07:09:30 UTC (rev 43893)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h	2012-02-05 07:12:46 UTC (rev 43894)
@@ -260,6 +260,9 @@
 
 void BKE_mesh_ensure_navmesh(struct Mesh *me);
 
+void BKE_mesh_calc_tessface(struct Mesh *mesh);
+void BKE_mesh_ensure_tessface(struct Mesh *mesh);
+
 /*convert a triangle of loop facedata to mface facedata*/
 void mesh_loops_to_mface_corners(struct CustomData *fdata, struct CustomData *ldata,
                                  struct CustomData *pdata, int lindex[4], int findex,

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-02-05 07:09:30 UTC (rev 43893)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-02-05 07:12:46 UTC (rev 43894)
@@ -446,14 +446,8 @@
 	/* yes, must be before _and_ after tesselate */
 	mesh_update_customdata_pointers(&tmp, TRUE);
 
-	tmp.totface = mesh_recalcTesselation(&tmp.fdata, &tmp.ldata, &tmp.pdata,
-	                                     tmp.mvert,
-	                                     tmp.totface, tmp.totloop, tmp.totpoly,
-	                                     TRUE);
+	BKE_mesh_calc_tessface(&tmp);
 
-	mesh_update_customdata_pointers(&tmp, TRUE);
-
-
 	CustomData_free(&me->vdata, me->totvert);
 	CustomData_free(&me->edata, me->totedge);
 	CustomData_free(&me->fdata, me->totface);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2012-02-05 07:09:30 UTC (rev 43893)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2012-02-05 07:12:46 UTC (rev 43894)
@@ -2950,3 +2950,21 @@
 		CustomData_add_layer_named(&me->fdata, CD_RECAST, CD_REFERENCE, recastData, numFaces, "recastData");
 	}
 }
+
+void BKE_mesh_calc_tessface(Mesh *mesh)
+{
+	mesh->totface = mesh_recalcTesselation(&mesh->fdata, &mesh->ldata, &mesh->pdata,
+	                                       mesh->mvert,
+	                                       mesh->totface, mesh->totloop, mesh->totpoly,
+	                                       /* calc normals right after, dont copy from polys here */
+	                                       FALSE);
+
+	mesh_update_customdata_pointers(mesh, TRUE);
+}
+
+void BKE_mesh_ensure_tessface(Mesh *mesh)
+{
+	if (mesh->totpoly && mesh->totface == 0) {
+		BKE_mesh_calc_tessface(mesh);
+	}
+}

Modified: branches/bmesh/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/bmesh/blender/source/blender/blenloader/intern/readfile.c	2012-02-05 07:09:30 UTC (rev 43893)
+++ branches/bmesh/blender/source/blender/blenloader/intern/readfile.c	2012-02-05 07:12:46 UTC (rev 43894)
@@ -3703,13 +3703,8 @@
 			 *    waiting until edit mode has been entered/exited, making it easier
 			 *    to recognize problems that would otherwise only show up after edits).
 			 */
-			me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, &me->pdata,
-			                                     me->mvert,
-			                                     me->totface, me->totloop, me->totpoly,
-			                                     TRUE);
+			BKE_mesh_calc_tessface(me);
 
-			mesh_update_customdata_pointers(me, TRUE);
-
 			me->id.flag -= LIB_NEEDLINK;
 		}
 		me= me->id.next;

Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2012-02-05 07:09:30 UTC (rev 43893)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c	2012-02-05 07:12:46 UTC (rev 43894)
@@ -631,11 +631,7 @@
 	}
 
 	if (dotess) {
-		me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, &me->pdata,
-		                                     me->mvert,
-		                                     me->totface, me->totloop, me->totpoly,
-		                                     /* possibly can set to FALSE here, but defaults to true */
-		                                     TRUE);
+		BKE_mesh_calc_tessface(me);
 	}
 
 	mesh_update_customdata_pointers(me, dotess);

Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c	2012-02-05 07:09:30 UTC (rev 43893)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c	2012-02-05 07:12:46 UTC (rev 43894)
@@ -758,14 +758,9 @@
 	if(calc_edges || (mesh->totpoly && mesh->totedge == 0))
 		BKE_mesh_calc_edges(mesh, calc_edges);
 
-	mesh->totface = mesh_recalcTesselation(&mesh->fdata, &mesh->ldata, &mesh->pdata,
-	                                       mesh->mvert,
-	                                       mesh->totface, mesh->totloop, mesh->totpoly,
-	                                       /* calc normals right after, dont copy from polys here */
-	                                       FALSE);
+	/* TODO, make this optional, we dont always want this! */
+	BKE_mesh_calc_tessface(mesh);
 
-	mesh_update_customdata_pointers(mesh, TRUE);
-
 	polyindex = CustomData_get_layer(&mesh->fdata, CD_POLYINDEX);
 	/* add a normals layer for tesselated faces, a tessface normal will
 	   contain the normal of the poly the face was tesselated from. */

Modified: branches/bmesh/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/sculpt_paint/sculpt.c	2012-02-05 07:09:30 UTC (rev 43893)
+++ branches/bmesh/blender/source/blender/editors/sculpt_paint/sculpt.c	2012-02-05 07:12:46 UTC (rev 43894)
@@ -2548,7 +2548,7 @@
 		/* Modifiers could depend on mesh normals, so we should update them/
 		   Note, then if sculpting happens on locked key, normals should be re-calculated
 		   after applying coords from keyblock on base mesh */
-		mesh_calc_normals_mapping(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL, NULL, 0, NULL, NULL);
+		mesh_calc_normals(me->mvert, me->totvert, me->mloop, me->mpoly, me->totloop, me->totpoly, NULL);
 	} else if (ss->kb)
 		sculpt_update_keyblock(ob);
 }
@@ -2723,6 +2723,9 @@
 		ss->multires = NULL;
 	}
 
+	/* BMESH ONLY --- at some point we should move sculpt code to use polygons only - but for now it needs tessfaces */
+	BKE_mesh_ensure_tessface(ob->data);
+
 	ss->pbvh = dm->getPBVH(ob, dm);
 	ss->pmap = (need_pmap && dm->getPolyMap)? dm->getPolyMap(ob, dm): NULL;
 




More information about the Bf-blender-cvs mailing list