[Bf-blender-cvs] [4443f052f64] hair_guides: Operator for binding groom bundles to scalp regions.
Lukas Tönne
noreply at git.blender.org
Sun Jan 21 14:27:55 CET 2018
Commit: 4443f052f64ac5bd4b38a740422ff91120d67019
Author: Lukas Tönne
Date: Sun Jan 21 13:25:34 2018 +0000
Branches: hair_guides
https://developer.blender.org/rB4443f052f64ac5bd4b38a740422ff91120d67019
Operator for binding groom bundles to scalp regions.
===================================================================
M source/blender/editors/groom/editgroom_region.c
M source/blender/editors/groom/groom_intern.h
M source/blender/editors/groom/groom_ops.c
M source/blender/makesrna/RNA_access.h
===================================================================
diff --git a/source/blender/editors/groom/editgroom_region.c b/source/blender/editors/groom/editgroom_region.c
index a535091915b..f138eff322a 100644
--- a/source/blender/editors/groom/editgroom_region.c
+++ b/source/blender/editors/groom/editgroom_region.c
@@ -47,6 +47,7 @@
#include "DEG_depsgraph.h"
#include "RNA_access.h"
+#include "RNA_define.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -59,6 +60,8 @@
#include "groom_intern.h"
+/* GROOM_OT_region_add */
+
static void groom_bundle_section_init(
GroomSection *section,
GroomSectionVertex *verts,
@@ -145,3 +148,47 @@ void GROOM_OT_region_add(wmOperatorType *ot)
ED_object_add_generic_props(ot, false);
}
+
+/* GROOM_OT_region_bind */
+
+static int region_bind_exec(bContext *C, wmOperator *op)
+{
+ Object *ob = ED_object_context(C);
+ Groom *groom = ob->data;
+ const bool force_rebind = RNA_int_get(op->ptr, "force_rebind");
+
+ GroomBundle *bundle = CTX_data_pointer_get_type(C, "groom_bundle", &RNA_GroomBundle).data;
+ if (!bundle)
+ {
+ bundle = BLI_findlink(&groom->bundles, groom->active_bundle);
+ if (!bundle)
+ {
+ return OPERATOR_CANCELLED;
+ }
+ }
+
+ BKE_groom_bundle_bind(groom, bundle, force_rebind);
+
+ WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, ob);
+ DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
+
+ return OPERATOR_FINISHED;
+}
+
+void GROOM_OT_region_bind(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Bind Region";
+ ot->description = "Bind a groom bundle to its scalp region";
+ ot->idname = "GROOM_OT_region_bind";
+
+ /* api callbacks */
+ ot->exec = region_bind_exec;
+ ot->poll = ED_operator_scene_editable;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ RNA_def_boolean(ot->srna, "force_rebind", true, "Force Rebind",
+ "Force rebinding of the groom region even if a binding already exists");
+}
diff --git a/source/blender/editors/groom/groom_intern.h b/source/blender/editors/groom/groom_intern.h
index fc7723732f7..7738ff0bd59 100644
--- a/source/blender/editors/groom/groom_intern.h
+++ b/source/blender/editors/groom/groom_intern.h
@@ -37,6 +37,7 @@ struct wmOperatorType;
/* editgroom_region.c */
void GROOM_OT_region_add(struct wmOperatorType *ot);
+void GROOM_OT_region_bind(struct wmOperatorType *ot);
/* editgroom_select.c */
void GROOM_OT_select_all(struct wmOperatorType *ot);
diff --git a/source/blender/editors/groom/groom_ops.c b/source/blender/editors/groom/groom_ops.c
index 70f8c179c4f..840b437feab 100644
--- a/source/blender/editors/groom/groom_ops.c
+++ b/source/blender/editors/groom/groom_ops.c
@@ -53,6 +53,7 @@
void ED_operatortypes_groom(void)
{
WM_operatortype_append(GROOM_OT_region_add);
+ WM_operatortype_append(GROOM_OT_region_bind);
WM_operatortype_append(GROOM_OT_select_all);
}
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 10f10d86af5..1f9b80974e7 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -290,6 +290,7 @@ extern StructRNA RNA_GaussianBlurSequence;
extern StructRNA RNA_GlowSequence;
extern StructRNA RNA_GreasePencil;
extern StructRNA RNA_Groom;
+extern StructRNA RNA_GroomBundle;
extern StructRNA RNA_Group;
extern StructRNA RNA_HairGroup;
extern StructRNA RNA_HairPattern;
More information about the Bf-blender-cvs
mailing list