Commit: b1ff8e8703778850bc7dfa2f2b614624c40f7ec3
Author: Dalai Felinto
Date:   Tue Jan 17 14:58:38 2017 +0100
Branches: render-layers
https://developer.blender.org/rBb1ff8e8703778850bc7dfa2f2b614624c40f7ec3

Remove OB_FROMGROUP from base, and add util funcs to sync base/object flags

I still want to remove the syncing of base/object flags. But for now
this will at least help future refactor.

===================================================================

M       source/blender/blenkernel/BKE_group.h
M       source/blender/blenkernel/BKE_scene.h
M       source/blender/blenkernel/intern/group.c
M       source/blender/blenkernel/intern/library_remap.c
M       source/blender/blenkernel/intern/object.c
M       source/blender/blenkernel/intern/scene.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/editors/animation/anim_channels_edit.c
M       source/blender/editors/gpencil/gpencil_convert.c
M       source/blender/editors/include/ED_object.h
M       source/blender/editors/object/object_add.c
M       source/blender/editors/object/object_group.c
M       source/blender/editors/object/object_relations.c
M       source/blender/editors/object/object_select.c
M       source/blender/editors/physics/rigidbody_constraint.c
M       source/blender/editors/physics/rigidbody_object.c
M       source/blender/editors/space_nla/nla_channels.c
M       source/blender/editors/space_outliner/outliner_edit.c
M       source/blender/editors/space_view3d/drawobject.c
M       source/blender/editors/space_view3d/view3d_select.c
M       source/blender/makesrna/intern/rna_group.c
M       source/gameengine/Converter/BL_BlenderDataConversion.cpp

===================================================================

diff --git a/source/blender/blenkernel/BKE_group.h 
b/source/blender/blenkernel/BKE_group.h
index 09a069ee36..9e58df3679 100644
--- a/source/blender/blenkernel/BKE_group.h
+++ b/source/blender/blenkernel/BKE_group.h
@@ -44,8 +44,8 @@ void          BKE_group_free(struct Group *group);
 struct Group *BKE_group_add(struct Main *bmain, const char *name);
 struct Group *BKE_group_copy(struct Main *bmain, struct Group *group);
 void          BKE_group_make_local(struct Main *bmain, struct Group *group, 
const bool lib_local);
-bool          BKE_group_object_add(struct Group *group, struct Object *ob, 
struct Scene *scene, struct Base *base);
-bool          BKE_group_object_unlink(struct Group *group, struct Object *ob, 
struct Scene *scene, struct Base *base);
+bool          BKE_group_object_add(struct Group *group, struct Object *ob);
+bool          BKE_group_object_unlink(struct Group *group, struct Object *ob);
 struct Group *BKE_group_object_find(struct Group *group, struct Object *ob);
 bool          BKE_group_object_exists(struct Group *group, struct Object *ob);
 bool          BKE_group_object_cyclic_check(struct Main *bmain, struct Object 
*object, struct Group *group);
diff --git a/source/blender/blenkernel/BKE_scene.h 
b/source/blender/blenkernel/BKE_scene.h
index fc3dde2ffb..e5cedf386d 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -96,6 +96,8 @@ int BKE_scene_base_iter_next(struct EvaluationContext 
*eval_ctx, struct SceneBas
 
 void BKE_scene_base_flag_to_objects(struct Scene *scene);
 void BKE_scene_base_flag_from_objects(struct Scene *scene);
+void BKE_scene_base_flag_sync_from_base(struct Base *base);
+void BKE_scene_base_flag_sync_from_object(struct Base *base);
 
 void BKE_scene_set_background(struct Main *bmain, struct Scene *sce);
 struct Scene *BKE_scene_set_name(struct Main *bmain, const char *name);
diff --git a/source/blender/blenkernel/intern/group.c 
b/source/blender/blenkernel/intern/group.c
index 9b011dbb00..9c81a8b49b 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -130,18 +130,11 @@ static bool group_object_add_internal(Group *group, 
Object *ob)
        return true;
 }
 
-bool BKE_group_object_add(Group *group, Object *object, Scene *scene, Base 
*base)
+bool BKE_group_object_add(Group *group, Object *object)
 {
        if (group_object_add_internal(group, object)) {
                if ((object->flag & OB_FROMGROUP) == 0) {
-
-                       if (scene && base == NULL)
-                               base = BKE_scene_base_find(scene, object);
-
                        object->flag |= OB_FROMGROUP;
-
-                       if (base)
-                               base->flag |= OB_FROMGROUP;
                }
                return true;
        }
@@ -208,18 +201,12 @@ bool BKE_group_object_cyclic_check(Main *bmain, Object 
*object, Group *group)
        return group_object_cyclic_check_internal(object, group);
 }
 
