[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47118] trunk/blender/release/scripts/ modules/bpy/utils.py: bpy.utils.time_to_frame() and frame_to_time() utility functions.

Campbell Barton ideasman42 at gmail.com
Mon May 28 18:06:42 CEST 2012


Revision: 47118
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47118
Author:   campbellbarton
Date:     2012-05-28 16:06:38 +0000 (Mon, 28 May 2012)
Log Message:
-----------
bpy.utils.time_to_frame() and frame_to_time() utility functions.

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/bpy/utils.py

Modified: trunk/blender/release/scripts/modules/bpy/utils.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy/utils.py	2012-05-28 15:37:43 UTC (rev 47117)
+++ trunk/blender/release/scripts/modules/bpy/utils.py	2012-05-28 16:06:38 UTC (rev 47118)
@@ -391,6 +391,11 @@
     Returns an SMPTE formatted string from the frame: "HH:MM:SS:FF".
 
     If *fps* and *fps_base* are not given the current scene is used.
+
+    :arg time: time in seconds.
+    :type time: number or timedelta object
+    :return: the frame.
+    :rtype: float
     """
 
     if fps is None:
@@ -402,6 +407,56 @@
     return smpte_from_seconds((frame * fps_base) / fps, fps)
 
 
+def time_from_frame(frame, fps=None, fps_base=None):
+    """
+    Returns the time from a frame number .
+
+    If *fps* and *fps_base* are not given the current scene is used.
+
+    :arg frame: number.
+    :type frame: the frame number
+    :return: the time in seconds.
+    :rtype: timedate.timedelta
+    """
+
+    if fps is None:
+        fps = _bpy.context.scene.render.fps
+
+    if fps_base is None:
+        fps_base = _bpy.context.scene.render.fps_base
+
+    from datetime import timedelta
+
+    return timedelta((frame * fps_base) / fps)
+
+
+def time_to_frame(time, fps=None, fps_base=None):
+    """
+    Returns a float frame number from a time given in seconds or
+    as a timedate.timedelta object.
+
+    If *fps* and *fps_base* are not given the current scene is used.
+
+    :arg time: time in seconds.
+    :type time: number or a timedate.timedelta object
+    :return: the frame.
+    :rtype: float
+    """
+
+    if fps is None:
+        fps = _bpy.context.scene.render.fps
+
+    if fps_base is None:
+        fps_base = _bpy.context.scene.render.fps_base
+
+    from datetime import timedelta
+
+    if isinstance(time, timedelta):
+        time = time.total_seconds()
+
+    return (time / fps_base) * fps
+
+
 def preset_find(name, preset_path, display_name=False, ext=".py"):
     if not name:
         return None




More information about the Bf-blender-cvs mailing list