[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47478] trunk/blender: operator to reset feather weights on all shape keys

Campbell Barton ideasman42 at gmail.com
Tue Jun 5 21:39:16 CEST 2012


Revision: 47478
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47478
Author:   campbellbarton
Date:     2012-06-05 19:39:12 +0000 (Tue, 05 Jun 2012)
Log Message:
-----------
operator to reset feather weights on all shape keys

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_clip.py
    trunk/blender/source/blender/blenkernel/BKE_mask.h
    trunk/blender/source/blender/blenkernel/intern/mask.c
    trunk/blender/source/blender/editors/mask/mask_edit.c
    trunk/blender/source/blender/editors/mask/mask_intern.h
    trunk/blender/source/blender/editors/mask/mask_shapekey.c
    trunk/blender/source/blender/makesdna/DNA_mask_types.h

Modified: trunk/blender/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-06-05 19:24:01 UTC (rev 47477)
+++ trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-06-05 19:39:12 UTC (rev 47478)
@@ -1225,12 +1225,9 @@
         layout.operator("mask.parent_set")
 
         layout.separator()
-        layout.operator("mask.shape_key_clear")
-        layout.operator("mask.shape_key_insert")
-
-        layout.separator()
         layout.menu("CLIP_MT_mask_visibility")
         layout.menu("CLIP_MT_mask_transform")
+        layout.menu("CLIP_MT_mask_animation")
 
 
 class CLIP_MT_mask_visibility(Menu):
@@ -1259,6 +1256,17 @@
         props.mode = 'MASK_SHRINKFATTEN'
 
 
+class CLIP_MT_mask_animation(Menu):
+    bl_label = "Animation"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator("mask.shape_key_clear")
+        layout.operator("mask.shape_key_insert")
+        layout.operator("mask.shape_key_feather_reset")
+
+
 class CLIP_MT_camera_presets(Menu):
     """Predefined tracking camera intrinsics"""
     bl_label = "Camera Presets"

Modified: trunk/blender/source/blender/blenkernel/BKE_mask.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mask.h	2012-06-05 19:24:01 UTC (rev 47477)
+++ trunk/blender/source/blender/blenkernel/BKE_mask.h	2012-06-05 19:39:12 UTC (rev 47478)
@@ -141,11 +141,13 @@
                                          struct MaskLayerShape *masklay_shape_a,
                                          struct MaskLayerShape *masklay_shape_b,
                                          const float fac);
-struct MaskLayerShape *BKE_mask_layer_shape_find_frame(struct MaskLayer *masklay, int frame);
-int BKE_mask_layer_shape_find_frame_range(struct MaskLayer *masklay, int frame,
+struct MaskLayerShape *BKE_mask_layer_shape_find_frame(struct MaskLayer *masklay, const int frame);
+int BKE_mask_layer_shape_find_frame_range(struct MaskLayer *masklay, const int frame,
                                           struct MaskLayerShape **r_masklay_shape_a,
                                           struct MaskLayerShape **r_masklay_shape_b);
-struct MaskLayerShape *BKE_mask_layer_shape_varify_frame(struct MaskLayer *masklay, int frame);
+struct MaskLayerShape *BKE_mask_layer_shape_alloc(struct MaskLayer *masklay, const int frame);
+void BKE_mask_layer_shape_free(struct MaskLayerShape *masklay_shape);
+struct MaskLayerShape *BKE_mask_layer_shape_varify_frame(struct MaskLayer *masklay, const int frame);
 void BKE_mask_layer_shape_unlink(struct MaskLayer *masklay, struct MaskLayerShape *masklay_shape);
 void BKE_mask_layer_shape_sort(struct MaskLayer *masklay);
 

Modified: trunk/blender/source/blender/blenkernel/intern/mask.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask.c	2012-06-05 19:24:01 UTC (rev 47477)
+++ trunk/blender/source/blender/blenkernel/intern/mask.c	2012-06-05 19:39:12 UTC (rev 47478)
@@ -466,10 +466,6 @@
 	}
 }
 
-typedef struct MaskLayerShapeElem {
-	float value[MASK_OBJECT_SHAPE_ELEM_SIZE];
-} MaskLayerShapeElem;
-
 void BKE_mask_spline_direction_switch(MaskLayer *masklay, MaskSpline *spline)
 {
 	const int tot_point = spline->tot_point;
@@ -1008,6 +1004,20 @@
 	return nspline;
 }
 
