[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46893] trunk/blender/source/blender/ editors/object/object_modifier.c: Ensure skin nodes get created when adding modifier.

Nicholas Bishop nicholasbishop at gmail.com
Tue May 22 17:29:37 CEST 2012


Revision: 46893
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46893
Author:   nicholasbishop
Date:     2012-05-22 15:29:37 +0000 (Tue, 22 May 2012)
Log Message:
-----------
Ensure skin nodes get created when adding modifier.

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

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_modifier.c

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2012-05-22 15:29:27 UTC (rev 46892)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2012-05-22 15:29:37 UTC (rev 46893)
@@ -85,6 +85,8 @@
 
 #include "object_intern.h"
 
+static void modifier_skin_customdata_ensure(struct Object *ob);
+
 /******************************** API ****************************/
 
 ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type)
@@ -157,6 +159,10 @@
 			/* ensure that grid paint mask layer is created */
 			ED_sculpt_mask_layers_ensure(ob, (MultiresModifierData *)new_md);
 		}
+		else if(type == eModifierType_Skin) {
+			/* ensure skin-node customdata exists */
+			modifier_skin_customdata_ensure(ob);
+		}
 	}
 
 	DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
@@ -1327,6 +1333,41 @@
 }
 
 
+/************************** skin modifier ***********************/
+
+static void modifier_skin_customdata_ensure(Object *ob)
+{
+	Mesh *me = ob->data;
+	BMesh *bm = me->edit_btmesh ? me->edit_btmesh->bm : NULL;
+	MVertSkin *vs;
+
+	if (bm && !CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) {
+		BMVert *v;
+		BMIter iter;
+
+		BM_data_layer_add(bm, &bm->vdata, CD_MVERT_SKIN);
+		
+		/* Mark an arbitrary vertex as root */
+		BM_ITER_MESH(v, &iter, bm, BM_VERTS_OF_MESH) {
+			vs = CustomData_bmesh_get(&bm->vdata, v->head.data,
+									  CD_MVERT_SKIN);
+			vs->flag |= MVERT_SKIN_ROOT;
+			break;
+		}
+	}
+	else if (!CustomData_has_layer(&me->vdata, CD_MVERT_SKIN)) {
+		vs = CustomData_add_layer(&me->vdata,
+								  CD_MVERT_SKIN,
+								  CD_DEFAULT,
+								  NULL,
+								  me->totvert);
+
+		/* Mark an arbitrary vertex as root */
+		vs->flag |= MVERT_SKIN_ROOT;
+	}
+}
+
+
 /************************ mdef bind operator *********************/
 
 static int meshdeform_poll(bContext *C)




More information about the Bf-blender-cvs mailing list