Dependency Graph: some refactoring which should have no user visible impact
besides performance in some cases. * DAG_scene_sort is now removed and replaced by DAG_relations_tag_update in most cases. This will clear the dependency graph, and only rebuild it right before it's needed again when the scene is re-evaluated. This is done because DAG_scene_sort is slow when called many times from python operators. Further the scene argument is not needed because most operations can potentially affect more than the current scene. * DAG_scene_relations_update will now rebuild the dependency graph if it's not there yet, and DAG_scene_relations_rebuild will force a rebuild for the rare cases that need it. * Remove various places where ob->recalc was set manually. This should go through DAG_id_tag_update() in nearly all cases instead since this is now a fast operation. Also removed DAG_ids_flush_update that goes along with such manual tagging of ob->recalc.
This commit is contained in:
parent
074565330d
commit
20220d47e3
@ -99,8 +99,16 @@ int is_acyclic(struct DagForest *dag);
|
||||
/* ********** API *************** */
|
||||
/* Note that the DAG never executes changes in Objects, only sets flags in Objects */
|
||||
|
||||
/* (re)-create dependency graph for scene */
|
||||
void DAG_scene_sort(struct Main *bmain, struct Scene *sce);
|
||||
/* clear all dependency graphs, call this when changing relations between objects.
|
||||
* the dependency graphs will be rebuilt just before they are used to avoid them
|
||||
* getting rebuild many times during operators */
|
||||
void DAG_relations_tag_update(struct Main *bmain);
|
||||
|
||||
/* (re)-create the dependency graph before using it */
|
||||
void DAG_scene_relations_update(struct Main *bmain, struct Scene *sce);
|
||||
|
||||
/* force an immediate rebuild of the dependency graph, only needed in rare cases */
|
||||
void DAG_scene_relations_rebuild(struct Main *bmain, struct Scene *scene);
|
||||
|
||||
/* flag all objects that need recalc because they're animated */
|
||||
void DAG_scene_update_flags(struct Main *bmain, struct Scene *sce, unsigned int lay, const short do_time);
|
||||
@ -109,9 +117,6 @@ void DAG_scene_flush_update(struct Main *bmain, struct Scene *sce, unsigned i
|
||||
/* tag objects for update on file load */
|
||||
void DAG_on_visible_update(struct Main *bmain, const short do_time);
|
||||
|
||||
/* when setting manual RECALC flags, call this afterwards */
|
||||
void DAG_ids_flush_update(struct Main *bmain, int time);
|
||||
|
||||
/* tag datablock to get updated for the next redraw */
|
||||
void DAG_id_tag_update(struct ID *id, short flag);
|
||||
/* flush all tagged updates */
|
||||
|
@ -320,7 +320,7 @@ static void motionpaths_calc_optimise_depsgraph(Scene *scene, ListBase *targets)
|
||||
}
|
||||
|
||||
/* "brew me a list that's sorted a bit faster now depsy" */
|
||||
DAG_scene_sort(G.main, scene);
|
||||
DAG_scene_relations_rebuild(G.main, scene);
|
||||
}
|
||||
|
||||
/* update scene for current frame */
|
||||
|
@ -1000,8 +1000,7 @@ int BKE_copybuffer_paste(bContext *C, char *libname, ReportList *reports)
|
||||
flag_all_listbases_ids(LIB_PRE_EXISTING, 0);
|
||||
|
||||
/* recreate dependency graph to include new objects */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
BLO_blendhandle_close(bh);
|
||||
/* remove library... */
|
||||
|
@ -4261,7 +4261,7 @@ static void con_unlink_refs_cb(bConstraint *UNUSED(con), ID **idpoin, short isRe
|
||||
|
||||
/* Free data of a specific constraint if it has any info.
|
||||
* be sure to run BIK_clear_data() when freeing an IK constraint,
|
||||
* unless DAG_scene_sort is called.
|
||||
* unless DAG_relations_tag_update is called.
|
||||
*/
|
||||
void BKE_free_constraint_data(bConstraint *con)
|
||||
{
|
||||
|
@ -837,7 +837,6 @@ DagForest *build_dag(Main *bmain, Scene *sce, short mask)
|
||||
DagAdjList *itA;
|
||||
|
||||
dag = sce->theDag;
|
||||
sce->dagisvalid = 1;
|
||||
if (dag)
|
||||
free_forest(dag);
|
||||
else {
|
||||
@ -1846,8 +1845,18 @@ static void scene_sort_groups(Main *bmain, Scene *sce)
|
||||
}
|
||||
}
|
||||
|
||||
/* free the depency graph */
|
||||
static void dag_scene_free(Scene *sce)
|
||||
{
|
||||
if (sce->theDag) {
|
||||
free_forest(sce->theDag);
|
||||
MEM_freeN(sce->theDag);
|
||||
sce->theDag = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* sort the base list on dependency order */
|
||||
void DAG_scene_sort(Main *bmain, Scene *sce)
|
||||
static void dag_scene_build(Main *bmain, Scene *sce)
|
||||
{
|
||||
DagNode *node, *rootnode;
|
||||
DagNodeQueue *nqueue;
|
||||
@ -1856,7 +1865,7 @@ void DAG_scene_sort(Main *bmain, Scene *sce)
|
||||
int skip = 0;
|
||||
ListBase tempbase;
|
||||
Base *base;
|
||||
|
||||
|
||||
tempbase.first = tempbase.last = NULL;
|
||||
|
||||
build_dag(bmain, sce, DAG_RL_ALL_BUT_DATA);
|
||||
@ -1936,10 +1945,34 @@ void DAG_scene_sort(Main *bmain, Scene *sce)
|
||||
printf(" %s\n", base->object->id.name);
|
||||
}
|
||||
}
|
||||
|
||||
/* temporal...? */
|
||||
sce->recalc |= SCE_PRV_CHANGED; /* test for 3d preview */
|
||||
}
|
||||
|
||||
/* clear all dependency graphs */
|
||||
void DAG_relations_tag_update(Main *bmain)
|
||||
{
|
||||
Scene *sce;
|
||||
|
||||
for (sce = bmain->scene.first; sce; sce = sce->id.next)
|
||||
dag_scene_free(sce);
|
||||
}
|
||||
|
||||
/* rebuild dependency graph only for a given scene */
|
||||
void DAG_scene_relations_rebuild(Main *bmain, Scene *sce)
|
||||
{
|
||||
dag_scene_free(sce);
|
||||
DAG_scene_relations_update(bmain, sce);
|
||||
}
|
||||
|
||||
/* create dependency graph if it was cleared or didn't exist yet */
|
||||
void DAG_scene_relations_update(Main *bmain, Scene *sce)
|
||||
{
|
||||
if (!sce->theDag)
|
||||
dag_scene_build(bmain, sce);
|
||||
}
|
||||
|
||||
static void lib_id_recalc_tag(Main *bmain, ID *id)
|
||||
{
|
||||
id->flag |= LIB_ID_RECALC;
|
||||
@ -2177,7 +2210,7 @@ void DAG_scene_flush_update(Main *bmain, Scene *sce, unsigned int lay, const sho
|
||||
|
||||
if (sce->theDag == NULL) {
|
||||
printf("DAG zero... not allowed to happen!\n");
|
||||
DAG_scene_sort(bmain, sce);
|
||||
DAG_scene_relations_update(bmain, sce);
|
||||
}
|
||||
|
||||
firstnode = sce->theDag->DagNode.first; /* always scene node */
|
||||
@ -2545,20 +2578,6 @@ static void dag_current_scene_layers(Main *bmain, ListBase *lb)
|
||||
}
|
||||
}
|
||||
|
||||
void DAG_ids_flush_update(Main *bmain, int time)
|
||||
{
|
||||
ListBase listbase;
|
||||
DagSceneLayer *dsl;
|
||||
|
||||
/* get list of visible scenes and layers */
|
||||
dag_current_scene_layers(bmain, &listbase);
|
||||
|
||||
for (dsl = listbase.first; dsl; dsl = dsl->next)
|
||||
DAG_scene_flush_update(bmain, dsl->scene, dsl->layer, time);
|
||||
|
||||
BLI_freelistN(&listbase);
|
||||
}
|
||||
|
||||
void DAG_on_visible_update(Main *bmain, const short do_time)
|
||||
{
|
||||
ListBase listbase;
|
||||
@ -3169,7 +3188,7 @@ void DAG_print_dependencies(Main *bmain, Scene *scene, Object *ob)
|
||||
}
|
||||
else {
|
||||
printf("\nDEPENDENCY RELATIONS for %s\n\n", scene->id.name + 2);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_scene_relations_rebuild(bmain, scene);
|
||||
}
|
||||
|
||||
dag_print_dependencies = 0;
|
||||
|
@ -74,6 +74,7 @@
|
||||
#include "BKE_bullet.h"
|
||||
#include "BKE_colortools.h"
|
||||
#include "BKE_deform.h"
|
||||
#include "BKE_depsgraph.h"
|
||||
#include "BKE_DerivedMesh.h"
|
||||
#include "BKE_animsys.h"
|
||||
#include "BKE_anim.h"
|
||||
@ -406,7 +407,8 @@ static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Objec
|
||||
|
||||
if (*obpoin == unlinkOb) {
|
||||
*obpoin = NULL;
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; // XXX: should this just be OB_RECALC_DATA?
|
||||
// XXX: should this just be OB_RECALC_DATA?
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
}
|
||||
|
||||
@ -440,14 +442,14 @@ void BKE_object_unlink(Object *ob)
|
||||
obt->proxy = NULL;
|
||||
if (obt->proxy_from == ob) {
|
||||
obt->proxy_from = NULL;
|
||||
obt->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_OB);
|
||||
}
|
||||
if (obt->proxy_group == ob)
|
||||
obt->proxy_group = NULL;
|
||||
|
||||
if (obt->parent == ob) {
|
||||
obt->parent = NULL;
|
||||
obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
|
||||
modifiers_foreachObjectLink(obt, unlink_object__unlinkModifierLinks, ob);
|
||||
@ -457,15 +459,15 @@ void BKE_object_unlink(Object *ob)
|
||||
|
||||
if (cu->bevobj == ob) {
|
||||
cu->bevobj = NULL;
|
||||
obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
if (cu->taperobj == ob) {
|
||||
cu->taperobj = NULL;
|
||||
obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
if (cu->textoncurve == ob) {
|
||||
cu->textoncurve = NULL;
|
||||
obt->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
}
|
||||
else if (obt->type == OB_ARMATURE && obt->pose) {
|
||||
@ -483,7 +485,7 @@ void BKE_object_unlink(Object *ob)
|
||||
if (ct->tar == ob) {
|
||||
ct->tar = NULL;
|
||||
ct->subtarget[0] = '\0';
|
||||
obt->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
|
||||
}
|
||||
}
|
||||
|
||||
@ -497,7 +499,7 @@ void BKE_object_unlink(Object *ob)
|
||||
}
|
||||
else if (ELEM(OB_MBALL, ob->type, obt->type)) {
|
||||
if (BKE_mball_is_basis_for(obt, ob))
|
||||
obt->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
|
||||
}
|
||||
|
||||
sca_remove_ob_poin(obt, ob);
|
||||
@ -514,7 +516,7 @@ void BKE_object_unlink(Object *ob)
|
||||
if (ct->tar == ob) {
|
||||
ct->tar = NULL;
|
||||
ct->subtarget[0] = '\0';
|
||||
obt->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
|
||||
}
|
||||
}
|
||||
|
||||
@ -526,12 +528,12 @@ void BKE_object_unlink(Object *ob)
|
||||
/* object is deflector or field */
|
||||
if (ob->pd) {
|
||||
if (obt->soft)
|
||||
obt->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
|
||||
|
||||
/* cloth */
|
||||
for (md = obt->modifiers.first; md; md = md->next)
|
||||
if (md->type == eModifierType_Cloth)
|
||||
obt->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
|
||||
}
|
||||
|
||||
/* strips */
|
||||
@ -560,14 +562,14 @@ void BKE_object_unlink(Object *ob)
|
||||
for (; pt; pt = pt->next) {
|
||||
if (pt->ob == ob) {
|
||||
pt->ob = NULL;
|
||||
obt->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (tpsys->target_ob == ob) {
|
||||
tpsys->target_ob = NULL;
|
||||
obt->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
|
||||
}
|
||||
|
||||
if (tpsys->part->dup_ob == ob)
|
||||
@ -602,7 +604,7 @@ void BKE_object_unlink(Object *ob)
|
||||
}
|
||||
}
|
||||
if (ob->pd)
|
||||
obt->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obt->id, OB_RECALC_DATA);
|
||||
}
|
||||
|
||||
obt = obt->id.next;
|
||||
@ -970,7 +972,7 @@ Object *BKE_object_add(struct Scene *scene, int type)
|
||||
base = BKE_scene_base_add(scene, ob);
|
||||
BKE_scene_base_deselect_all(scene);
|
||||
BKE_scene_base_select(scene, base);
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
return ob;
|
||||
}
|
||||
@ -1480,7 +1482,8 @@ void BKE_object_make_proxy(Object *ob, Object *target, Object *gob)
|
||||
ob->proxy_group = gob;
|
||||
id_lib_extern(&target->id);
|
||||
|
||||
ob->recalc = target->recalc = OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
DAG_id_tag_update(&target->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
/* copy transform
|
||||
* - gob means this proxy comes from a group, just apply the matrix
|
||||
|
@ -3509,12 +3509,12 @@ ModifierData *object_add_particle_system(Scene *scene, Object *ob, const char *n
|
||||
psys->flag = PSYS_ENABLED | PSYS_CURRENT;
|
||||
psys->cfra = BKE_scene_frame_get_from_ctime(scene, CFRA + 1);
|
||||
|
||||
DAG_scene_sort(G.main, scene);
|
||||
DAG_relations_tag_update(G.main);
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
|
||||
return md;
|
||||
}
|
||||
void object_remove_particle_system(Scene *scene, Object *ob)
|
||||
void object_remove_particle_system(Scene *UNUSED(scene), Object *ob)
|
||||
{
|
||||
ParticleSystem *psys = psys_get_current(ob);
|
||||
ParticleSystemModifierData *psmd;
|
||||
@ -3552,7 +3552,7 @@ void object_remove_particle_system(Scene *scene, Object *ob)
|
||||
else
|
||||
ob->mode &= ~OB_MODE_PARTICLE_EDIT;
|
||||
|
||||
DAG_scene_sort(G.main, scene);
|
||||
DAG_relations_tag_update(G.main);
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
}
|
||||
static void default_particle_settings(ParticleSettings *part)
|
||||
|
@ -649,12 +649,11 @@ void BKE_scene_set_background(Main *bmain, Scene *scene)
|
||||
}
|
||||
|
||||
/* sort baselist */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_scene_relations_rebuild(bmain, scene);
|
||||
|
||||
/* ensure dags are built for sets */
|
||||
for (sce = scene->set; sce; sce = sce->set)
|
||||
if (sce->theDag == NULL)
|
||||
DAG_scene_sort(bmain, sce);
|
||||
for (sce = scene; sce; sce = sce->set)
|
||||
DAG_scene_relations_update(bmain, sce);
|
||||
|
||||
/* copy layers and flags from bases to objects */
|
||||
for (base = scene->base.first; base; base = base->next) {
|
||||
@ -1150,9 +1149,15 @@ static void scene_update_tagged_recursive(Main *bmain, Scene *scene, Scene *scen
|
||||
/* this is called in main loop, doing tagged updates before redraw */
|
||||
void BKE_scene_update_tagged(Main *bmain, Scene *scene)
|
||||
{
|
||||
Scene *sce_iter;
|
||||
|
||||
/* keep this first */
|
||||
BLI_callback_exec(bmain, &scene->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
|
||||
|
||||
/* (re-)build dependency graph if needed */
|
||||
for (sce_iter = scene; sce_iter; sce_iter = sce_iter->set)
|
||||
DAG_scene_relations_update(bmain, sce_iter);
|
||||
|
||||
/* flush recalc flags to dependencies */
|
||||
DAG_ids_flush_tagged(bmain);
|
||||
|
||||
@ -1203,10 +1208,8 @@ void BKE_scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
|
||||
/* clear animation overrides */
|
||||
/* XXX TODO... */
|
||||
|
||||
for (sce_iter = sce; sce_iter; sce_iter = sce_iter->set) {
|
||||
if (sce_iter->theDag == NULL)
|
||||
DAG_scene_sort(bmain, sce_iter);
|
||||
}
|
||||
for (sce_iter = sce; sce_iter; sce_iter = sce_iter->set)
|
||||
DAG_scene_relations_update(bmain, sce_iter);
|
||||
|
||||
/* flush recalc flags to dependencies, if we were only changing a frame
|
||||
* this would not be necessary, but if a user or a script has modified
|
||||
|
@ -117,6 +117,7 @@
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_curve.h"
|
||||
#include "BKE_deform.h"
|
||||
#include "BKE_depsgraph.h"
|
||||
#include "BKE_effect.h"
|
||||
#include "BKE_fcurve.h"
|
||||
#include "BKE_global.h" // for G
|
||||
@ -2754,7 +2755,7 @@ static void lib_link_pose(FileData *fd, Object *ob, bPose *pose)
|
||||
}
|
||||
|
||||
if (rebuild) {
|
||||
ob->recalc = (OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
pose->flag |= POSE_RECALC;
|
||||
}
|
||||
}
|
||||
@ -5115,7 +5116,6 @@ static void direct_link_scene(FileData *fd, Scene *sce)
|
||||
RigidBodyWorld *rbw;
|
||||
|
||||
sce->theDag = NULL;
|
||||
sce->dagisvalid = 0;
|
||||
sce->obedit = NULL;
|
||||
sce->stats = NULL;
|
||||
sce->fps_info = NULL;
|
||||
@ -10114,7 +10114,7 @@ static void give_base_to_groups(Main *mainvar, Scene *scene)
|
||||
base = BKE_scene_base_add(scene, ob);
|
||||
base->flag |= SELECT;
|
||||
base->object->flag= base->flag;
|
||||
ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
scene->basact = base;
|
||||
|
||||
/* assign the group */
|
||||
|
@ -1888,7 +1888,7 @@ Object *AnimationImporter::get_joint_object(COLLADAFW::Node *root, COLLADAFW::No
|
||||
job->lay = BKE_scene_base_find(scene, job)->lay = 2;
|
||||
|
||||
mul_v3_fl(job->size, 0.5f);
|
||||
job->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&job->id, OB_RECALC_OB);
|
||||
|
||||
verify_adt_action((ID *)&job->id, 1);
|
||||
|
||||
@ -1909,14 +1909,14 @@ Object *AnimationImporter::get_joint_object(COLLADAFW::Node *root, COLLADAFW::No
|
||||
if (par_job) {
|
||||
job->parent = par_job;
|
||||
|
||||
par_job->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&par_job->id, OB_RECALC_OB);
|
||||
job->parsubstr[0] = 0;
|
||||
}
|
||||
|
||||
BKE_object_where_is_calc(scene, job);
|
||||
|
||||
// after parenting and layer change
|
||||
DAG_scene_sort(CTX_data_main(C), scene);
|
||||
DAG_relations_tag_update(CTX_data_main(C));
|
||||
|
||||
joint_objects[node->getUniqueId()] = job;
|
||||
}
|
||||
|
@ -70,7 +70,6 @@ public:
|
||||
//void operator()(Object *ob);
|
||||
|
||||
private:
|
||||
Scene *scene;
|
||||
UnitConverter converter;
|
||||
const ExportSettings *export_settings;
|
||||
|
||||
|
@ -230,8 +230,7 @@ void DocumentImporter::finish()
|
||||
}
|
||||
|
||||
// update scene
|
||||
DAG_scene_sort(bmain, sce);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(mContext, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
}
|
||||
@ -242,8 +241,7 @@ void DocumentImporter::finish()
|
||||
armature_importer.set_tags_map(this->uid_tags_map);
|
||||
armature_importer.make_armatures(mContext);
|
||||
armature_importer.make_shape_keys();
|
||||
DAG_scene_sort(bmain, sce);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
#if 0
|
||||
armature_importer.fix_animation();
|
||||
@ -277,8 +275,7 @@ void DocumentImporter::finish()
|
||||
}
|
||||
libnode_ob.clear();
|
||||
|
||||
DAG_scene_sort(bmain, sce);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
}
|
||||
|
||||
@ -389,7 +386,7 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
|
||||
fprintf(stderr, "create <instance_node> under node id=%s from node id=%s\n", instance_node ? instance_node->getOriginalId().c_str() : NULL, source_node ? source_node->getOriginalId().c_str() : NULL);
|
||||
|
||||
Object *obn = BKE_object_copy(source_ob);
|
||||
obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
BKE_scene_base_add(sce, obn);
|
||||
|
||||
if (instance_node) {
|
||||
@ -416,8 +413,7 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
|
||||
anim_importer.read_node_transform(source_node, obn);
|
||||
}
|
||||
|
||||
/*DAG_scene_sort(CTX_data_main(mContext), sce);
|
||||
DAG_ids_flush_update(CTX_data_main(mContext), 0);*/
|
||||
/*DAG_relations_tag_update(CTX_data_main(mContext));*/
|
||||
|
||||
COLLADAFW::NodePointerArray &children = source_node->getChildNodes();
|
||||
if (children.getCount()) {
|
||||
|
@ -237,10 +237,9 @@ void SkinInfo::link_armature(bContext *C, Object *ob, std::map<COLLADAFW::Unique
|
||||
BKE_object_workob_calc_parent(scene, ob, &workob);
|
||||
invert_m4_m4(ob->parentinv, workob.obmat);
|
||||
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
#endif
|
||||
|
||||
|
@ -85,7 +85,6 @@ int bc_test_parent_loop(Object *par, Object *ob)
|
||||
int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
|
||||
{
|
||||
Object workob;
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *sce = CTX_data_scene(C);
|
||||
|
||||
if (!par || bc_test_parent_loop(par, ob))
|
||||
@ -113,12 +112,11 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
|
||||
BKE_object_workob_calc_parent(sce, ob, &workob);
|
||||
invert_m4_m4(ob->parentinv, workob.obmat);
|
||||
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
|
||||
par->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
|
||||
DAG_id_tag_update(&par->id, OB_RECALC_OB);
|
||||
|
||||
/** done once after import
|
||||
DAG_scene_sort(bmain, sce);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
*/
|
||||
|
||||
@ -132,7 +130,7 @@ Object *bc_add_object(Scene *scene, int type, const char *name)
|
||||
|
||||
ob->data = BKE_object_obdata_add_from_type(type);
|
||||
ob->lay = scene->lay;
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
BKE_scene_base_select(scene, BKE_scene_base_add(scene, ob));
|
||||
|
||||
@ -367,4 +365,4 @@ void bc_match_scale(std::vector<Object *> *objects_done,
|
||||
BKE_object_apply_mat4(ob, ob->obmat, 0, 0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -489,8 +489,6 @@ static int add_driver_button_exec(bContext *C, wmOperator *op)
|
||||
/* send updates */
|
||||
uiContextAnimUpdate(C);
|
||||
|
||||
DAG_ids_flush_update(CTX_data_main(C), 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL); // XXX
|
||||
}
|
||||
|
||||
@ -541,8 +539,6 @@ static int remove_driver_button_exec(bContext *C, wmOperator *op)
|
||||
/* send updates */
|
||||
uiContextAnimUpdate(C);
|
||||
|
||||
DAG_ids_flush_update(CTX_data_main(C), 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL); // XXX
|
||||
}
|
||||
|
||||
|
@ -1215,7 +1215,6 @@ static int modify_key_op_poll(bContext *C)
|
||||
|
||||
static int insert_key_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
KeyingSet *ks = NULL;
|
||||
int type = RNA_enum_get(op->ptr, "type");
|
||||
@ -1261,9 +1260,6 @@ static int insert_key_exec(bContext *C, wmOperator *op)
|
||||
else
|
||||
BKE_report(op->reports, RPT_WARNING, "Keying set failed to insert any keyframes");
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
@ -1371,7 +1367,6 @@ void ANIM_OT_keyframe_insert_menu(wmOperatorType *ot)
|
||||
|
||||
static int delete_key_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
KeyingSet *ks = NULL;
|
||||
int type = RNA_enum_get(op->ptr, "type");
|
||||
@ -1417,9 +1412,6 @@ static int delete_key_exec(bContext *C, wmOperator *op)
|
||||
else
|
||||
BKE_report(op->reports, RPT_WARNING, "Keying set failed to remove any keyframes");
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
@ -1459,8 +1451,6 @@ void ANIM_OT_keyframe_delete(wmOperatorType *ot)
|
||||
|
||||
static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
|
||||
CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
|
||||
{
|
||||
/* just those in active action... */
|
||||
@ -1505,12 +1495,11 @@ static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
}
|
||||
|
||||
/* update... */
|
||||
ob->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -1536,7 +1525,6 @@ void ANIM_OT_keyframe_clear_v3d(wmOperatorType *ot)
|
||||
|
||||
static int delete_key_v3d_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
float cfra = (float)CFRA;
|
||||
|
||||
@ -1563,12 +1551,11 @@ static int delete_key_v3d_exec(bContext *C, wmOperator *op)
|
||||
|
||||
/* report success (or failure) */
|
||||
BKE_reportf(op->reports, RPT_INFO, "Object '%s' successfully had %d keyframes removed", id->name + 2, success);
|
||||
ob->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -1596,7 +1583,6 @@ void ANIM_OT_keyframe_delete_v3d(wmOperatorType *ot)
|
||||
|
||||
static int insert_key_button_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
PointerRNA ptr = {{NULL}};
|
||||
PropertyRNA *prop = NULL;
|
||||
@ -1655,8 +1641,6 @@ static int insert_key_button_exec(bContext *C, wmOperator *op)
|
||||
/* send updates */
|
||||
uiContextAnimUpdate(C);
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
/* send notifiers that keyframes have been changed */
|
||||
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
|
||||
}
|
||||
@ -1686,7 +1670,6 @@ void ANIM_OT_keyframe_insert_button(wmOperatorType *ot)
|
||||
|
||||
static int delete_key_button_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
PointerRNA ptr = {{NULL}};
|
||||
PropertyRNA *prop = NULL;
|
||||
@ -1728,8 +1711,6 @@ static int delete_key_button_exec(bContext *C, wmOperator *op)
|
||||
/* send updates */
|
||||
uiContextAnimUpdate(C);
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
/* send notifiers that keyframes have been changed */
|
||||
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
|
||||
}
|
||||
@ -1760,7 +1741,6 @@ void ANIM_OT_keyframe_delete_button(wmOperatorType *ot)
|
||||
|
||||
static int clear_key_button_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
PointerRNA ptr = {{NULL}};
|
||||
PropertyRNA *prop = NULL;
|
||||
char *path;
|
||||
@ -1800,8 +1780,6 @@ static int clear_key_button_exec(bContext *C, wmOperator *op)
|
||||
/* send updates */
|
||||
uiContextAnimUpdate(C);
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
/* send notifiers that keyframes have been changed */
|
||||
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
|
||||
}
|
||||
|
@ -289,7 +289,6 @@ void ANIM_OT_keying_set_path_remove(wmOperatorType *ot)
|
||||
|
||||
static int add_keyingset_button_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
KeyingSet *ks = NULL;
|
||||
PropertyRNA *prop = NULL;
|
||||
@ -360,7 +359,6 @@ static int add_keyingset_button_exec(bContext *C, wmOperator *op)
|
||||
|
||||
if (success) {
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_KEYINGSET, NULL);
|
||||
|
||||
/* show notification/report header, so that users notice that something changed */
|
||||
@ -392,7 +390,6 @@ void ANIM_OT_keyingset_button_add(wmOperatorType *ot)
|
||||
|
||||
static int remove_keyingset_button_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
KeyingSet *ks = NULL;
|
||||
PropertyRNA *prop = NULL;
|
||||
@ -442,7 +439,6 @@ static int remove_keyingset_button_exec(bContext *C, wmOperator *op)
|
||||
|
||||
if (success) {
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_KEYINGSET, NULL);
|
||||
|
||||
/* show warning */
|
||||
@ -1006,7 +1002,8 @@ int ANIM_apply_keyingset(bContext *C, ListBase *dsources, bAction *act, KeyingSe
|
||||
{
|
||||
Object *ob = (Object *)ksp->id;
|
||||
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME; // XXX: only object transforms only?
|
||||
// XXX: only object transforms?
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1004,7 +1004,7 @@ int join_armature_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(bmain, scene); /* because we removed object(s) */
|
||||
DAG_relations_tag_update(bmain); /* because we removed object(s) */
|
||||
|
||||
ED_armature_from_edit(ob);
|
||||
ED_armature_edit_free(ob);
|
||||
@ -1217,7 +1217,7 @@ static int separate_armature_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
/* 2) duplicate base */
|
||||
newbase = ED_object_add_duplicate(bmain, scene, oldbase, USER_DUP_ARM); /* only duplicate linked armature */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
newob = newbase->object;
|
||||
newbase->flag &= ~SELECT;
|
||||
|
@ -1395,7 +1395,7 @@ static int separate_exec(bContext *C, wmOperator *op)
|
||||
|
||||
/* 1. duplicate the object and data */
|
||||
newbase = ED_object_add_duplicate(bmain, scene, oldbase, 0); /* 0 = fully linked */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
ED_base_object_select(newbase, BA_DESELECT);
|
||||
newob = newbase->object;
|
||||
@ -6218,7 +6218,7 @@ int join_curve_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
cu = ob->data;
|
||||
BLI_movelisttolist(&cu->nurb, &tempbase);
|
||||
|
||||
DAG_scene_sort(bmain, scene); // because we removed object(s), call before editmode!
|
||||
DAG_relations_tag_update(bmain); // because we removed object(s), call before editmode!
|
||||
|
||||
ED_object_enter_editmode(C, EM_WAITCURSOR);
|
||||
ED_object_exit_editmode(C, EM_FREEDATA | EM_WAITCURSOR | EM_DO_UNDO);
|
||||
|
@ -1048,9 +1048,8 @@ static void do_constraint_panels(bContext *C, void *ob_pt, int event)
|
||||
case B_CONSTRAINT_CHANGETARGET:
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
if (ob->pose) ob->pose->flag |= POSE_RECALC; /* checks & sorts pose channels */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
@ -2389,7 +2389,7 @@ static void shape_propagate(BMEditMesh *em, wmOperator *op)
|
||||
//TAG Mesh Objects that share this data
|
||||
for (base = scene->base.first; base; base = base->next) {
|
||||
if (base->object && base->object->data == me) {
|
||||
base->object->recalc = OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -3042,7 +3042,7 @@ static int mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMesh
|
||||
CustomData_bmesh_init_pool(&bm_new->pdata, bm_mesh_allocsize_default.totface, BM_FACE);
|
||||
|
||||
base_new = ED_object_add_duplicate(bmain, scene, base_old, USER_DUP_MESH);
|
||||
/* DAG_scene_sort(bmain, scene); */ /* normally would call directly after but in this case delay recalc */
|
||||
/* DAG_relations_tag_update(bmain); */ /* normally would call directly after but in this case delay recalc */
|
||||
assign_matarar(base_new->object, give_matarar(obedit), *give_totcolp(obedit)); /* new in 2.5 */
|
||||
|
||||
ED_base_object_select(base_new, BA_SELECT);
|
||||
@ -3276,7 +3276,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
|
||||
|
||||
if (retval) {
|
||||
/* delay depsgraph recalc until all objects are duplicated */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
@ -559,7 +559,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
|
||||
DAG_scene_sort(bmain, scene); // removed objects, need to rebuild dag before editmode call
|
||||
DAG_relations_tag_update(bmain); // removed objects, need to rebuild dag
|
||||
|
||||
#if 0
|
||||
ED_object_enter_editmode(C, EM_WAITCURSOR);
|
||||
|
@ -381,7 +381,7 @@ Object *ED_object_add_type(bContext *C, int type, const float loc[3], const floa
|
||||
ED_object_base_init_transform(C, BASACT, loc, rot);
|
||||
|
||||
DAG_id_type_tag(bmain, ID_OB);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
if (ob->data) {
|
||||
ED_render_id_flush_update(bmain, ob->data);
|
||||
}
|
||||
@ -469,7 +469,7 @@ static int effector_add_exec(bContext *C, wmOperator *op)
|
||||
|
||||
ob->pd = object_add_collision_fields(type);
|
||||
|
||||
DAG_scene_sort(CTX_data_main(C), CTX_data_scene(C));
|
||||
DAG_relations_tag_update(CTX_data_main(C));
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@ -835,9 +835,9 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
|
||||
id_lib_extern(&group->id);
|
||||
|
||||
/* works without this except if you try render right after, see: 22027 */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, CTX_data_scene(C));
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@ -993,13 +993,12 @@ static int object_delete_exec(bContext *C, wmOperator *op)
|
||||
if (scene->id.flag & LIB_DOIT) {
|
||||
scene->id.flag &= ~LIB_DOIT;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
|
||||
}
|
||||
}
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@ -1260,8 +1259,7 @@ static int object_duplicates_make_real_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_SCENE, scene);
|
||||
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
|
||||
|
||||
@ -1325,7 +1323,7 @@ static Base *duplibase_for_convert(Scene *scene, Base *base, Object *ob)
|
||||
}
|
||||
|
||||
obn = BKE_object_copy(ob);
|
||||
obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
basen = MEM_mallocN(sizeof(Base), "duplibase");
|
||||
*basen = *base;
|
||||
@ -1427,7 +1425,7 @@ static int convert_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
else {
|
||||
newob = ob;
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
|
||||
/* make new mesh data from the original copy */
|
||||
@ -1492,7 +1490,7 @@ static int convert_exec(bContext *C, wmOperator *op)
|
||||
for (ob1 = bmain->object.first; ob1; ob1 = ob1->id.next) {
|
||||
if (ob1->data == ob->data) {
|
||||
ob1->type = OB_CURVE;
|
||||
ob1->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob1->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1623,7 +1621,7 @@ static int convert_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
/* delete object should renew depsgraph */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
// XXX ED_object_enter_editmode(C, 0);
|
||||
@ -1639,7 +1637,7 @@ static int convert_exec(bContext *C, wmOperator *op)
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_DATA, BASACT->object);
|
||||
}
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, scene);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
|
||||
|
||||
@ -1691,7 +1689,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
|
||||
}
|
||||
else {
|
||||
obn = BKE_object_copy(ob);
|
||||
obn->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
basen = MEM_mallocN(sizeof(Base), "duplibase");
|
||||
*basen = *base;
|
||||
@ -1816,7 +1814,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
|
||||
}
|
||||
break;
|
||||
case OB_ARMATURE:
|
||||
obn->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&obn->id, OB_RECALC_DATA);
|
||||
if (obn->pose)
|
||||
obn->pose->flag |= POSE_RECALC;
|
||||
if (dupflag & USER_DUP_ARM) {
|
||||
@ -1906,7 +1904,7 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, Base *base
|
||||
/* single object duplicate, if dupflag==0, fully linked, else it uses the flags given */
|
||||
/* leaves selection of base/object unaltered.
|
||||
* note: don't call this within a loop since clear_* funcs loop over the entire database.
|
||||
* note: caller must do DAG_scene_sort(bmain, scene);
|
||||
* note: caller must do DAG_relations_tag_update(bmain);
|
||||
* this is not done automatic since we may duplicate many objects in a batch */
|
||||
Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag)
|
||||
{
|
||||
@ -1927,7 +1925,7 @@ Base *ED_object_add_duplicate(Main *bmain, Scene *scene, Base *base, int dupflag
|
||||
BKE_object_relink(ob);
|
||||
set_sca_new_poins_ob(ob);
|
||||
|
||||
/* DAG_scene_sort(bmain, scene); */ /* caller must do */
|
||||
/* DAG_relations_tag_update(bmain); */ /* caller must do */
|
||||
|
||||
if (ob->data) {
|
||||
ED_render_id_flush_update(bmain, ob->data);
|
||||
@ -1971,8 +1969,7 @@ static int duplicate_exec(bContext *C, wmOperator *op)
|
||||
|
||||
copy_object_set_idnew(C, dupflag);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
|
||||
|
||||
@ -2047,8 +2044,7 @@ static int add_named_exec(bContext *C, wmOperator *op)
|
||||
|
||||
copy_object_set_idnew(C, dupflag);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
MEM_freeN(base);
|
||||
|
||||
|
@ -1151,7 +1151,7 @@ void ED_object_constraint_dependency_update(Main *bmain, Scene *scene, Object *o
|
||||
ED_object_constraint_update(ob);
|
||||
|
||||
if (ob->pose) ob->pose->flag |= POSE_RECALC; // checks & sorts pose channels
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
static int constraint_poll(bContext *C)
|
||||
@ -1310,7 +1310,6 @@ void CONSTRAINT_OT_move_up(wmOperatorType *ot)
|
||||
static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C));
|
||||
|
||||
/* free constraints for all selected bones */
|
||||
@ -1322,7 +1321,7 @@ static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
CTX_DATA_END;
|
||||
|
||||
/* force depsgraph to get recalculated since relationships removed */
|
||||
DAG_scene_sort(bmain, scene); /* sort order of objects */
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
/* note, calling BIK_clear_data() isn't needed here */
|
||||
|
||||
@ -1349,7 +1348,6 @@ void POSE_OT_constraints_clear(wmOperatorType *ot)
|
||||
static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
|
||||
/* do freeing */
|
||||
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
|
||||
@ -1360,7 +1358,7 @@ static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
CTX_DATA_END;
|
||||
|
||||
/* force depsgraph to get recalculated since relationships removed */
|
||||
DAG_scene_sort(bmain, scene); /* sort order of objects */
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
/* do updates */
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL);
|
||||
@ -1385,7 +1383,6 @@ void OBJECT_OT_constraints_clear(wmOperatorType *ot)
|
||||
static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
bPoseChannel *pchan = CTX_data_active_pose_bone(C);
|
||||
|
||||
/* don't do anything if bone doesn't exist or doesn't have any constraints */
|
||||
@ -1407,7 +1404,7 @@ static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
|
||||
CTX_DATA_END;
|
||||
|
||||
/* force depsgraph to get recalculated since new relationships added */
|
||||
DAG_scene_sort(bmain, scene); /* sort order of objects/bones */
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT, NULL);
|
||||
|
||||
@ -1432,7 +1429,6 @@ void POSE_OT_constraints_copy(wmOperatorType *ot)
|
||||
static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Object *obact = ED_object_active_context(C);
|
||||
|
||||
/* copy all constraints from active object to all selected objects */
|
||||
@ -1447,7 +1443,7 @@ static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
CTX_DATA_END;
|
||||
|
||||
/* force depsgraph to get recalculated since new relationships added */
|
||||
DAG_scene_sort(bmain, scene); /* sort order of objects */
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
/* notifiers for updates */
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_CONSTRAINT | NA_ADDED, NULL);
|
||||
@ -1615,7 +1611,6 @@ static short get_new_constraint_target(bContext *C, int con_type, Object **tar_o
|
||||
static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase *list, int type, short setTarget)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
bPoseChannel *pchan;
|
||||
bConstraint *con;
|
||||
|
||||
@ -1709,7 +1704,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
|
||||
|
||||
|
||||
/* force depsgraph to get recalculated since new relationships added */
|
||||
DAG_scene_sort(bmain, scene); /* sort order of objects */
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
if ((ob->type == OB_ARMATURE) && (pchan)) {
|
||||
ob->pose->flag |= POSE_RECALC; /* sort pose channels */
|
||||
|
@ -150,7 +150,7 @@ static int object_hide_view_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
}
|
||||
if (changed) {
|
||||
DAG_id_type_tag(bmain, ID_OB);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
|
||||
}
|
||||
|
||||
@ -207,7 +207,7 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op)
|
||||
|
||||
if (changed) {
|
||||
DAG_id_type_tag(bmain, ID_OB);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
|
||||
|
||||
@ -771,7 +771,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
|
||||
Base *base;
|
||||
Curve *cu, *cu1;
|
||||
Nurb *nu;
|
||||
int do_scene_sort = FALSE;
|
||||
bool do_depgraph_update = false;
|
||||
|
||||
if (scene->id.lib) return;
|
||||
|
||||
@ -798,7 +798,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
|
||||
for (base = FIRSTBASE; base; base = base->next) {
|
||||
if (base != BASACT) {
|
||||
if (TESTBASELIB(v3d, base)) {
|
||||
base->object->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
|
||||
|
||||
if (event == 1) { /* loc */
|
||||
copy_v3_v3(base->object->loc, ob->loc);
|
||||
@ -897,7 +897,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
|
||||
|
||||
BLI_strncpy(cu1->family, cu->family, sizeof(cu1->family));
|
||||
|
||||
base->object->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
|
||||
}
|
||||
}
|
||||
else if (event == 19) { /* bevel settings */
|
||||
@ -913,7 +913,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
|
||||
cu1->ext1 = cu->ext1;
|
||||
cu1->ext2 = cu->ext2;
|
||||
|
||||
base->object->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
|
||||
}
|
||||
}
|
||||
else if (event == 25) { /* curve resolution */
|
||||
@ -932,7 +932,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
|
||||
nu = nu->next;
|
||||
}
|
||||
|
||||
base->object->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
|
||||
}
|
||||
}
|
||||
else if (event == 21) {
|
||||
@ -948,7 +948,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
|
||||
}
|
||||
|
||||
modifier_copyData(md, tmd);
|
||||
base->object->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -956,7 +956,7 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
|
||||
/* Copy the constraint channels over */
|
||||
BKE_copy_constraints(&base->object->constraints, &ob->constraints, TRUE);
|
||||
|
||||
do_scene_sort = TRUE;
|
||||
do_depgraph_update = true;
|
||||
}
|
||||
else if (event == 23) {
|
||||
base->object->softflag = ob->softflag;
|
||||
@ -1008,10 +1008,8 @@ static void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
|
||||
}
|
||||
}
|
||||
|
||||
if (do_scene_sort)
|
||||
DAG_scene_sort(bmain, scene);
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
if (do_depgraph_update)
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
static void UNUSED_FUNCTION(copy_attr_menu) (Main * bmain, Scene * scene, View3D * v3d)
|
||||
|
@ -137,7 +137,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op)
|
||||
BKE_report(op->reports, RPT_WARNING, "Skipped some groups because of cycle detected");
|
||||
}
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -197,7 +197,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op)
|
||||
|
||||
if (!ok) BKE_report(op->reports, RPT_ERROR, "Active object contains no groups");
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -229,7 +229,7 @@ static int group_objects_remove_all_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -269,7 +269,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -319,7 +319,7 @@ static int group_create_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_GROUP | NA_EDITED, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
@ -516,7 +516,7 @@ static int add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *ob
|
||||
mul_serie_m4(hmd->parentinv, ob->imat, obedit->obmat, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -151,10 +151,10 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *sc
|
||||
ob->pd = object_add_collision_fields(0);
|
||||
|
||||
ob->pd->deflect = 1;
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
else if (type == eModifierType_Surface)
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
else if (type == eModifierType_Multires) {
|
||||
/* set totlvl from existing MDISPS layer if object already had it */
|
||||
multiresModifier_set_levels_from_disps((MultiresModifierData *)new_md, ob);
|
||||
@ -343,10 +343,7 @@ int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Ob
|
||||
}
|
||||
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
|
||||
/* sorting has to be done after the update so that dynamic systems can react properly */
|
||||
if (sort_depsgraph)
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -370,10 +367,7 @@ void ED_object_modifier_clear(Main *bmain, Scene *scene, Object *ob)
|
||||
}
|
||||
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
|
||||
/* sorting has to be done after the update so that dynamic systems can react properly */
|
||||
if (sort_depsgraph)
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
int ED_object_modifier_move_up(ReportList *reports, Object *ob, ModifierData *md)
|
||||
@ -522,7 +516,7 @@ int ED_object_modifier_convert(ReportList *UNUSED(reports), Main *bmain, Scene *
|
||||
}
|
||||
}
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -1831,7 +1825,7 @@ static int skin_armature_create_exec(bContext *C, wmOperator *op)
|
||||
|
||||
arm_md->object = arm_ob;
|
||||
arm_md->deformflag = ARM_DEF_VGROUP | ARM_DEF_QUATERNION;
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
}
|
||||
|
||||
|
@ -223,7 +223,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
|
||||
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
|
||||
{
|
||||
if (ob != obedit) {
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
par = obedit->parent;
|
||||
|
||||
while (par) {
|
||||
@ -260,7 +260,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT, NULL);
|
||||
|
||||
@ -364,7 +364,7 @@ static int make_proxy_exec(bContext *C, wmOperator *op)
|
||||
BKE_object_make_proxy(newob, ob, gob);
|
||||
|
||||
/* depsgraph flushes are needed for the new data */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
DAG_id_tag_update(&newob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, newob);
|
||||
}
|
||||
@ -512,14 +512,13 @@ void ED_object_parent_clear(Object *ob, int type)
|
||||
break;
|
||||
}
|
||||
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
}
|
||||
|
||||
/* note, poll should check for editable scene */
|
||||
static int parent_clear_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
int type = RNA_enum_get(op->ptr, "type");
|
||||
|
||||
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
|
||||
@ -528,8 +527,7 @@ static int parent_clear_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
|
||||
return OPERATOR_FINISHED;
|
||||
@ -597,7 +595,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object
|
||||
bPoseChannel *pchan = NULL;
|
||||
int pararm = ELEM4(partype, PAR_ARMATURE, PAR_ARMATURE_NAME, PAR_ARMATURE_ENVELOPE, PAR_ARMATURE_AUTO);
|
||||
|
||||
par->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&par->id, OB_RECALC_OB);
|
||||
|
||||
/* preconditions */
|
||||
if (partype == PAR_FOLLOW || partype == PAR_PATH_CONST) {
|
||||
@ -762,7 +760,7 @@ int ED_object_parent_set(ReportList *reports, Main *bmain, Scene *scene, Object
|
||||
invert_m4_m4(ob->parentinv, workob.obmat);
|
||||
}
|
||||
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
|
||||
}
|
||||
}
|
||||
|
||||
@ -791,8 +789,7 @@ static int parent_set_exec(bContext *C, wmOperator *op)
|
||||
if (!ok)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
|
||||
|
||||
@ -903,7 +900,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Object *par = ED_object_active_context(C);
|
||||
|
||||
par->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&par->id, OB_RECALC_OB);
|
||||
|
||||
/* context iterator */
|
||||
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
|
||||
@ -918,7 +915,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
|
||||
memset(ob->loc, 0, 3 * sizeof(float));
|
||||
|
||||
/* set recalc flags */
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
|
||||
|
||||
/* set parenting type for object - object only... */
|
||||
ob->parent = par;
|
||||
@ -928,8 +925,7 @@ static int parent_noinv_set_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_scene_sort(bmain, CTX_data_scene(C));
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -955,7 +951,6 @@ void OBJECT_OT_parent_no_inverse_set(wmOperatorType *ot)
|
||||
|
||||
static int object_slow_parent_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
|
||||
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
|
||||
@ -965,13 +960,12 @@ static int object_slow_parent_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
ob->partype -= PARSLOW;
|
||||
BKE_object_where_is_calc(scene, ob);
|
||||
ob->partype |= PARSLOW;
|
||||
ob->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
}
|
||||
}
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_SCENE, scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -998,7 +992,6 @@ void OBJECT_OT_slow_parent_clear(wmOperatorType *ot)
|
||||
|
||||
static int object_slow_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
|
||||
CTX_DATA_BEGIN (C, Object *, ob, selected_editable_objects)
|
||||
@ -1006,12 +999,11 @@ static int object_slow_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
if (ob->parent)
|
||||
ob->partype |= PARSLOW;
|
||||
|
||||
ob->recalc |= OB_RECALC_OB;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_SCENE, scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -1046,7 +1038,6 @@ static EnumPropertyItem prop_clear_track_types[] = {
|
||||
static int object_track_clear_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
int type = RNA_enum_get(op->ptr, "type");
|
||||
|
||||
if (CTX_data_edit_object(C)) {
|
||||
@ -1059,7 +1050,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
|
||||
|
||||
/* remove track-object for old track */
|
||||
ob->track = NULL;
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
/* also remove all tracking constraints */
|
||||
for (con = ob->constraints.last; con; con = pcon) {
|
||||
@ -1073,8 +1064,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -1111,7 +1101,6 @@ static EnumPropertyItem prop_make_track_types[] = {
|
||||
static int track_set_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Object *obact = ED_object_active_context(C);
|
||||
|
||||
int type = RNA_enum_get(op->ptr, "type");
|
||||
@ -1127,7 +1116,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
|
||||
|
||||
data = con->data;
|
||||
data->tar = obact;
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
/* Lamp, Camera and Speaker track differently by default */
|
||||
if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER)
|
||||
@ -1147,7 +1136,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
|
||||
|
||||
data = con->data;
|
||||
data->tar = obact;
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
/* Lamp, Camera and Speaker track differently by default */
|
||||
if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER) {
|
||||
@ -1169,7 +1158,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
|
||||
|
||||
data = con->data;
|
||||
data->tar = obact;
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
/* Lamp, Camera and Speaker track differently by default */
|
||||
if (ob->type == OB_LAMP || ob->type == OB_CAMERA || ob->type == OB_SPEAKER) {
|
||||
@ -1181,8 +1170,7 @@ static int track_set_exec(bContext *C, wmOperator *op)
|
||||
CTX_DATA_END;
|
||||
}
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -1297,7 +1285,7 @@ static int move_to_layer_exec(bContext *C, wmOperator *op)
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, scene);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, scene);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@ -1360,7 +1348,6 @@ Base *ED_object_scene_link(Scene *scene, Object *ob)
|
||||
|
||||
static int make_links_scene_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene_to = BLI_findlink(&CTX_data_main(C)->scene, RNA_enum_get(op->ptr, "scene"));
|
||||
|
||||
if (scene_to == NULL) {
|
||||
@ -1384,8 +1371,6 @@ static int make_links_scene_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
/* redraw the 3D view because the object center points are colored differently */
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
|
||||
|
||||
@ -1476,7 +1461,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
|
||||
/* if amount of material indices changed: */
|
||||
test_object_materials(ob_dst->data);
|
||||
|
||||
ob_dst->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&ob_dst->id, OB_RECALC_DATA);
|
||||
break;
|
||||
case MAKE_LINKS_MATERIALS:
|
||||
/* new approach, using functions from kernel */
|
||||
@ -1515,7 +1500,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
|
||||
break;
|
||||
case MAKE_LINKS_MODIFIERS:
|
||||
BKE_object_link_modifiers(ob_dst, ob_src);
|
||||
ob_dst->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
break;
|
||||
case MAKE_LINKS_FONTS:
|
||||
{
|
||||
@ -1535,7 +1520,7 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
|
||||
cu_dst->vfontbi = cu_src->vfontbi;
|
||||
id_us_plus((ID *)cu_dst->vfontbi);
|
||||
|
||||
ob_dst->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob_dst->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1554,10 +1539,9 @@ static int make_links_data_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
@ -1706,7 +1690,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, int flag)
|
||||
id = ob->data;
|
||||
|
||||
if (id && id->us > 1 && id->lib == NULL) {
|
||||
ob->recalc = OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
|
||||
BKE_copy_animdata_id_action(id);
|
||||
|
||||
@ -1742,7 +1726,7 @@ static void single_obdata_users(Main *bmain, Scene *scene, int flag)
|
||||
ob->data = BKE_lattice_copy(ob->data);
|
||||
break;
|
||||
case OB_ARMATURE:
|
||||
ob->recalc |= OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
ob->data = BKE_armature_copy(ob->data);
|
||||
BKE_pose_rebuild(ob, ob->data);
|
||||
break;
|
||||
@ -1778,7 +1762,7 @@ static void single_object_action_users(Scene *scene, int flag)
|
||||
for (base = FIRSTBASE; base; base = base->next) {
|
||||
ob = base->object;
|
||||
if (ob->id.lib == NULL && (flag == 0 || (base->flag & SELECT)) ) {
|
||||
ob->recalc = OB_RECALC_DATA;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
BKE_copy_animdata_id_action(&ob->id);
|
||||
}
|
||||
}
|
||||
@ -2148,7 +2132,6 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot)
|
||||
|
||||
static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Base *base = ED_view3d_give_base_under_cursor(C, event->mval);
|
||||
Material *ma;
|
||||
char name[MAX_ID_NAME - 2];
|
||||
@ -2160,7 +2143,6 @@ static int drop_named_material_invoke(bContext *C, wmOperator *op, wmEvent *even
|
||||
|
||||
assign_material(base->object, ma, 1, BKE_MAT_ASSIGN_USERPREF);
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
|
||||
WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma);
|
||||
|
||||
|
@ -213,7 +213,6 @@ static void object_clear_scale(Object *ob)
|
||||
static int object_clear_transform_generic_exec(bContext *C, wmOperator *op,
|
||||
void (*clear_func)(Object *), const char default_ksName[])
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
KeyingSet *ks;
|
||||
|
||||
@ -244,8 +243,6 @@ static int object_clear_transform_generic_exec(bContext *C, wmOperator *op,
|
||||
CTX_DATA_END;
|
||||
|
||||
/* this is needed so children are also updated */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -318,7 +315,6 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot)
|
||||
|
||||
static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
float *v1, *v3;
|
||||
float mat[3][3];
|
||||
|
||||
@ -338,8 +334,6 @@ static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -991,7 +985,6 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
|
||||
DAG_id_tag_update(&tob->id, OB_RECALC_OB | OB_RECALC_DATA);
|
||||
|
||||
if (tot_change) {
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
}
|
||||
|
||||
|
@ -172,8 +172,8 @@ static int type_toggle_exec(bContext *C, wmOperator *op)
|
||||
|
||||
/* update dependency */
|
||||
DAG_id_tag_update(&cObject->id, OB_RECALC_DATA);
|
||||
DAG_relations_tag_update(CTX_data_main(C));
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, cObject);
|
||||
DAG_scene_sort(CTX_data_main(C), scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
@ -100,7 +100,6 @@ void BOID_OT_rule_add(wmOperatorType *ot)
|
||||
static int rule_del_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_settings", &RNA_ParticleSettings);
|
||||
ParticleSettings *part = ptr.data;
|
||||
BoidRule *rule;
|
||||
@ -123,7 +122,7 @@ static int rule_del_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
if (rule)
|
||||
rule->flag |= BOIDRULE_CURRENT;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -254,7 +253,6 @@ void BOID_OT_state_add(wmOperatorType *ot)
|
||||
static int state_del_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_settings", &RNA_ParticleSettings);
|
||||
ParticleSettings *part = ptr.data;
|
||||
BoidState *state;
|
||||
@ -280,7 +278,7 @@ static int state_del_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
state->flag |= BOIDSTATE_CURRENT;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
DAG_id_tag_update(&part->id, OB_RECALC_DATA|PSYS_RECALC_RESET);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
@ -151,7 +151,6 @@ static int psys_poll(bContext *C)
|
||||
|
||||
static int new_particle_settings_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Main *bmain= CTX_data_main(C);
|
||||
ParticleSystem *psys;
|
||||
ParticleSettings *part = NULL;
|
||||
@ -177,7 +176,7 @@ static int new_particle_settings_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
psys_check_boid_data(psys);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
|
||||
@ -205,7 +204,6 @@ void PARTICLE_OT_new(wmOperatorType *ot)
|
||||
static int new_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
|
||||
ParticleSystem *psys= ptr.data;
|
||||
Object *ob = ptr.id.data;
|
||||
@ -226,7 +224,7 @@ static int new_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
BLI_addtail(&psys->targets, pt);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
|
||||
@ -251,7 +249,6 @@ void PARTICLE_OT_new_target(wmOperatorType *ot)
|
||||
static int remove_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
|
||||
ParticleSystem *psys= ptr.data;
|
||||
Object *ob = ptr.id.data;
|
||||
@ -275,7 +272,7 @@ static int remove_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
if (pt)
|
||||
pt->flag |= PTARGET_CURRENT;
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
|
||||
|
@ -96,6 +96,8 @@ void ED_rigidbody_con_add(wmOperator *op, Scene *scene, Object *ob, int type)
|
||||
|
||||
/* add constraint to rigid body constraint group */
|
||||
add_to_group(rbw->constraints, ob, scene, NULL);
|
||||
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
}
|
||||
|
||||
void ED_rigidbody_con_remove(Scene *scene, Object *ob)
|
||||
@ -130,8 +132,6 @@ static int rigidbody_con_add_exec(bContext *C, wmOperator *op)
|
||||
ED_rigidbody_con_add(op, scene, ob, type);
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(CTX_data_main(C), 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
/* done */
|
||||
@ -177,8 +177,6 @@ static int rigidbody_con_remove_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(CTX_data_main(C), 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
/* done */
|
||||
|
@ -151,8 +151,6 @@ static int rigidbody_ob_add_exec(bContext *C, wmOperator *op)
|
||||
ED_rigidbody_ob_add(op, scene, ob, type);
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(CTX_data_main(C), 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
/* done */
|
||||
@ -197,8 +195,6 @@ static int rigidbody_ob_remove_exec(bContext *C, wmOperator *op)
|
||||
ED_rigidbody_ob_remove(scene, ob);
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(CTX_data_main(C), 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
/* done */
|
||||
@ -242,8 +238,6 @@ static int rigidbody_obs_add_exec(bContext *C, wmOperator *op)
|
||||
CTX_DATA_END;
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(CTX_data_main(C), 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_POINTCACHE, NULL);
|
||||
|
||||
@ -289,8 +283,6 @@ static int rigidbody_obs_remove_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
CTX_DATA_END;
|
||||
|
||||
/* send updates */
|
||||
DAG_ids_flush_update(CTX_data_main(C), 0);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_POINTCACHE, NULL);
|
||||
|
||||
/* done */
|
||||
|
@ -383,10 +383,7 @@ static void do_graph_region_driver_buttons(bContext *C, void *UNUSED(arg), int e
|
||||
case B_IPO_DEPCHANGE:
|
||||
{
|
||||
/* rebuild depsgraph for the new deps */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
|
||||
/* force an update of depsgraph */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -1432,8 +1432,7 @@ static int parent_drop_exec(bContext *C, wmOperator *op)
|
||||
|
||||
ED_object_parent_set(op->reports, bmain, scene, ob, par, partype, FALSE, FALSE);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
|
||||
|
||||
@ -1522,8 +1521,7 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
|
||||
if ((par->type != OB_ARMATURE) && (par->type != OB_CURVE) && (par->type != OB_LATTICE)) {
|
||||
if (ED_object_parent_set(op->reports, bmain, scene, ob, par, partype, FALSE, FALSE)) {
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
|
||||
}
|
||||
@ -1706,8 +1704,7 @@ static int parent_clear_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(even
|
||||
|
||||
ED_object_parent_clear(ob, RNA_enum_get(op->ptr, "type"));
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
|
||||
return OPERATOR_FINISHED;
|
||||
@ -1795,8 +1792,7 @@ static int scene_drop_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
ED_base_object_select(base, BA_SELECT);
|
||||
}
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_OB_SELECT, scene);
|
||||
|
||||
@ -1828,7 +1824,6 @@ void OUTLINER_OT_scene_drop(wmOperatorType *ot)
|
||||
|
||||
static int material_drop_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Material *ma = NULL;
|
||||
Object *ob = NULL;
|
||||
SpaceOops *soops = CTX_wm_space_outliner(C);
|
||||
@ -1860,7 +1855,6 @@ static int material_drop_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
|
||||
assign_material(ob, ma, ob->totcol + 1, BKE_MAT_ASSIGN_USERPREF);
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
|
||||
WM_event_add_notifier(C, NC_MATERIAL | ND_SHADING_LINKS, ma);
|
||||
|
||||
|
@ -619,7 +619,7 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
|
||||
* cleanup tree here to prevent such cases. */
|
||||
outliner_cleanup_tree(soops);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
str = "Delete Objects";
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
|
||||
}
|
||||
@ -712,10 +712,8 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op)
|
||||
|
||||
|
||||
if (event == 3) { /* instance */
|
||||
Main *bmain = CTX_data_main(C);
|
||||
|
||||
/* works without this except if you try render right after, see: 22027 */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(CTX_data_main(C));
|
||||
}
|
||||
|
||||
ED_undo_push(C, prop_group_op_types[event].name);
|
||||
@ -1110,14 +1108,8 @@ static int outliner_animdata_operation_exec(bContext *C, wmOperator *op)
|
||||
|
||||
/* update dependencies */
|
||||
if (updateDeps) {
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
|
||||
/* rebuild depsgraph for the new deps */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
|
||||
/* force an update of depsgraph */
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_relations_tag_update(CTX_data_main(C));
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
@ -532,7 +532,6 @@ static void make_trans_verts(Object *obedit, float min[3], float max[3], int mod
|
||||
|
||||
static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Object *obedit = CTX_data_edit_object(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
RegionView3D *rv3d = CTX_wm_region_data(C);
|
||||
@ -623,8 +622,6 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op))
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
}
|
||||
else {
|
||||
ob->recalc |= OB_RECALC_OB;
|
||||
|
||||
vec[0] = -ob->obmat[3][0] + gridf * floorf(0.5f + ob->obmat[3][0] / gridf);
|
||||
vec[1] = -ob->obmat[3][1] + gridf * floorf(0.5f + ob->obmat[3][1] / gridf);
|
||||
vec[2] = -ob->obmat[3][2] + gridf * floorf(0.5f + ob->obmat[3][2] / gridf);
|
||||
@ -644,12 +641,13 @@ static int snap_sel_to_grid(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
/* auto-keyframing */
|
||||
ED_autokeyframe_object(C, scene, ob, ks);
|
||||
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
}
|
||||
}
|
||||
CTX_DATA_END;
|
||||
}
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@ -674,7 +672,6 @@ void VIEW3D_OT_snap_selected_to_grid(wmOperatorType *ot)
|
||||
|
||||
static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Object *obedit = CTX_data_edit_object(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
@ -748,8 +745,6 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op))
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
}
|
||||
else {
|
||||
ob->recalc |= OB_RECALC_OB;
|
||||
|
||||
vec[0] = -ob->obmat[3][0] + curs[0];
|
||||
vec[1] = -ob->obmat[3][1] + curs[1];
|
||||
vec[2] = -ob->obmat[3][2] + curs[2];
|
||||
@ -769,12 +764,13 @@ static int snap_sel_to_curs(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
/* auto-keyframing */
|
||||
ED_autokeyframe_object(C, scene, ob, ks);
|
||||
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB);
|
||||
}
|
||||
}
|
||||
CTX_DATA_END;
|
||||
}
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
@ -4743,6 +4743,7 @@ static void set_trans_object_base_flags(TransInfo *t)
|
||||
}
|
||||
|
||||
/* all recalc flags get flushed to all layers, so a layer flip later on works fine */
|
||||
DAG_scene_relations_update(G.main, t->scene);
|
||||
DAG_scene_flush_update(G.main, t->scene, -1, 0);
|
||||
|
||||
/* and we store them temporal in base (only used for transform code) */
|
||||
@ -4820,6 +4821,7 @@ static int count_proportional_objects(TransInfo *t)
|
||||
|
||||
|
||||
/* all recalc flags get flushed to all layers, so a layer flip later on works fine */
|
||||
DAG_scene_relations_update(G.main, t->scene);
|
||||
DAG_scene_flush_update(G.main, t->scene, -1, 0);
|
||||
|
||||
/* and we store them temporal in base (only used for transform code) */
|
||||
|
@ -1140,12 +1140,9 @@ typedef struct Scene {
|
||||
|
||||
/* none of the dependency graph vars is mean to be saved */
|
||||
struct DagForest *theDag;
|
||||
short dagisvalid, dagflags;
|
||||
short dagflags;
|
||||
short recalc; /* recalc = counterpart of ob->recalc */
|
||||
|
||||
short pad6;
|
||||
int pad5;
|
||||
|
||||
/* User-Defined KeyingSets */
|
||||
int active_keyingset; /* index of the active KeyingSet. first KeyingSet has index 1, 'none' active is 0, 'add new' is -1 */
|
||||
ListBase keyingsets; /* KeyingSets for this scene */
|
||||
|
@ -100,7 +100,7 @@ static void rna_Boids_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
|
||||
|
||||
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
|
||||
}
|
||||
static void rna_Boids_reset_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Boids_reset_deps(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
if (ptr->type == &RNA_ParticleSystem) {
|
||||
ParticleSystem *psys = (ParticleSystem *)ptr->data;
|
||||
@ -112,7 +112,7 @@ static void rna_Boids_reset_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
else
|
||||
DAG_id_tag_update(ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
|
||||
}
|
||||
|
@ -304,7 +304,7 @@ static void rna_Curve_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
||||
static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
rna_Curve_update_data(bmain, scene, ptr);
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ static void rna_DynamicPaintSurfaces_changeFormat(Main *bmain, Scene *scene, Poi
|
||||
static void rna_DynamicPaint_resetDependancy(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
rna_DynamicPaintSurface_reset(bmain, scene, ptr);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
static PointerRNA rna_PaintSurface_active_get(PointerRNA *ptr)
|
||||
|
@ -116,7 +116,7 @@ static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA
|
||||
driver->flag &= ~DRIVER_FLAG_INVALID;
|
||||
|
||||
/* TODO: this really needs an update guard... */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
DAG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_FRAME, scene);
|
||||
|
@ -267,7 +267,7 @@ static void rna_Modifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point
|
||||
static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
rna_Modifier_update(bmain, scene, ptr);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
@ -293,12 +293,10 @@ static void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA
|
||||
rna_Object_internal_update_data(bmain, scene, ptr);
|
||||
}
|
||||
|
||||
static void rna_Object_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Object_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
DAG_id_tag_update(ptr->id.data, OB_RECALC_OB);
|
||||
if (scene) {
|
||||
DAG_scene_sort(bmain, scene);
|
||||
}
|
||||
DAG_relations_tag_update(bmain);
|
||||
WM_main_add_notifier(NC_OBJECT | ND_PARENT, ptr->id.data);
|
||||
}
|
||||
|
||||
@ -332,7 +330,7 @@ static void rna_Object_layer_update__internal(Main *bmain, Scene *scene, Base *b
|
||||
/* pass */
|
||||
}
|
||||
else {
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
DAG_id_type_tag(bmain, ID_OB);
|
||||
|
@ -547,7 +547,7 @@ static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, Point
|
||||
|
||||
rna_FieldSettings_shape_update(bmain, scene, ptr);
|
||||
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
if (ob->type == OB_CURVE && ob->pd->forcefield == PFIELD_GUIDE)
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
@ -590,9 +590,9 @@ static void rna_EffectorWeight_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
|
||||
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
|
||||
}
|
||||
|
||||
static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_EffectorWeight_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
DAG_id_tag_update((ID *)ptr->id.data, OB_RECALC_DATA | PSYS_RECALC_RESET);
|
||||
|
||||
|
@ -622,7 +622,7 @@ static void rna_Particle_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
||||
static void rna_Particle_redo_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
rna_Particle_redo(bmain, scene, ptr);
|
||||
}
|
||||
|
||||
@ -659,7 +659,7 @@ static ParticleSystem *rna_particle_system_for_target(Object *ob, ParticleTarget
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Particle_target_reset(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
if (ptr->type == &RNA_ParticleTarget) {
|
||||
Object *ob = (Object *)ptr->id.data;
|
||||
@ -687,7 +687,7 @@ static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr
|
||||
psys->recalc = PSYS_RECALC_RESET;
|
||||
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
|
||||
|
@ -187,13 +187,13 @@ static void rna_Pose_ik_solver_set(struct PointerRNA *ptr, int value)
|
||||
}
|
||||
}
|
||||
|
||||
static void rna_Pose_ik_solver_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
static void rna_Pose_ik_solver_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
||||
{
|
||||
Object *ob = ptr->id.data;
|
||||
bPose *pose = ptr->data;
|
||||
|
||||
pose->flag |= POSE_RECALC; /* checks & sorts pose channels */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
|
||||
BKE_pose_update_constraint_flags(pose);
|
||||
|
||||
|
@ -381,10 +381,10 @@ static Base *rna_Scene_object_link(Scene *scene, bContext *C, ReportList *report
|
||||
if (scene == scene_act)
|
||||
ob->lay = base->lay;
|
||||
|
||||
ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
|
||||
|
||||
/* slows down importers too much, run scene.update() */
|
||||
/* DAG_scene_sort(G.main, scene); */
|
||||
/* DAG_srelations_tag_update(G.main); */
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, scene);
|
||||
|
||||
@ -412,8 +412,7 @@ static void rna_Scene_object_unlink(Scene *scene, ReportList *reports, Object *o
|
||||
ob->id.us--;
|
||||
|
||||
/* needed otherwise the depgraph will contain freed objects which can crash, see [#20958] */
|
||||
DAG_scene_sort(G.main, scene);
|
||||
DAG_ids_flush_update(G.main, 0);
|
||||
DAG_relations_tag_update(G.main);
|
||||
|
||||
WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, scene);
|
||||
}
|
||||
@ -1260,7 +1259,6 @@ static void rna_Scene_use_simplify_update(Main *bmain, Scene *UNUSED(scene), Poi
|
||||
for (SETLOOPER(sce, sce_iter, base))
|
||||
object_simplify_update(base->object);
|
||||
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
WM_main_add_notifier(NC_GEOM | ND_DATA, NULL);
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,7 @@ static void rna_Smoke_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
|
||||
static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
{
|
||||
rna_Smoke_update(bmain, scene, ptr);
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_relations_tag_update(bmain);
|
||||
}
|
||||
|
||||
static void rna_Smoke_resetCache(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
|
@ -2174,8 +2174,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
|
||||
flag_all_listbases_ids(LIB_PRE_EXISTING, 0);
|
||||
|
||||
/* recreate dependency graph to include new objects */
|
||||
DAG_scene_sort(bmain, scene);
|
||||
DAG_ids_flush_update(bmain, 0);
|
||||
DAG_scene_relations_rebuild(bmain, scene);
|
||||
|
||||
BLO_blendhandle_close(bh);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user