-bool BKE_group_object_unlink(Group *group, Object *object, Scene *scene, Base 
*base)
+bool BKE_group_object_unlink(Group *group, Object *object)
 {
        if (group_object_unlink_internal(group, object)) {
                /* object can be NULL */
                if (object && BKE_group_object_find(NULL, object) == NULL) {
-                       if (scene && base == NULL)
-                               base = BKE_scene_base_find(scene, object);
-
                        object->flag &= ~OB_FROMGROUP;
-
-                       if (base)
-                               base->flag &= ~OB_FROMGROUP;
                }
                return true;
        }
diff --git a/source/blender/blenkernel/intern/library_remap.c 
b/source/blender/blenkernel/intern/library_remap.c
index 4f87beb2bb..df6440d89f 100644
--- a/source/blender/blenkernel/intern/library_remap.c
+++ b/source/blender/blenkernel/intern/library_remap.c
@@ -354,7 +354,7 @@ static void 
libblock_remap_data_postprocess_object_fromgroup_update(Main *bmain,
                }
                if (new_ob == NULL) {  /* We need to remove NULL-ified 
groupobjects... */
                        for (Group *group = bmain->group.first; group; group = 
group->id.next) {
-                               BKE_group_object_unlink(group, NULL, NULL, 
NULL);
+                               BKE_group_object_unlink(group, NULL);
                        }
                }
                else {
@@ -368,22 +368,16 @@ static void 
libblock_remap_data_postprocess_group_scene_unlink(Main *UNUSED(bmai
        /* Note that here we assume no object has no base (i.e. all objects are 
assumed instanced
         * in one scene...). */
        for (Base *base = sce->base.first; base; base = base->next) {
-               if (base->flag & OB_FROMGROUP) {
-                       Object *ob = base->object;
+               Object *ob = base->object;
+               if (ob->flag & OB_FROMGROUP) {
+                       Group *grp = BKE_group_object_find(NULL, ob);
 
-                       if (ob->flag & OB_FROMGROUP) {
-                               Group *grp = BKE_group_object_find(NULL, ob);
-
-                               /* Unlinked group (old_id) is still in bmain... 
*/
-                               if (grp && (&grp->id == old_id || grp->id.us == 
0)) {
-                                       grp = BKE_group_object_find(grp, ob);
-                               }
-                               if (!grp) {
-                                       ob->flag &= ~OB_FROMGROUP;
-                               }
+                       /* Unlinked group (old_id) is still in bmain... */
+                       if (grp && (&grp->id == old_id || grp->id.us == 0)) {
+                               grp = BKE_group_object_find(grp, ob);
                        }
-                       if (!(ob->flag & OB_FROMGROUP)) {
-                               base->flag &= ~OB_FROMGROUP;
+                       if (!grp) {
+                               ob->flag &= ~OB_FROMGROUP;
                        }
                }
        }
diff --git a/source/blender/blenkernel/intern/object.c 
b/source/blender/blenkernel/intern/object.c
index 81110df935..be40552d79 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -3506,7 +3506,7 @@ void BKE_object_groups_clear(Scene *scene, Base *base, 
Object *object)
        }
 
        while ((group = BKE_group_object_find(group, base->object))) {
-               BKE_group_object_unlink(group, object, scene, base);
+               BKE_group_object_unlink(group, object);
        }
 }
 
diff --git a/source/blender/blenkernel/intern/scene.c 
b/source/blender/blenkernel/intern/scene.c
index 3a4407ee3e..ee67b8f4c9 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -957,7 +957,6 @@ void BKE_scene_set_background(Main *bmain, Scene *scene)
        Object *ob;
        Group *group;
        GroupObject *go;
-       int flag;
        
        /* check for cyclic sets, for reading old files but also for definite 
security (py?) */
        BKE_scene_validate_setscene(bmain, scene);
@@ -989,13 +988,7 @@ void BKE_scene_set_background(Main *bmain, Scene *scene)
                ob->lay = base->lay;
                
                /* group patch... */
-               base->flag &= ~(OB_FROMGROUP);
-               flag = ob->flag & (OB_FROMGROUP);
-               base->flag |= flag;
-               
-               /* not too nice... for recovering objects with lost data */
-               //if (ob->pose == NULL) base->flag &= ~OB_POSEMODE;
-               ob->flag = base->flag;
+               BKE_scene_base_flag_sync_from_base(base);
        }
        /* no full animation update, this to enable render code to work (render 
code calls own animation updates) */
 }
@@ -1283,7 +1276,9 @@ void BKE_scene_base_deselect_all(Scene *sce)
 
        for (b = sce->base.first; b; b = b->next) {
                b->flag &= ~SELECT;
+               int flag = b->object->flag & (OB_FROMGROUP);
                b->object->flag = b->flag;
+               b->object->flag |= flag;
        }
 }
 
@@ -2306,7 +2301,7 @@ void BKE_scene_base_flag_to_objects(struct Scene *scene)
        Base *base = scene->base.first;
 
        while (base) {
-               base->object->flag = base->flag;
+               BKE_scene_base_flag_sync_from_base(base);
                base = base->next;
        }
 }
@@ -2316,11 +2311,27 @@ void BKE_scene_base_flag_from_objects(struct Scene 
*scene)
        Base *base = scene->base.first;
 
        while (base) {
-               base->flag = base->object->flag;
+               BKE_scene_base_flag_sync_from_object(base);
                base = base->next;
        }
 }
 
