Moving keyframes

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 14/11/2008 at 12:13, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   10.1 
Platform:      Mac OSX  ; 
Language(s) :   C.O.F.F.E.E  ;

---------
Hello,

is it possible to move the keyframes of an object? I get the impression that these commands (bottom post) may hold the answer, but I don't know where to start. With R11 is it possible to shift Motion Clips along the timeline?

Thanks

Jon

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 14/11/2008 at 13:12, xxxxxxxx wrote:

You can move keyframes in R11 but not R10 and there is no access to R11 Motion Clips (not even in C++ afaict). The COFFEE in R10 was still R9.5-related but the entire animation system changed in R10.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 14/11/2008 at 13:21, xxxxxxxx wrote:

Ah OK... thanks for all the help Robert. So how would I go about doing that in R11? I'd like to have a crack on the demo.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 14/11/2008 at 14:10, xxxxxxxx wrote:

Good question. 🙂 I haven't used any new R11 COFFEE features yet. As that post you linked pointed out, there are a new set of classes for the new animation system - but no COFFEE docs yet to explain the innards. I'd suspect some similarities to the same C++ classes but then... (and Matthias points that out)

The problem is how to get at the object's animation tracks. It may be as simple as op->GetFirstTrack() or it may be the new C++ way as in op->GetFirst C Track().

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 14/11/2008 at 14:23, xxxxxxxx wrote:

Thanks again. I'll have a play when I get a chance, and let you know of any findings if I have any luck (with my limited experience I wouldn't hold your breath though 😉

Some official documentation would be very welcome.

Jon

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 17/11/2008 at 11:13, xxxxxxxx wrote:

OK... with R11 I've managed to change the key frame values:

main(doc,op)
{
var obj = doc->FindObject("Cube");
var track = obj->GetFirstCTrack();
var myKey = track->GetCurve()->GetKey(0); // key 0 is first key frame
myKey->SetValue(track->GetCurve(),70); // in this case, changes x pos to 70 m
}

That's all good, but I can't figure out how to move the keyframe positions in the timeline. This doesn't work (an attempt to move the key frame to frame 10:

myKey->SetTime(10,doc->GetFps());

Does anyone know how to achieve this?

Thanks

Jon

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 17/11/2008 at 11:32, xxxxxxxx wrote:

In C++, it is: key->SetTime(CCurve, BaseTime);

So, you might want to try it like this:

var time = BaseTime();
myKey->SetTime(track->GetCurve(), time->SetFrame(10,doc->GetFps()));

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 17/11/2008 at 11:53, xxxxxxxx wrote:

Hey Robert,

thanks for the super quick reply!

An error is thrown at BaseTime() ... 'CLASS is not a function'.

I tried swapping with:

var time = myKey->GetTime();

... but nothing happens.

Any thoughts?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 17/11/2008 at 12:58, xxxxxxxx wrote:

That's interesting considering there is a function in the BaseTime class BaseTime(). 🙂

You could try:

var time = doc->GetTime();

and go from there.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 17/11/2008 at 15:25, xxxxxxxx wrote:

Thanks again, but no joy. I've tried all manner of nonsense, but I'm shooting in the dark.

Is this to be unknown until official documentation?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 17/11/2008 at 15:56, xxxxxxxx wrote:

I think you must fill the BaseTime with a value.

var bt = new(BaseTime);
bt->SetData(/*the time you want*/);

You then use bt as your time to set a key (or anything else).

Cheers
Lennart

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 18/11/2008 at 02:50, xxxxxxxx wrote:

Blimey what a palaver that was!

Thanks so much Robert and Lennart for helping to steer me in the right direction.

This seems to work:

> \> main(doc,op) \> { \> \> var obj = doc->FindObject("Cube"); \> var track = obj->GetFirstCTrack(); \> var myKey = track->GetCurve()->GetKey()); // key 0 is first key \> var time = new(BaseTime); \> time = doc->GetTime(); \> myKey->SetTime(track->GetCurve(), time->SetFrame(10,doc->GetFps())); // move key frame to frame 10 \> \> } \>

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 18/11/2008 at 04:38, xxxxxxxx wrote:

Apologies, major balls-up!

Above code doesn't work (aside from typo 'GetKey(0)') - don't know what's going on - I did get it to work, but not with above code. Aaah!

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 18/11/2008 at 05:14, xxxxxxxx wrote:

Phew! I'm able to wipe that ostrich egg off my face...

main(doc,op)
{

var obj = doc->FindObject("Cube");
var track = obj->GetFirstCTrack();
var myKey = track->GetCurve()->GetKey(0)); // key 0 is first key
var time = new(BaseTime);
time->SetFrame(10, doc->GetFps()); // move key frame to frame 10
myKey->SetTime(track->GetCurve(), time);

}