[Bf-blender-cvs] [68f470bc35a] rigid_deform: bind operator
Jacques Lucke
noreply at git.blender.org
Thu Jan 31 19:55:35 CET 2019
Commit: 68f470bc35a024548025d05cffa41b18942f0f12
Author: Jacques Lucke
Date: Sun Dec 9 12:32:02 2018 +0100
Branches: rigid_deform
https://developer.blender.org/rB68f470bc35a024548025d05cffa41b18942f0f12
bind operator
===================================================================
M release/scripts/startup/bl_ui/properties_data_modifier.py
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/makesdna/DNA_modifier_types.h
M source/blender/makesrna/RNA_access.h
M source/blender/modifiers/intern/MOD_rigiddeform.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 8e31e7d6961..28cfa9bf6fa 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1635,6 +1635,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
def RIGID_DEFORM(self, layout, ob, md):
layout.prop_search(md, "anchor_group_name", ob, "vertex_groups", text="Anchors")
+ layout.operator("object.rigiddeform_bind", text="Bind")
class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index 1ef0b0f268c..f72eec99763 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -174,6 +174,7 @@ void OBJECT_OT_skin_loose_mark_clear(struct wmOperatorType *ot);
void OBJECT_OT_skin_radii_equalize(struct wmOperatorType *ot);
void OBJECT_OT_skin_armature_create(struct wmOperatorType *ot);
void OBJECT_OT_laplaciandeform_bind(struct wmOperatorType *ot);
+void OBJECT_OT_rigiddeform_bind(struct wmOperatorType *ot);
void OBJECT_OT_surfacedeform_bind(struct wmOperatorType *ot);
/* grease pencil modifiers */
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 02ee1f9c360..3d017e69138 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -2342,6 +2342,44 @@ void OBJECT_OT_laplaciandeform_bind(wmOperatorType *ot)
edit_modifier_properties(ot);
}
+/************************ RigidDeform bind operator *********************/
+
+static bool rigiddeform_bind_poll(bContext *C)
+{
+ return edit_modifier_poll_generic(C, &RNA_RigidDeformModifier, 0);
+}
+
+static int rigiddeform_bind_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
+{
+ printf("Hello World\n");
+ return OPERATOR_FINISHED;
+}
+
+static int rigiddeform_bind_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ if (edit_modifier_invoke_properties(C, op))
+ return rigiddeform_bind_exec(C, op);
+ else
+ return OPERATOR_CANCELLED;
+}
+
+void OBJECT_OT_rigiddeform_bind(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Rigid Deform Bind";
+ ot->description = "Bind current mesh as relaxed state to rigid deform modifier";
+ ot->idname = "OBJECT_OT_rigiddeform_bind";
+
+ /* api callbacks */
+ ot->poll = rigiddeform_bind_poll;
+ ot->invoke = rigiddeform_bind_invoke;
+ ot->exec = rigiddeform_bind_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
+ edit_modifier_properties(ot);
+}
+
/************************ sdef bind operator *********************/
static bool surfacedeform_bind_poll(bContext *C)
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index eb9dd0bbe28..f32f23b49d0 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -259,6 +259,7 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_drop_named_material);
WM_operatortype_append(OBJECT_OT_unlink_data);
WM_operatortype_append(OBJECT_OT_laplaciandeform_bind);
+ WM_operatortype_append(OBJECT_OT_rigiddeform_bind);
WM_operatortype_append(TRANSFORM_OT_vertex_random);
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 02eabdc04b6..5d58efe423b 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1948,9 +1948,15 @@ enum {
#define MOD_MESHSEQ_READ_ALL \
(MOD_MESHSEQ_READ_VERT | MOD_MESHSEQ_READ_POLY | MOD_MESHSEQ_READ_UV | MOD_MESHSEQ_READ_COLOR)
+typedef struct RigidDeformModifierBindData {
+ int *anchor_indices;
+} RigidDeformModifierBindData;
+
typedef struct RigidDeformModifierData {
ModifierData modifier;
char anchor_group_name[64]; /* MAX_VGROUP_NAME */
+ RigidDeformModifierBindData *bind_data;
+ char bind_next_execution, pad[7];
} RigidDeformModifierData;
#endif /* __DNA_MODIFIER_TYPES_H__ */
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 671b3dd871e..2368819b0ac 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -524,6 +524,7 @@ extern StructRNA RNA_RenderSettings;
extern StructRNA RNA_RigidBodyJointConstraint;
extern StructRNA RNA_RigidBodyObject;
extern StructRNA RNA_RigidBodyWorld;
+extern StructRNA RNA_RigidDeformModifier;
extern StructRNA RNA_SPHFluidSettings;
extern StructRNA RNA_Scene;
extern StructRNA RNA_SceneDisplay;
diff --git a/source/blender/modifiers/intern/MOD_rigiddeform.c b/source/blender/modifiers/intern/MOD_rigiddeform.c
index 7f40dddde9a..2da1d1235fa 100644
--- a/source/blender/modifiers/intern/MOD_rigiddeform.c
+++ b/source/blender/modifiers/intern/MOD_rigiddeform.c
@@ -50,6 +50,10 @@ static void deformVerts(
static void initData(ModifierData *md)
{
+ RigidDeformModifierData *rdmd = (RigidDeformModifierData *)md;
+ rdmd->anchor_group_name[0] = '\0';
+ rdmd->bind_data = NULL;
+ rdmd->bind_next_execution = false;
}
ModifierTypeInfo modifierType_RigidDeform = {
More information about the Bf-blender-cvs
mailing list