forked from bartvdbraak/blender
== NLA Editor ==
Minor workflow tweak - Add New Empty Action as New Action Strip. Hotkey: Shift N. Menu Entry: 'Strip' menu Creates a new action, and adds it as an action strip at the bottom of the list nla-strips for an object. Useful for creating additional strips to correct poses of prior strips.
This commit is contained in:
parent
7bcfc5be3f
commit
bff2dcc6d8
@ -54,6 +54,7 @@ void reset_action_strips(int val);
|
|||||||
void synchronize_action_strips(void);
|
void synchronize_action_strips(void);
|
||||||
void snap_action_strips(int snap_mode);
|
void snap_action_strips(int snap_mode);
|
||||||
void add_nlablock(void);
|
void add_nlablock(void);
|
||||||
|
void add_empty_nlablock(void);
|
||||||
void convert_nla(void);
|
void convert_nla(void);
|
||||||
void copy_action_modifiers(void);
|
void copy_action_modifiers(void);
|
||||||
|
|
||||||
|
@ -382,6 +382,60 @@ static void add_nla_block(short event)
|
|||||||
BIF_undo_push("Add NLA strip");
|
BIF_undo_push("Add NLA strip");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_nla_block_by_name(char name[32], Object *ob, short hold, short add, float repeat)
|
||||||
|
{
|
||||||
|
bAction *act=NULL;
|
||||||
|
bActionStrip *strip;
|
||||||
|
int cur;
|
||||||
|
|
||||||
|
if (name){
|
||||||
|
for (cur = 1, act=G.main->action.first; act; act=act->id.next, cur++){
|
||||||
|
if (strcmp(name,act->id.name)==0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Bail out if no action was chosen */
|
||||||
|
if (!act){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize the new action block */
|
||||||
|
strip = MEM_callocN(sizeof(bActionStrip), "bActionStrip");
|
||||||
|
|
||||||
|
deselect_nlachannel_keys(0);
|
||||||
|
|
||||||
|
/* Link the action to the strip */
|
||||||
|
strip->act = act;
|
||||||
|
calc_action_range(strip->act, &strip->actstart, &strip->actend, 1);
|
||||||
|
strip->start = G.scene->r.cfra; /* could be mval[0] another time... */
|
||||||
|
strip->end = strip->start + (strip->actend-strip->actstart);
|
||||||
|
/* simple prevention of zero strips */
|
||||||
|
if(strip->start>strip->end-2)
|
||||||
|
strip->end= strip->start+100;
|
||||||
|
|
||||||
|
strip->flag = ACTSTRIP_SELECT|ACTSTRIP_LOCK_ACTION; //|ACTSTRIP_USEMATCH;
|
||||||
|
|
||||||
|
if (hold==1)
|
||||||
|
strip->flag = strip->flag|ACTSTRIP_HOLDLASTFRAME;
|
||||||
|
|
||||||
|
if (add==1)
|
||||||
|
strip->mode = ACTSTRIPMODE_ADD;
|
||||||
|
|
||||||
|
find_stridechannel(ob, strip);
|
||||||
|
|
||||||
|
set_active_strip(ob, strip);
|
||||||
|
|
||||||
|
strip->repeat = repeat;
|
||||||
|
|
||||||
|
act->id.us++;
|
||||||
|
|
||||||
|
BLI_addtail(&ob->nlastrips, strip);
|
||||||
|
|
||||||
|
BIF_undo_push("Add NLA strip");
|
||||||
|
}
|
||||||
|
|
||||||
static void add_nla_databrowse_callback(unsigned short val)
|
static void add_nla_databrowse_callback(unsigned short val)
|
||||||
{
|
{
|
||||||
/* val is not used, databrowse needs it to optional pass an event */
|
/* val is not used, databrowse needs it to optional pass an event */
|
||||||
@ -427,6 +481,26 @@ void add_nlablock(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Creates a new action, and makes a new actionstrip of that */
|
||||||
|
void add_empty_nlablock(void)
|
||||||
|
{
|
||||||
|
Object *ob= OBACT;
|
||||||
|
bAction *act= NULL;
|
||||||
|
|
||||||
|
/* check for active object first - will add strip to active object */
|
||||||
|
if (ob == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* make new action */
|
||||||
|
if ((ob->type == OB_ARMATURE) && (ob->flag & OB_POSEMODE))
|
||||||
|
act= add_empty_action(ID_AR);
|
||||||
|
else
|
||||||
|
act= add_empty_action(ID_OB);
|
||||||
|
|
||||||
|
/* make a new strip for it */
|
||||||
|
add_nla_block_by_name(act->id.name, ob, 0, 1, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
/* Adds strip to to active Object */
|
/* Adds strip to to active Object */
|
||||||
static void relink_active_strip(void)
|
static void relink_active_strip(void)
|
||||||
{
|
{
|
||||||
@ -1811,6 +1885,9 @@ void winqreadnlaspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
|||||||
toggle_blockhandler(curarea, NLA_HANDLER_PROPERTIES, UI_PNL_TO_MOUSE);
|
toggle_blockhandler(curarea, NLA_HANDLER_PROPERTIES, UI_PNL_TO_MOUSE);
|
||||||
scrarea_queue_winredraw(curarea);
|
scrarea_queue_winredraw(curarea);
|
||||||
}
|
}
|
||||||
|
else if (G.qual & LR_SHIFTKEY) {
|
||||||
|
add_empty_nlablock();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case LKEY:
|
case LKEY:
|
||||||
relink_active_strip();
|
relink_active_strip();
|
||||||
@ -1916,60 +1993,6 @@ void winqreadnlaspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
|||||||
if(doredraw) scrarea_queue_winredraw(curarea);
|
if(doredraw) scrarea_queue_winredraw(curarea);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_nla_block_by_name(char name[32], Object *ob, short hold, short add, float repeat)
|
|
||||||
{
|
|
||||||
bAction *act=NULL;
|
|
||||||
bActionStrip *strip;
|
|
||||||
int cur;
|
|
||||||
|
|
||||||
if (name){
|
|
||||||
for (cur = 1, act=G.main->action.first; act; act=act->id.next, cur++){
|
|
||||||
if (strcmp(name,act->id.name)==0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Bail out if no action was chosen */
|
|
||||||
if (!act){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize the new action block */
|
|
||||||
strip = MEM_callocN(sizeof(bActionStrip), "bActionStrip");
|
|
||||||
|
|
||||||
deselect_nlachannel_keys(0);
|
|
||||||
|
|
||||||
/* Link the action to the strip */
|
|
||||||
strip->act = act;
|
|
||||||
calc_action_range(strip->act, &strip->actstart, &strip->actend, 1);
|
|
||||||
strip->start = G.scene->r.cfra; /* could be mval[0] another time... */
|
|
||||||
strip->end = strip->start + (strip->actend-strip->actstart);
|
|
||||||
/* simple prevention of zero strips */
|
|
||||||
if(strip->start>strip->end-2)
|
|
||||||
strip->end= strip->start+100;
|
|
||||||
|
|
||||||
strip->flag = ACTSTRIP_SELECT|ACTSTRIP_LOCK_ACTION; //|ACTSTRIP_USEMATCH;
|
|
||||||
|
|
||||||
if (hold==1)
|
|
||||||
strip->flag = strip->flag|ACTSTRIP_HOLDLASTFRAME;
|
|
||||||
|
|
||||||
if (add==1)
|
|
||||||
strip->mode = ACTSTRIPMODE_ADD;
|
|
||||||
|
|
||||||
find_stridechannel(ob, strip);
|
|
||||||
|
|
||||||
set_active_strip(ob, strip);
|
|
||||||
|
|
||||||
strip->repeat = repeat;
|
|
||||||
|
|
||||||
act->id.us++;
|
|
||||||
|
|
||||||
BLI_addtail(&ob->nlastrips, strip);
|
|
||||||
|
|
||||||
BIF_undo_push("Add NLA strip");
|
|
||||||
}
|
|
||||||
|
|
||||||
void bake_all_to_action(void)
|
void bake_all_to_action(void)
|
||||||
{
|
{
|
||||||
Object *ob;
|
Object *ob;
|
||||||
|
@ -318,6 +318,9 @@ static void do_nla_stripmenu(void *arg, int event)
|
|||||||
case 9: /* reset start/end of action */
|
case 9: /* reset start/end of action */
|
||||||
reset_action_strips(2);
|
reset_action_strips(2);
|
||||||
break;
|
break;
|
||||||
|
case 10: /* add new action as new action strip */
|
||||||
|
add_empty_nlablock();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,13 +334,15 @@ static uiBlock *nla_stripmenu(void *arg_unused)
|
|||||||
|
|
||||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Strip Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
|
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Strip Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
|
||||||
uiDefIconTextBlockBut(block, nla_strip_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 20, "");
|
uiDefIconTextBlockBut(block, nla_strip_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 20, "");
|
||||||
|
uiDefIconTextBlockBut(block, nla_strip_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap To Frame", 0, yco-=20, 120, 20, "");
|
||||||
|
|
||||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Strip Size|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
|
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Strip Size|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
|
||||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Action Start/End|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
|
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Action Start/End|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
|
||||||
uiDefIconTextBlockBut(block, nla_strip_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap To Frame", 0, yco-=20, 120, 20, "");
|
|
||||||
|
|
||||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||||
|
|
||||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Action Strip|Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
|
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Action Strip|Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
|
||||||
|
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Blank Action Strip|Shift N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
|
||||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Action to NLA Strip|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
|
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Action to NLA Strip|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
|
||||||
|
|
||||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
|
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
|
||||||
|
Loading…
Reference in New Issue
Block a user