Merge branch 'blender-v2.90-release' into master
This commit is contained in:
commit
cfba3cb121
|
@ -152,6 +152,7 @@
|
|||
#include "MEM_guardedalloc.h" // MEM_freeN
|
||||
|
||||
#include "BKE_action.h"
|
||||
#include "BKE_armature.h"
|
||||
#include "BKE_blender_version.h"
|
||||
#include "BKE_bpath.h"
|
||||
#include "BKE_collection.h"
|
||||
|
@ -1580,7 +1581,7 @@ static void write_constraints(BlendWriter *writer, ListBase *conlist)
|
|||
}
|
||||
}
|
||||
|
||||
static void write_pose(BlendWriter *writer, bPose *pose)
|
||||
static void write_pose(BlendWriter *writer, bPose *pose, bArmature *arm)
|
||||
{
|
||||
bPoseChannel *chan;
|
||||
bActionGroup *grp;
|
||||
|
@ -1590,6 +1591,8 @@ static void write_pose(BlendWriter *writer, bPose *pose)
|
|||
return;
|
||||
}
|
||||
|
||||
BLI_assert(arm != NULL);
|
||||
|
||||
/* Write channels */
|
||||
for (chan = pose->chanbase.first; chan; chan = chan->next) {
|
||||
/* Write ID Properties -- and copy this comment EXACTLY for easy finding
|
||||
|
@ -1602,11 +1605,15 @@ static void write_pose(BlendWriter *writer, bPose *pose)
|
|||
|
||||
write_motionpath(writer, chan->mpath);
|
||||
|
||||
/* prevent crashes with autosave,
|
||||
* when a bone duplicated in editmode has not yet been assigned to its posechannel */
|
||||
if (chan->bone) {
|
||||
/* Prevent crashes with autosave,
|
||||
* when a bone duplicated in editmode has not yet been assigned to its posechannel.
|
||||
* Also needed with memundo, in some cases we can store a step before pose has been
|
||||
* properly rebuilt from previous undo step. */
|
||||
Bone *bone = (pose->flag & POSE_RECALC) ? BKE_armature_find_bone_name(arm, chan->name) :
|
||||
chan->bone;
|
||||
if (bone != NULL) {
|
||||
/* gets restored on read, for library armatures */
|
||||
chan->selectflag = chan->bone->flag & BONE_SELECTED;
|
||||
chan->selectflag = bone->flag & BONE_SELECTED;
|
||||
}
|
||||
|
||||
BLO_write_struct(writer, bPoseChannel, chan);
|
||||
|
@ -1851,15 +1858,16 @@ static void write_object(BlendWriter *writer, Object *ob, const void *id_address
|
|||
BLO_write_pointer_array(writer, ob->totcol, ob->mat);
|
||||
BLO_write_raw(writer, sizeof(char) * ob->totcol, ob->matbits);
|
||||
|
||||
bArmature *arm = NULL;
|
||||
if (ob->type == OB_ARMATURE) {
|
||||
bArmature *arm = ob->data;
|
||||
arm = ob->data;
|
||||
if (arm && ob->pose && arm->act_bone) {
|
||||
BLI_strncpy(
|
||||
ob->pose->proxy_act_bone, arm->act_bone->name, sizeof(ob->pose->proxy_act_bone));
|
||||
}
|
||||
}
|
||||
|
||||
write_pose(writer, ob->pose);
|
||||
write_pose(writer, ob->pose, arm);
|
||||
write_defgroups(writer, &ob->defbase);
|
||||
write_fmaps(writer, &ob->fmaps);
|
||||
write_constraints(writer, &ob->constraints);
|
||||
|
|
Loading…
Reference in New Issue