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:
authorWayde Moss <wbmoss_dev@yahoo.com>2020-11-29 10:50:53 +0300
committerWayde Moss <wbmoss_dev@yahoo.com>2020-12-10 07:18:33 +0300
commitd52a4fa0c607cc1ce208927e8299793efbc34e19 (patch)
tree183f3438a02a7417bd0251438dfda05afa636374
parent30efd99a84b39912b9430b607a05bba21e9f0b77 (diff)
- add proper support for duplicating nla strips with preblend transforms
-rw-r--r--source/blender/blenkernel/BKE_nla.h9
-rw-r--r--source/blender/blenkernel/intern/nla.c42
-rw-r--r--source/blender/makesrna/intern/rna_nla.c9
3 files changed, 44 insertions, 16 deletions
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,