[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53690] trunk/blender: don' t store bevel weights or edge crease customdata layers in editmode unless they are needed .

Campbell Barton ideasman42 at gmail.com
Thu Jan 10 05:43:36 CET 2013


Revision: 53690
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53690
Author:   campbellbarton
Date:     2013-01-10 04:43:31 +0000 (Thu, 10 Jan 2013)
Log Message:
-----------
don't store bevel weights or edge crease customdata layers in editmode unless they are needed.

configurable in 'Geometry Data' panel, will be added when running crease edges transform for example.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py
    trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    trunk/blender/source/blender/blenkernel/BKE_blender.h
    trunk/blender/source/blender/blenkernel/BKE_customdata.h
    trunk/blender/source/blender/blenkernel/BKE_mesh.h
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/customdata.c
    trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/bmesh/bmesh_class.h
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c
    trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.h
    trunk/blender/source/blender/editors/mesh/editmesh_select.c
    trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/makesdna/DNA_mesh_types.h
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c

Modified: trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/release/scripts/startup/bl_ui/properties_data_mesh.py	2013-01-10 04:43:31 UTC (rev 53690)
@@ -372,18 +372,21 @@
     def draw(self, context):
         layout = self.layout
 
-        # me = context.mesh
+        obj = context.object
+        me = context.mesh
         col = layout.column()
-        # sticky has no UI access since 2.49 - we may remove
-        '''
-        row = col.row(align=True)
-        row.operator("mesh.customdata_create_sticky")
-        row.operator("mesh.customdata_clear_sticky", icon='X')
-        '''
+
         col.operator("mesh.customdata_clear_mask", icon='X')
         col.operator("mesh.customdata_clear_skin", icon='X')
 
+        col = layout.column()
 
+        col.enabled = (obj.mode != 'EDIT')
+        col.prop(me, "use_customdata_vertex_bevel")
+        col.prop(me, "use_customdata_edge_bevel")
+        col.prop(me, "use_customdata_edge_crease")
+
+
 class DATA_PT_custom_props_mesh(MeshButtonsPanel, PropertyPanel, Panel):
     COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
     _context_path = "object.data"

Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2013-01-10 04:43:31 UTC (rev 53690)
@@ -173,6 +173,9 @@
 	float auto_bump_scale;
 	DMDirtyFlag dirty;
 
+	/* use for converting to BMesh which doesn't store bevel weight and edge crease by default */
+	char cd_flag;
+
 	/** Calculate vert and face normals */
 	void (*calcNormals)(DerivedMesh *dm);
 

Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_blender.h	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/source/blender/blenkernel/BKE_blender.h	2013-01-10 04:43:31 UTC (rev 53690)
@@ -42,7 +42,7 @@
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         265
-#define BLENDER_SUBVERSION      7
+#define BLENDER_SUBVERSION      8
 
 /* 262 was the last editmesh release but it has compatibility code for bmesh data */
 #define BLENDER_MINVERSION      262

Modified: trunk/blender/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_customdata.h	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/source/blender/blenkernel/BKE_customdata.h	2013-01-10 04:43:31 UTC (rev 53690)
@@ -249,6 +249,7 @@
 void *CustomData_get_layer_n(const struct CustomData *data, int type, int n);
 void *CustomData_get_layer_named(const struct CustomData *data, int type,
                                  const char *name);
+int CustomData_get_offset(const struct CustomData *data, int type);
 
 int CustomData_get_layer_index(const struct CustomData *data, int type);
 int CustomData_get_layer_index_n(const struct CustomData *data, int type, int n);

Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mesh.h	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/source/blender/blenkernel/BKE_mesh.h	2013-01-10 04:43:31 UTC (rev 53690)
@@ -334,6 +334,8 @@
 void BKE_mesh_poly_calc_angles(struct MVert *mvert, struct MLoop *mloop,
                                struct MPoly *mp, float angles[]);
 
+void BKE_mesh_do_versions_cd_flag_init(struct Mesh *mesh);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-01-10 04:43:31 UTC (rev 53690)
@@ -313,6 +313,8 @@
 	CustomData_copy(&source->polyData, &dm->polyData, CD_MASK_DERIVEDMESH,
 	                CD_CALLOC, numPolys);
 
+	dm->cd_flag = source->cd_flag;
+
 	dm->type = type;
 	dm->numVertData = numVerts;
 	dm->numEdgeData = numEdges;
@@ -488,6 +490,7 @@
 	CustomData_copy(&dm->edgeData, &tmp.edata, CD_MASK_MESH, CD_DUPLICATE, totedge);
 	CustomData_copy(&dm->loopData, &tmp.ldata, CD_MASK_MESH, CD_DUPLICATE, totloop);
 	CustomData_copy(&dm->polyData, &tmp.pdata, CD_MASK_MESH, CD_DUPLICATE, totpoly);
+	me->cd_flag = dm->cd_flag;
 
 	if (CustomData_has_layer(&dm->vertData, CD_SHAPEKEY)) {
 		KeyBlock *kb;

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2013-01-10 04:43:31 UTC (rev 53690)
@@ -1743,6 +1743,7 @@
 	        mesh->totloop, mesh->totpoly);
 
 	dm->deformedOnly = 1;
+	dm->cd_flag = mesh->cd_flag;
 
 	alloctype = CD_REFERENCE;
 
@@ -1926,13 +1927,12 @@
 	int numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL);
 	int numTex = CustomData_number_of_layers(&bm->pdata, CD_MTEXPOLY);
 	int *index, add_orig;
