[Bf-blender-cvs] [0562da81669] greasepencil-object: New Weight Invert operator

Antonio Vazquez noreply at git.blender.org
Sun Jan 7 20:27:33 CET 2018


Commit: 0562da81669790363da629e9a92faa25ddff1e06
Author: Antonio Vazquez
Date:   Sun Jan 7 11:59:22 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rB0562da81669790363da629e9a92faa25ddff1e06

New Weight Invert operator

This operator invert the weights of the strokes.

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

M	release/scripts/startup/bl_ui/properties_grease_pencil_common.py
M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/editors/gpencil/gpencil_data.c
M	source/blender/editors/gpencil/gpencil_intern.h
M	source/blender/editors/gpencil/gpencil_ops.c

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

diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index 8c3a0a90bfb..9e742e031f0 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -563,6 +563,33 @@ class GreasePencilWeightPaintPanel:
         col.prop(brush, "use_falloff")
 
 
+
+
+class GreasePencilWeightToolsPanel:
+    # subclass must set
+    # bl_space_type = 'IMAGE_EDITOR'
+    bl_label = "Weight Tools"
+    bl_category = "Tools"
+    bl_region_type = 'TOOLS'
+
+    @classmethod
+    def poll(cls, context):
+        if context.gpencil_data is None:
+            return False
+
+        gpd = context.gpencil_data
+        if context.editable_gpencil_strokes:
+            return bool(gpd.is_stroke_weight_mode)
+
+        return False
+
+    @staticmethod
+    def draw(self, context):
+        layout = self.layout
+        col = layout.column()
+        col.operator("gpencil.vertex_group_invert", text="Invert")
+
+
 class GreasePencilMultiFramePanel:
     bl_label = "Multi Frame"
     bl_category = "Tools"
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 327349297db..ca4566c44a1 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -26,6 +26,7 @@ from .properties_grease_pencil_common import (
         GreasePencilInterpolatePanel,
         GreasePencilStrokeSculptPanel,
         GreasePencilWeightPaintPanel,
+        GreasePencilWeightToolsPanel,
         GreasePencilMultiFramePanel,
         GreasePencilBrushPanel,
         GreasePencilBrushOptionsPanel,
@@ -2077,6 +2078,9 @@ class VIEW3D_PT_tools_grease_pencil_sculpt(GreasePencilStrokeSculptPanel, Panel)
 class VIEW3D_PT_tools_grease_pencil_weight_paint(GreasePencilWeightPaintPanel, Panel):
     bl_space_type = 'VIEW_3D'
 
+# Grease Pencil weight painting operators
+class VIEW3D_PT_tools_grease_pencil_weight_tools(GreasePencilWeightToolsPanel, Panel):
+    bl_space_type = 'VIEW_3D'
 
 # Grease Pencil multiframe falloff tools
 class VIEW3D_PT_tools_grease_pencil_falloff(GreasePencilMultiFramePanel, Panel):
@@ -2136,6 +2140,7 @@ classes = (
     VIEW3D_PT_tools_grease_pencil_edit,
     VIEW3D_PT_tools_grease_pencil_sculpt,
     VIEW3D_PT_tools_grease_pencil_weight_paint,
+    VIEW3D_PT_tools_grease_pencil_weight_tools,
     VIEW3D_PT_tools_grease_pencil_falloff,
     VIEW3D_PT_tools_grease_pencil_brush,
     VIEW3D_PT_tools_grease_pencil_brush_option,
diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c
index 784486b3b46..3074e68179d 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -1808,6 +1808,20 @@ static int gpencil_vertex_group_poll(bContext *C)
 	}
 }
 
+static int gpencil_vertex_group_weight_poll(bContext *C)
+{
+	Object *ob = CTX_data_active_object(C);
+
+	if ((ob) && (ob->type == OB_GPENCIL)) {
+		return (!ID_IS_LINKED(ob) &&
+			!ID_IS_LINKED(ob->data) &&
+			(ob->defbase.first && (ob->mode == OB_MODE_GPENCIL_WEIGHT)));
+	}
+	else {
+		return false;
+	}
+}
+
 static int gpencil_vertex_group_assign_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	ToolSettings *ts = CTX_data_tool_settings(C);
@@ -1939,6 +1953,59 @@ void GPENCIL_OT_vertex_group_deselect(wmOperatorType *ot)
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
+/* invert */
+static int gpencil_vertex_group_invert_exec(bContext *C, wmOperator *UNUSED(op))
+{
+	ToolSettings *ts = CTX_data_tool_settings(C);
+	Object *ob = CTX_data_active_object(C);
+
+	/* sanity checks */
+	if (ELEM(NULL, ts, ob, ob->data))
+		return OPERATOR_CANCELLED;
+
+	bGPDspoint *pt;
+	const int def_nr = ob->actdef - 1;
+	if (!BLI_findlink(&ob->defbase, def_nr))
+		return OPERATOR_CANCELLED;
+
+	CTX_DATA_BEGIN(C, bGPDstroke *, gps, editable_gpencil_strokes)
+	{
+		for (int i = 0; i < gps->totpoints; i++) {
+			pt = &gps->points[i];
+			if (pt->weights == NULL) {
+				BKE_gpencil_vgroup_add_point_weight(pt, def_nr, 1.0f);
+			}
+			else if (pt->weights->factor == 1.0f) {
+				BKE_gpencil_vgroup_remove_point_weight(pt, def_nr);
+			}
+			else {
+				pt->weights->factor = 1.0f - pt->weights->factor;
+			}
+		}
+	}
+	CTX_DATA_END;
+
+	/* notifiers */
+	BKE_gpencil_batch_cache_dirty(ob->data);
+	WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED | ND_SPACE_PROPERTIES, NULL);
+
+	return OPERATOR_FINISHED;
+}
+
+void GPENCIL_OT_vertex_group_invert(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Invert Vertex Group";
+	ot->idname = "GPENCIL_OT_vertex_group_invert";
+	ot->description = "Invert weights to the active vertex group";
+
+	/* api callbacks */
+	ot->poll = gpencil_vertex_group_weight_poll;
+	ot->exec = gpencil_vertex_group_invert_exec;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
 
 /****************************** Join ***********************************/
 
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index 408e2f22d38..684559c5e3d 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -304,6 +304,7 @@ void GPENCIL_OT_vertex_group_assign(struct wmOperatorType *ot);
 void GPENCIL_OT_vertex_group_remove_from(struct wmOperatorType *ot);
 void GPENCIL_OT_vertex_group_select(struct wmOperatorType *ot);
 void GPENCIL_OT_vertex_group_deselect(struct wmOperatorType *ot);
+void GPENCIL_OT_vertex_group_invert(struct wmOperatorType *ot);
 
 /* ****************************************************** */
 /* FILTERED ACTION DATA - TYPES  ---> XXX DEPRECEATED OLD ANIM SYSTEM CODE! */
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index be3393e092e..12e395b7acb 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -773,6 +773,7 @@ void ED_operatortypes_gpencil(void)
 	WM_operatortype_append(GPENCIL_OT_vertex_group_remove_from);
 	WM_operatortype_append(GPENCIL_OT_vertex_group_select);
 	WM_operatortype_append(GPENCIL_OT_vertex_group_deselect);
+	WM_operatortype_append(GPENCIL_OT_vertex_group_invert);
 
 
 	/* Editing (Time) --------------- */



More information about the Bf-blender-cvs mailing list