[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35101] branches/bmesh/blender/source/ blender: =bmesh= fix bug with uvlayers

Joseph Eagar joeedh at gmail.com
Wed Feb 23 09:12:27 CET 2011


Revision: 35101
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35101
Author:   joeedh
Date:     2011-02-23 08:12:27 +0000 (Wed, 23 Feb 2011)
Log Message:
-----------
=bmesh= fix bug with uvlayers

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
    branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
    branches/bmesh/blender/source/blender/editors/mesh/knifetool.c
    branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
    branches/bmesh/blender/source/blender/editors/space_image/image_draw.c
    branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    branches/bmesh/blender/source/blender/nodes/intern/SHD_nodes/SHD_output.c

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-02-23 08:12:27 UTC (rev 35101)
@@ -926,6 +926,28 @@
 	cdDM_drawFacesTex_common(dm, NULL, setDrawOptions, userData);
 }
 
+#define PASSVERT(index, vert) {													\
+		if(attribs.totorco)															\
+			glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]);	\
+		for(b = 0; b < attribs.tottface; b++) {										\
+			MTFace *tf = &attribs.tface[b].array[a];								\
+			glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]);			\
+		}																			\
+		for(b = 0; b < attribs.totmcol; b++) {										\
+			MCol *cp = &attribs.mcol[b].array[a*4 + vert];							\
+			GLubyte col[4];															\
+			col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a;				\
+			glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col);					\
+		}																			\
+		if(attribs.tottang) {														\
+			float *tang = attribs.tang.array[a*4 + vert];							\
+			glVertexAttrib3fvARB(attribs.tang.glIndex, tang);						\
+		}																			\
+		if(smoothnormal)															\
+			glNormal3sv(mvert[index].no);											\
+		glVertex3fv(mvert[index].co);												\
+	}
+
 static void cdDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, void *attribs), int (*setDrawOptions)(void *userData, int index), void *userData)
 {
 	CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
@@ -1012,28 +1034,6 @@
 				}
 			}
 
-#define PASSVERT(index, vert) {													\
-		if(attribs.totorco)															\
-			glVertexAttrib3fvARB(attribs.orco.glIndex, attribs.orco.array[index]);	\
-		for(b = 0; b < attribs.tottface; b++) {										\
-			MTFace *tf = &attribs.tface[b].array[a];								\
-			glVertexAttrib2fvARB(attribs.tface[b].glIndex, tf->uv[vert]);			\
-		}																			\
-		for(b = 0; b < attribs.totmcol; b++) {										\
-			MCol *cp = &attribs.mcol[b].array[a*4 + vert];							\
-			GLubyte col[4];															\
-			col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a;				\
-			glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col);					\
-		}																			\
-		if(attribs.tottang) {														\
-			float *tang = attribs.tang.array[a*4 + vert];							\
-			glVertexAttrib3fvARB(attribs.tang.glIndex, tang);						\
-		}																			\
-		if(smoothnormal)															\
-			glNormal3sv(mvert[index].no);											\
-		glVertex3fv(mvert[index].co);												\
-	}
-
 			PASSVERT(mface->v1, 0);
 			PASSVERT(mface->v2, 1);
 			PASSVERT(mface->v3, 2);

Modified: branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c	2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c	2011-02-23 08:12:27 UTC (rev 35101)
@@ -127,9 +127,10 @@
 	BMLoop *l, *startl;
 	BMEdge *e;
 	BMVert *v;
