[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