[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46896] trunk/blender/source/blender/bmesh /operators/bmo_extrude.c: Clear skin root flag on new vertices created by extruding.

Nicholas Bishop nicholasbishop at gmail.com
Tue May 22 17:30:05 CEST 2012


Revision: 46896
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46896
Author:   nicholasbishop
Date:     2012-05-22 15:30:05 +0000 (Tue, 22 May 2012)
Log Message:
-----------
Clear skin root flag on new vertices created by extruding.

Skin modifier documentation:
http://wiki.blender.org/index.php/User:Nicholasbishop/SkinModifier

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

Modified: trunk/blender/source/blender/bmesh/operators/bmo_extrude.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_extrude.c	2012-05-22 15:29:57 UTC (rev 46895)
+++ trunk/blender/source/blender/bmesh/operators/bmo_extrude.c	2012-05-22 15:30:05 UTC (rev 46896)
@@ -26,9 +26,13 @@
 
 #include "MEM_guardedalloc.h"
 
+#include "DNA_meshdata_types.h"
+
 #include "BLI_math.h"
 #include "BLI_array.h"
 
+#include "BKE_customdata.h"
+
 #include "bmesh.h"
 
 #include "intern/bmesh_operators_private.h" /* own include */
@@ -167,6 +171,16 @@
 	BM_elem_attrs_copy(bm, bm, l_src_1, l_dst_b);
 }
 
+/* Disable the skin root flag on the input vert, assumes that the vert
+   data includes an CD_MVERT_SKIN layer */
+static void bm_extrude_disable_skin_root(BMesh *bm, BMVert *v)
+{
+	MVertSkin *vs;
+	
+	vs = CustomData_bmesh_get(&bm->vdata, v->head.data, CD_MVERT_SKIN);
+	vs->flag &= ~MVERT_SKIN_ROOT;
+}
+
 void bmo_extrude_edge_only_exec(BMesh *bm, BMOperator *op)
 {
 	BMOIter siter;
@@ -184,6 +198,13 @@
 	BMO_op_initf(bm, &dupeop, "dupe geom=%fve", EXT_INPUT);
 	BMO_op_exec(bm, &dupeop);
 
+	/* disable root flag on all new skin nodes */
+	if (CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) {
+		BMO_ITER(v1, &siter, bm, &dupeop, "newout", BM_VERT) {
+			bm_extrude_disable_skin_root(bm, v1);
+		}
+	}
+
 	for (e = BMO_iter_new(&siter, bm, &dupeop, "boundarymap", 0); e; e = BMO_iter_step(&siter)) {
 		e2 = BMO_iter_map_value(&siter);
 		e2 = *(BMEdge **)e2;
@@ -224,9 +245,12 @@
 	BMOIter siter;
 	BMVert *v, *dupev;
 	BMEdge *e;
+	const int has_vskin = CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN);
 
 	for (v = BMO_iter_new(&siter, bm, op, "verts", BM_VERT); v; v = BMO_iter_step(&siter)) {
 		dupev = BM_vert_create(bm, v->co, v);
+		if (has_vskin)
+			bm_extrude_disable_skin_root(bm, v);
 
 		e = BM_edge_create(bm, v, dupev, NULL, FALSE);
 
@@ -324,6 +348,13 @@
 	BMO_slot_copy(op, &dupeop, "edgefacein", "geom");
 	BMO_op_exec(bm, &dupeop);
 
+	/* disable root flag on all new skin nodes */
+	if (CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) {
+		BMO_ITER(v, &siter, bm, &dupeop, "newout", BM_VERT) {
+			bm_extrude_disable_skin_root(bm, v);
+		}
+	}
+
 	if (bm->act_face && BMO_elem_flag_test(bm, bm->act_face, EXT_INPUT))
 		bm->act_face = BMO_slot_map_ptr_get(bm, &dupeop, "facemap", bm->act_face);
 




More information about the Bf-blender-cvs mailing list