forked from bartvdbraak/blender
DopeSheet Mask Mode: Circle/Lasso support
Adapted from the code for Grease Pencil (just like the whole mode was)
This commit is contained in:
parent
833e69ff7e
commit
9466829ead
@ -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);
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user