[Bf-blender-cvs] [fb62847] temp-modifier-deltamush-experimental: Experimental D1183 branch, original patch by @sazerac

Campbell Barton noreply at git.blender.org
Sat Mar 28 18:41:29 CET 2015


Commit: fb62847d48ccd18b90090838cb050984faf48257
Author: Campbell Barton
Date:   Sun Mar 29 04:39:27 2015 +1100
Branches: temp-modifier-deltamush-experimental
https://developer.blender.org/rBfb62847d48ccd18b90090838cb050984faf48257

Experimental D1183 branch, original patch by @sazerac

===================================================================

M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/object/object_intern.h
M	source/blender/editors/object/object_modifier.c
M	source/blender/editors/object/object_ops.c
M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/makesdna/DNA_modifier_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/CMakeLists.txt
M	source/blender/modifiers/MOD_modifiertypes.h
A	source/blender/modifiers/intern/MOD_deltamush.c
M	source/blender/modifiers/intern/MOD_util.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index ec60f1c..3bda8c4 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1386,6 +1386,18 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         sub.active = has_vgroup
         sub.prop(md, "use_invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
 
-
+    def DELTAMUSH(self, layout, ob, md):
+        if bool(md.bind):
+            layout.operator("object.deltamush_bind", text="Unbind")
+        else:
+            layout.operator("object.deltamush_bind", text="Bind") 
+        layout.prop(md, "only_smooth");
+        layout.prop(md, "pin_bounds");
+        layout.label(text="Smoothing Details")
+        layout.prop(md, "iterations")
+        layout.prop(md, "lambda_factor", text="Factor")
+        layout.label(text="Vertex Group:")
+        layout.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
+    
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 6b4d45a..271719a 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4950,6 +4950,27 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
 			}
 			lmd->cache_system = NULL;
 		}
+		else if (md->type == eModifierType_DeltaMush) {
+			DeltaMushModifierData *dmmd = (DeltaMushModifierData*)md;
+			if (dmmd->deltas) {
+				dmmd->deltas = newdataadr(fd, dmmd->deltas);
+				if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
+					BLI_endian_switch_float_array((float *)dmmd->deltas, dmmd->boundverts * 3);				
+				}
+			}
+			if (dmmd->positions) {
+				dmmd->positions = newdataadr(fd, dmmd->positions);
+				if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
+					BLI_endian_switch_float_array((float *)dmmd->positions, dmmd->boundverts * 3);
+				}
+			}
+			if (dmmd->smooth_weights) {
+				dmmd->smooth_weights = newdataadr(fd, dmmd->smooth_weights);
+				if (fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
+					BLI_endian_switch_float_array(dmmd->smooth_weights, dmmd->boundverts);
+				}
+			}
+		}
 	}
 }
 
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 1156d3f..ef4597f 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1620,6 +1620,19 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
 
 			writedata(wd, DATA, sizeof(float)*lmd->total_verts * 3, lmd->vertexco);
 		}
+		else if (md->type == eModifierType_DeltaMush) {
+			DeltaMushModifierData *dmmd = (DeltaMushModifierData*)md;
+
+			if (dmmd->deltas) {
+				writedata(wd, DATA, sizeof(float) * (size_t)(3 * dmmd->boundverts), dmmd->deltas);
+			}
+			if (dmmd->positions) {
+				writedata(wd, DATA, sizeof(float) * (size_t)(3 * dmmd->boundverts), dmmd->positions);
+			}
+			if (dmmd->smooth_weights) {
+				writedata(wd, DATA, sizeof(float) * (size_t)(dmmd->boundverts), dmmd->smooth_weights);
+			}
+		}
 	}
 }
 
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index 64fddf1..eda96db 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -179,6 +179,7 @@ void OBJECT_OT_multires_higher_levels_delete(struct wmOperatorType *ot);
 void OBJECT_OT_multires_base_apply(struct wmOperatorType *ot);
 void OBJECT_OT_multires_external_save(struct wmOperatorType *ot);
 void OBJECT_OT_multires_external_pack(struct wmOperatorType *ot);
+void OBJECT_OT_deltamush_bind(struct wmOperatorType *ot);
 void OBJECT_OT_meshdeform_bind(struct wmOperatorType *ot);
 void OBJECT_OT_explode_refresh(struct wmOperatorType *ot);
 void OBJECT_OT_ocean_bake(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 710cf2d..06d746c 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -1815,6 +1815,54 @@ void OBJECT_OT_skin_armature_create(wmOperatorType *ot)
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
 	edit_modifier_properties(ot);
 }
+/************************ delta mush bind operator *********************/
+
+static int deltamush_poll(bContext *C)
+{
+	return edit_modifier_poll_generic(C, &RNA_DeltaMushModifier, 0);
+}
+
+static int deltamush_bind_exec(bContext *C, wmOperator *op)
+{
+	Object *ob = ED_object_active_context(C);
+	DeltaMushModifierData *mmd = (DeltaMushModifierData *)edit_modifier_property_get(op, ob, eModifierType_DeltaMush);
+
+	if (!mmd)
+	{
+		return OPERATOR_CANCELLED;
+	}
+
+	mmd->dm_flags = mmd->dm_flags ^ MOD_DELTAMUSH_BIND;
+	DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
+	WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
+
+	return OPERATOR_FINISHED;
+}
+
+static int deltamush_bind_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+	if (edit_modifier_invoke_properties(C, op))
+		return deltamush_bind_exec(C, op);
+	else
+		return OPERATOR_CANCELLED;
+}
+
+void OBJECT_OT_deltamush_bind(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Delta Mush Bind";
+	ot->description = "Bind base pose in delta mush modifier";
+	ot->idname = "OBJECT_OT_deltamush_bind";
+
+	/* api callbacks */
+	ot->poll = deltamush_poll;
+	ot->invoke = deltamush_bind_invoke;
+	ot->exec = deltamush_bind_exec;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
+	edit_modifier_properties(ot);
+}
 
 /************************ mdef bind operator *********************/
 
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index 15eb909..d8d0bfa 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -144,6 +144,7 @@ void ED_operatortypes_object(void)
 	WM_operatortype_append(OBJECT_OT_skin_radii_equalize);
 	WM_operatortype_append(OBJECT_OT_skin_armature_create);
 
