Commit: 2ec28dd28f6cae05452a01e0a9cf6b1d6ee1223d
Author: Dalai Felinto
Date:   Fri Jun 22 10:15:09 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB2ec28dd28f6cae05452a01e0a9cf6b1d6ee1223d

Fix reading modifier object pointers

Kudos to Bastien Montagne to help figure out the special modifier read code.

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

M       source/blender/blenloader/intern/readfile.c

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

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 4f9fe8579b8..20e875c0ad1 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -132,6 +132,7 @@
 #include "BKE_fcurve.h"
 #include "BKE_global.h" // for G
 #include "BKE_gpencil.h"
+#include "BKE_gpencil_modifier.h"
 #include "BKE_layer.h"
 #include "BKE_library.h" // for which_libbase
 #include "BKE_library_idmap.h"
@@ -4838,7 +4839,7 @@ static void direct_link_latt(FileData *fd, Lattice *lt)
 
 /* ************ READ OBJECT ***************** */
 
-static void lib_link_modifiers__linkModifiers(
+static void lib_link_modifiers_common(
         void *userData, Object *ob, ID **idpoin, int cb_flag)
 {
        FileData *fd = userData;
@@ -4848,9 +4849,10 @@ static void lib_link_modifiers__linkModifiers(
                id_us_plus_no_lib(*idpoin);
        }
 }
+
 static void lib_link_modifiers(FileData *fd, Object *ob)
 {
-       modifiers_foreachIDLink(ob, lib_link_modifiers__linkModifiers, fd);
+       modifiers_foreachIDLink(ob, lib_link_modifiers_common, fd);
 
        /* If linking from a library, clear 'local' static override flag. */
        if (ob->id.lib != NULL) {
@@ -4861,6 +4863,18 @@ static void lib_link_modifiers(FileData *fd, Object *ob)
 
 }
 
+static void lib_link_gpencil_modifiers(FileData *fd, Object *ob)
+{
+       BKE_gpencil_modifiers_foreachIDLink(ob, lib_link_modifiers_common, fd);
+
+       /* If linking from a library, clear 'local' static override flag. */
+       if (ob->id.lib != NULL) {
+               for (GpencilModifierData *mod = 
ob->greasepencil_modifiers.first; mod != NULL; mod = mod->next) {
+                       mod->flag &= ~eGpencilModifierFlag_StaticOverride_Local;
+               }
+       }
+}
+
 static void lib_link_object(FileData *fd, Main *main)
 {
        bool warn = false;
@@ -4997,6 +5011,7 @@ static void lib_link_object(FileData *fd, Main *main)
 
                        lib_link_particlesystems(fd, ob, &ob->id, 
&ob->particlesystem);
                        lib_link_modifiers(fd, ob);
+                       lib_link_gpencil_modifiers(fd, ob);
 
                        if (ob->rigidbody_constraint) {
                                ob->rigidbody_constraint->ob1 = newlibadr(fd, 
ob->id.lib, ob->rigidbody_constraint->ob1);
@@ -9648,6 +9663,15 @@ static void expand_object(FileData *fd, Main *mainvar, 
Object *ob)
                modifiers_foreachIDLink(ob, expand_object_expandModifiers, 
(void *)&data);
        }
 
+       /* expand_object_expandModifier() */
+       if (ob->greasepencil_modifiers.first) {
+               struct { FileData *fd; Main *mainvar; } data;
+               data.fd = fd;
+               data.mainvar = mainvar;
+
+               BKE_gpencil_modifiers_foreachIDLink(ob, 
expand_object_expandModifiers, (void *)&data);
+       }
+
        expand_pose(fd, mainvar, ob->pose);
        expand_doit(fd, mainvar, ob->poselib);
        expand_constraints(fd, mainvar, &ob->constraints);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to