Skip to main content
Added link to bug report
Source Link
Fweeb
  • 7.3k
  • 2
  • 33
  • 37

It's possible, but you're going to have to "animate" with Python. There's no way to animate property values using the Dope Sheet or Graph Editor. Assuming you have the default cube and you've given it a custom string property called MyString (through the interface... this would also work for custom properties defined with Python; it's just easier to see what's happening this way), you could write a handler that's triggered by the frame_change_pre event. It would look like so:

import bpy

def animate_string(scene):
    ob = bpy.data.objects['Cube']

    if scene.frame_current < 25:
        ob['MyString'] = "First bit text"
    elif 25 <= scene.frame_current < 46:
        ob['MyString'] = "Next text part"
    elif 46 <= scene.frame_current < 100:
        ob['MyString'] = "Another bit of text"
    else:
        ob['MyString'] = "Text after frame 99"

bpy.app.handlers.frame_change_pre.append(animate_string)

Now... if you want to be clever and still animate using the Dope Sheet, Graph Editor, or even the Timeline, you could probably extend this with some clever code that populates your string property with the string stored in a marker (e.g. find the closest marker less than the current frame and use the String stored there). If you only have one object in your scene that needs to be animated this way, it should work great.

A caveat... In my testing (r60747), you could only watch the custom property change values if you scrub through one frame at a time (Left Arrow and Right Arrow). Playing back animation with Alt+A works (you can check with a print statement), but the value doesn't update in the interface. In fact, when I put my mouse cursor in the Properties Editor while playing back with Alt+A, it crashes Blender (submitting a bugbug report nowsubmitted).

It's possible, but you're going to have to "animate" with Python. There's no way to animate property values using the Dope Sheet or Graph Editor. Assuming you have the default cube and you've given it a custom string property called MyString (through the interface... this would also work for custom properties defined with Python; it's just easier to see what's happening this way), you could write a handler that's triggered by the frame_change_pre event. It would look like so:

import bpy

def animate_string(scene):
    ob = bpy.data.objects['Cube']

    if scene.frame_current < 25:
        ob['MyString'] = "First bit text"
    elif 25 <= scene.frame_current < 46:
        ob['MyString'] = "Next text part"
    elif 46 <= scene.frame_current < 100:
        ob['MyString'] = "Another bit of text"
    else:
        ob['MyString'] = "Text after frame 99"

bpy.app.handlers.frame_change_pre.append(animate_string)

Now... if you want to be clever and still animate using the Dope Sheet, Graph Editor, or even the Timeline, you could probably extend this with some clever code that populates your string property with the string stored in a marker (e.g. find the closest marker less than the current frame and use the String stored there). If you only have one object in your scene that needs to be animated this way, it should work great.

A caveat... In my testing (r60747), you could only watch the custom property change values if you scrub through one frame at a time (Left Arrow and Right Arrow). Playing back animation with Alt+A works (you can check with a print statement), but the value doesn't update in the interface. In fact, when I put my mouse cursor in the Properties Editor while playing back with Alt+A, it crashes Blender (submitting a bug report now).

It's possible, but you're going to have to "animate" with Python. There's no way to animate property values using the Dope Sheet or Graph Editor. Assuming you have the default cube and you've given it a custom string property called MyString (through the interface... this would also work for custom properties defined with Python; it's just easier to see what's happening this way), you could write a handler that's triggered by the frame_change_pre event. It would look like so:

import bpy

def animate_string(scene):
    ob = bpy.data.objects['Cube']

    if scene.frame_current < 25:
        ob['MyString'] = "First bit text"
    elif 25 <= scene.frame_current < 46:
        ob['MyString'] = "Next text part"
    elif 46 <= scene.frame_current < 100:
        ob['MyString'] = "Another bit of text"
    else:
        ob['MyString'] = "Text after frame 99"

bpy.app.handlers.frame_change_pre.append(animate_string)

Now... if you want to be clever and still animate using the Dope Sheet, Graph Editor, or even the Timeline, you could probably extend this with some clever code that populates your string property with the string stored in a marker (e.g. find the closest marker less than the current frame and use the String stored there). If you only have one object in your scene that needs to be animated this way, it should work great.

A caveat... In my testing (r60747), you could only watch the custom property change values if you scrub through one frame at a time (Left Arrow and Right Arrow). Playing back animation with Alt+A works (you can check with a print statement), but the value doesn't update in the interface. In fact, when I put my mouse cursor in the Properties Editor while playing back with Alt+A, it crashes Blender (bug report submitted).

deleted 91 characters in body
Source Link
Fweeb
  • 7.3k
  • 2
  • 33
  • 37

It's possible, but you're going to have to "animate" with Python. There's no way to animate property values using the Dope Sheet or Graph Editor. Assuming you have the default cube and you've given it a custom string property called MyString (through the interface... this would also work for custom properties defined with Python; it's just easier to see what's happening this way), you could write a handler that's triggered by the frame_change_pre event. It would look like so:

import bpy

def animate_string(scene):
    ob = bpy.data.objects['Cube']

    if scene.frame_current < 25:
        ob['MyString'] = "First bit text"
    elif 25 <= scene.frame_current < 46:
        ob['MyString'] = "Next text part"
    elif 46 <= scene.frame_current < 100:
        ob['MyString'] = "Another bit of text"
    else:
        ob['MyString'] = "Text after frame 99"

