[Bf-blender-cvs] [8703dafb514] greasepencil-object: Fix crash on tweaking greasepencil modifier
Dalai Felinto
noreply at git.blender.org
Wed Jun 20 18:34:56 CEST 2018
Commit: 8703dafb51460ca888f4ec24b4ce9337cb069992
Author: Dalai Felinto
Date: Wed Jun 20 18:28:24 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB8703dafb51460ca888f4ec24b4ce9337cb069992
Fix crash on tweaking greasepencil modifier
We were missing a proper copy of modifiers.
Note: there was a warning for the function not being declared in any header
it should be enough to find the error by following the warning.
===================================================================
M source/blender/blenkernel/BKE_gpencil_modifier.h
M source/blender/blenkernel/intern/object.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 35464035a4b..540bb57c004 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -236,6 +236,7 @@ struct GpencilModifierData *BKE_gpencil_modifiers_findByType(struct Object *ob,
struct GpencilModifierData *BKE_gpencil_modifiers_findByName(struct Object *ob, const char *name);
void BKE_gpencil_modifier_copyData_generic(const struct GpencilModifierData *md_src, struct GpencilModifierData *md_dst);
void BKE_gpencil_modifier_copyData(struct GpencilModifierData *md, struct GpencilModifierData *target);
+void BKE_gpencil_modifier_copyData_ex(struct GpencilModifierData *md, struct GpencilModifierData *target, const int flag);
bool BKE_gpencil_has_geometry_modifiers(struct Object *ob);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index ede23c6466e..06f4d9f4ded 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -196,12 +196,10 @@ void BKE_object_free_modifiers(Object *ob, const int flag)
while ((md = BLI_pophead(&ob->modifiers))) {
modifier_free_ex(md, flag);
}
-#if 0 /* FIXME */
- /* grease pencil */
+
while ((gp_md = BLI_pophead(&ob->greasepencil_modifiers))) {
BKE_gpencil_modifier_free_ex(gp_md, flag);
}
-#endif
/* particle modifiers were freed, so free the particlesystems as well */
BKE_object_free_particlesystems(ob);
@@ -1220,6 +1218,7 @@ void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src)
void BKE_object_copy_data(Main *UNUSED(bmain), Object *ob_dst, const Object *ob_src, const int flag)
{
ModifierData *md;
+ GpencilModifierData *gmd;
/* We never handle usercount here for own data. */
const int flag_subdata = flag | LIB_ID_CREATE_NO_USER_REFCOUNT;
@@ -1243,6 +1242,15 @@ void BKE_object_copy_data(Main *UNUSED(bmain), Object *ob_dst, const Object *ob_
BLI_addtail(&ob_dst->modifiers, nmd);
}
+ BLI_listbase_clear(&ob_dst->greasepencil_modifiers);
+
+ for (gmd = ob_src->greasepencil_modifiers.first; gmd; gmd = gmd->next) {
+ GpencilModifierData *nmd = BKE_gpencil_modifier_new(gmd->type);
+ BLI_strncpy(nmd->name, gmd->name, sizeof(nmd->name));
+ BKE_gpencil_modifier_copyData_ex(gmd, nmd, flag_subdata);
+ BLI_addtail(&ob_dst->greasepencil_modifiers, nmd);
+ }
+
if (ob_src->pose) {
copy_object_pose(ob_dst, ob_src, flag_subdata);
/* backwards compat... non-armatures can get poses in older files? */
More information about the Bf-blender-cvs
mailing list