[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46405] branches/meshdata_transfer: svn merge ^/trunk/blender -r46360:46370

Ove Murberg Henriksen sorayasilvermoon at hotmail.com
Tue May 8 01:40:18 CEST 2012


Revision: 46405
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46405
Author:   cyborgmuppet
Date:     2012-05-07 23:40:17 +0000 (Mon, 07 May 2012)
Log Message:
-----------
svn merge ^/trunk/blender -r46360:46370

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46360

Modified Paths:
--------------
    branches/meshdata_transfer/intern/cycles/render/image.cpp
    branches/meshdata_transfer/intern/ghost/intern/GHOST_SystemCocoa.mm
    branches/meshdata_transfer/source/blender/bmesh/intern/bmesh_construct.c
    branches/meshdata_transfer/source/blender/bmesh/intern/bmesh_private.h
    branches/meshdata_transfer/source/blender/bmesh/operators/bmo_dissolve.c
    branches/meshdata_transfer/source/blender/editors/sculpt_paint/paint_stroke.c
    branches/meshdata_transfer/source/blender/editors/sculpt_paint/paint_vertex.c
    branches/meshdata_transfer/source/blender/editors/sculpt_paint/sculpt.c
    branches/meshdata_transfer/source/blender/editors/sculpt_paint/sculpt_undo.c

Property Changed:
----------------
    branches/meshdata_transfer/
    branches/meshdata_transfer/source/blender/editors/interface/interface.c
    branches/meshdata_transfer/source/blender/editors/space_outliner/


Property changes on: branches/meshdata_transfer
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230,45623-45625,46037
/trunk/blender:44563-46200,46301-46360
   + /branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230,45623-45625,46037
/trunk/blender:44563-46200,46301-46370

Modified: branches/meshdata_transfer/intern/cycles/render/image.cpp
===================================================================
--- branches/meshdata_transfer/intern/cycles/render/image.cpp	2012-05-07 23:36:22 UTC (rev 46404)
+++ branches/meshdata_transfer/intern/cycles/render/image.cpp	2012-05-07 23:40:17 UTC (rev 46405)
@@ -344,7 +344,7 @@
 	}
 
 	if(is_float) {
-		string filename = path_filename(float_images[slot]->filename);
+		string filename = path_filename(float_images[slot - TEX_IMAGE_FLOAT_START]->filename);
 		progress->set_status("Updating Images", "Loading " + filename);
 
 		device_vector<float4>& tex_img = dscene->tex_float_image[slot - TEX_IMAGE_FLOAT_START];

Modified: branches/meshdata_transfer/intern/ghost/intern/GHOST_SystemCocoa.mm
===================================================================
--- branches/meshdata_transfer/intern/ghost/intern/GHOST_SystemCocoa.mm	2012-05-07 23:36:22 UTC (rev 46404)
+++ branches/meshdata_transfer/intern/ghost/intern/GHOST_SystemCocoa.mm	2012-05-07 23:40:17 UTC (rev 46405)
@@ -1487,7 +1487,8 @@
 					break;
 			}
 			
-		case NSMouseMoved:
+		case NSMouseMoved: 
+			{
 				GHOST_TGrabCursorMode grab_mode = window->getCursorGrabMode();
 
 				/* TODO: CHECK IF THIS IS A TABLET EVENT */
@@ -1572,7 +1573,8 @@
 					}
 						break;
 				}
