[Bf-blender-cvs] [509d1328efb] greasepencil-object: Fix error duplicating object with modiifers

Antonio Vazquez noreply at git.blender.org
Sun Jul 23 17:54:57 CEST 2017


Commit: 509d1328efbe38c148ef33a4b27a16e8ef9db3fa
Author: Antonio Vazquez
Date:   Sun Jul 23 17:50:26 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB509d1328efbe38c148ef33a4b27a16e8ef9db3fa

Fix error duplicating object with modiifers

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenkernel/intern/object.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index baee7beb41c..2862979bd03 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -57,6 +57,7 @@ bool BKE_gpencil_free_strokes(struct bGPDframe *gpf);
 bool BKE_gpencil_free_layer_temp_data(struct bGPDlayer *gpl);
 void BKE_gpencil_free_frames(struct bGPDlayer *gpl);
 void BKE_gpencil_free_layers(struct ListBase *list);
+void BKE_gpencil_free_derived_frames(struct bGPdata *gpd);
 void BKE_gpencil_free_brushes(struct ListBase *list);
 void BKE_gpencil_free_palettes(struct ListBase *list);
 void BKE_gpencil_free(struct bGPdata *gpd, bool free_all);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 44dbebcb7ee..96acde51f6f 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -258,6 +258,16 @@ static void BKE_gpencil_free_layers_temp_data(ListBase *list)
 	}
 }
 
+/* Free temp gpf derived frames */
+void BKE_gpencil_free_derived_frames(bGPdata *gpd)
+{
+	/* error checking */
+	if (gpd == NULL) return;
+	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+		gpl->derived_gpf = NULL;
+	}
+}
+
 /** Free (or release) any data used by this grease pencil (does not free the gpencil itself). */
 void BKE_gpencil_free(bGPdata *gpd, bool free_all)
 {
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 99774e74f0c..37594053977 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -120,6 +120,7 @@
 #include "BKE_material.h"
 #include "BKE_camera.h"
 #include "BKE_image.h"
+#include "BKE_gpencil.h"
 
 #include "DEG_depsgraph.h"
 
@@ -1216,6 +1217,8 @@ Object *BKE_object_copy_ex(Main *bmain, const Object *ob, bool copy_caches)
 	
 	obn->derivedDeform = NULL;
 	obn->derivedFinal = NULL;
+	/* grease pencil: clean derived data */
+	BKE_gpencil_free_derived_frames(obn->gpd);
 
 	BLI_listbase_clear(&obn->gpulamp);
 	BLI_listbase_clear(&obn->pc_ids);




More information about the Bf-blender-cvs mailing list