bpy.app.handlers.frame_change_pre.append(animate_string)

Now... if you want to be clever and still animate using the Dope Sheet, Graph Editor, or even the Timeline, you could probably extend this with some clever code that populates your string property with the string stored in a marker (e.g. find the closest marker less than the current frame and use the String stored there). If you only have one object in your scene that needs to be animated this way, it should work great.

A caveat... In my testing (a slightly older SVN build... but after the 2.68a releaser60747), you could only watch the custom property change values if you scrub through one frame at a time (Left Arrow and Right Arrow). Playing back animation with Alt+A works (you can check with a print statement), but the value doesn't update in the interface. In fact, when I put my mouse cursor in the Properties Editor while playing back with Alt+A, it crashes Blender (doingsubmitting a updated buildbug report now to see if that happens with current trunk).

It's possible, but you're going to have to "animate" with Python. There's no way to animate property values using the Dope Sheet or Graph Editor. Assuming you have the default cube and you've given it a custom string property called MyString (through the interface... this would also work for custom properties defined with Python; it's just easier to see what's happening this way), you could write a handler that's triggered by the frame_change_pre event. It would look like so:

import bpy

def animate_string(scene):
    ob = bpy.data.objects['Cube']

    if scene.frame_current < 25:
        ob['MyString'] = "First bit text"
    elif 25 <= scene.frame_current < 46:
        ob['MyString'] = "Next text part"
    elif 46 <= scene.frame_current < 100:
        ob['MyString'] = "Another bit of text"
    else:
        ob['MyString'] = "Text after frame 99"

bpy.app.handlers.frame_change_pre.append(animate_string)

Now... if you want to be clever and still animate using the Dope Sheet, Graph Editor, or even the Timeline, you could probably extend this with some clever code that populates your string property with the string stored in a marker (e.g. find the closest marker less than the current frame and use the String stored there). If you only have one object in your scene that needs to be animated this way, it should work great.

A caveat... In my testing (a slightly older SVN build... but after the 2.68a release), you could only watch the custom property change values if you scrub through one frame at a time (Left Arrow and Right Arrow). Playing back animation with Alt+A works (you can check with a print statement), but the value doesn't update in the interface. In fact, when I put my mouse cursor in the Properties Editor while playing back with Alt+A, it crashes Blender (doing a updated build now to see if that happens with current trunk).

It's possible, but you're going to have to "animate" with Python. There's no way to animate property values using the Dope Sheet or Graph Editor. Assuming you have the default cube and you've given it a custom string property called MyString (through the interface... this would also work for custom properties defined with Python; it's just easier to see what's happening this way), you could write a handler that's triggered by the frame_change_pre event. It would look like so:

import bpy

def animate_string(scene):
    ob = bpy.data.objects['Cube']

    if scene.frame_current < 25:
        ob['MyString'] = "First bit text"
    elif 25 <= scene.frame_current < 46:
        ob['MyString'] = "Next text part"
    elif 46 <= scene.frame_current < 100:
        ob['MyString'] = "Another bit of text"
    else:
        ob['MyString'] = "Text after frame 99"

bpy.app.handlers.frame_change_pre.append(animate_string)

Now... if you want to be clever and still animate using the Dope Sheet, Graph Editor, or even the Timeline, you could probably extend this with some clever code that populates your string property with the string stored in a marker (e.g. find the closest marker less than the current frame and use the String stored there). If you only have one object in your scene that needs to be animated this way, it should work great.

A caveat... In my testing (r60747), you could only watch the custom property change values if you scrub through one frame at a time (Left Arrow and Right Arrow). Playing back animation with Alt+A works (you can check with a print statement), but the value doesn't update in the interface. In fact, when I put my mouse cursor in the Properties Editor while playing back with Alt+A, it crashes Blender (submitting a bug report now).

Source Link
Fweeb
  • 7.3k
  • 2
  • 33
  • 37

It's possible, but you're going to have to "animate" with Python. There's no way to animate property values using the Dope Sheet or Graph Editor. Assuming you have the default cube and you've given it a custom string property called MyString (through the interface... this would also work for custom properties defined with Python; it's just easier to see what's happening this way), you could write a handler that's triggered by the frame_change_pre event. It would look like so:

import bpy

def animate_string(scene):
    ob = bpy.data.objects['Cube']

    if scene.frame_current < 25:
        ob['MyString'] = "First bit text"
    elif 25 <= scene.frame_current < 46:
        ob['MyString'] = "Next text part"
    elif 46 <= scene.frame_current < 100:
        ob['MyString'] = "Another bit of text"
    else:
        ob['MyString'] = "Text after frame 99"

bpy.app.handlers.frame_change_pre.append(animate_string)

Now... if you want to be clever and still animate using the Dope Sheet, Graph Editor, or even the Timeline, you could probably extend this with some clever code that populates your string property with the string stored in a marker (e.g. find the closest marker less than the current frame and use the String stored there). If you only have one object in your scene that needs to be animated this way, it should work great.

A caveat... In my testing (a slightly older SVN build... but after the 2.68a release), you could only watch the custom property change values if you scrub through one frame at a time (Left Arrow and Right Arrow). Playing back animation with Alt+A works (you can check with a print statement), but the value doesn't update in the interface. In fact, when I put my mouse cursor in the Properties Editor while playing back with Alt+A, it crashes Blender (doing a updated build now to see if that happens with current trunk).