-				break;
+			}
+			break;
 			
 		case NSScrollWheel:
 			{

Modified: branches/meshdata_transfer/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- branches/meshdata_transfer/source/blender/bmesh/intern/bmesh_construct.c	2012-05-07 23:36:22 UTC (rev 46404)
+++ branches/meshdata_transfer/source/blender/bmesh/intern/bmesh_construct.c	2012-05-07 23:40:17 UTC (rev 46405)
@@ -214,6 +214,9 @@
 		BLI_array_append(verts, v);
 		BLI_array_append(edges2, e);
 
+		/* we only flag the verts to check if they are in the face more then once */
+		BM_ELEM_API_FLAG_ENABLE(v, _FLAG_MV);
+
 		do {
 			e2 = bmesh_disk_edge_next(e2, v);
 			if (e2 != e && BM_ELEM_API_FLAG_TEST(e2, _FLAG_MF)) {
@@ -269,6 +272,12 @@
 		if (!edges2[i]) {
 			goto err;
 		}
+
+		/* check if vert is in face more then once. if the flag is disabled. we've already visited */
+		if (!BM_ELEM_API_FLAG_TEST(verts[i], _FLAG_MV)) {
+			goto err;
+		}
+		BM_ELEM_API_FLAG_DISABLE(verts[i], _FLAG_MV);
 	}
 
 	f = BM_face_create(bm, verts, edges2, len, nodouble);
@@ -286,6 +295,10 @@
 err:
 	for (i = 0; i < len; i++) {
 		BM_ELEM_API_FLAG_DISABLE(edges[i], _FLAG_MF);
+		/* vert count may != len */
+		if (i < BLI_array_count(verts)) {
+			BM_ELEM_API_FLAG_DISABLE(verts[i], _FLAG_MV);
+		}
 	}
 
 	BLI_array_free(verts);

Modified: branches/meshdata_transfer/source/blender/bmesh/intern/bmesh_private.h
===================================================================
--- branches/meshdata_transfer/source/blender/bmesh/intern/bmesh_private.h	2012-05-07 23:36:22 UTC (rev 46404)
+++ branches/meshdata_transfer/source/blender/bmesh/intern/bmesh_private.h	2012-05-07 23:40:17 UTC (rev 46405)
@@ -60,6 +60,7 @@
  * on using these internal flags!*/
 #define _FLAG_JF	1 /* join faces */
 #define _FLAG_MF	2 /* make face */
+#define _FLAG_MV	2 /* make face, vertex */
 
 #define BM_ELEM_API_FLAG_ENABLE(element, f)  ((element)->oflags[0].pflag |=  (f))
 #define BM_ELEM_API_FLAG_DISABLE(element, f) ((element)->oflags[0].pflag &= ~(f))

Modified: branches/meshdata_transfer/source/blender/bmesh/operators/bmo_dissolve.c
===================================================================
--- branches/meshdata_transfer/source/blender/bmesh/operators/bmo_dissolve.c	2012-05-07 23:36:22 UTC (rev 46404)
+++ branches/meshdata_transfer/source/blender/bmesh/operators/bmo_dissolve.c	2012-05-07 23:40:17 UTC (rev 46405)
@@ -34,14 +34,14 @@
 
 #include "intern/bmesh_operators_private.h" /* own include */
 
-#define FACE_MARK	1
-#define FACE_ORIG	2
-#define FACE_NEW	4
-#define EDGE_MARK	1
+#define FACE_MARK   1
+#define FACE_ORIG   2
+#define FACE_NEW    4
+#define EDGE_MARK   1
 
-#define VERT_MARK	1
+#define VERT_MARK   1
 
-static int UNUSED_FUNCTION(check_hole_in_region)(BMesh *bm, BMFace *f)
+static int UNUSED_FUNCTION(check_hole_in_region) (BMesh * bm, BMFace * f)
 {
 	BMWalker regwalker;
 	BMIter liter2;
@@ -60,8 +60,8 @@
 		l2 = BM_iter_new(&liter2, bm, BM_LOOPS_OF_FACE, f2);
 		for ( ; l2; l2 = BM_iter_step(&liter2)) {
 			l3 = l2->radial_next;
-			if ( BMO_elem_flag_test(bm, l3->f, FACE_MARK) !=
-			     BMO_elem_flag_test(bm, l2->f, FACE_MARK))
+			if (BMO_elem_flag_test(bm, l3->f, FACE_MARK) !=
+			    BMO_elem_flag_test(bm, l2->f, FACE_MARK))
 			{
 				if (!BMO_elem_flag_test(bm, l2->e, EDGE_MARK)) {
 					return FALSE;
@@ -433,8 +433,8 @@
 					fe = l->e;
 					for ( ; l; l = BM_iter_step(&liter)) {
 						f2 = BM_iter_new(&fiter, bm,
-								BM_FACES_OF_EDGE, l->e);
-						for ( ; f2; f2 = BM_iter_step(&fiter)) {
+						                 BM_FACES_OF_EDGE, l->e);
+						for (; f2; f2 = BM_iter_step(&fiter)) {
 							if (f2 != f) {
 								BM_faces_join_pair(bm, f, f2, l->e);
 								found2 = 1;
@@ -520,14 +520,24 @@
 	const float angle_max = (float)M_PI / 2.0f;
 	const float angle_limit = minf(angle_max, BMO_slot_float_get(op, "angle_limit"));
 	DissolveElemWeight *weight_elems = MEM_mallocN(MAX2(einput->len, vinput->len) *
-	                                                 sizeof(DissolveElemWeight), __func__);
+	                                               sizeof(DissolveElemWeight), __func__);
 	int i, tot_found;
 
+	int *vert_reverse_lookup;
+
+	BMEdge **einput_arr = (BMEdge **)einput->data.p;
+	BMVert **vinput_arr = (BMVert **)vinput->data.p;
+
 	/* --- first edges --- */
 
+	/* wire -> tag */
+	BM_ITER_MESH (e_iter, &iter, bm, BM_EDGES_OF_MESH) {
+		BM_elem_flag_set(e_iter, BM_ELEM_TAG, BM_edge_is_wire(e_iter));
+	}
+
 	/* go through and split edge */
 	for (i = 0, tot_found = 0; i < einput->len; i++) {
-		BMEdge *e = ((BMEdge **)einput->data.p)[i];
+		BMEdge *e = einput_arr[i];
 		const float angle = BM_edge_calc_face_angle(e);
 
 		if (angle < angle_limit) {
@@ -576,10 +586,51 @@
 		}
 	}
 
+	/* prepare for cleanup */
+	BM_mesh_elem_index_ensure(bm, BM_VERT);
+	vert_reverse_lookup = MEM_mallocN(sizeof(int) * bm->totvert, __func__);
+	fill_vn_i(vert_reverse_lookup, bm->totvert, -1);
+	for (i = 0, tot_found = 0; i < vinput->len; i++) {
+		BMVert *v = vinput_arr[i];
+		vert_reverse_lookup[BM_elem_index_get(v)] = i;
+	}
+
+	/* --- cleanup --- */
+	earray = MEM_mallocN(sizeof(BMEdge *) * bm->totedge, __func__);
+	BM_ITER_MESH_INDEX (e_iter, &iter, bm, BM_EDGES_OF_MESH, i) {
+		earray[i] = e_iter;
+	}
+	/* remove all edges/verts left behind from dissolving, NULL'ing the vertex array so we dont re-use */
+	for (i = bm->totedge - 1; i != -1; i--) {
+		e_iter = earray[i];
+
+		if (BM_edge_is_wire(e_iter) && (BM_elem_flag_test(e_iter, BM_ELEM_TAG) == FALSE)) {
+			/* edge has become wire */
+			int vidx_reverse;
+			BMVert *v1 = e_iter->v1;
+			BMVert *v2 = e_iter->v2;
+			BM_edge_kill(bm, e_iter);
+			if (v1->e == NULL) {
+				vidx_reverse = vert_reverse_lookup[BM_elem_index_get(v1)];
+				if (vidx_reverse != -1) vinput_arr[vidx_reverse] = NULL;
+				BM_vert_kill(bm, v1);
+			}
+			if (v2->e == NULL) {
+				vidx_reverse = vert_reverse_lookup[BM_elem_index_get(v2)];
+				if (vidx_reverse != -1) vinput_arr[vidx_reverse] = NULL;
+				BM_vert_kill(bm, v2);
+			}
+		}
+	}
+	MEM_freeN(vert_reverse_lookup);
+
+	MEM_freeN(earray);
+
+
 	/* --- second verts --- */
 	for (i = 0, tot_found = 0; i < vinput->len; i++) {
-		BMVert *v = ((BMVert **)vinput->data.p)[i];
-		const float angle = bm_vert_edge_face_angle(v);
+		BMVert *v = vinput_arr[i];
+		const float angle = v ? bm_vert_edge_face_angle(v) : angle_limit;
 
 		if (angle < angle_limit) {
 			weight_elems[i].ele = (BMHeader *)v;


Property changes on: branches/meshdata_transfer/source/blender/editors/interface/interface.c
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/ge_candy/source/blender/editors/interface/interface.c:45070-46163
/branches/ge_harmony/source/blender/editors/interface/interface.c:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber/source/blender/editors/interface/interface.c:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato/source/blender/editors/interface/interface.c:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230,45623-45625,46037
/trunk/blender/source/blender/editors/interface/interface.c:44563-46200,46301-46360
   + /branches/ge_candy/source/blender/editors/interface/interface.c:45070-46163
/branches/ge_harmony/source/blender/editors/interface/interface.c:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list