[Bf-blender-cvs] [9466829] master: DopeSheet Mask Mode: Circle/Lasso support

Joshua Leung noreply at git.blender.org
Thu Jun 23 17:19:59 CEST 2016


Commit: 9466829eade042a45221b22b69575e1e3d5864a6
Author: Joshua Leung
Date:   Fri Jun 24 02:57:03 2016 +1200
Branches: master
https://developer.blender.org/rB9466829eade042a45221b22b69575e1e3d5864a6

DopeSheet Mask Mode: Circle/Lasso support

Adapted from the code for Grease Pencil (just like the whole mode was)

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

M	source/blender/editors/include/ED_mask.h
M	source/blender/editors/mask/mask_editaction.c
M	source/blender/editors/space_action/action_select.c

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

diff --git a/source/blender/editors/include/ED_mask.h b/source/blender/editors/include/ED_mask.h
index 1f13b46..2ab788d 100644
--- a/source/blender/editors/include/ED_mask.h
+++ b/source/blender/editors/include/ED_mask.h
@@ -35,6 +35,7 @@ struct bContext;
 struct wmKeyConfig;
 struct MaskLayer;
 struct MaskLayerShape;
+struct KeyframeEditData;
 
 /* mask_edit.c */
 void ED_mask_get_size(struct ScrArea *sa, int *width, int *height);
@@ -80,6 +81,7 @@ void ED_masklayer_make_cfra_list(struct MaskLayer *masklay, ListBase *elems, boo
 bool  ED_masklayer_frame_select_check(struct MaskLayer *masklay);
 void  ED_masklayer_frame_select_set(struct MaskLayer *masklay, short mode);
 void  ED_masklayer_frames_select_border(struct MaskLayer *masklay, float min, float max, short select_mode);
+void  ED_masklayer_frames_select_region(struct KeyframeEditData *ked, struct MaskLayer *masklay, short tool, short select_mode);
 void  ED_mask_select_frames(struct MaskLayer *masklay, short select_mode);
 void  ED_mask_select_frame(struct MaskLayer *masklay, int selx, short select_mode);
 
diff --git a/source/blender/editors/mask/mask_editaction.c b/source/blender/editors/mask/mask_editaction.c
index bcf9ee5..16147bd 100644
--- a/source/blender/editors/mask/mask_editaction.c
+++ b/source/blender/editors/mask/mask_editaction.c
@@ -201,6 +201,36 @@ void ED_masklayer_frames_select_border(MaskLayer *masklay, float min, float max,
 	}
 }
 
+/* select the frames in this layer that occur within the lasso/circle region specified */
+void ED_masklayer_frames_select_region(KeyframeEditData *ked, MaskLayer *masklay, short tool, short select_mode)
+{
+	MaskLayerShape *masklay_shape;
+	
+	if (masklay == NULL)
+		return;
+	
+	/* only select frames which are within the region */
+	for (masklay_shape = masklay->splines_shapes.first; masklay_shape; masklay_shape = masklay_shape->next) {
+		/* construct a dummy point coordinate to do this testing with */
+		float pt[2] = {0};
+		
+		pt[0] = masklay_shape->frame;
+		pt[1] = ked->channel_y;
+		
+		/* check the necessary regions */
+		if (tool == BEZT_OK_CHANNEL_LASSO) {
+			/* Lasso */	
+			if (keyframe_region_lasso_test(ked->data, pt))
+				masklayshape_select(masklay_shape, select_mode);
+		}
+		else if (tool == BEZT_OK_CHANNEL_CIRCLE) {
+			/* Circle */
+			if (keyframe_region_circle_test(ked->data, pt))
+				masklayshape_select(masklay_shape, select_mode);
+		}
+	}
+}
+
 /* ***************************************** */
 /* Frame Editing Tools */
 
diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c
index 62050f1..0b6d3cb 100644
--- a/source/blender/editors/space_action/action_select.c
+++ b/source/blender/editors/space_action/action_select.c
@@ -482,13 +482,13 @@ static void region_select_action_keys(bAnimContext *ac, const rctf *rectf_view,
 					Mask *mask = ale->data;
 					MaskLayer *masklay;
 					for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) {
-						//ED_masklayer_frames_select_border(masklay, rectf.xmin, rectf.xmax, selectmode);
+						ED_masklayer_frames_select_region(&ked, masklay, mode, selectmode);
 					}
 					break;
 				}
 				case ANIMTYPE_MASKLAYER:
 				{
-					//ED_masklayer_frames_select_border(ale->data, rectf.xmin, rectf.xmax, selectmode);
+					ED_masklayer_frames_select_region(&ked, ale->data, mode, selectmode);
 					break;
 				}
 				default:




More information about the Bf-blender-cvs mailing list