Difference between revisions of "IC Python API:RLPy RTime"

From Reallusion Wiki!
Jump to: navigation, search
m (IsError)
m
 
(67 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{TOC}}
 
{{TOC}}
{{Parent|IC_Python_API:RL_Python_Modules#System|System Module}}
+
{{Parent|IC_Python_API:RL_Python_Modules|Modules}}
 
+
{{last_modified}}
Class in RLPy / Inherits from: _object
+
  
 
== Description ==
 
== Description ==
  
This class is used to hold and manipulate timing information.
+
This class represents the midst unit (a.k.a unit of time) in animation.  Currently, it provides two states: milliseconds and 60FPS (frames per second).  When you create an animation key, you'll need to set the value according to the incoming time.  This class also provides different unit conversions such as [[#GetFrameIndex ( self, kTime, nFps )|GetFrameIndex]], [[#IndexedFrameTime ( self, nFrameIndex, nFps )|IndexedFrameTime]], and [[#GetFrameTime ( self, kTime, nFps )|GetFrameTime]] to ensure that the time retrieved is aligned with animation frames.
  
Time is stored internally in system as milliseconds. Most API methods that require or return timing information do so through variables of this type. This class also provide methods to convert between Frame and RTime, such as GetFrameIndex() and IndexedFrameTime(). Use of GetFrameTime() can ensure that RTime is on the correct frame.  
+
== Operators ==
 +
 
 +
=== == ===
 +
 
 +
The "equal to" operator. Check if two time objects are equal.
 +
 
 +
==== Returns ====
 +
:'''True''' if the values of the two time objects are equal, else '''False'''.
 +
 
 +
See Also: [[#!=|!=]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Equivalence operator
 +
time1 = RLPy.RTime(3000)
 +
time2 = RLPy.RTime(3000)
 +
print(time1 == time2)
 +
 
 +
# Compare current time
 +
time = RLPy.RGlobal.GetTime()
 +
 
 +
if time == RLPy.RGlobal.SetTime(RLPy.RTime(1000)):
 +
  print("equal")
 +
elif time > RLPy.RGlobal.SetTime(RLPy.RTime(1000)):
 +
  print("greater")
 +
elif time < RLPy.RGlobal.SetTime(RLPy.RTime(1000)):
 +
  print("less")
 +
</syntaxhighlight>
 +
 
 +
=== != ===
 +
 
 +
The "not equal to" operator.  Check if two time object are not equal.
 +
 
 +
==== Returns ====
 +
:'''True''' if the values of the two time objects are not equal, otherwise return '''False'''.
 +
 
 +
See Also: [[#==|==]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Not equal operator
 +
time1 = RLPy.RTime(3000)
 +
time2 = RLPy.RTime(3000, RLPy.k60FPS)
 +
print(time1 != time2)
 +
</syntaxhighlight>
 +
 
 +
=== < ===
 +
 
 +
The "less than" operator.  Check if a time object is less than another.
 +
 
 +
==== Returns ====
 +
:'''True''' if this value is less than or equal to another [[IC_Python_API:RLPy_RTime|RTime]]value, else '''False'''.
 +
 
 +
See Also: [[#<=|<=]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Less equal operator
 +
time1 = RLPy.RTime(1000)
 +
time2 = RLPy.RTime(2000)
 +
print(time1 <= time2)
 +
</syntaxhighlight>
 +
 
 +
=== >= ===
 +
 
 +
The "greater than or equal" operator.  Check if a time object is greater than or equal to another.
 +
 
 +
==== Returns ====
 +
:'''True''' if this [[IC_Python_API:RLPy_RTime|RTime]]value is greater than or equal to another [[IC_Python_API:RLPy_RTime|RTime]]value, else '''False'''.
 +
 
 +
See Also: [[#>|>]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Less equal operator
 +
time1 = RLPy.RTime(2000)
 +
time2 = RLPy.RTime(1000)
 +
print(time1 >= time2)
 +
</syntaxhighlight>
 +
 
 +
=== < ===
 +
 
 +
The "less than" operator. Check if a time object is less than another.
 +
 
 +
==== Returns ====
 +
:'''True''' if this [[IC_Python_API:RLPy_RTime|RTime]]value is less than another [[IC_Python_API:RLPy_RTime|RTime]]value, else '''False'''.
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Less than operator
 +
time1 = RLPy.RTime(1000)
 +
time2 = RLPy.RTime(3000)
 +
print(time1 < time2)
 +
</syntaxhighlight>
 +
 
 +
=== > ===
 +
 
 +
The "greater than" operator.  Check if a time object is greater than another.
 +
 
 +
==== Returns ====
 +
:'''True''' if this [[IC_Python_API:RLPy_RTime|RTime]]value is greater than another [[IC_Python_API:RLPy_RTime|RTime]]value, else '''False'''.
 +
 
 +
See Also: [[#>=|>=]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Greater than operator
 +
time1 = RLPy.RTime(3000)
 +
time2 = RLPy.RTime(1000)
 +
print(time1 > time2)
 +
</syntaxhighlight>
 +
 
 +
=== + ===
 +
 
 +
The addition operator.  Add two time objects together.
 +
 
 +
==== Returns ====
 +
:Sum of the two time objects - [[IC_Python_API:RLPy_RTime|RTime]]
 +
 
 +
See Also: [[#+=|+=]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Addition operator
 +
time1 = RLPy.RTime(1000)
 +
time2 = RLPy.RTime(2000)
 +
time3 = time1 + time2
 +
print(time3)
 +
</syntaxhighlight>
 +
 
 +
=== += ===
 +
 
 +
The "addition assignment" operator. Add a time object to this time object.
 +
 
 +
==== Returns ====
 +
:Sum of the two time objects.
 +
 
 +
See Also: [[#+|+]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Addition assignment operator
 +
time1 = RLPy.RTime(1000)
 +
time2 = RLPy.RTime(3000)
 +
time1 += time2
 +
print(time1)
 +
</syntaxhighlight>
 +
 
 +
=== - ===
 +
 
 +
The 'subtraction' operator.  Minus a time object from another.
 +
 
 +
==== Returns ====
 +
:Difference of the two time objects - [[IC_Python_API:RLPy_RTime|RTime]]
 +
 
 +
See Also: [[#-=|-=]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Subtraction operator
 +
time1 = RLPy.RTime(1000)
 +
time2 = RLPy.RTime(2000)
 +
time3 = time2 - time1
 +
print(time3)
 +
</syntaxhighlight>
 +
 
 +
=== -= ===
 +
 
 +
The "subtraction assignment" operator.  Subtract a time object from this time object.
 +
 
 +
==== Returns ====
 +
:Difference of the two time objects - [[IC_Python_API:RLPy_RTime|RTime]]
 +
 
 +
See Also: [[#-|-]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Subtraction assignment operator
 +
time1 = RLPy.RTime(1000)
 +
time2 = RLPy.RTime(3000)
 +
time2 -= time1
 +
print(time2)
 +
</syntaxhighlight>
 +
 
 +
=== * ===
 +
 
 +
The "multiplication" operator.  Multiply two time objects.
 +
 
 +
==== Returns ====
 +
:Time object with the multiplied value - [[IC_Python_API:RLPy_RTime|RTime]]
 +
 
 +
See Also: [[#*=|*=]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Multiplication operator
 +
time1 = RLPy.RTime(100.0)
 +
time2 = time1 * 0.5
 +
print(time2)
 +
</syntaxhighlight>
 +
 
 +
=== *= ===
 +
 
 +
The "multiplication assignment" operator.  Mutliply a time object to this time object.
 +
 
 +
==== Returns ====
 +
:Time object with the product value - [[IC_Python_API:RLPy_RTime|RTime]]
 +
 
 +
See Also: [[#*|*]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Multiplication assignment operator
 +
time1 = RLPy.RTime(200.0)
 +
time1 *= 1.5
 +
print(time1)
 +
</syntaxhighlight>
 +
 
 +
=== / ===
 +
 
 +
The "division" operator.  Divide two time objects.
 +
 
 +
==== Returns ====
 +
:Time object with the quotient value - [[IC_Python_API:RLPy_RTime|RTime]]
 +
 
 +
See Also: [[#/=|/=]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Division operator
 +
time1 = RLPy.RTime(3000)
 +
time2 = time1 / 150
 +
print(time2)
 +
</syntaxhighlight>
 +
 
 +
=== /= ===
 +
 
 +
The "division assignment" operator.  Divide a time object from this time object.
 +
 
 +
==== Returns ====
 +
:Time object with the quotient value - [[IC_Python_API:RLPy_RTime|RTime]]
 +
 
 +
See Also: [[#/|/]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Division assignment operator
 +
time1 = RLPy.RTime(3000.0)
 +
time1 /= 15
 +
print(time1)
 +
</syntaxhighlight>
  
 
== Member Functions ==
 
== Member Functions ==
  
=== GetFrameIndex ===
+
=== __init__ ( self, args ) ===
  
{{Input|def RLPy.RTime.GetFrameIndex(kTime, nFps)}}
+
This operation creates a time object instance.
  
Convert the current time to frame index.  Since iClone is 60 frames per second, the return value is usually the time in seconds times 60.
+
<syntaxhighlight lang="python" line='line'>
 +
# Constructor RTime object
 +
time1 = RLPy.RTime()
  
The following example gives the frame index at the 3 second mark.
+
# Constructor RTime object with RTime object
 +
time2 = RLPy.RTime(time1)
  
{{Code| <nowiki>
+
# Constructor RTime object with float value and unit
import RLPy
+
time3 = RLPy.RTime(0, RLPy.kMilliseconds)
 +
</syntaxhighlight>
  
#create a time object of 3 seconds
+
=== GetUnit ( self ) ===
 +
 
 +
Get the midst unit for the time object.
 +
 
 +
See Also: [[#SetUnit( self, eUnit )|SetUnit( self, eUnit )]]
 +
 
 +
==== Returns ====
 +
:Midst unit of a given time object - [[IC_Python_API:Enums#RLPy.Unit|RLPy.Unit]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Get time unit
 +
time = RLPy.RTime(0, RLPy.kMilliseconds)
 +
time_unit = time.GetUnit()
 +
print(time_unit)
 +
</syntaxhighlight>
 +
 
 +
=== GetValue ( self ) ===
 +
 
 +
Get the time value of the time object.
 +
 
 +
See Also: [[#SetValue( self, fValue )|SetValue( self, fValue )]]
 +
 
 +
==== Returns ====
 +
:Time value of the time object - float
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Get time value
 
time = RLPy.RTime(3000)
 
time = RLPy.RTime(3000)
 +
time_value = time.GetValue()
 +
print(time_value)
 +
</syntaxhighlight>
 +
 +
=== SetUnit ( self, eUnit ) ===
 +
 +
Set the midst unit for the time object.
 +
 +
See Also: [[#RTime.GetUnit( self )|GetUnit( self )]]
 +
 +
==== Parameters ====
 +
:'''eUnit''' [IN] Midst unit - [[IC_Python_API:Enums#RLPy.Unit|RLPy.Unit]]
 +
 +
<syntaxhighlight lang="python" line='line'>
 +
# Set time unit
 +
time = RLPy.RTime(0)
 +
time.SetUnit(RLPy.k60FPS)
 +
</syntaxhighlight>
 +
 +
=== SetValue ( self, fValue ) ===
 +
 +
Set the time value for the time object.
 +
 +
See Also: [[#RTime.GetValue( self )|GetValue( self )]]
 +
 +
==== Parameters ====
 +
:'''fValue''' [IN] Time value - float
 +
 +
<syntaxhighlight lang="python" line='line'>
 +
# Set time value
 +
time = RLPy.RTime(0)
 +
time.SetValue(3000)
 +
</syntaxhighlight>
 +
 +
=== AsUnits ( self, eUnit ) ===
 +
 +
Convert the time value to a specified midst unit without changing it for the time object.
 +
 +
==== Returns ====
 +
:The converted time value of the time object in the specified midst unit - float
 +
 +
<syntaxhighlight lang="python" line='line'>
 +
# As units milliseconds
 +
time = RLPy.RTime(2000)
 +
time_value = time.AsUnits(RLPy.kMilliseconds)
 +
</syntaxhighlight>
 +
 +
=== GetFrameIndex ( self, kTime, nFps ) ===
  
#print the frame index at the 3 second mark: 180
+
Get the frame index of a given time based on a specified FPS.
print(RLPy.RTime.GetFrameIndex(time, RLPy.RGlobal.GetFps()))
+
</nowiki>
+
}}
+
  
=== GetFrameTime ===
+
==== Parameters ====
 +
:'''kTime''' [IN] animation time - [[IC_Python_API:RLPy_RTime|RTime]]
 +
:'''nFps''' [IN] frames per second - integer
  
{{Input|def RLPy.RTime.GetFrameTime(kTime,nFps)}}
+
==== Returns ====
 +
:The corresponding frame index - integer
  
Deduce the frame time from a time object.
+
<syntaxhighlight lang="python" line='line'>
 +
# Get frame index
 +
frame_index = RLPy.RTime.GetFrameIndex(RLPy.RTime(3000.0), 60)
 +
print(frame_index)
 +
</syntaxhighlight>
  
The RTime object may not give a time that perfectly matches a frame.  Call this function to get the closest frame time for a RTime object - not to be confused with frame index.
+
=== IndexedFrameTime ( self, nFrameIndex, nFps ) ===
  
{{Code|<nowiki>
+
Get the time of a given frame index based on a specified FPS.
import RLPy
+
  
#Construct time object that does not align perfectly with a frame.
+
==== Parameters ====
time = RLPy.RTime(3005)
+
:'''nFrameIndex''' [IN] input frame index - integer
 +
:'''nFps''' [IN] frames per second - integer
  
#Derive the nearest frame time from the RTime object.
+
==== Returns ====
frame_time = RLPy.RTime.GetFrameTime(time, RLPy.RGlobal.GetFps())
+
:The corresponding time - [[IC_Python_API:RLPy_RTime|RTime]]
  
#Print the frame time: 3000
+
<syntaxhighlight lang="python" line='line'>
print(frame_time.GetValue())    
+
# Get indexed frame time
</nowiki>
+
frame_time = RLPy.RTime.IndexedFrameTime(180, 60)
}}
+
print(frame_time)
 +
</syntaxhighlight>
  
===IndexedFrameTime===
+
=== GetFrameTime ( self, kTime, nFps ) ===
  
{{Input|
+
Checks if the input time falls on a specific frame based on the input FPS. If the time does not match up correctly with any frame, then return the time of the nearest frame.  This ensures that the return value will always align to a specific animation frame.
def RLPY.RTime.IndexedFrameTime(nFrameindex,nFps)
+
}}
+
  
Get the frame time from the frame index. 
+
==== Parameters ====
 +
:'''kTime''' [IN] animation time - [[IC_Python_API:RLPy_RTime|RTime]]
 +
:'''nFps''' [IN] frames per second - integer
  
{{Code|
+
==== Returns ====
 +
:The corresponding time - [[IC_Python_API:RLPy_RTime|RTime]]
  
time = RLPy.RTime.IndexedFrameTime(180, RLPy.RGlobal.GetFps())
+
<syntaxhighlight lang="python" line='line'>
print(time.GetValue())
+
# Get frame time
}}
+
frame_time = RLPy.RTime.GetFrameTime(RLPy.RTime(3002), 60)
 +
print(time2)
 +
</syntaxhighlight>

Latest revision as of 19:38, 12 May 2020

Main article: Modules.
Last modified: 05/12/2020

Description

This class represents the midst unit (a.k.a unit of time) in animation. Currently, it provides two states: milliseconds and 60FPS (frames per second). When you create an animation key, you'll need to set the value according to the incoming time. This class also provides different unit conversions such as GetFrameIndex, IndexedFrameTime, and GetFrameTime to ensure that the time retrieved is aligned with animation frames.

Operators

==

The "equal to" operator. Check if two time objects are equal.

Returns

True if the values of the two time objects are equal, else False.

See Also: !=

 1 # Equivalence operator
 2 time1 = RLPy.RTime(3000)
 3 time2 = RLPy.RTime(3000)
 4 print(time1 == time2)
 5 
 6 # Compare current time
 7 time = RLPy.RGlobal.GetTime()
 8 
 9 if time == RLPy.RGlobal.SetTime(RLPy.RTime(1000)):
10    print("equal")
11 elif time > RLPy.RGlobal.SetTime(RLPy.RTime(1000)):
12    print("greater")
13 elif time < RLPy.RGlobal.SetTime(RLPy.RTime(1000)):
14    print("less")

!=

The "not equal to" operator. Check if two time object are not equal.

Returns

True if the values of the two time objects are not equal, otherwise return False.

See Also: ==

1 # Not equal operator
2 time1 = RLPy.RTime(3000)
3 time2 = RLPy.RTime(3000, RLPy.k60FPS)
4 print(time1 != time2)

<

The "less than" operator. Check if a time object is less than another.

Returns

True if this value is less than or equal to another RTimevalue, else False.

See Also: <=

1 # Less equal operator
2 time1 = RLPy.RTime(1000)
3 time2 = RLPy.RTime(2000)
4 print(time1 <= time2)

>=

The "greater than or equal" operator. Check if a time object is greater than or equal to another.

Returns

True if this RTimevalue is greater than or equal to another RTimevalue, else False.

See Also: >

1 # Less equal operator
2 time1 = RLPy.RTime(2000)
3 time2 = RLPy.RTime(1000)
4 print(time1 >= time2)

<

The "less than" operator. Check if a time object is less than another.

Returns

True if this RTimevalue is less than another RTimevalue, else False.
1 # Less than operator
2 time1 = RLPy.RTime(1000)
3 time2 = RLPy.RTime(3000)
4 print(time1 < time2)

>

The "greater than" operator. Check if a time object is greater than another.

Returns

True if this RTimevalue is greater than another RTimevalue, else False.

See Also: >=

1 # Greater than operator
2 time1 = RLPy.RTime(3000)
3 time2 = RLPy.RTime(1000)
4 print(time1 > time2)

+

The addition operator. Add two time objects together.

Returns

Sum of the two time objects - RTime

See Also: +=

1 # Addition operator
2 time1 = RLPy.RTime(1000)
3 time2 = RLPy.RTime(2000)
4 time3 = time1 + time2
5 print(time3)

+=

The "addition assignment" operator. Add a time object to this time object.

Returns

Sum of the two time objects.

See Also: +

1 # Addition assignment operator
2 time1 = RLPy.RTime(1000)
3 time2 = RLPy.RTime(3000)
4 time1 += time2
5 print(time1)

-

The 'subtraction' operator. Minus a time object from another.

Returns

Difference of the two time objects - RTime

See Also: -=

1 # Subtraction operator
2 time1 = RLPy.RTime(1000)
3 time2 = RLPy.RTime(2000)
4 time3 = time2 - time1
5 print(time3)

-=

The "subtraction assignment" operator. Subtract a time object from this time object.

Returns

Difference of the two time objects - RTime

See Also: -

1 # Subtraction assignment operator
2 time1 = RLPy.RTime(1000)
3 time2 = RLPy.RTime(3000)
4 time2 -= time1
5 print(time2)

*

The "multiplication" operator. Multiply two time objects.

Returns

Time object with the multiplied value - RTime

See Also: *=

1 # Multiplication operator
2 time1 = RLPy.RTime(100.0)
3 time2 = time1 * 0.5
4 print(time2)

*=

The "multiplication assignment" operator. Mutliply a time object to this time object.

Returns

Time object with the product value - RTime

See Also: *

1 # Multiplication assignment operator
2 time1 = RLPy.RTime(200.0)
3 time1 *= 1.5
4 print(time1)

/

The "division" operator. Divide two time objects.

Returns

Time object with the quotient value - RTime

See Also: /=

1 # Division operator
2 time1 = RLPy.RTime(3000)
3 time2 = time1 / 150
4 print(time2)

/=

The "division assignment" operator. Divide a time object from this time object.

Returns

Time object with the quotient value - RTime

See Also: /

1 # Division assignment operator
2 time1 = RLPy.RTime(3000.0)
3 time1 /= 15
4 print(time1)

Member Functions

__init__ ( self, args )

This operation creates a time object instance.

1 # Constructor RTime object
2 time1 = RLPy.RTime()
3 
4 # Constructor RTime object with RTime object
5 time2 = RLPy.RTime(time1)
6 
7 # Constructor RTime object with float value and unit
8 time3 = RLPy.RTime(0, RLPy.kMilliseconds)

GetUnit ( self )

Get the midst unit for the time object.

See Also: SetUnit( self, eUnit )

Returns

Midst unit of a given time object - RLPy.Unit
1 # Get time unit
2 time = RLPy.RTime(0, RLPy.kMilliseconds)
3 time_unit = time.GetUnit()
4 print(time_unit)

GetValue ( self )

Get the time value of the time object.

See Also: SetValue( self, fValue )

Returns

Time value of the time object - float
1 # Get time value
2 time = RLPy.RTime(3000)
3 time_value = time.GetValue()
4 print(time_value)

SetUnit ( self, eUnit )

Set the midst unit for the time object.

See Also: GetUnit( self )

Parameters

eUnit [IN] Midst unit - RLPy.Unit
1 # Set time unit
2 time = RLPy.RTime(0)
3 time.SetUnit(RLPy.k60FPS)

SetValue ( self, fValue )

Set the time value for the time object.

See Also: GetValue( self )

Parameters

fValue [IN] Time value - float
1 # Set time value
2 time = RLPy.RTime(0)
3 time.SetValue(3000)

AsUnits ( self, eUnit )

Convert the time value to a specified midst unit without changing it for the time object.

Returns

The converted time value of the time object in the specified midst unit - float
1 # As units milliseconds
2 time = RLPy.RTime(2000)
3 time_value = time.AsUnits(RLPy.kMilliseconds)

GetFrameIndex ( self, kTime, nFps )

Get the frame index of a given time based on a specified FPS.

Parameters

kTime [IN] animation time - RTime
nFps [IN] frames per second - integer

Returns

The corresponding frame index - integer
1 # Get frame index
2 frame_index = RLPy.RTime.GetFrameIndex(RLPy.RTime(3000.0), 60)
3 print(frame_index)

IndexedFrameTime ( self, nFrameIndex, nFps )

Get the time of a given frame index based on a specified FPS.

Parameters

nFrameIndex [IN] input frame index - integer
nFps [IN] frames per second - integer

Returns

The corresponding time - RTime
1 # Get indexed frame time
2 frame_time = RLPy.RTime.IndexedFrameTime(180, 60)
3 print(frame_time)

GetFrameTime ( self, kTime, nFps )

Checks if the input time falls on a specific frame based on the input FPS. If the time does not match up correctly with any frame, then return the time of the nearest frame. This ensures that the return value will always align to a specific animation frame.

Parameters

kTime [IN] animation time - RTime
nFps [IN] frames per second - integer

Returns

The corresponding time - RTime
1 # Get frame time
2 frame_time = RLPy.RTime.GetFrameTime(RLPy.RTime(3002), 60)
3 print(time2)