forked from bartvdbraak/blender
Grease Pencil: Lock current frame option
It is now possible to make Grease Pencil Layers to keep displaying and editing the current sketch-frame with this option. This allows to draw a frame which contains markings made for different times (i.e. a spacing/timing chart that you can keep adding to as you scrub to different points on the timeline). Use the clipboard/camera toggle (the one beside the visibility toggle) to enable. This should get an icon of its own at some point...
This commit is contained in:
parent
d08fe22bc6
commit
cddd784e44
@ -55,7 +55,7 @@ int brush_clone_image_set_nr(struct Brush *brush, int nr);
|
|||||||
int brush_clone_image_delete(struct Brush *brush);
|
int brush_clone_image_delete(struct Brush *brush);
|
||||||
|
|
||||||
/* brush curve */
|
/* brush curve */
|
||||||
void brush_curve_preset(struct Brush *b, enum CurveMappingPreset preset);
|
void brush_curve_preset(struct Brush *b, /*enum CurveMappingPreset*/int preset);
|
||||||
float brush_curve_strength_clamp(struct Brush *br, float p, const float len);
|
float brush_curve_strength_clamp(struct Brush *br, float p, const float len);
|
||||||
float brush_curve_strength(struct Brush *br, float p, const float len); /* used for sculpt */
|
float brush_curve_strength(struct Brush *br, float p, const float len); /* used for sculpt */
|
||||||
|
|
||||||
|
@ -349,8 +349,10 @@ bGPDframe *gpencil_layer_getframe (bGPDlayer *gpl, int cframe, short addnew)
|
|||||||
if (gpl->actframe) {
|
if (gpl->actframe) {
|
||||||
gpf= gpl->actframe;
|
gpf= gpl->actframe;
|
||||||
|
|
||||||
/* do not allow any changes to layer's active frame if layer is locked */
|
/* do not allow any changes to layer's active frame if layer is locked from changes
|
||||||
if (gpl->flag & GP_LAYER_LOCKED)
|
* or if the layer has been set to stay on the current frame
|
||||||
|
*/
|
||||||
|
if (gpl->flag & (GP_LAYER_LOCKED|GP_LAYER_FRAMELOCK))
|
||||||
return gpf;
|
return gpf;
|
||||||
/* do not allow any changes to actframe if frame has painting tag attached to it */
|
/* do not allow any changes to actframe if frame has painting tag attached to it */
|
||||||
if (gpf->flag & GP_FRAME_PAINT)
|
if (gpf->flag & GP_FRAME_PAINT)
|
||||||
|
@ -119,13 +119,13 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
|
|||||||
box= uiLayoutBox(layout);
|
box= uiLayoutBox(layout);
|
||||||
|
|
||||||
row= uiLayoutRow(box, 0);
|
row= uiLayoutRow(box, 0);
|
||||||
|
uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_EXPAND);
|
||||||
block= uiLayoutGetBlock(row); // err...
|
block= uiLayoutGetBlock(row); // err...
|
||||||
|
|
||||||
uiBlockSetEmboss(block, UI_EMBOSSN);
|
uiBlockSetEmboss(block, UI_EMBOSSN);
|
||||||
|
|
||||||
/* left-align ............................... */
|
/* left-align ............................... */
|
||||||
subrow= uiLayoutRow(row, 1);
|
subrow= uiLayoutRow(row, 0);
|
||||||
uiLayoutSetAlignment(subrow, UI_LAYOUT_ALIGN_LEFT);
|
|
||||||
|
|
||||||
/* active */
|
/* active */
|
||||||
icon= (gpl->flag & GP_LAYER_ACTIVE) ? ICON_RADIOBUT_ON : ICON_RADIOBUT_OFF;
|
icon= (gpl->flag & GP_LAYER_ACTIVE) ? ICON_RADIOBUT_ON : ICON_RADIOBUT_OFF;
|
||||||
@ -168,6 +168,11 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
|
|||||||
/* visibility button */
|
/* visibility button */
|
||||||
uiItemR(subrow, "", ICON_RESTRICT_VIEW_OFF, &ptr, "hide", 0);
|
uiItemR(subrow, "", ICON_RESTRICT_VIEW_OFF, &ptr, "hide", 0);
|
||||||
|
|
||||||
|
/* frame locking */
|
||||||
|
// TODO: this needs its own icons...
|
||||||
|
icon= (gpl->flag & GP_LAYER_FRAMELOCK) ? ICON_RENDER_STILL : ICON_RENDER_ANIMATION;
|
||||||
|
uiItemR(subrow, "", icon, &ptr, "frame_lock", 0);
|
||||||
|
|
||||||
uiBlockSetEmboss(block, UI_EMBOSS);
|
uiBlockSetEmboss(block, UI_EMBOSS);
|
||||||
|
|
||||||
/* name */
|
/* name */
|
||||||
@ -189,7 +194,6 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
|
|||||||
box= uiLayoutBox(layout);
|
box= uiLayoutBox(layout);
|
||||||
split= uiLayoutSplit(box, 0.5f, 0);
|
split= uiLayoutSplit(box, 0.5f, 0);
|
||||||
|
|
||||||
|
|
||||||
/* draw settings ---------------------------------- */
|
/* draw settings ---------------------------------- */
|
||||||
/* left column ..................... */
|
/* left column ..................... */
|
||||||
col= uiLayoutColumn(split, 0);
|
col= uiLayoutColumn(split, 0);
|
||||||
@ -259,7 +263,6 @@ static void draw_gpencil_panel (bContext *C, uiLayout *layout, bGPdata *gpd, Poi
|
|||||||
uiItemL(col, "Drawing Settings:", 0);
|
uiItemL(col, "Drawing Settings:", 0);
|
||||||
|
|
||||||
/* 'stick to view' option */
|
/* 'stick to view' option */
|
||||||
//uiItemR(col, NULL, 0, &gpd_ptr, "draw_mode", 0);
|
|
||||||
row= uiLayoutRow(col, 1);
|
row= uiLayoutRow(col, 1);
|
||||||
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "VIEW");
|
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "VIEW");
|
||||||
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "CURSOR");
|
uiItemEnumR_string(row, NULL, 0, &gpd_ptr, "draw_mode", "CURSOR");
|
||||||
|
@ -113,6 +113,8 @@ typedef struct bGPDlayer {
|
|||||||
#define GP_LAYER_ONIONSKIN (1<<4)
|
#define GP_LAYER_ONIONSKIN (1<<4)
|
||||||
/* for editing in Action Editor */
|
/* for editing in Action Editor */
|
||||||
#define GP_LAYER_SELECT (1<<5)
|
#define GP_LAYER_SELECT (1<<5)
|
||||||
|
/* current frame for layer can't be changed */
|
||||||
|
#define GP_LAYER_FRAMELOCK (1<<6)
|
||||||
|
|
||||||
|
|
||||||
/* Grease-Pencil Annotations - 'DataBlock' */
|
/* Grease-Pencil Annotations - 'DataBlock' */
|
||||||
|
@ -199,6 +199,10 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
|
|||||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_LOCKED);
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_LOCKED);
|
||||||
RNA_def_property_ui_text(prop, "Locked", "Layer is protected from further editing and/or frame changes.");
|
RNA_def_property_ui_text(prop, "Locked", "Layer is protected from further editing and/or frame changes.");
|
||||||
|
|
||||||
|
prop= RNA_def_property(srna, "frame_lock", PROP_BOOLEAN, PROP_NONE);
|
||||||
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_FRAMELOCK);
|
||||||
|
RNA_def_property_ui_text(prop, "Frame Locked", "Current frame displayed by layer cannot be changed.");
|
||||||
|
|
||||||
prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
|
prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
|
||||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_ACTIVE);
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LAYER_ACTIVE);
|
||||||
RNA_def_property_boolean_funcs(prop, NULL, "rna_GPencilLayer_active_set");
|
RNA_def_property_boolean_funcs(prop, NULL, "rna_GPencilLayer_active_set");
|
||||||
|
Loading…
Reference in New Issue
Block a user