[Bf-blender-cvs] [d52a4fa0c60] temp-nla-strip-alignment: - add proper support for duplicating nla strips with preblend transforms

Wayde Moss noreply at git.blender.org
Thu Dec 10 06:13:38 CET 2020


Commit: d52a4fa0c607cc1ce208927e8299793efbc34e19
Author: Wayde Moss
Date:   Sun Nov 29 02:50:53 2020 -0500
Branches: temp-nla-strip-alignment
https://developer.blender.org/rBd52a4fa0c607cc1ce208927e8299793efbc34e19

- add proper support for duplicating nla strips with preblend transforms

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

M	source/blender/blenkernel/BKE_nla.h
M	source/blender/blenkernel/intern/nla.c
M	source/blender/makesrna/intern/rna_nla.c

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

diff --git a/source/blender/blenkernel/BKE_nla.h b/source/blender/blenkernel/BKE_nla.h
index 550185970e9..ba3e3d73701 100644
--- a/source/blender/blenkernel/BKE_nla.h
+++ b/source/blender/blenkernel/BKE_nla.h
@@ -59,6 +59,7 @@ struct NlaTrack *BKE_nlatrack_copy(struct Main *bmain,
                                    const bool use_same_actions,
                                    const int flag);
 void BKE_nla_tracks_copy(struct Main *bmain, ListBase *dst, ListBase *src, const int flag);
+struct NlaBlendTransform *BKE_nlastrip_blend_transform_copy(struct NlaBlendTransform *strip);
 
 struct NlaTrack *BKE_nlatrack_add(struct AnimData *adt,
                                   struct NlaTrack *prev,
@@ -68,14 +69,12 @@ struct NlaStrip *BKE_nlastack_add_strip(struct AnimData *adt,
                                         struct bAction *act,
                                         const bool is_liboverride);
 struct NlaBlendTransform *BKE_nlastrip_new_blend_transform(struct NlaStrip *strip);
-void BKE_nlastrip_free_blend_transform(struct NlaStrip *strip,
-                                          struct NlaBlendTransform *blend);
+void BKE_nlastrip_free_blend_transform(struct NlaStrip *strip, struct NlaBlendTransform *blend);
 void BKE_nlastrip_free_blend_transform_at(struct NlaStrip *strip, int blend_index);
 
-struct NlaBlendTransform_BoneTarget *BKE_blend_transform_new_bone(
-    struct NlaBlendTransform *blend);
+struct NlaBlendTransform_BoneTarget *BKE_blend_transform_new_bone(struct NlaBlendTransform *blend);
 void BKE_blend_transform_free_bone(struct NlaBlendTransform *blend,
-                                      struct NlaBlendTransform_BoneTarget *bone_name);
+                                   struct NlaBlendTransform_BoneTarget *bone_name);
 void BKE_blend_transform_free_bone_at(struct NlaBlendTransform *blend, int bone_name_index);
 struct NlaStrip *BKE_nla_add_soundstrip(struct Main *bmain,
                                         struct Scene *scene,
diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c
index 8dd9236aa8e..0da23940958 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -34,6 +34,8 @@
 
 #include "BLI_ghash.h"
 #include "BLI_listbase.h"
+#include "BLI_math_rotation.h"
+#include "BLI_math_vector.h"
 #include "BLI_string.h"
 #include "BLI_string_utils.h"
 #include "BLI_utildefines.h"
@@ -211,10 +213,32 @@ NlaStrip *BKE_nlastrip_copy(Main *bmain,
     BLI_addtail(&strip_d->strips, cs_d);
   }
 
+  BLI_listbase_clear(&strip_d->blend_transforms);
+  LISTBASE_FOREACH (NlaBlendTransform *, blend_xform, &strip->blend_transforms) {
+    NlaBlendTransform *blend_xform = BKE_nlastrip_blend_transform_copy(&strip_d);
+    BLI_addtail(&strip_d.blend_transforms, blend_xform);
+  }
+
   /* return the strip */
   return strip_d;
 }
 
