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);
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to