+/* note: does NOT add to the list */
+MaskLayerShape *BKE_mask_layer_shape_alloc(MaskLayer *masklay, const int frame)
+{
+	MaskLayerShape *masklay_shape;
+	int tot_vert = BKE_mask_layer_shape_totvert(masklay);
+
+	masklay_shape = MEM_mallocN(sizeof(MaskLayerShape), __func__);
+	masklay_shape->frame = frame;
+	masklay_shape->tot_vert = tot_vert;
+	masklay_shape->data = MEM_mallocN(tot_vert * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE, __func__);
+
+	return masklay_shape;
+}
+
 void BKE_mask_layer_shape_free(MaskLayerShape *masklay_shape)
 {
 	MEM_freeN(masklay_shape->data);
@@ -1696,7 +1706,7 @@
 	}
 }
 
-MaskLayerShape *BKE_mask_layer_shape_find_frame(MaskLayer *masklay, int frame)
+MaskLayerShape *BKE_mask_layer_shape_find_frame(MaskLayer *masklay, const int frame)
 {
 	MaskLayerShape *masklay_shape;
 
@@ -1716,7 +1726,7 @@
 }
 
 /* when returning 2 - the frame isnt found but before/after frames are */
-int BKE_mask_layer_shape_find_frame_range(MaskLayer *masklay, int frame,
+int BKE_mask_layer_shape_find_frame_range(MaskLayer *masklay, const int frame,
                                           MaskLayerShape **r_masklay_shape_a,
                                           MaskLayerShape **r_masklay_shape_b)
 {
@@ -1751,22 +1761,15 @@
 	return 0;
 }
 
-MaskLayerShape *BKE_mask_layer_shape_varify_frame(MaskLayer *masklay, int frame)
+MaskLayerShape *BKE_mask_layer_shape_varify_frame(MaskLayer *masklay, const int frame)
 {
 	MaskLayerShape *masklay_shape;
 
 	masklay_shape = BKE_mask_layer_shape_find_frame(masklay, frame);
 
 	if (masklay_shape == NULL) {
-		int tot_vert = BKE_mask_layer_shape_totvert(masklay);
-
-		masklay_shape = MEM_mallocN(sizeof(MaskLayerShape), __func__);
-		masklay_shape->frame = frame;
-		masklay_shape->tot_vert = tot_vert;
-		masklay_shape->data = MEM_mallocN(tot_vert * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE, __func__);
-
+		masklay_shape = BKE_mask_layer_shape_alloc(masklay, frame);
 		BLI_addtail(&masklay->splines_shapes, masklay_shape);
-
 		BKE_mask_layer_shape_sort(masklay);
 	}
 

Modified: trunk/blender/source/blender/editors/mask/mask_edit.c
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_edit.c	2012-06-05 19:24:01 UTC (rev 47477)
+++ trunk/blender/source/blender/editors/mask/mask_edit.c	2012-06-05 19:39:12 UTC (rev 47478)
@@ -227,6 +227,7 @@
 	/* shapekeys */
 	WM_operatortype_append(MASK_OT_shape_key_insert);
 	WM_operatortype_append(MASK_OT_shape_key_clear);
+	WM_operatortype_append(MASK_OT_shape_key_feather_reset);
 }
 
 void ED_keymap_mask(wmKeyConfig *keyconf)

Modified: trunk/blender/source/blender/editors/mask/mask_intern.h
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_intern.h	2012-06-05 19:24:01 UTC (rev 47477)
+++ trunk/blender/source/blender/editors/mask/mask_intern.h	2012-06-05 19:39:12 UTC (rev 47478)
@@ -108,5 +108,6 @@
 /* mask_shapekey.c */
 void MASK_OT_shape_key_insert(struct wmOperatorType *ot);
 void MASK_OT_shape_key_clear(struct wmOperatorType *ot);
+void MASK_OT_shape_key_feather_reset(struct wmOperatorType *ot);
 
 #endif /* __MASK_INTERN_H__ */

Modified: trunk/blender/source/blender/editors/mask/mask_shapekey.c
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_shapekey.c	2012-06-05 19:24:01 UTC (rev 47477)
+++ trunk/blender/source/blender/editors/mask/mask_shapekey.c	2012-06-05 19:39:12 UTC (rev 47478)
@@ -35,6 +35,7 @@
 #include "BKE_depsgraph.h"
 #include "BKE_mask.h"
 
+#include "DNA_object_types.h"
 #include "DNA_mask_types.h"
 #include "DNA_scene_types.h"
 
@@ -155,3 +156,96 @@
 
 	return change;
 }