+struct NlaBlendTransform *BKE_nlastrip_blend_transform_copy(NlaBlendTransform *blend_xform)
+{
+  NlaBlendTransform *duplicate_blend_xform = BKE_nlastrip_new_blend_transform();
+  copy_v3_v3(duplicate_blend_xform->location, blend_xform->location);
+  copy_v3_v3(duplicate_blend_xform->euler, blend_xform->euler);
+  copy_v3_v3(duplicate_blend_xform->scale, blend_xform->scale);
+
+  LISTBASE_FOREACH (NlaBlendTransform_BoneTarget *, bone_target, &blend_xform->bones) {
+    NlaBlendTransform_BoneTarget *duplicate_target = BKE_blend_transform_new_bone();
+    BLI_addtail(&duplicate_blend_xform->bones, duplicate_target);
+
+    strcpy(duplicate_target->name, bone_target->name);
+  }
+
+  return duplicate_blend_xform;
+}
 /**
  * Copy a single NLA Track.
  * \param flag: Control ID pointers management, see LIB_ID_CREATE_.../LIB_ID_COPY_...
@@ -398,7 +422,7 @@ NlaStrip *BKE_nlastack_add_strip(AnimData *adt, bAction *act, const bool is_libo
   return strip;
 }
 
-NlaBlendTransform *BKE_nlastrip_new_blend_transform(NlaStrip *strip)
+NlaBlendTransform *BKE_nlastrip_new_blend_transform()
 {
   NlaBlendTransform *blend = MEM_callocN(sizeof(NlaBlendTransform), __func__);
   blend->location[0] = 0;
@@ -411,10 +435,12 @@ NlaBlendTransform *BKE_nlastrip_new_blend_transform(NlaStrip *strip)
   blend->scale[1] = 1;
   blend->scale[2] = 1;
 
-  BLI_addtail(&strip->blend_transforms, blend);
-
   return blend;
 }
+
+NlaBlendTransform *BKE_nlastrip_copy_blend_transform(NlaStrip *strip)
+{
+}
 void BKE_nlastrip_free_blend_transform(NlaStrip *strip, NlaBlendTransform *blend)
 {
   // todo: ensure pattern of add/removal matches others (assumptions, that remove also frees, etc)
@@ -429,14 +455,12 @@ void BKE_nlastrip_free_blend_transform_at(NlaStrip *strip, int blend_index)
   }
 }
 
-NlaBlendTransform_BoneTarget *BKE_blend_transform_new_bone(NlaBlendTransform *blend)
+NlaBlendTransform_BoneTarget *BKE_blend_transform_new_bone()
 {
-  NlaBlendTransform_BoneTarget *bone_name = MEM_callocN(sizeof(NlaBlendTransform_BoneTarget),
-                                                        __func__);
-
-  BLI_addtail(&blend->bones, bone_name);
+  NlaBlendTransform_BoneTarget *bone_target = MEM_callocN(sizeof(NlaBlendTransform_BoneTarget),
+                                                          __func__);
 
-  return bone_name;
+  return bone_target;
 }
 void BKE_blend_transform_free_bone(NlaBlendTransform *blend,
                                    NlaBlendTransform_BoneTarget *bone_name)
diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c
index fafaa00c097..3502a6e5df6 100644
--- a/source/blender/makesrna/intern/rna_nla.c
+++ b/source/blender/makesrna/intern/rna_nla.c
@@ -644,7 +644,10 @@ static void rna_nlastrip_blendXform_bone_name_set(PointerRNA *ptr, const char *v
 
 static NlaBlendTransform *rna_NlaStrip_blend_new(NlaStrip *strip, ReportList *reports)
 {
-  return BKE_nlastrip_new_blend_transform(strip);
+  NlaBlendTransform *blend_xform = BKE_nlastrip_new_blend_transform();
+  BLI_addtail(&strip->blend_transforms, blend_xform);
+
+  return blend_xform;
 }
 
 static void rna_NlaStrip_blend_remove(NlaStrip *strip, ReportList *reports, PointerRNA *blend)
@@ -659,7 +662,9 @@ static void rna_NlaStrip_blend_remove_at(NlaStrip *strip, ReportList *reports, i
 static NlaBlendTransform_BoneTarget *rna_blend_bone_name_new(NlaBlendTransform *blend,
                                                              ReportList *reports)
 {
-  return BKE_blend_transform_new_bone(blend);
+  NlaBlendTransform_BoneTarget *bone_target = BKE_blend_transform_new_bone(blend);
+  BLI_addtail(&blend->bones, bone_target);
+  return bone_target;
 }
 
 static void rna_blend_bone_name_remove(NlaBlendTransform *blend,



More information about the Bf-blender-cvs mailing list