+	WM_operatortype_append(OBJECT_OT_deltamush_bind);
 	WM_operatortype_append(OBJECT_OT_meshdeform_bind);
 	WM_operatortype_append(OBJECT_OT_explode_refresh);
 	WM_operatortype_append(OBJECT_OT_ocean_bake);
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index 2c61e69..2846b38 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -1170,6 +1170,8 @@ static void tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeSto
 						UI_icon_draw(x, y, ICON_MOD_DATA_TRANSFER); break;
 					case eModifierType_NormalEdit:
 						UI_icon_draw(x, y, ICON_MOD_NORMALEDIT); break;
+					case eModifierType_DeltaMush:
+						UI_icon_draw(x, y, ICON_DOT); break;
 					/* Default */
 					case eModifierType_None:
 					case eModifierType_ShapeKey:
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index b32b228..5850e48 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -84,6 +84,7 @@ typedef enum ModifierType {
 	eModifierType_Wireframe         = 48,
 	eModifierType_DataTransfer      = 49,
 	eModifierType_NormalEdit        = 50,
+	eModifierType_DeltaMush			= 51,
 	NUM_MODIFIER_TYPES
 } ModifierType;
 
@@ -1288,6 +1289,26 @@ enum {
 	MOD_LAPLACIANSMOOTH_NORMALIZED      = (1 << 5),
 };
 
+
+typedef struct DeltaMushModifierData {
+	ModifierData modifier;
+	float (*deltas)[3];
+	float (*positions)[3];
+	float *smooth_weights;
+	float lambda;
+	char defgrp_name[64];  /* MAX_VGROUP_NAME */
+	short repeat, dm_flags;
+
+	int boundverts, pad;
+} DeltaMushModifierData;
+
+/* Delta Mush modifier flags */
+enum {
+	MOD_DELTAMUSH_BIND = (1 << 1),
+	MOD_DELTAMUSH_SHOWSMOOTH = (1 << 2),
+	MOD_DELTAMUSH_PINBOUNDS = (1 << 3),
+};
+
 typedef struct UVWarpModifierData {
 	ModifierData modifier;
 
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 577f27f..c6c4f5d 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -202,6 +202,7 @@ extern StructRNA RNA_DampedTrackConstraint;
 extern StructRNA RNA_DataTransferModifier;
 extern StructRNA RNA_DecimateModifier;
 extern StructRNA RNA_DelaySensor;
+extern StructRNA RNA_DeltaMushModifier;
 extern StructRNA RNA_DisplaceModifier;
 extern StructRNA RNA_DisplaySafeAreas;
 extern StructRNA RNA_DistortedNoiseTexture;
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 656c19e..855a2b0 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -93,6 +93,7 @@ EnumPropertyItem modifier_type_items[] = {
 	{eModifierType_Armature, "ARMATURE", ICON_MOD_ARMATURE, "Armature", ""},
 	{eModifierType_Cast, "CAST", ICON_MOD_CAST, "Cast", ""},
 	{eModifierType_Curve, "CURVE", ICON_MOD_CURVE, "Curve", ""},
+	{eModifierType_DeltaMush, "DELTAMUSH", ICON_MOD_SMOOTH, "Delta Mush", ""},
 	{eModifierType_Displace, "DISPLACE", ICON_MOD_DISPLACE, "Displace", ""},
 	{eModifierType_Hook, "HOOK", ICON_HOOK, "Hook", ""},
 	{eModifierType_LaplacianSmooth, "LAPLACIANSMOOTH", ICON_MOD_SMOOTH, "Laplacian Smooth", ""},
@@ -377,6 +378,8 @@ static StructRNA *rna_Modifier_refine(struct PointerRNA *ptr)
 			return &RNA_DataTransferModifier;
 		case eModifierType_NormalEdit:
 			return &RNA_NormalEditModifier;
+		case eModifierType_DeltaMush:
+			return &RNA_DeltaMushModifier;
 		/* Default */
 		case eModifierType_None:
 		case eModifierType_ShapeKey:
@@ -444,6 +447,7 @@ RNA_MOD_VGROUP_NAME_SET(Cast, defgrp_name);
 RNA_MOD_VGROUP_NAME_SET(Curve, name);
 RNA_MOD_VGROUP_NAME_SET(DataTransfer, defgrp_name);
 RNA_MOD_VGROUP_NAME_SET(Decimate, defgrp_name);
+RNA_MOD_VGROUP_NAME_SET(DeltaMush, defgrp_name);
 RNA_MOD_VGROUP_NAME_SET(Displace, defgrp_name);
 RNA_MOD_VGROUP_NAME_SET(Hook, name);
 RNA_MOD_VGROUP_NAME_

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list