Difference between revisions of "IC Python API:RLPy RTime"
Chuck (RL) (Talk | contribs) m (→GetFrameIndex) |
Chuck (RL) (Talk | contribs) m |
||
(69 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{TOC}} | {{TOC}} | ||
− | {{Parent|IC_Python_API:RL_Python_Modules | + | {{Parent|IC_Python_API:RL_Python_Modules|Modules}} |
− | + | {{last_modified}} | |
− | + | ||
== Description == | == Description == | ||
− | This class | + | 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. |
− | + | == 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 == | ||
− | === | + | === __init__ ( self, args ) === |
− | + | This operation creates a time object instance. | |
− | + | <syntaxhighlight lang="python" line='line'> | |
+ | # Constructor RTime object | ||
+ | time1 = RLPy.RTime() | ||
− | + | # Constructor RTime object with RTime object | |
+ | time2 = RLPy.RTime(time1) | ||
− | + | # Constructor RTime object with float value and unit | |
− | + | time3 = RLPy.RTime(0, RLPy.kMilliseconds) | |
+ | </syntaxhighlight> | ||
− | # | + | === 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 ) === | ||
+ | |||
+ | Get the frame index of a given time based on a specified FPS. | ||
+ | |||
+ | ==== Parameters ==== | ||
+ | :'''kTime''' [IN] animation time - [[IC_Python_API:RLPy_RTime|RTime]] | ||
+ | :'''nFps''' [IN] frames per second - integer | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :The corresponding frame index - integer | ||
+ | |||
+ | <syntaxhighlight lang="python" line='line'> | ||
+ | # Get frame index | ||
+ | frame_index = RLPy.RTime.GetFrameIndex(RLPy.RTime(3000.0), 60) | ||
+ | print(frame_index) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === 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 - [[IC_Python_API:RLPy_RTime|RTime]] | ||
+ | |||
+ | <syntaxhighlight lang="python" line='line'> | ||
+ | # Get indexed frame time | ||
+ | frame_time = RLPy.RTime.IndexedFrameTime(180, 60) | ||
+ | print(frame_time) | ||
+ | </syntaxhighlight> | ||
− | + | === 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 - [[IC_Python_API:RLPy_RTime|RTime]] | ||
+ | :'''nFps''' [IN] frames per second - integer | ||
− | === | + | ==== Returns ==== |
+ | :The corresponding time - [[IC_Python_API:RLPy_RTime|RTime]] | ||
− | + | <syntaxhighlight lang="python" line='line'> | |
+ | # Get frame time | ||
+ | frame_time = RLPy.RTime.GetFrameTime(RLPy.RTime(3002), 60) | ||
+ | print(time2) | ||
+ | </syntaxhighlight> |
Latest revision as of 20:38, 12 May 2020
Contents
- 1 Description
- 2 Operators
- 3 Member Functions
- 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)