+void BKE_scene_base_flag_sync_from_base(Base *base)
+{
+       Object *ob = base->object;
+
+       /* keep the object only flags untouched */
+       int flag = ob->flag & OB_FROMGROUP;
+
+       ob->flag = base->flag;
+       ob->flag |= flag;
+}
+
+void BKE_scene_base_flag_sync_from_object(Base *base)
+{
+       base->flag = base->object->flag;
+}
+
 void BKE_scene_disable_color_management(Scene *scene)
 {
        ColorManagedDisplaySettings *display_settings = 
&scene->display_settings;
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 0f79a42111..71bcf72eba 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7515,7 +7515,7 @@ static void lib_link_group(FileData *fd, Main *main)
                        if (add_us) {
                                id_us_ensure_real(&group->id);
                        }
-                       BKE_group_object_unlink(group, NULL, NULL, NULL);       
/* removes NULL entries */
+                       BKE_group_object_unlink(group, NULL);   /* removes NULL 
entries */
                }
        }
 }
@@ -9911,7 +9911,7 @@ static void give_base_to_objects(Main *mainvar, Scene 
*scene, View3D *v3d, Libra
 
                                base->object = ob;
                                base->lay = ob->lay;
-                               base->flag = ob->flag;
+                               BKE_scene_base_flag_sync_from_object(base);
 
                                CLAMP_MIN(ob->id.us, 0);
                                id_us_plus_no_lib((ID *)ob);
@@ -9945,7 +9945,7 @@ static void give_base_to_groups(
                        /* assign the base */
                        base = BKE_scene_base_add(scene, ob);
                        base->flag |= SELECT;
-                       base->object->flag = base->flag;
+                       BKE_scene_base_flag_sync_from_base(base);
                        DAG_id_tag_update(&ob->id, OB_RECALC_OB | 
OB_RECALC_DATA | OB_RECALC_TIME);
                        scene->basact = base;
 
@@ -10048,7 +10048,7 @@ static void link_object_postprocess(ID *id, Scene 
*scene, View3D *v3d, const sho
 
                if (flag & FILE_AUTOSELECT) {
                        base->flag |= SELECT;
-                       base->object->flag = base->flag;
+                       BKE_scene_base_flag_sync_from_base(base);
                        /* do NOT make base active here! screws up GUI stuff, 
if you want it do it on src/ level */
                }
        }
diff --git a/source/blender/editors/animation/anim_channels_edit.c 
b/source/blender/editors/animation/anim_channels_edit.c
index 117b854971..985ef1e13d 100644
--- a/source/blender/editors/animation/anim_channels_edit.c
+++ b/source/blender/editors/animation/anim_channels_edit.c
@@ -57,6 +57,7 @@
 #include "BKE_context.h"
 #include "BKE_mask.h"
 #include "BKE_global.h"
+#include "BKE_scene.h"
 
 #include "UI_view2d.h"
 
@@ -2690,7 +2691,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext 
*ac, int channel_index,
                        if (selectmode == SELECT_INVERT) {
                                /* swap select */
                                base->flag ^= SELECT;
-                               ob->flag = base->flag;
+                               BKE_scene_base_flag_sync_from_base(base);
                                
                                if (adt) adt->flag ^= ADT_UI_SELECTED;
                        }
@@ -2701,7 +2702,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext 
*ac, int channel_index,
                                /* TODO: should this deselect all other types 
of channels too? */
                                for (b = sce->base.first; b; 

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to