Commit: 48a85f99eb3933dc74f9e1ead661401138b64d55
Author: Bastien Montagne
Date:   Thu Jun 22 22:46:52 2017 +0200
Branches: id_copy_refactor
https://developer.blender.org/rB48a85f99eb3933dc74f9e1ead661401138b64d55

Add remaining 'new copying' for obdata ID types.

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

M       source/blender/blenkernel/BKE_armature.h
M       source/blender/blenkernel/BKE_camera.h
M       source/blender/blenkernel/BKE_lamp.h
M       source/blender/blenkernel/BKE_speaker.h
M       source/blender/blenkernel/intern/armature.c
M       source/blender/blenkernel/intern/camera.c
M       source/blender/blenkernel/intern/curve.c
M       source/blender/blenkernel/intern/key.c
M       source/blender/blenkernel/intern/lamp.c
M       source/blender/blenkernel/intern/lattice.c
M       source/blender/blenkernel/intern/library.c
M       source/blender/blenkernel/intern/mball.c
M       source/blender/blenkernel/intern/mesh.c
M       source/blender/blenkernel/intern/object.c
M       source/blender/blenkernel/intern/speaker.c

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

diff --git a/source/blender/blenkernel/BKE_armature.h 
b/source/blender/blenkernel/BKE_armature.h
index 6bfc8c918d6..90b80477ec4 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -77,6 +77,7 @@ int  BKE_armature_bonelist_count(struct ListBase *lb);
 void BKE_armature_bonelist_free(struct ListBase *lb);
 void BKE_armature_free(struct bArmature *arm);
 void BKE_armature_make_local(struct Main *bmain, struct bArmature *arm, const 
bool lib_local);
+void BKE_armature_copy_ex(struct Main *bmain, struct bArmature *arm_dst, const 
struct bArmature *arm_src, const int flag);
 struct bArmature *BKE_armature_copy(struct Main *bmain, const struct bArmature 
*arm);
 
 /* Bounding box. */
diff --git a/source/blender/blenkernel/BKE_camera.h 
b/source/blender/blenkernel/BKE_camera.h
index b2f22aacb28..4ab0b1e3749 100644
--- a/source/blender/blenkernel/BKE_camera.h
+++ b/source/blender/blenkernel/BKE_camera.h
@@ -52,6 +52,7 @@ struct GPUFXSettings;
 
 void BKE_camera_init(struct Camera *cam);
 void *BKE_camera_add(struct Main *bmain, const char *name);
+void BKE_camera_copy_ex(struct Main *bmain, struct Camera *cam_dst, const 
struct Camera *cam_src, const int flag);
 struct Camera *BKE_camera_copy(struct Main *bmain, const struct Camera *cam);
 void BKE_camera_make_local(struct Main *bmain, struct Camera *cam, const bool 
lib_local);
 void BKE_camera_free(struct Camera *ca);
diff --git a/source/blender/blenkernel/BKE_lamp.h 
b/source/blender/blenkernel/BKE_lamp.h
index 713ca80fb1a..6d7dd593d01 100644
--- a/source/blender/blenkernel/BKE_lamp.h
+++ b/source/blender/blenkernel/BKE_lamp.h
@@ -44,6 +44,7 @@ struct Scene;
 
 void BKE_lamp_init(struct Lamp *la);
 struct Lamp *BKE_lamp_add(struct Main *bmain, const char *name) 
ATTR_WARN_UNUSED_RESULT;
+void BKE_lamp_copy_ex(struct Main *bmain, struct Lamp *la_dst, const struct 
Lamp *la_src, const int flag);
 struct Lamp *BKE_lamp_copy(struct Main *bmain, const struct Lamp *la) 
ATTR_WARN_UNUSED_RESULT;
 struct Lamp *localize_lamp(struct Lamp *la) ATTR_WARN_UNUSED_RESULT;
 void BKE_lamp_make_local(struct Main *bmain, struct Lamp *la, const bool 
lib_local);
diff --git a/source/blender/blenkernel/BKE_speaker.h 
b/source/blender/blenkernel/BKE_speaker.h
index 907558f9203..feac60bc30b 100644
--- a/source/blender/blenkernel/BKE_speaker.h
+++ b/source/blender/blenkernel/BKE_speaker.h
@@ -33,6 +33,7 @@ struct Speaker;
 
 void BKE_speaker_init(struct Speaker *spk);
 void *BKE_speaker_add(struct Main *bmain, const char *name);
