Orange's buglist!
- Action Editor: hotkeys V and H for handles were invisible, added menus - NLA strips: when current frame is exactly on the strip end, it didn't include that action... needs a rounding correction for it. - Action/NLA: deleting keys in Action, which results in only 1 key left, resulted in zero sized strip length. Now the strips are defaulted to be 1 frame in size minimal. - NLA editor: ALT+C "Convert to strip" didn't increment Action user count - 3D Window: CTRL+P make parent to Bone still gave the insane menu with all bone names. With unified PoseMode select it can just parent to the active Bone. Note; this now requires the Armature to be in PoseMode to work. - Rotation Constraint; the new options to only map to X,Y,Z rotation, did set the not mapped rotation axes to zero. These should remain unchanged. - AutoKey optionn for Actions; should not insert action keys on ESC And added a fix myself: - When SHIFT+selecting a Bone in PoseMode, and the Armature was not selected or active yet, it doesn't extend-select/deselect the Bone anymore. This case is only useful when you try to add IK or Constraint, so the shift+selection should only activate the clicked Bone.
This commit is contained in:
@@ -1156,34 +1156,11 @@ int test_parent_loop(Object *par, Object *ob)
|
||||
|
||||
}
|
||||
|
||||
static char *make_bone_menu (Object *ob)
|
||||
{
|
||||
char *menustr=NULL;
|
||||
bPoseChannel *pchan;
|
||||
int size;
|
||||
int index=0;
|
||||
|
||||
// Count the bones
|
||||
for(size=0, pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next, size++);
|
||||
|
||||
size = size*48 + 256;
|
||||
menustr = MEM_callocN(size, "bonemenu");
|
||||
|
||||
sprintf (menustr, "Select Bone%%t");
|
||||
|
||||
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next, index++) {
|
||||
sprintf (menustr, "%s|%s%%x%d", menustr, pchan->bone->name, index);
|
||||
}
|
||||
|
||||
return menustr;
|
||||
}
|
||||
|
||||
|
||||
void make_parent(void)
|
||||
{
|
||||
Base *base;
|
||||
Object *par;
|
||||
Bone *bone=NULL;
|
||||
bPoseChannel *pchan= NULL;
|
||||
short qual, mode=0;
|
||||
|
||||
if(G.scene->id.lib) return;
|
||||
@@ -1267,19 +1244,23 @@ void make_parent(void)
|
||||
}
|
||||
}
|
||||
else if(par->type == OB_ARMATURE){
|
||||
int bonenr;
|
||||
char *bonestr=NULL;
|
||||
|
||||
base= FIRSTBASE;
|
||||
while(base) {
|
||||
if TESTBASELIB(base) {
|
||||
if(base!=BASACT) {
|
||||
if(base->object->type==OB_MESH) {
|
||||
mode= pupmenu("Make Parent To%t|Bone %x1|Armature %x2|Object %x3");
|
||||
if(par->flag & OB_POSEMODE)
|
||||
mode= pupmenu("Make Parent To%t|Bone %x1|Armature %x2|Object %x3");
|
||||
else
|
||||
mode= pupmenu("Make Parent To%t|Armature %x2|Object %x3");
|
||||
break;
|
||||
}
|
||||
else {
|
||||
mode= pupmenu("Make Parent To %t|Bone %x1|Object %x3");
|
||||
if(par->flag & OB_POSEMODE)
|
||||
mode= pupmenu("Make Parent To %t|Bone %x1|Object %x3");
|
||||
else
|
||||
mode= pupmenu("Make Parent To %t|Object %x3");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1290,21 +1271,10 @@ void make_parent(void)
|
||||
switch (mode){
|
||||
case 1:
|
||||
mode=PARBONE;
|
||||
/* Make bone popup menu */
|
||||
pchan= get_active_posechannel(par);
|
||||
|
||||
bonestr = make_bone_menu(par);
|
||||
|
||||
bonenr= pupmenu_col(bonestr, 20);
|
||||
if (bonestr)
|
||||
MEM_freeN (bonestr);
|
||||
|
||||
if (bonenr==-1){
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
bone= get_indexed_bone(par, bonenr<<16); // function uses selection codes
|
||||
if (!bone){
|
||||
if(pchan==NULL) {
|
||||
error("No active Bone");
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
return;
|
||||
}
|
||||
@@ -1362,8 +1332,8 @@ void make_parent(void)
|
||||
|
||||
if (par->type==OB_ARMATURE) {
|
||||
base->object->partype= mode;
|
||||
if (bone)
|
||||
strcpy (base->object->parsubstr, bone->name);
|
||||
if (pchan)
|
||||
strcpy (base->object->parsubstr, pchan->name);
|
||||
else
|
||||
base->object->parsubstr[0]=0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user