Cleanup: remove some G.main from ED's animsys.
The easy ones - there some much, much trickier to tackle there...
This commit is contained in:
parent
75bcb70c60
commit
5508b572ea
|
@ -74,7 +74,7 @@ struct AnimData *BKE_animdata_copy(struct Main *bmain, struct AnimData *adt, con
|
|||
bool BKE_animdata_copy_id(struct Main *bmain, struct ID *id_to, struct ID *id_from, const bool do_action);
|
||||
|
||||
/* Copy AnimData Actions */
|
||||
void BKE_animdata_copy_id_action(struct ID *id, const bool set_newid);
|
||||
void BKE_animdata_copy_id_action(struct Main *bmain, struct ID *id, const bool set_newid);
|
||||
|
||||
/* Merge copies of data from source AnimData block */
|
||||
typedef enum eAnimData_MergeCopy_Modes {
|
||||
|
@ -88,7 +88,9 @@ typedef enum eAnimData_MergeCopy_Modes {
|
|||
ADT_MERGECOPY_SRC_REF = 2
|
||||
} eAnimData_MergeCopy_Modes;
|
||||
|
||||
void BKE_animdata_merge_copy(struct ID *dst_id, struct ID *src_id, eAnimData_MergeCopy_Modes action_mode, bool fix_drivers);
|
||||
void BKE_animdata_merge_copy(
|
||||
struct Main *bmain, struct ID *dst_id, struct ID *src_id,
|
||||
eAnimData_MergeCopy_Modes action_mode, bool fix_drivers);
|
||||
|
||||
/* ************************************* */
|
||||
/* KeyingSets API */
|
||||
|
@ -139,7 +141,8 @@ void BKE_animdata_fix_paths_remove(struct ID *id, const char *path);
|
|||
/* -------------------------------------- */
|
||||
|
||||
/* Move animation data from src to destination if it's paths are based on basepaths */
|
||||
void BKE_animdata_separate_by_basepath(struct ID *srcID, struct ID *dstID, struct ListBase *basepaths);
|
||||
void BKE_animdata_separate_by_basepath(
|
||||
struct Main *bmain, struct ID *srcID, struct ID *dstID, struct ListBase *basepaths);
|
||||
|
||||
/* Move F-Curves from src to destination if it's path is based on basepath */
|
||||
void action_move_fcurves_by_basepath(struct bAction *srcAct, struct bAction *dstAct, const char basepath[]);
|
||||
|
|
|
@ -314,25 +314,27 @@ bool BKE_animdata_copy_id(Main *bmain, ID *id_to, ID *id_from, const bool do_act
|
|||
return true;
|
||||
}
|
||||
|
||||
void BKE_animdata_copy_id_action(ID *id, const bool set_newid)
|
||||
void BKE_animdata_copy_id_action(Main *bmain, ID *id, const bool set_newid)
|
||||
{
|
||||
AnimData *adt = BKE_animdata_from_id(id);
|
||||
if (adt) {
|
||||
if (adt->action) {
|
||||
id_us_min((ID *)adt->action);
|
||||
adt->action = set_newid ? ID_NEW_SET(adt->action, BKE_action_copy(G.main, adt->action)) :
|
||||
BKE_action_copy(G.main, adt->action);
|
||||
adt->action = set_newid ? ID_NEW_SET(adt->action, BKE_action_copy(bmain, adt->action)) :
|
||||
BKE_action_copy(bmain, adt->action);
|
||||
}
|
||||
if (adt->tmpact) {
|
||||
id_us_min((ID *)adt->tmpact);
|
||||
adt->tmpact = set_newid ? ID_NEW_SET(adt->tmpact, BKE_action_copy(G.main, adt->tmpact)) :
|
||||
BKE_action_copy(G.main, adt->tmpact);
|
||||
adt->tmpact = set_newid ? ID_NEW_SET(adt->tmpact, BKE_action_copy(bmain, adt->tmpact)) :
|
||||
BKE_action_copy(bmain, adt->tmpact);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Merge copies of the data from the src AnimData into the destination AnimData */
|
||||
void BKE_animdata_merge_copy(ID *dst_id, ID *src_id, eAnimData_MergeCopy_Modes action_mode, bool fix_drivers)
|
||||
void BKE_animdata_merge_copy(
|
||||
Main *bmain, ID *dst_id, ID *src_id,
|
||||
eAnimData_MergeCopy_Modes action_mode, bool fix_drivers)
|
||||
{
|
||||
AnimData *src = BKE_animdata_from_id(src_id);
|
||||
AnimData *dst = BKE_animdata_from_id(dst_id);
|
||||
|
@ -350,8 +352,8 @@ void BKE_animdata_merge_copy(ID *dst_id, ID *src_id, eAnimData_MergeCopy_Modes a
|
|||
/* handle actions... */
|
||||
if (action_mode == ADT_MERGECOPY_SRC_COPY) {
|
||||
/* make a copy of the actions */
|
||||
dst->action = BKE_action_copy(G.main, src->action);
|
||||
dst->tmpact = BKE_action_copy(G.main, src->tmpact);
|
||||
dst->action = BKE_action_copy(bmain, src->action);
|
||||
dst->tmpact = BKE_action_copy(bmain, src->tmpact);
|
||||
}
|
||||
else if (action_mode == ADT_MERGECOPY_SRC_REF) {
|
||||
/* make a reference to it */
|
||||
|
@ -366,7 +368,7 @@ void BKE_animdata_merge_copy(ID *dst_id, ID *src_id, eAnimData_MergeCopy_Modes a
|
|||
if (src->nla_tracks.first) {
|
||||
ListBase tracks = {NULL, NULL};
|
||||
|
||||
BKE_nla_tracks_copy(G.main, &tracks, &src->nla_tracks);
|
||||
BKE_nla_tracks_copy(bmain, &tracks, &src->nla_tracks);
|
||||
BLI_movelisttolist(&dst->nla_tracks, &tracks);
|
||||
}
|
||||
|
||||
|
@ -503,7 +505,8 @@ void action_move_fcurves_by_basepath(bAction *srcAct, bAction *dstAct, const cha
|
|||
* animation data is based off "basepath", creating new AnimData and
|
||||
* associated data as necessary
|
||||
*/
|
||||
void BKE_animdata_separate_by_basepath(ID *srcID, ID *dstID, ListBase *basepaths)
|
||||
void BKE_animdata_separate_by_basepath(
|
||||
Main *bmain, ID *srcID, ID *dstID, ListBase *basepaths)
|
||||
{
|
||||
AnimData *srcAdt = NULL, *dstAdt = NULL;
|
||||
LinkData *ld;
|
||||
|
@ -529,7 +532,7 @@ void BKE_animdata_separate_by_basepath(ID *srcID, ID *dstID, ListBase *basepaths
|
|||
if (srcAdt->action) {
|
||||
/* set up an action if necessary, and name it in a similar way so that it can be easily found again */
|
||||
if (dstAdt->action == NULL) {
|
||||
dstAdt->action = BKE_action_add(G.main, srcAdt->action->id.name + 2);
|
||||
dstAdt->action = BKE_action_add(bmain, srcAdt->action->id.name + 2);
|
||||
}
|
||||
else if (dstAdt->action == srcAdt->action) {
|
||||
printf("Argh! Source and Destination share animation! ('%s' and '%s' both use '%s') Making new empty action\n",
|
||||
|
@ -537,7 +540,7 @@ void BKE_animdata_separate_by_basepath(ID *srcID, ID *dstID, ListBase *basepaths
|
|||
|
||||
/* TODO: review this... */
|
||||
id_us_min(&dstAdt->action->id);
|
||||
dstAdt->action = BKE_action_add(G.main, dstAdt->action->id.name + 2);
|
||||
dstAdt->action = BKE_action_add(bmain, dstAdt->action->id.name + 2);
|
||||
}
|
||||
|
||||
/* loop over base paths, trying to fix for each one... */
|
||||
|
@ -1074,20 +1077,20 @@ static void adt_apply_all_fcurves_cb(ID *id, AnimData *adt, void *wrapper_data)
|
|||
}
|
||||
|
||||
/* apply the given callback function on all F-Curves attached to data in main database */
|
||||
void BKE_fcurves_main_cb(Main *mainptr, ID_FCurve_Edit_Callback func, void *user_data)
|
||||
void BKE_fcurves_main_cb(Main *bmain, ID_FCurve_Edit_Callback func, void *user_data)
|
||||
{
|
||||
/* Wrap F-Curve operation stuff to pass to the general AnimData-level func */
|
||||
AllFCurvesCbWrapper wrapper = {func, user_data};
|
||||
|
||||
/* Use the AnimData-based function so that we don't have to reimplement all that stuff */
|
||||
BKE_animdata_main_cb(mainptr, adt_apply_all_fcurves_cb, &wrapper);
|
||||
BKE_animdata_main_cb(bmain, adt_apply_all_fcurves_cb, &wrapper);
|
||||
}
|
||||
|
||||
|
||||
/* Whole Database Ops -------------------------------------------- */
|
||||
|
||||
/* apply the given callback function on all data in main database */
|
||||
void BKE_animdata_main_cb(Main *mainptr, ID_AnimData_Edit_Callback func, void *user_data)
|
||||
void BKE_animdata_main_cb(Main *bmain, ID_AnimData_Edit_Callback func, void *user_data)
|
||||
{
|
||||
ID *id;
|
||||
|
||||
|
@ -1111,67 +1114,67 @@ void BKE_animdata_main_cb(Main *mainptr, ID_AnimData_Edit_Callback func, void *u
|
|||
} (void)0
|
||||
|
||||
/* nodes */
|
||||
ANIMDATA_IDS_CB(mainptr->nodetree.first);
|
||||
ANIMDATA_IDS_CB(bmain->nodetree.first);
|
||||
|
||||
/* textures */
|
||||
ANIMDATA_NODETREE_IDS_CB(mainptr->tex.first, Tex);
|
||||
ANIMDATA_NODETREE_IDS_CB(bmain->tex.first, Tex);
|
||||
|
||||
/* lamps */
|
||||
ANIMDATA_NODETREE_IDS_CB(mainptr->lamp.first, Lamp);
|
||||
ANIMDATA_NODETREE_IDS_CB(bmain->lamp.first, Lamp);
|
||||
|
||||
/* materials */
|
||||
ANIMDATA_NODETREE_IDS_CB(mainptr->mat.first, Material);
|
||||
ANIMDATA_NODETREE_IDS_CB(bmain->mat.first, Material);
|
||||
|
||||
/* cameras */
|
||||
ANIMDATA_IDS_CB(mainptr->camera.first);
|
||||
ANIMDATA_IDS_CB(bmain->camera.first);
|
||||
|
||||
/* shapekeys */
|
||||
ANIMDATA_IDS_CB(mainptr->key.first);
|
||||
ANIMDATA_IDS_CB(bmain->key.first);
|
||||
|
||||
/* metaballs */
|
||||
ANIMDATA_IDS_CB(mainptr->mball.first);
|
||||
ANIMDATA_IDS_CB(bmain->mball.first);
|
||||
|
||||
/* curves */
|
||||
ANIMDATA_IDS_CB(mainptr->curve.first);
|
||||
ANIMDATA_IDS_CB(bmain->curve.first);
|
||||
|
||||
/* armatures */
|
||||
ANIMDATA_IDS_CB(mainptr->armature.first);
|
||||
ANIMDATA_IDS_CB(bmain->armature.first);
|
||||
|
||||
/* lattices */
|
||||
ANIMDATA_IDS_CB(mainptr->latt.first);
|
||||
ANIMDATA_IDS_CB(bmain->latt.first);
|
||||
|
||||
/* meshes */
|
||||
ANIMDATA_IDS_CB(mainptr->mesh.first);
|
||||
ANIMDATA_IDS_CB(bmain->mesh.first);
|
||||
|
||||
/* particles */
|
||||
ANIMDATA_IDS_CB(mainptr->particle.first);
|
||||
ANIMDATA_IDS_CB(bmain->particle.first);
|
||||
|
||||
/* speakers */
|
||||
ANIMDATA_IDS_CB(mainptr->speaker.first);
|
||||
ANIMDATA_IDS_CB(bmain->speaker.first);
|
||||
|
||||
/* movie clips */
|
||||
ANIMDATA_IDS_CB(mainptr->movieclip.first);
|
||||
ANIMDATA_IDS_CB(bmain->movieclip.first);
|
||||
|
||||
/* objects */
|
||||
ANIMDATA_IDS_CB(mainptr->object.first);
|
||||
ANIMDATA_IDS_CB(bmain->object.first);
|
||||
|
||||
/* masks */
|
||||
ANIMDATA_IDS_CB(mainptr->mask.first);
|
||||
ANIMDATA_IDS_CB(bmain->mask.first);
|
||||
|
||||
/* worlds */
|
||||
ANIMDATA_NODETREE_IDS_CB(mainptr->world.first, World);
|
||||
ANIMDATA_NODETREE_IDS_CB(bmain->world.first, World);
|
||||
|
||||
/* scenes */
|
||||
ANIMDATA_NODETREE_IDS_CB(mainptr->scene.first, Scene);
|
||||
ANIMDATA_NODETREE_IDS_CB(bmain->scene.first, Scene);
|
||||
|
||||
/* line styles */
|
||||
ANIMDATA_IDS_CB(mainptr->linestyle.first);
|
||||
ANIMDATA_IDS_CB(bmain->linestyle.first);
|
||||
|
||||
/* grease pencil */
|
||||
ANIMDATA_IDS_CB(mainptr->gpencil.first);
|
||||
ANIMDATA_IDS_CB(bmain->gpencil.first);
|
||||
|
||||
/* cache files */
|
||||
ANIMDATA_IDS_CB(mainptr->cachefiles.first);
|
||||
ANIMDATA_IDS_CB(bmain->cachefiles.first);
|
||||
}
|
||||
|
||||
/* Fix all RNA-Paths throughout the database (directly access the Global.main version)
|
||||
|
@ -1181,7 +1184,7 @@ void BKE_animdata_main_cb(Main *mainptr, ID_AnimData_Edit_Callback func, void *u
|
|||
/* TODO: use BKE_animdata_main_cb for looping over all data */
|
||||
void BKE_animdata_fix_paths_rename_all(ID *ref_id, const char *prefix, const char *oldName, const char *newName)
|
||||
{
|
||||
Main *mainptr = G.main;
|
||||
Main *bmain = G.main; /* XXX UGLY! */
|
||||
ID *id;
|
||||
|
||||
/* macro for less typing
|
||||
|
@ -1207,67 +1210,67 @@ void BKE_animdata_fix_paths_rename_all(ID *ref_id, const char *prefix, const cha
|
|||
} (void)0
|
||||
|
||||
/* nodes */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->nodetree.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->nodetree.first);
|
||||
|
||||
/* textures */
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(mainptr->tex.first, Tex);
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(bmain->tex.first, Tex);
|
||||
|
||||
/* lamps */
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(mainptr->lamp.first, Lamp);
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(bmain->lamp.first, Lamp);
|
||||
|
||||
/* materials */
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(mainptr->mat.first, Material);
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(bmain->mat.first, Material);
|
||||
|
||||
/* cameras */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->camera.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->camera.first);
|
||||
|
||||
/* shapekeys */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->key.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->key.first);
|
||||
|
||||
/* metaballs */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->mball.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->mball.first);
|
||||
|
||||
/* curves */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->curve.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->curve.first);
|
||||
|
||||
/* armatures */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->armature.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->armature.first);
|
||||
|
||||
/* lattices */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->latt.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->latt.first);
|
||||
|
||||
/* meshes */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->mesh.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->mesh.first);
|
||||
|
||||
/* particles */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->particle.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->particle.first);
|
||||
|
||||
/* speakers */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->speaker.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->speaker.first);
|
||||
|
||||
/* movie clips */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->movieclip.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->movieclip.first);
|
||||
|
||||
/* objects */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->object.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->object.first);
|
||||
|
||||
/* masks */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->mask.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->mask.first);
|
||||
|
||||
/* worlds */
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(mainptr->world.first, World);
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(bmain->world.first, World);
|
||||
|
||||
/* linestyles */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->linestyle.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->linestyle.first);
|
||||
|
||||
/* grease pencil */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->gpencil.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->gpencil.first);
|
||||
|
||||
/* cache files */
|
||||
RENAMEFIX_ANIM_IDS(mainptr->cachefiles.first);
|
||||
RENAMEFIX_ANIM_IDS(bmain->cachefiles.first);
|
||||
|
||||
/* scenes */
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(mainptr->scene.first, Scene);
|
||||
RENAMEFIX_ANIM_NODETREE_IDS(bmain->scene.first, Scene);
|
||||
}
|
||||
|
||||
/* *********************************** */
|
||||
|
|
|
@ -689,9 +689,10 @@ bool id_single_user(bContext *C, ID *id, PointerRNA *ptr, PropertyRNA *prop)
|
|||
if (id) {
|
||||
/* if property isn't editable, we're going to have an extra block hanging around until we save */
|
||||
if (RNA_property_editable(ptr, prop)) {
|
||||
if (id_copy(CTX_data_main(C), id, &newid, false) && newid) {
|
||||
Main *bmain = CTX_data_main(C);
|
||||
if (id_copy(bmain, id, &newid, false) && newid) {
|
||||
/* copy animation actions too */
|
||||
BKE_animdata_copy_id_action(id, false);
|
||||
BKE_animdata_copy_id_action(bmain, id, false);
|
||||
/* us is 1 by convention, but RNA_property_pointer_set
|
||||
* will also increment it, so set it to zero */
|
||||
newid->us = 0;
|
||||
|
|
|
@ -374,7 +374,7 @@ int join_armature_exec(bContext *C, wmOperator *op)
|
|||
}
|
||||
else {
|
||||
/* merge in data - we'll fix the drivers manually */
|
||||
BKE_animdata_merge_copy(&ob->id, &base->object->id, ADT_MERGECOPY_KEEP_DST, false);
|
||||
BKE_animdata_merge_copy(bmain, &ob->id, &base->object->id, ADT_MERGECOPY_KEEP_DST, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -385,7 +385,7 @@ int join_armature_exec(bContext *C, wmOperator *op)
|
|||
}
|
||||
else {
|
||||
/* merge in data - we'll fix the drivers manually */
|
||||
BKE_animdata_merge_copy(&arm->id, &curarm->id, ADT_MERGECOPY_KEEP_DST, false);
|
||||
BKE_animdata_merge_copy(bmain, &arm->id, &curarm->id, ADT_MERGECOPY_KEEP_DST, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2036,7 +2036,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
|
|||
|
||||
/* duplicates using userflags */
|
||||
if (dupflag & USER_DUP_ACT) {
|
||||
BKE_animdata_copy_id_action(&obn->id, true);
|
||||
BKE_animdata_copy_id_action(bmain, &obn->id, true);
|
||||
}
|
||||
|
||||
if (dupflag & USER_DUP_MAT) {
|
||||
|
@ -2050,7 +2050,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
|
|||
id_us_min(id);
|
||||
|
||||
if (dupflag & USER_DUP_ACT) {
|
||||
BKE_animdata_copy_id_action(&obn->mat[a]->id, true);
|
||||
BKE_animdata_copy_id_action(bmain, &obn->mat[a]->id, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2066,7 +2066,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
|
|||
}
|
||||
|
||||
if (dupflag & USER_DUP_ACT) {
|
||||
BKE_animdata_copy_id_action(&psys->part->id, true);
|
||||
BKE_animdata_copy_id_action(bmain, &psys->part->id, true);
|
||||
}
|
||||
|
||||
id_us_min(id);
|
||||
|
@ -2196,9 +2196,9 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
|
|||
if (dupflag & USER_DUP_ACT) {
|
||||
bActuator *act;
|
||||
|
||||
BKE_animdata_copy_id_action((ID *)obn->data, true);
|
||||
BKE_animdata_copy_id_action(bmain, (ID *)obn->data, true);
|
||||
if (key) {
|
||||
BKE_animdata_copy_id_action((ID *)key, true);
|
||||
BKE_animdata_copy_id_action(bmain, (ID *)key, true);
|
||||
}
|
||||
|
||||
/* Update the duplicated action in the action actuators */
|
||||
|
|
|
@ -1891,7 +1891,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, const int flag)
|
|||
/* Needed to remap texcomesh below. */
|
||||
me = ob->data = ID_NEW_SET(ob->data, BKE_mesh_copy(bmain, ob->data));
|
||||
if (me->key) /* We do not need to set me->key->id.newid here... */
|
||||
BKE_animdata_copy_id_action((ID *)me->key, false);
|
||||
BKE_animdata_copy_id_action(bmain, (ID *)me->key, false);
|
||||
break;
|
||||
case OB_MBALL:
|
||||
ob->data = ID_NEW_SET(ob->data, BKE_mball_copy(bmain, ob->data));
|
||||
|
@ -1903,12 +1903,12 @@ static void single_obdata_users(Main *bmain, Scene *scene, const int flag)
|
|||
ID_NEW_REMAP(cu->bevobj);
|
||||
ID_NEW_REMAP(cu->taperobj);
|
||||
if (cu->key) /* We do not need to set cu->key->id.newid here... */
|
||||
BKE_animdata_copy_id_action((ID *)cu->key, false);
|
||||
BKE_animdata_copy_id_action(bmain, (ID *)cu->key, false);
|
||||
break;
|
||||
case OB_LATTICE:
|
||||
ob->data = lat = ID_NEW_SET(ob->data, BKE_lattice_copy(bmain, ob->data));
|
||||
if (lat->key) /* We do not need to set lat->key->id.newid here... */
|
||||
BKE_animdata_copy_id_action((ID *)lat->key, false);
|
||||
BKE_animdata_copy_id_action(bmain, (ID *)lat->key, false);
|
||||
break;
|
||||
case OB_ARMATURE:
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
|
@ -1929,7 +1929,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, const int flag)
|
|||
* AnimData structure, which is not what we want.
|
||||
* (sergey)
|
||||
*/
|
||||
BKE_animdata_copy_id_action((ID *)ob->data, false);
|
||||
BKE_animdata_copy_id_action(bmain, (ID *)ob->data, false);
|
||||
|
||||
id_us_min(id);
|
||||
}
|
||||
|
@ -1943,7 +1943,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, const int flag)
|
|||
}
|
||||
}
|
||||
|
||||
static void single_object_action_users(Scene *scene, const int flag)
|
||||
static void single_object_action_users(Main *bmain, Scene *scene, const int flag)
|
||||
{
|
||||
Object *ob;
|
||||
Base *base;
|
||||
|
@ -1952,7 +1952,7 @@ static void single_object_action_users(Scene *scene, const int flag)
|
|||
ob = base->object;
|
||||
if (!ID_IS_LINKED(ob) && (flag == 0 || (base->flag & SELECT)) ) {
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
BKE_animdata_copy_id_action(&ob->id, false);
|
||||
BKE_animdata_copy_id_action(bmain, &ob->id, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1975,7 +1975,7 @@ static void single_mat_users(Main *bmain, Scene *scene, const int flag, const bo
|
|||
|
||||
if (ma->id.us > 1) {
|
||||
man = BKE_material_copy(bmain, ma);
|
||||
BKE_animdata_copy_id_action(&man->id, false);
|
||||
BKE_animdata_copy_id_action(bmain, &man->id, false);
|
||||
|
||||
man->id.us = 0;
|
||||
assign_material(bmain, ob, man, a, BKE_MAT_ASSIGN_USERPREF);
|
||||
|
@ -1986,7 +1986,7 @@ static void single_mat_users(Main *bmain, Scene *scene, const int flag, const bo
|
|||
if (tex->id.us > 1) {
|
||||
id_us_min(&tex->id);
|
||||
tex = BKE_texture_copy(bmain, tex);
|
||||
BKE_animdata_copy_id_action(&tex->id, false);
|
||||
BKE_animdata_copy_id_action(bmain, &tex->id, false);
|
||||
man->mtex[b]->tex = tex;
|
||||
}
|
||||
}
|
||||
|
@ -2013,7 +2013,7 @@ static void do_single_tex_user(Main *bmain, Tex **from)
|
|||
}
|
||||
else if (tex->id.us > 1) {
|
||||
texn = ID_NEW_SET(tex, BKE_texture_copy(bmain, tex));
|
||||
BKE_animdata_copy_id_action(&texn->id, false);
|
||||
BKE_animdata_copy_id_action(bmain, &texn->id, false);
|
||||
tex->id.newid = (ID *)texn;
|
||||
id_us_min(&tex->id);
|
||||
*from = texn;
|
||||
|
@ -2100,7 +2100,7 @@ void ED_object_single_users(Main *bmain, Scene *scene, const bool full, const bo
|
|||
|
||||
if (full) {
|
||||
single_obdata_users(bmain, scene, 0);
|
||||
single_object_action_users(scene, 0);
|
||||
single_object_action_users(bmain, scene, 0);
|
||||
single_mat_users_expand(bmain);
|
||||
single_tex_users_expand(bmain);
|
||||
}
|
||||
|
@ -2438,7 +2438,7 @@ static int make_single_user_exec(bContext *C, wmOperator *op)
|
|||
single_mat_users(scene, flag, true);
|
||||
#endif
|
||||
if (RNA_boolean_get(op->ptr, "animation")) {
|
||||
single_object_action_users(scene, flag);
|
||||
single_object_action_users(bmain, scene, flag);
|
||||
}
|
||||
|
||||
BKE_main_id_clear_newpoins(bmain);
|
||||
|
|
|
@ -260,7 +260,7 @@ static int node_group_ungroup(Main *bmain, bNodeTree *ntree, bNode *gnode)
|
|||
waction = wgroup->adt->action = BKE_action_copy(bmain, wgroup->adt->action);
|
||||
|
||||
/* now perform the moving */
|
||||
BKE_animdata_separate_by_basepath(&wgroup->id, &ntree->id, &anim_basepaths);
|
||||
BKE_animdata_separate_by_basepath(bmain, &wgroup->id, &ntree->id, &anim_basepaths);
|
||||
|
||||
/* paths + their wrappers need to be freed */
|
||||
for (ld = anim_basepaths.first; ld; ld = ldn) {
|
||||
|
@ -397,7 +397,8 @@ void NODE_OT_group_ungroup(wmOperatorType *ot)
|
|||
/* ******************** Separate operator ********************** */
|
||||
|
||||
/* returns 1 if its OK */
|
||||
static int node_group_separate_selected(bNodeTree *ntree, bNodeTree *ngroup, float offx, float offy, int make_copy)
|
||||
static int node_group_separate_selected(
|
||||
Main *bmain, bNodeTree *ntree, bNodeTree *ngroup, float offx, float offy, int make_copy)
|
||||
{
|
||||
bNodeLink *link, *link_next;
|
||||
bNode *node, *node_next, *newnode;
|
||||
|
@ -492,7 +493,7 @@ static int node_group_separate_selected(bNodeTree *ntree, bNodeTree *ngroup, flo
|
|||
LinkData *ld, *ldn = NULL;
|
||||
|
||||
/* now perform the moving */
|
||||
BKE_animdata_separate_by_basepath(&ngroup->id, &ntree->id, &anim_basepaths);
|
||||
BKE_animdata_separate_by_basepath(bmain, &ngroup->id, &ntree->id, &anim_basepaths);
|
||||
|
||||
/* paths + their wrappers need to be freed */
|
||||
for (ld = anim_basepaths.first; ld; ld = ldn) {
|
||||
|
@ -524,12 +525,13 @@ static const EnumPropertyItem node_group_separate_types[] = {
|
|||
|
||||
static int node_group_separate_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
SpaceNode *snode = CTX_wm_space_node(C);
|
||||
bNodeTree *ngroup, *nparent;
|
||||
int type = RNA_enum_get(op->ptr, "type");
|
||||
float offx, offy;
|
||||
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
|
||||
|
||||
/* are we inside of a group? */
|
||||
ngroup = snode->edittree;
|
||||
|
@ -543,13 +545,13 @@ static int node_group_separate_exec(bContext *C, wmOperator *op)
|
|||
|
||||
switch (type) {
|
||||
case NODE_GS_COPY:
|
||||
if (!node_group_separate_selected(nparent, ngroup, offx, offy, 1)) {
|
||||
if (!node_group_separate_selected(bmain, nparent, ngroup, offx, offy, 1)) {
|
||||
BKE_report(op->reports, RPT_WARNING, "Cannot separate nodes");
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
break;
|
||||
case NODE_GS_MOVE:
|
||||
if (!node_group_separate_selected(nparent, ngroup, offx, offy, 0)) {
|
||||
if (!node_group_separate_selected(bmain, nparent, ngroup, offx, offy, 0)) {
|
||||
BKE_report(op->reports, RPT_WARNING, "Cannot separate nodes");
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
@ -681,6 +683,7 @@ static int node_get_selected_minmax(bNodeTree *ntree, bNode *gnode, float *min,
|
|||
|
||||
static void node_group_make_insert_selected(const bContext *C, bNodeTree *ntree, bNode *gnode)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
bNodeTree *ngroup = (bNodeTree *)gnode->id;
|
||||
bNodeLink *link, *linkn;
|
||||
bNode *node, *nextn;
|
||||
|
@ -742,7 +745,7 @@ static void node_group_make_insert_selected(const bContext *C, bNodeTree *ntree,
|
|||
if (ntree->adt) {
|
||||
LinkData *ld, *ldn = NULL;
|
||||
|
||||
BKE_animdata_separate_by_basepath(&ntree->id, &ngroup->id, &anim_basepaths);
|
||||
BKE_animdata_separate_by_basepath(bmain, &ntree->id, &ngroup->id, &anim_basepaths);
|
||||
|
||||
/* paths + their wrappers need to be freed */
|
||||
for (ld = anim_basepaths.first; ld; ld = ldn) {
|
||||
|
|
Loading…
Reference in New Issue