Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Craddock <nzcraddock@gmail.com>2020-09-15 23:39:09 +0300
committerNathan Craddock <nzcraddock@gmail.com>2020-09-16 00:29:19 +0300
commit1c5d0deb2ac352a37be3b39d0f5e20321cdd0942 (patch)
treebdfc524a9521ffa752eb0e5364b816dc52e39d3c /source/blender/blenkernel/intern/object.c
parentcf0791bf38dd04a6c7067973e61894d93a73539b (diff)
Cleanup: Separate BKE_object_link_modifiers into functions
No functional changes. Split the grease pencil and object copy logic into separate functions. This makes the code cleaner and prepares utility functions for outliner modiifier drag and drop. Differential Revision: https://developer.blender.org/D8642
Diffstat (limited to 'source/blender/blenkernel/intern/object.c')
-rw-r--r--source/blender/blenkernel/intern/object.c98
1 files changed, 56 insertions, 42 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index bfb296af069..07a20c417fe 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -686,6 +686,60 @@ bool BKE_object_support_modifier_type_check(const Object *ob, int modifier_type)
return false;
}
+bool BKE_object_copy_modifier(struct Object *ob_dst, const struct Object *ob_src, ModifierData *md)
+{
+ ModifierData *nmd = NULL;
+
+ if (ELEM(md->type, eModifierType_Hook, eModifierType_Collision)) {
+ return false;
+ }
+
+ if (!BKE_object_support_modifier_type_check(ob_dst, md->type)) {
+ return false;
+ }
+
+ switch (md->type) {
+ case eModifierType_Softbody:
+ BKE_object_copy_softbody(ob_dst, ob_src, 0);
+ break;
+ case eModifierType_Skin:
+ /* ensure skin-node customdata exists */
+ BKE_mesh_ensure_skin_customdata(ob_dst->data);
+ break;
+ }
+
+ nmd = BKE_modifier_new(md->type);
+ BLI_strncpy(nmd->name, md->name, sizeof(nmd->name));
+
+ if (md->type == eModifierType_Multires) {
+ /* Has to be done after mod creation, but *before* we actually copy its settings! */
+ multiresModifier_sync_levels_ex(
+ ob_dst, (MultiresModifierData *)md, (MultiresModifierData *)nmd);
+ }
+
+ BKE_modifier_copydata(md, nmd);
+ BLI_addtail(&ob_dst->modifiers, nmd);
+ BKE_modifier_unique_name(&ob_dst->modifiers, nmd);
+
+ return true;
+}
+
+bool BKE_object_copy_gpencil_modifier(struct Object *ob_dst, GpencilModifierData *md)
+{
+ GpencilModifierData *nmd = NULL;
+
+ nmd = BKE_gpencil_modifier_new(md->type);
+ BLI_strncpy(nmd->name, md->name, sizeof(nmd->name));
+
+ const GpencilModifierTypeInfo *mti = BKE_gpencil_modifier_get_info(md->type);
+ mti->copyData(md, nmd);
+
+ BLI_addtail(&ob_dst->greasepencil_modifiers, nmd);
+ BKE_gpencil_modifier_unique_name(&ob_dst->greasepencil_modifiers, nmd);
+
+ return true;
+}
+
void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_src)
{
BKE_object_free_modifiers(ob_dst, 0);
@@ -699,54 +753,14 @@ void BKE_object_link_modifiers(struct Object *ob_dst, const struct Object *ob_sr
/* No grease pencil modifiers. */
if ((ob_src->type != OB_GPENCIL) && (ob_dst->type != OB_GPENCIL)) {
LISTBASE_FOREACH (ModifierData *, md, &ob_src->modifiers) {
- ModifierData *nmd = NULL;
-
- if (ELEM(md->type, eModifierType_Hook, eModifierType_Collision)) {
- continue;
- }
-
- if (!BKE_object_support_modifier_type_check(ob_dst, md->type)) {
- continue;
- }
-
- switch (md->type) {
- case eModifierType_Softbody:
- BKE_object_copy_softbody(ob_dst, ob_src, 0);
- break;
- case eModifierType_Skin:
- /* ensure skin-node customdata exists */
- BKE_mesh_ensure_skin_customdata(ob_dst->data);
- break;
- }
-
- nmd = BKE_modifier_new(md->type);
- BLI_strncpy(nmd->name, md->name, sizeof(nmd->name));
-
- if (md->type == eModifierType_Multires) {
- /* Has to be done after mod creation, but *before* we actually copy its settings! */
- multiresModifier_sync_levels_ex(
- ob_dst, (MultiresModifierData *)md, (MultiresModifierData *)nmd);
- }
-
- BKE_modifier_copydata(md, nmd);
- BLI_addtail(&ob_dst->modifiers, nmd);
- BKE_modifier_unique_name(&ob_dst->modifiers, nmd);
+ BKE_object_copy_modifier(ob_dst, ob_src, md);
}
}
/* Copy grease pencil modifiers. */
if ((ob_src->type == OB_GPENCIL) && (ob_dst->type == OB_GPENCIL)) {
LISTBASE_FOREACH (GpencilModifierData *, md, &ob_src->greasepencil_modifiers) {
- GpencilModifierData *nmd = NULL;
-
- nmd = BKE_gpencil_modifier_new(md->type);
- BLI_strncpy(nmd->name, md->name, sizeof(nmd->name));
-
- const GpencilModifierTypeInfo *mti = BKE_gpencil_modifier_get_info(md->type);
- mti->copyData(md, nmd);
-
- BLI_addtail(&ob_dst->greasepencil_modifiers, nmd);
- BKE_gpencil_modifier_unique_name(&ob_dst->greasepencil_modifiers, nmd);
+ BKE_object_copy_gpencil_modifier(ob_dst, md);
}
}