+
+
+static int mask_shape_key_feather_reset_exec(bContext *C, wmOperator *UNUSED(op))
+{
+	Scene *scene = CTX_data_scene(C);
+	const int frame = CFRA;
+	Mask *mask = CTX_data_edit_mask(C);
+	MaskLayer *masklay;
+	int change = FALSE;
+
+	for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) {
+
+		if (masklay->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) {
+			continue;
+		}
+
+		if (masklay->splines_shapes.first) {
+			MaskLayerShape *masklay_shape_reset;
+			MaskLayerShape *masklay_shape;
+
+			/* get the shapekey of the current state */
+			masklay_shape_reset = BKE_mask_layer_shape_alloc(masklay, frame);
+			/* initialize from mask - as if inseting a keyframe */
+			BKE_mask_layer_shape_from_mask(masklay, masklay_shape_reset);
+
+			for (masklay_shape = masklay->splines_shapes.first;
+			     masklay_shape;
+			     masklay_shape = masklay_shape->next)
+			{
+
+				if (masklay_shape_reset->tot_vert == masklay_shape->tot_vert) {
+					int i_abs = 0;
+					int i;
+					MaskSpline *spline;
+					MaskLayerShapeElem *shape_ele_src;
+					MaskLayerShapeElem *shape_ele_dst;
+
+					shape_ele_src = (MaskLayerShapeElem *)masklay_shape_reset->data;
+					shape_ele_dst = (MaskLayerShapeElem *)masklay_shape->data;
+
+					for (spline = masklay->splines.first; spline; spline = spline->next) {
+						for (i = 0; i < spline->tot_point; i++) {
+							MaskSplinePoint *point = &spline->points[i];
+
+							if (MASKPOINT_ISSEL_ANY(point)) {
+								/* TODO - nicer access here */
+								shape_ele_dst->value[6] = shape_ele_src->value[6];
+							}
+
+							shape_ele_src++;
+							shape_ele_dst++;
+
+							i_abs++;
+						}
+					}
+
+				}
+				else {
+					// printf("%s: skipping\n", __func__);
+				}
+
+				change = TRUE;
+			}
+
+			BKE_mask_layer_shape_free(masklay_shape_reset);
+		}
+	}
+
+	if (change) {
+		WM_event_add_notifier(C, NC_MASK | ND_DATA, mask);
+		DAG_id_tag_update(&mask->id, 0);
+
+		return OPERATOR_FINISHED;
+	}
+	else {
+		return OPERATOR_CANCELLED;
+	}
+}
+
+void MASK_OT_shape_key_feather_reset(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name = "Feather Reset Animation";
+	ot->description = "Resets fearther weights on all selected points animation values";
+	ot->idname = "MASK_OT_shape_key_feather_reset";
+
+	/* api callbacks */
+	ot->exec = mask_shape_key_feather_reset_exec;
+	ot->poll = ED_maskedit_mask_poll;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}

Modified: trunk/blender/source/blender/makesdna/DNA_mask_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_mask_types.h	2012-06-05 19:24:01 UTC (rev 47477)
+++ trunk/blender/source/blender/makesdna/DNA_mask_types.h	2012-06-05 19:39:12 UTC (rev 47478)
@@ -97,6 +97,15 @@
 	char   pad[7];
 } MaskLayerShape;
 
+/* cast to this for convenience, not saved */
+#define MASK_OBJECT_SHAPE_ELEM_SIZE 8 /* 3x 2D points + weight + radius == 8 */
+
+#
+#
+typedef struct MaskLayerShapeElem {
+	float value[MASK_OBJECT_SHAPE_ELEM_SIZE];
+} MaskLayerShapeElem;
+
 typedef struct MaskLayer {
 	struct MaskLayer *next, *prev;
 
@@ -129,8 +138,6 @@
 #define MASK_SPLINE_INTERP_LINEAR   1
 #define MASK_SPLINE_INTERP_EASE     2
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list