-	int has_crease, has_edge_bweight, has_vert_bweight;
 	CustomDataMask mask;
 	unsigned int i, j;
 	
-	has_edge_bweight = CustomData_has_layer(&bm->edata, CD_BWEIGHT);
-	has_vert_bweight = CustomData_has_layer(&bm->vdata, CD_BWEIGHT);
-	has_crease = CustomData_has_layer(&bm->edata, CD_CREASE);
+	const int cd_vert_bweight_offset = CustomData_get_offset(&bm->vdata, CD_BWEIGHT);
+	const int cd_edge_bweight_offset = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
+	const int cd_edge_crease_offset  = CustomData_get_offset(&bm->edata, CD_CREASE);
 	
 	dm->deformedOnly = 1;
 	
@@ -1972,8 +1972,7 @@
 
 		mv->flag = BM_vert_flag_to_mflag(eve);
 
-		if (has_vert_bweight)
-			mv->bweight = (unsigned char)(BM_elem_float_data_get(&bm->vdata, eve, CD_BWEIGHT) * 255.0f);
+		if (cd_vert_bweight_offset != -1) mv->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
 
 		if (add_orig) *index = i;
 
@@ -1991,11 +1990,6 @@
 		med->v1 = BM_elem_index_get(eed->v1);
 		med->v2 = BM_elem_index_get(eed->v2);
 
-		if (has_crease)
-			med->crease = (unsigned char)(BM_elem_float_data_get(&bm->edata, eed, CD_CREASE) * 255.0f);
-		if (has_edge_bweight)
-			med->bweight = (unsigned char)(BM_elem_float_data_get(&bm->edata, eed, CD_BWEIGHT) * 255.0f);
-		
 		med->flag = BM_edge_flag_to_mflag(eed);
 
 		/* handle this differently to editmode switching,
@@ -2006,6 +2000,9 @@
 			}
 		}
 
+		if (cd_edge_crease_offset  != -1) med->crease  = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eed, cd_edge_crease_offset);
+		if (cd_edge_bweight_offset != -1) med->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eed, cd_edge_bweight_offset);
+
 		CustomData_from_bmesh_block(&bm->edata, &dm->edgeData, eed->head.data, i);
 		if (add_orig) *index = i;
 	}
@@ -2068,6 +2065,8 @@
 	}
 	bm->elem_index_dirty &= ~BM_FACE;
 
+	dm->cd_flag = BM_mesh_cd_flag_from_bmesh(bm);
+
 	return dm;
 }
 
@@ -2105,6 +2104,7 @@
 	DM_from_template(dm, source, DM_TYPE_CDDM, numVerts, numEdges, numTessFaces,
 	                 numLoops, numPolys);
 	dm->deformedOnly = source->deformedOnly;
+	dm->cd_flag = source->cd_flag;
 	dm->dirty = source->dirty;
 
 	CustomData_copy_data(&source->vertData, &dm->vertData, 0, 0, numVerts);

Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/customdata.c	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/source/blender/blenkernel/intern/customdata.c	2013-01-10 04:43:31 UTC (rev 53690)
@@ -2095,7 +2095,15 @@
 	return data->layers[layer_index].data;
 }
 
+int CustomData_get_offset(const CustomData *data, int type)
+{
+	/* get the layer index of the active layer of type */
+	int layer_index = CustomData_get_layer_index(data, type);
+	if (layer_index < 0) return -1;
 
+	return data->layers[layer_index].offset;
+}
+
 int CustomData_set_layer_name(const CustomData *data, int type, int n, const char *name)
 {
 	/* get the layer index of the first layer of type */

Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2013-01-09 22:06:03 UTC (rev 53689)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2013-01-10 04:43:31 UTC (rev 53690)
@@ -1402,7 +1402,7 @@
 	BMesh *bm = bmdm->tc->bm;
 	BMVert *eve;
 	BMIter iter;
-	const int has_bweight = CustomData_has_layer(&bm->vdata, CD_BWEIGHT);
+	const int cd_vert_bweight_offset = CustomData_get_offset(&bm->vdata, CD_BWEIGHT);
 
 	if (bmdm->vertexCos) {
 		int i;
@@ -1412,9 +1412,8 @@
 			normal_float_to_short_v3(vert_r->no, eve->no);
 			vert_r->flag = BM_vert_flag_to_mflag(eve);
 
-			if (has_bweight) {
-				vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, eve, CD_BWEIGHT) * 255.0f);
-			}
+			if (cd_vert_bweight_offset != -1) vert_r->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
+
 			vert_r++;
 		}
 	}
@@ -1424,9 +1423,8 @@
 			normal_float_to_short_v3(vert_r->no, eve->no);
 			vert_r->flag = BM_vert_flag_to_mflag(eve);
 
-			if (has_bweight) {
-				vert_r->bweight = (unsigned char) (BM_elem_float_data_get(&bm->vdata, eve, CD_BWEIGHT) * 255.0f);
-			}
+			if (cd_vert_bweight_offset != -1) vert_r->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
+
 			vert_r++;
 		}
 	}
@@ -1437,24 +1435,20 @@
 	BMesh *bm = ((EditDerivedBMesh *)dm)->tc->bm;
 	BMEdge *eed;
 	BMIter iter;
-	const int has_bweight = CustomData_has_layer(&bm->edata, CD_BWEIGHT);
-	const int has_crease = CustomData_has_layer(&bm->edata, CD_CREASE);
 
+	const int cd_edge_bweight_offset = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
+	const int cd_edge_crease_offset  = CustomData_get_offset(&bm->edata, CD_CREASE);
+
 	BM_mesh_elem_index_ensure(bm, BM_VERT);
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list