[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52627] trunk/blender/source/blender/bmesh /operators/bmo_symmetrize.c: Copy face attributes when creating new faces in BMO_symmetrize

Nicholas Bishop nicholasbishop at gmail.com
Wed Nov 28 06:07:11 CET 2012


Revision: 52627
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52627
Author:   nicholasbishop
Date:     2012-11-28 05:07:04 +0000 (Wed, 28 Nov 2012)
Log Message:
-----------
Copy face attributes when creating new faces in BMO_symmetrize

Fixes bug [#33269] Symmetrize doesnt honor shadesmooth
projects.blender.org/tracker/index.php?func=detail&aid=33269&group_id=9&atid=498

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/operators/bmo_symmetrize.c

Modified: trunk/blender/source/blender/bmesh/operators/bmo_symmetrize.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_symmetrize.c	2012-11-28 02:49:06 UTC (rev 52626)
+++ trunk/blender/source/blender/bmesh/operators/bmo_symmetrize.c	2012-11-28 05:07:04 UTC (rev 52627)
@@ -245,6 +245,8 @@
 
 	/* True only if none of the polygon's edges were split */
 	int already_symmetric;
+
+	BMFace *src_face;
 } SymmPoly;
 
 static void symm_poly_with_splits(const Symm *symm,
@@ -255,6 +257,8 @@
 	BMLoop *l;
 	int i;
 
+	out->src_face = f;
+
 	/* Count vertices and check for edge splits */
 	out->len = f->len;
 	out->already_symmetric = TRUE;
@@ -351,7 +355,8 @@
 	return FALSE;
 }
 
-static BMFace *symm_face_create_v(BMesh *bm, BMVert **fv, BMEdge **fe, int len)
+static BMFace *symm_face_create_v(BMesh *bm, BMFace *example,
+								  BMVert **fv, BMEdge **fe, int len)
 {
 	BMFace *f_new;
 	int i;
@@ -365,6 +370,8 @@
 		}
 	}
 	f_new = BM_face_create(bm, fv, fe, len, TRUE);
+	if (example)
+		BM_elem_attrs_copy(bm, bm, example, f_new);
 	BM_face_select_set(bm, f_new, TRUE);
 	BMO_elem_flag_enable(bm, f_new, SYMM_OUTPUT_GEOM);
 	return f_new;
@@ -399,7 +406,7 @@
 		}
 	}
 
-	symm_face_create_v(symm->bm, fv, fe, j);
+	symm_face_create_v(symm->bm, sp->src_face, fv, fe, j);
 }
 
 static void symm_mesh_output_poly_with_splits(Symm *symm,
@@ -422,7 +429,7 @@
 		fv[i] = v;
 	}
 
-	symm_face_create_v(symm->bm, fv, fe, segment_len);
+	symm_face_create_v(symm->bm, sp->src_face, fv, fe, segment_len);
 
 	/* Output the kill side of the input polygon */
 
@@ -434,7 +441,7 @@
 
 	}
 
-	symm_face_create_v(symm->bm, fv, fe, segment_len);
+	symm_face_create_v(symm->bm, sp->src_face, fv, fe, segment_len);
 }
 
 static void symm_mirror_polygons(Symm *symm)
@@ -482,7 +489,7 @@
 					fv[i] = l->v;
 			}
 
-			symm_face_create_v(symm->bm, fv, fe, f->len);
+			symm_face_create_v(symm->bm, f, fv, fe, f->len);
 		}
 		else if (ignore_all) {
 			BM_face_kill(symm->bm, f);
@@ -589,7 +596,7 @@
 
 				BLI_assert(fv[0] && fv[1] && fv[2]);
 
-				symm_face_create_v(symm->bm, fv, fe, 3);
+				symm_face_create_v(symm->bm, NULL, fv, fe, 3);
 			}
 		}
 	}




More information about the Bf-blender-cvs mailing list