Skip to content

Commit

Permalink
avoid reset all control frame in lazy update
Browse files Browse the repository at this point in the history
  • Loading branch information
tom1484 committed Mar 17, 2024
1 parent 8cde1f5 commit 97b8933
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
edit_single_ctrl_keyframe,
init_ctrl_keyframes_from_state,
modify_partial_ctrl_keyframes,
reset_control_frames_and_fade_sequence,
reset_ctrl_rev,
reset_fade_sequence,
update_control_frames_and_fade_sequence,
)
from .position import (
add_single_pos_keyframe,
Expand Down
90 changes: 69 additions & 21 deletions editor-blender/core/actions/property/animation_data/control.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import bpy

from .....properties.types import RevisionPropertyItemType, RevisionPropertyType
from ....models import ControlMapElement, DancerName, LEDData, MapID, PartName, PartType
from ....models import ControlMapElement, LEDData, MapID, PartType
from ....states import state
from ....utils.convert import (
ControlAddAnimationData,
Expand All @@ -19,7 +19,7 @@
from .utils import ensure_action, ensure_curve, get_keyframe_points


def reset_fade_sequence(fade_seq: List[Tuple[int, bool]]):
def reset_control_frames_and_fade_sequence(fade_seq: List[Tuple[int, bool]]):
scene = bpy.context.scene
action = ensure_action(scene, "SceneAction")
curve = ensure_curve(
Expand Down Expand Up @@ -55,6 +55,72 @@ def reset_ctrl_rev(sorted_ctrl_map: List[Tuple[MapID, ControlMapElement]]):
ctrl_rev_item.frame_start = frame_start


def update_control_frames_and_fade_sequence(
delete_frames: List[int],
update_frames: List[Tuple[int, int]],
add_frames: List[int],
fade_seq: List[Tuple[int, bool]],
):
scene = bpy.context.scene
action = ensure_action(scene, "SceneAction")

curve = ensure_curve(action, "ld_control_frame")
_, kpoints_list = get_keyframe_points(curve)

# Delete frames
kpoints_len = len(kpoints_list)
curve_index = 0

for old_start in delete_frames:
while (
curve_index < kpoints_len and kpoints_list[curve_index].co[0] != old_start
):
curve_index += 1

if curve_index < kpoints_len:
point = kpoints_list[curve_index]
curve.keyframe_points.remove(point)

# Update frames
kpoints_len = len(kpoints_list)
curve_index = 0
points_to_update: List[Tuple[int, bpy.types.Keyframe]] = []

for old_start, frame_start in update_frames:
while (
curve_index < kpoints_len and kpoints_list[curve_index].co[0] != old_start
):
curve_index += 1

if curve_index < kpoints_len:
point = kpoints_list[curve_index]
points_to_update.append((frame_start, point))

for frame_start, point in points_to_update:
point.co = frame_start, frame_start

# Add frames
kpoints_len = len(kpoints_list)
curve.keyframe_points.add(len(add_frames))

for i, frame_start in enumerate(add_frames):
point = kpoints_list[kpoints_len + i]
point.co = frame_start, frame_start

curve.keyframe_points.sort()

# update fade sequence
for i, (start, _) in enumerate(fade_seq):
point = kpoints_list[i]
point.co = start, start

if i > 0 and fade_seq[i - 1][1]:
point.co = start, kpoints_list[i - 1].co[1]

point.interpolation = "CONSTANT"
point.select_control_point = False


"""
initiate control keyframes
"""
Expand Down Expand Up @@ -84,24 +150,6 @@ def init_ctrl_single_object_action(
point.select_control_point = False


# Set ld_control_frame keyframes and fade
def init_ctrl_frame_action(action: bpy.types.Action, fade_seq: List[Tuple[int, bool]]):
curve = ensure_curve(
action, "ld_control_frame", keyframe_points=len(fade_seq), clear=True
)

_, kpoints_list = get_keyframe_points(curve)
for i, (start, _) in enumerate(fade_seq):
point = kpoints_list[i]
point.co = start, start

if i > 0 and fade_seq[i - 1][1]:
point.co = start, kpoints_list[i - 1].co[1]

point.interpolation = "CONSTANT"
point.select_control_point = False


def init_ctrl_keyframes_from_state(effect_only: bool = False):
data_objects = cast(Dict[str, bpy.types.Object], bpy.data.objects)

Expand Down Expand Up @@ -153,7 +201,7 @@ def init_ctrl_keyframes_from_state(effect_only: bool = False):
action = ensure_action(scene, "SceneAction")

fade_seq = [(frame.start, frame.fade) for _, frame in sorted_ctrl_map]
init_ctrl_frame_action(action, fade_seq)
reset_control_frames_and_fade_sequence(fade_seq)


"""
Expand Down
12 changes: 9 additions & 3 deletions editor-blender/core/actions/property/revision.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
edit_single_pos_keyframe,
modify_partial_ctrl_keyframes,
reset_ctrl_rev,
reset_fade_sequence,
update_control_frames_and_fade_sequence,
)


Expand Down Expand Up @@ -106,8 +106,14 @@ def update_rev_changes(incoming_pos_map: PosMap, incoming_control_map: ControlMa
incoming_control_map.items(), key=lambda item: item[1].start
)
fade_seq = [(frame.start, frame.fade) for _, frame in sorted_ctrl_map]
reset_fade_sequence(fade_seq)
print("Done reset fade sequence")

delete_frames = [frame[0] for frame in control_delete]
update_frames = [(frame[0], frame[2].start) for frame in control_update]
add_frames = [frame[1].start for frame in control_add]
update_control_frames_and_fade_sequence(
delete_frames, update_frames, add_frames, fade_seq
)
print("Done reset control frames and fade sequence")

reset_ctrl_rev(sorted_ctrl_map)
print("Done reset control rev")

0 comments on commit 97b8933

Please sign in to comment.