-	int i;
-
-	while (1) {
+	int i, ok;
+	
+	ok=0;
+	while (ok++ < 100000) {		
 		BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) {
 			if (!BMO_TestFlag(bm, e, EDGE_SEAM))
 				continue;

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c	2011-02-23 08:12:27 UTC (rev 35101)
@@ -798,7 +798,7 @@
 {
 	/* some of these checks could be a touch overkill */
 	return em && em->bm->totface && CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY) &&
-		   CustomData_has_layer(&em->bm->ldata, CD_MLOOPCOL);
+		   CustomData_has_layer(&em->bm->ldata, CD_MLOOPUV);
 }
 
 int EDBM_vertColorCheck(BMEditMesh *em)

Modified: branches/bmesh/blender/source/blender/editors/mesh/knifetool.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/knifetool.c	2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/mesh/knifetool.c	2011-02-23 08:12:27 UTC (rev 35101)
@@ -1582,12 +1582,17 @@
 
 static int knifetool_modal (bContext *C, wmOperator *op, wmEvent *event)
 {
+	Object *obedit;
 	knifetool_opdata *kcd= op->customdata;
 	
 	if (!C) {
 		return OPERATOR_FINISHED;
 	}
 	
+	obedit = CTX_data_edit_object(C);
+	if (!obedit || obedit->type != OB_MESH || ((Mesh*)obedit->data)->edit_btmesh != kcd->em)
+		return OPERATOR_FINISHED;
+
 	view3d_operator_needs_opengl(C);
 
 	switch (event->type) {

Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c	2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c	2011-02-23 08:12:27 UTC (rev 35101)
@@ -67,19 +67,26 @@
 
 #include "mesh_intern.h"
 
+#define GET_CD_DATA(me, data) (me->edit_btmesh ? &me->edit_btmesh->bm->data : &me->data)
+
 static void delete_customdata_layer(bContext *C, Object *ob, CustomDataLayer *layer)
 {
 	Mesh *me = ob->data;
-	CustomData *data= (me->edit_btmesh)? &me->edit_btmesh->bm->pdata: &me->pdata;
+	CustomData *data;
 	void *actlayerdata, *rndlayerdata, *clonelayerdata, *stencillayerdata, *layerdata=layer->data;
 	int type= layer->type;
-	int index= CustomData_get_layer_index(data, type);
-	int i, actindex, rndindex, cloneindex, stencilindex, tot = me->totpoly;
+	int index;
+	int i, actindex, rndindex, cloneindex, stencilindex, tot;
 	
-	if (layer->type == CD_MLOOPCOL) {
+	if (layer->type == CD_MLOOPCOL || layer->type == CD_MLOOPUV) {
 		data = (me->edit_btmesh)? &me->edit_btmesh->bm->ldata: &me->ldata;
 		tot = me->totloop;
+	} else {
+		data = (me->edit_btmesh)? &me->edit_btmesh->bm->pdata: &me->pdata;
+		tot = me->totpoly;
 	}
+	
+	index = CustomData_get_layer_index(data, type);
 
 	/* ok, deleting a non-active layer needs to preserve the active layer indices.
 	  to do this, we store a pointer to the .data member of both layer and the active layer,
@@ -179,20 +186,31 @@
 		CustomData_set_layer_active(&em->bm->pdata, CD_MTEXPOLY, layernum);
 		if(active_set || layernum==0)
 			CustomData_set_layer_active(&em->bm->pdata, CD_MTEXPOLY, layernum);
+
+		BM_add_data_layer(em->bm, &em->bm->ldata, CD_MLOOPUV);
+		CustomData_set_layer_active(&em->bm->ldata, CD_MLOOPUV, layernum);
+		if(active_set || layernum==0)
+			CustomData_set_layer_active(&em->bm->ldata, CD_MLOOPUV, layernum);
+
 	}
 	else {
-		layernum= CustomData_number_of_layers(&me->pdata, MAX_MTFACE);
+		layernum= CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
 		if(layernum >= MAX_MTFACE)
 			return 0;
 
-		if(me->mtface)
+		if(me->mtpoly) {
 			CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DUPLICATE, me->mtpoly, me->totpoly, name);
-		else
+			CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DUPLICATE, me->mloopuv, me->totloop, name);
+		} else {
 			CustomData_add_layer_named(&me->pdata, CD_MTEXPOLY, CD_DEFAULT, NULL, me->totpoly, name);
-
-		if(active_set || layernum==0)
+			CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DEFAULT, NULL, me->totloop, name);
+		}
+		
+		if(active_set || layernum==0) {
 			CustomData_set_layer_active(&me->pdata, CD_MTEXPOLY, layernum);
-
+			CustomData_set_layer_active(&me->ldata, CD_MLOOPUV, layernum);
+		}
+		
 		mesh_update_customdata_pointers(me);
 	}
 
@@ -204,16 +222,22 @@
 
 int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)
 {
-	CustomDataLayer *cdl;
+	CustomData *pdata = GET_CD_DATA(me, pdata), *ldata = GET_CD_DATA(me, ldata);
+	CustomDataLayer *cdlp, *cdlu;
 	int index;
 
- 	index= CustomData_get_active_layer_index(&me->pdata, CD_MTEXPOLY);
-	cdl= (index == -1)? NULL: &me->pdata.layers[index];
+ 	index= CustomData_get_active_layer_index(pdata, CD_MTEXPOLY);
+	cdlp= (index == -1)? NULL: &pdata->layers[index];
 
-	if(!cdl)
+ 	index= CustomData_get_active_layer_index(ldata, CD_MLOOPUV);
+	cdlu= (index == -1)? NULL: &ldata->layers[index];
+	
+	if (!cdlp || !cdlu)
 		return 0;
 
-	delete_customdata_layer(C, ob, cdl);
+	delete_customdata_layer(C, ob, cdlp);
+	delete_customdata_layer(C, ob, cdlu);
+	
 	DAG_id_flush_update(&me->id, OB_RECALC_DATA);
 	WM_event_add_notifier(C, NC_GEOM|ND_DATA, me);
 
@@ -274,8 +298,8 @@
 	CustomDataLayer *cdl;
 	int index;
 
- 	index= CustomData_get_active_layer_index(&me->pdata, CD_MLOOPCOL);
-	cdl= (index == -1)? NULL: &me->pdata.layers[index];
+ 	index= CustomData_get_active_layer_index(&me->ldata, CD_MLOOPCOL);
+	cdl= (index == -1)? NULL: &me->ldata.layers[index];
 
 	if(!cdl)
 		return 0;
@@ -554,6 +578,7 @@
 
 static void mesh_calc_edges(Mesh *mesh, int update)
 {
+#if 0
 	CustomData edata;
 	EdgeHashIterator *ehi;
 	MFace *mf = mesh->mface;
@@ -617,6 +642,7 @@
 	mesh->medge = CustomData_get_layer(&mesh->edata, CD_MEDGE);
 
 	BLI_edgehash_free(eh, NULL);
+#endif
 }
 
 void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges)

Modified: branches/bmesh/blender/source/blender/editors/space_image/image_draw.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/space_image/image_draw.c	2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/space_image/image_draw.c	2011-02-23 08:12:27 UTC (rev 35101)
@@ -173,13 +173,13 @@
 	if(gridsize<=0.0f) return;
 	
 	if(gridsize<1.0f) {
-		while(gridsize<1.0f) {
+		while(gridsize<1.0f && gridsize<1000000.0f	) {
 			gridsize*= 4.0;
 			gridstep*= 4.0;
 		}
 	}
 	else {
-		while(gridsize>=4.0f) {
+		while(gridsize>=4.0f && gridsize<1000000.0f) {
 			gridsize/= 4.0;
 			gridstep/= 4.0;
 		}

Modified: branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2011-02-23 06:48:47 UTC (rev 35100)
+++ branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2011-02-23 08:12:27 UTC (rev 35101)
@@ -85,7 +85,7 @@
 		return 1;
 	}
 
-	if(em && em->bm->totface) {// && !CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY)) {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list