+void BKE_speaker_copy_ex(struct Main *bmain, struct Speaker *spk_dst, const 
struct Speaker *spk_src, const int flag);
 struct Speaker *BKE_speaker_copy(struct Main *bmain, const struct Speaker 
*spk);
 void BKE_speaker_make_local(struct Main *bmain, struct Speaker *spk, const 
bool lib_local);
 void BKE_speaker_free(struct Speaker *spk);
diff --git a/source/blender/blenkernel/intern/armature.c 
b/source/blender/blenkernel/intern/armature.c
index 35b6fe113bd..273f5eeb2d4 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -150,54 +150,65 @@ void BKE_armature_make_local(Main *bmain, bArmature *arm, 
const bool lib_local)
        BKE_id_make_local_generic(bmain, &arm->id, true, lib_local);
 }
 
-static void copy_bonechildren(Bone *newBone, const Bone *oldBone, const Bone 
*actBone, Bone **newActBone)
+static void copy_bonechildren(
+        Bone *bone_dst, const Bone *bone_src, const Bone *bone_src_act, Bone 
**r_bone_dst_act, const int flag)
 {
-       Bone *curBone, *newChildBone;
+       Bone *bone_src_child, *bone_dst_child;
 
-       if (oldBone == actBone)
-               *newActBone = newBone;
+       if (bone_src == bone_src_act) {
+               *r_bone_dst_act = bone_dst;
+       }
 
-       if (oldBone->prop)
-               newBone->prop = IDP_CopyProperty(oldBone->prop);
+       if (bone_src->prop) {
+               bone_dst->prop = IDP_CopyProperty_ex(bone_src->prop, flag);
+       }
 
        /* Copy this bone's list */
-       BLI_duplicatelist(&newBone->childbase, &oldBone->childbase);
+       BLI_duplicatelist(&bone_dst->childbase, &bone_src->childbase);
 
        /* For each child in the list, update it's children */
-       newChildBone = newBone->childbase.first;
-       for (curBone = oldBone->childbase.first; curBone; curBone = 
curBone->next) {
-               newChildBone->parent = newBone;
-               copy_bonechildren(newChildBone, curBone, actBone, newActBone);
-               newChildBone = newChildBone->next;
+       for (bone_src_child = bone_src->childbase.first, bone_dst_child = 
bone_dst->childbase.first;
+            bone_src_child;
+            bone_src_child = bone_src_child->next, bone_dst_child = 
bone_dst_child->next)
+       {
+               bone_dst_child->parent = bone_dst;
+               copy_bonechildren(bone_dst_child, bone_src_child, bone_src_act, 
r_bone_dst_act, flag);
        }
 }
 
-bArmature *BKE_armature_copy(Main *bmain, const bArmature *arm)
+/**
+ * Only copy internal data of Armature ID from source to already 
allocated/initialized destination.
+ * You probably nerver want to use that directly, use id_copy or 
BKE_id_copy_ex for typical needs.
+ *
+ * \param flag  Copying options (see BKE_library.h's LIB_ID_COPY_... flags for 
more).
+ */
+void BKE_armature_copy_ex(Main *bmain, bArmature *arm_dst, const bArmature 
*arm_src, const int flag)
 {
-       bArmature *newArm;
-       Bone *oldBone, *newBone;
-       Bone *newActBone = NULL;
+       Bone *bone_src, *bone_dst;
+       Bone *bone_dst_act = NULL;
 
-       newArm = BKE_libblock_copy(bmain, &arm->id);
-       BLI_duplicatelist(&newArm->bonebase, &arm->bonebase);
+       BLI_duplicatelist(&arm_dst->bonebase, &arm_src->bonebase);
 
        /* Duplicate the childrens' lists */
-       newBone = newArm->bonebase.first;
-       for (oldBone = arm->bonebase.first; oldBone; oldBone = oldBone->next) {
-               newBone->parent = NULL;
-               copy_bonechildren(newBone, oldBone, arm->act_bone, &newActBone);
-               newBone = newBone->next;
+       bone_dst = arm_dst->bonebase.first;
+       for (bone_src = arm_src->bonebase.first; bone_src; bone_src = 
bone_src->next) {
+               bone_dst->parent = NULL;
+               copy_bonechildren(bone_dst, bone_src, arm_src->act_bone, 
&bone_dst_act, flag);
+               bone_dst = bone_dst->next;
        }
 
-       newArm->act_bone = newActBone;
-
-       newArm->edbo = NULL;
-       newArm->act_edbone = NULL;
-       newArm->sketch = NULL;
+       arm_dst->act_bone = bone_dst_act;
 
-       BKE_id_copy_ensure_local(bmain, &arm->id, &newArm->id);
+       arm_dst->edbo = NULL;
+       arm_dst->act_edbone = NULL;
+       arm_dst->sketch = NULL;
+}
 
-       return newArm;
+bArmature *BKE_armature_copy(Main *bmain, const bArmature *arm)
+{
+       bArmature *arm_copy;
+       BKE_id_copy_ex(bmain, &arm->id, (ID **)&arm_copy, 0, false);
+       return arm_copy;
 }
 
 static Bone *get_named_bone_bonechildren(ListBase *lb, const char *name)
diff --git a/source/blender/blenkernel/intern/camera.c 
b/source/blender/blenkernel/intern/camera.c
index 915c08674a4..8cadb933f78 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -93,15 +93,22 @@ void *BKE_camera_add(Main *bmain, const char *name)
        return cam;
 }
 
-Camera *BKE_camera_copy(Main *bmain, const Camera *cam)
+/**
+ * Only copy internal data of Camera ID from source to already 
allocated/initialized destination.
+ * You probably nerver want to use that directly, use id_copy or 
BKE_id_copy_ex for typical needs.
+ *
+ * \param flag  Copying options (see BKE_library.h's LIB_ID_COPY_... flags for 
more).
+ */
+void BKE_camera_copy_ex(Main *UNUSED(bmain), Camera *UNUSED(cam_dst), const 
Camera *UNUSED(cam_src), const int UNUSED(flag))
 {
-       Camera *camn;
-       
-       camn = BKE_libblock_copy(bmain, &cam->id);
-
-       BKE_id_copy_ensure_local(bmain, &cam->id, &camn->id);
+       /* Nothing to do! */
+}
 
-       return camn;
+Camera *BKE_camera_copy(Main *bmain, const Camera *cam)
+{
+       Camera *cam_copy;
+       BKE_id_copy_ex(bmain, &cam->id, (ID **)&cam_copy, 0, false);
+       return cam_copy;
 }
 
 void BKE_camera_make_local(Main *bmain, Camera *cam, const bool lib_local)
diff --git a/source/blender/blenkernel/intern/curve.c 
b/source/blender/blenkernel/intern/curve.c
index 419246e040a..aa023750328 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -191,7 +191,7 @@ Curve *BKE_curve_add(Main *bmain, const char *name, int 
type)
  * Only copy internal data of Curve ID from source to already 
allocated/initialized destination.
  * You probably nerver want to use that directly, use id_copy or 
BKE_id_copy_ex for typical needs.
  *
- * @param flag  Copying options (see BKE_library.h's LIB_ID_COPY_... flags for 
more).
+ * \param flag  Copying options (see BKE_library.h's LIB_ID_COPY_... flags for 
more).
  */
 void BKE_curve_copy_ex(Main *bmain, Curve *cu_dst, const Curve *cu_src, const 
int flag)
 {
diff --git a/source/blender/blenkernel/intern/key.c 
b/source/blender/blenkernel/intern/key.c
index 6ec5daceef8..ce186c1fd4e 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -155,7 +155,7 @@ Key *BKE_key_add(ID *id)    /* common function */
  * Only copy internal data of ShapeKey ID from source to already 
allocated/initialized destination.
  * You probably nerver want to use that directly, use id_copy or 
BKE_id_copy_ex for typical needs.
  *
- * @param flag  Copying options (see BKE_library.h's LIB_ID_COPY_... flags for 
more).
+ * \param flag  Copying options (see BKE_library.h's LIB_ID_COPY_... flags for 
more).
  */
 void BKE_key_copy_ex(Main *UNUSED(bmain), Key *key_dst, const Key *key_src, 
const int UNUSED(flag))
 {
diff --git a/source/blender/blenkernel/intern/lamp.c 
b/source/blender/blenkernel/intern/lamp.c
index 2242ba379fb..d15bf50ebce 100644
--- a/source/blender/blenkernel/intern/lamp.c
+++ b/source/blender/blenkernel/intern/lamp.c
@@ -116,31 +116,44 @@ Lamp *BKE_lamp_add(Main *bmain, const char *name)
        return la;
 }
 
-Lamp *BKE_lamp_copy(Main *bmain, const Lamp *la)
+/**
+ * Only copy internal data of Lamp ID from source to already 
allocated/initialized destination.
+ * You probably nerver want to use that directly, use id_copy or 
BKE_id_copy_ex for typical needs.
+ *
+ * \param flag  Copying options (see BKE_library.h's LIB_ID_COPY_... flags for 
more).
+ */
+void BKE_lamp_copy_ex(Main *bmain, Lamp *la_dst, const Lamp *la_src, const int 
flag)
 {
-       Lamp *lan;
        int a;
-       
-       lan = BKE_libblock_copy(bmain, &la->id);
 
        for (a = 0; a < MAX_MTEX; a++) {
-               if 

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to