[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