Continuing modernization

This commit is contained in:
2025-11-05 20:28:52 -08:00
parent 8964bb030b
commit e3f4505d12
5 changed files with 59 additions and 36 deletions

View File

@@ -1,8 +1,10 @@
import bpy
from numpy.linalg import norm
from numpy.typing import ArrayLike
from random import uniform, gauss
from math import floor
from enum import Enum
from typing import cast
from dataclasses import dataclass
@@ -34,10 +36,9 @@ def sound_camera_spatial_envelope(scene: bpy.types.Scene, speaker_obj,
enters_range_frame = None
exits_range_frame = None
assert scene.camera
in_range = False
for frame in range(scene.frame_start, scene.frame_end + 1):
assert scene.camera
scene.frame_set(frame)
rel = speaker_obj.matrix_world.to_translation() \
- scene.camera.matrix_world.to_translation()
@@ -66,14 +67,20 @@ def sound_camera_spatial_envelope(scene: bpy.types.Scene, speaker_obj,
min_distance=min_dist)
def closest_approach_to_camera(scene, speaker_object):
def closest_approach_to_camera(scene: bpy.types.Scene,
speaker_object: bpy.types.Object) -> tuple[float, int]:
"""
Steps through the scene frame-by-frame and returns a tuple of
(minumum_distance, at_frame_index)
"""
max_dist = sys.float_info.max
at_time = scene.frame_start
for frame in range(scene.frame_start, scene.frame_end + 1):
assert scene.camera
scene.frame_set(frame)
rel = speaker_object.matrix_world.to_translation(
) - scene.camera.matrix_world.to_translation()
dist = norm(rel)
rel = speaker_object.matrix_world.to_translation() - \
scene.camera.matrix_world.to_translation()
dist = float(norm(cast(ArrayLike, rel)))
if dist < max_dist:
max_dist = dist
@@ -175,6 +182,4 @@ def add_speakers_to_meshes(meshes, context, sound=None,
gaussian_stddev=gaussian_stddev,
sound_bank=sound_bank, envelope=envelope)
apply_gain_envelope(speaker_obj, envelope)
speaker_obj.data.update_tag()