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:
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 31420b3adc6..a7aeee1644b 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -689,6 +689,60 @@ bool BKE_object_support_modifier_type_check(const Object *ob, int modifier_type)
return false;
}
+bool BKE_object_link_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_link_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);
@@ -702,54 +756,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_link_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_link_gpencil_modifier(ob_dst, md);
}
}