forked from bartvdbraak/blender
== PoseLib - Action Editor Integration (Transform) ==
Now it is possible to transform Pose Markers in the Action Editor. (Note: it is a bit of a quick hack)
This commit is contained in:
parent
f312611a92
commit
14fafab60a
@ -231,7 +231,9 @@ typedef enum SACTION_FLAG {
|
||||
/* don't kill overlapping keyframes after transform */
|
||||
SACTION_NOTRANSKEYCULL = (1<<4),
|
||||
/* don't include keyframes that are out of view */
|
||||
SACTION_HORIZOPTIMISEON = (1<<5)
|
||||
SACTION_HORIZOPTIMISEON = (1<<5),
|
||||
/* hack for moving pose-markers (temp flag) */
|
||||
SACTION_POSEMARKERS_MOVE = (1<<6)
|
||||
} SACTION_FLAG;
|
||||
|
||||
/* SpaceAction AutoSnap Settings (also used by SpaceNLA) */
|
||||
|
@ -4277,6 +4277,11 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
||||
action_rename_localmarker(data);
|
||||
else if (G.qual == LR_ALTKEY)
|
||||
action_remove_localmarkers(data);
|
||||
else if (G.qual == LR_CTRLKEY) {
|
||||
G.saction->flag |= SACTION_POSEMARKERS_MOVE;
|
||||
transform_markers('g', 0);
|
||||
G.saction->flag &= ~SACTION_POSEMARKERS_MOVE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -170,6 +170,7 @@ void transform_markers(int mode, int smode) // mode and smode unused here, for c
|
||||
SpaceLink *slink= curarea->spacedata.first;
|
||||
SpaceTime *stime= curarea->spacedata.first;
|
||||
SpaceAction *saction = curarea->spacedata.first;
|
||||
ListBase *markers;
|
||||
TimeMarker *marker, *selmarker=NULL;
|
||||
float dx, fac;
|
||||
int a, ret_val= 0, totmark=0, *oldframe, offs, firsttime=1;
|
||||
@ -177,16 +178,26 @@ void transform_markers(int mode, int smode) // mode and smode unused here, for c
|
||||
short val, pmval[2], mval[2], mvalo[2];
|
||||
char str[32];
|
||||
|
||||
for(marker= G.scene->markers.first; marker; marker= marker->next) {
|
||||
if(marker->flag & SELECT) totmark++;
|
||||
/* hack for pose-markers in action editor */
|
||||
if ((slink->spacetype == SPACE_ACTION) && (saction->flag & SACTION_POSEMARKERS_MOVE)) {
|
||||
if (saction->action)
|
||||
markers= &saction->action->markers;
|
||||
else
|
||||
markers= NULL;
|
||||
}
|
||||
if(totmark==0) return;
|
||||
else
|
||||
markers= &G.scene->markers;
|
||||
|
||||
for (marker= markers->first; marker; marker= marker->next) {
|
||||
if (marker->flag & SELECT) totmark++;
|
||||
}
|
||||
if (totmark==0) return;
|
||||
|
||||
oldframe= MEM_mallocN(totmark*sizeof(int), "marker array");
|
||||
for(a=0, marker= G.scene->markers.first; marker; marker= marker->next) {
|
||||
if(marker->flag & SELECT) {
|
||||
for (a=0, marker= markers->first; marker; marker= marker->next) {
|
||||
if (marker->flag & SELECT) {
|
||||
oldframe[a]= marker->frame;
|
||||
selmarker= marker; // used for hederprint
|
||||
selmarker= marker; // used for headerprint
|
||||
a++;
|
||||
}
|
||||
}
|
||||
@ -197,8 +208,7 @@ void transform_markers(int mode, int smode) // mode and smode unused here, for c
|
||||
getmouseco_areawin(pmval);
|
||||
mvalo[0]= pmval[0];
|
||||
|
||||
while(ret_val == 0) {
|
||||
|
||||
while (ret_val == 0) {
|
||||
getmouseco_areawin(mval);
|
||||
|
||||
if (mval[0] != mvalo[0] || firsttime) {
|
||||
@ -213,14 +223,15 @@ void transform_markers(int mode, int smode) // mode and smode unused here, for c
|
||||
apply_keyb_grid(&fac, 0.0, 1.0, 0.1, U.flag & USER_AUTOGRABGRID);
|
||||
offs= (int)fac;
|
||||
|
||||
for(a=0, marker= G.scene->markers.first; marker; marker= marker->next) {
|
||||
if(marker->flag & SELECT) {
|
||||
for (a=0, marker= markers->first; marker; marker= marker->next) {
|
||||
if (marker->flag & SELECT) {
|
||||
marker->frame= oldframe[a] + offs;
|
||||
a++;
|
||||
}
|
||||
}
|
||||
|
||||
if(totmark==1) { // we print current marker value
|
||||
if (totmark==1) {
|
||||
/* we print current marker value */
|
||||
if (ELEM(slink->spacetype, SPACE_TIME, SPACE_SOUND)) {
|
||||
if (stime->flag & TIME_DRAWFRAMES)
|
||||
sprintf(str, "Marker %d offset %d", selmarker->frame, offs);
|
||||
@ -238,6 +249,7 @@ void transform_markers(int mode, int smode) // mode and smode unused here, for c
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* we only print the offset */
|
||||
if (ELEM(slink->spacetype, SPACE_TIME, SPACE_SOUND)) {
|
||||
if (stime->flag & TIME_DRAWFRAMES)
|
||||
sprintf(str, "Marker offset %d ", offs);
|
||||
@ -261,20 +273,20 @@ void transform_markers(int mode, int smode) // mode and smode unused here, for c
|
||||
else PIL_sleep_ms(10); // idle
|
||||
|
||||
/* emptying queue and reading events */
|
||||
while( qtest() ) {
|
||||
while ( qtest() ) {
|
||||
event= extern_qread(&val);
|
||||
|
||||
if(val) {
|
||||
if(event==ESCKEY || event==RIGHTMOUSE) ret_val= 2;
|
||||
else if(event==LEFTMOUSE || event==RETKEY || event==SPACEKEY) ret_val= 1;
|
||||
if (val) {
|
||||
if (ELEM(event, ESCKEY, RIGHTMOUSE)) ret_val= 2;
|
||||
else if (ELEM3(event, LEFTMOUSE, RETKEY, SPACEKEY)) ret_val= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* restore? */
|
||||
if(ret_val==2) {
|
||||
for(a=0, marker= G.scene->markers.first; marker; marker= marker->next) {
|
||||
if(marker->flag & SELECT) {
|
||||
if (ret_val==2) {
|
||||
for (a=0, marker= markers->first; marker; marker= marker->next) {
|
||||
if (marker->flag & SELECT) {
|
||||
marker->frame= oldframe[a];
|
||||
a++;
|
||||
}
|
||||
|
@ -204,7 +204,8 @@ enum {
|
||||
ACTMENU_MARKERS_MOVE,
|
||||
ACTMENU_MARKERS_LOCALADD,
|
||||
ACTMENU_MARKERS_LOCALRENAME,
|
||||
ACTMENU_MARKERS_LOCALDELETE
|
||||
ACTMENU_MARKERS_LOCALDELETE,
|
||||
ACTMENU_MARKERS_LOCALMOVE
|
||||
};
|
||||
|
||||
void do_action_buttons(unsigned short event)
|
||||
@ -1363,6 +1364,11 @@ static void do_action_markermenu(void *arg, int event)
|
||||
case ACTMENU_MARKERS_LOCALRENAME:
|
||||
action_rename_localmarker(G.saction->action);
|
||||
break;
|
||||
case ACTMENU_MARKERS_LOCALMOVE:
|
||||
G.saction->flag |= SACTION_POSEMARKERS_MOVE;
|
||||
transform_markers('g', 0);
|
||||
G.saction->flag &= ~SACTION_POSEMARKERS_MOVE;
|
||||
break;
|
||||
}
|
||||
|
||||
allqueue(REDRAWMARKER, 0);
|
||||
@ -1383,9 +1389,9 @@ static uiBlock *action_markermenu(void *arg_unused)
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_DUPLICATE, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Marker|X", 0, yco-=20,
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_DELETE, "");
|
||||
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "(Re)Name Marker|Ctrl M", 0, yco-=20,
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_NAME, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move Marker|Ctrl G", 0, yco-=20,
|
||||
@ -1393,12 +1399,14 @@ static uiBlock *action_markermenu(void *arg_unused)
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Local Marker|Shift L", 0, yco-=20,
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Pose Marker|Shift L", 0, yco-=20,
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_LOCALADD, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rename Local Marker|Ctrl Shift L", 0, yco-=20,
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rename Pose Marker|Ctrl Shift L", 0, yco-=20,
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_LOCALRENAME, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Local Marker|Alt L", 0, yco-=20,
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Pose Marker|Alt L", 0, yco-=20,
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_LOCALDELETE, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move Pose Marker|Ctrl L", 0, yco-=20,
|
||||
menuwidth, 19, NULL, 0.0, 0.0, 1, ACTMENU_MARKERS_LOCALMOVE, "");
|
||||
|
||||
if(curarea->headertype==HEADERTOP) {
|
||||
uiBlockSetDirection(block, UI_DOWN);
|
||||
|
Loading…
Reference in New Issue
Block a user