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

From Reallusion Wiki!
Jump to: navigation, search
(Created page with "{{TOC}} {{Parent|IC_Python_API:RL_Python_Modules|Modules}} == Detailed Description == This class is the base class of the objects in the scene. <syntaxhighlight lang="Python">...")
 
m
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{TOC}}
 
{{TOC}}
 
{{Parent|IC_Python_API:RL_Python_Modules|Modules}}
 
{{Parent|IC_Python_API:RL_Python_Modules|Modules}}
== Detailed Description ==
+
{{last_modified}}
This class is the base class of the objects in the scene.
+
 
<syntaxhighlight lang="Python">
+
== Description ==
 +
 
 +
This class is used to access node parameters in a character skeleton or scene object.  Retrievable parameters include name, ID, parent node, list of child nodes, and more. [[#Update ( self )|Update]] to get the world-transform of the bone node for the current point in time.
 +
 
 +
=== Inheritance ===
 +
 
 +
[[IC_Python_API:RLPy_RIBase|RIBase]] > [[IC_Python_API:RLPy_RINode|RINode]]
 +
 
 +
== Member Functions ==
 +
 
 +
=== GetName ( self ) ===
 +
 
 +
Get the name of the node in a character skeleton or scene object.
 +
 
 +
==== Returns ====
 +
:Name of the node - str
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Get root bone
 
avatar_list = RLPy.RScene.GetAvatars()
 
avatar_list = RLPy.RScene.GetAvatars()
 
avatar = avatar_list[0]
 
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
root_bone = skeleton_component.GetRootBone()
  
# basic information
+
# Get root bone node name
print(avatar.GetName())
+
node_name = root_bone.GetName()
print(avatar.GetID())
+
print(node_name)
print(avatar.GetType()) # RLPy.EObjectType_Avatar
+
</syntaxhighlight>
 +
 
 +
=== GetID ( self ) ===
 +
 
 +
Get the ID of the node in a character skeleton or scene object.
 +
 
 +
==== Returns ====
 +
:ID of the node - int
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Get root bone
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
root_bone = skeleton_component.GetRootBone()
  
# get control
+
# Get root bone node ID
transform_control = avatar.GetControl("Transform") # type RTransformControl
+
node_id = root_bone.GetID()
avatar_path_position_control = avatar.GetControl("PathPosition") # type RFloatControl
+
print(node_id)
avatar_path_offset_control = avatar.GetControl("PathOffset") # type RTransformControl
+
 
</syntaxhighlight>
 
</syntaxhighlight>
==Member Functions==
+
 
===GetControl===
+
=== GetParent ( self ) ===
<syntaxhighlight lang="Python">
+
 
RLPy.RIObject.GetControl ( self, strKey )
+
Get the parent node of the bone node in a character skeleton or scene object.  If a parent does not exist, then return '''None'''.
 +
 
 +
==== Returns ====
 +
:Parent node - [[IC_Python_API:RLPy_RINode|RINode]]
 +
:No parent node - None
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Get root bone
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
root_bone = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone parent node
 +
parent_node = root_bone.GetParent()
 +
print(parent_node)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get control of the object.
+
 
====Parameters====
+
=== GetChildren ( self ) ===
<div style="margin-left: 2em;">
+
 
'''strKey''' [IN] Key of the
+
Get a list of child nodes for a node in a character skeleton or scene object.  If this node does not have child nodes, then return '''None'''.
controller, allowing use "Transform" to retrieve the transform control
+
 
of the Transform track, use "PathPosition" to retrieve the float control
+
See Also: [[#GetParent ( self )|GetParent]]
of Path position track, and use "PathOffset" to retrieve the transform
+
 
control of the Path Offset track, - string
+
==== Returns ====
</div>
+
:List of child nodes - [[IC_Python_API:RLPy_RINode|RINode]] list
====Returns====
+
:No child nodes - None
<div style="margin-left: 2em;">
+
 
The specified control - RLPy.RControl
+
<syntaxhighlight lang="python" line='line'>
</div>
+
# Get root bone
-----
+
avatar_list = RLPy.RScene.GetAvatars()
===GetID===
+
avatar = avatar_list[0]
<syntaxhighlight lang="Python">
+
skeleton_component = avatar.GetSkeletonComponent()
RLPy.RIObject.GetID ( self)
+
root_bone = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone children node list
 +
children_node_list = root_bone.GetChildren()
 +
print(children_node_list)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get unique id of the object.
+
 
====Returns====
+
=== LocalTransform ( self ) ===
<div style="margin-left: 2em;">
+
 
Object id - int
+
Get the local-transform for a node in a character skeleton or scene object.
</div>
+
 
-----
+
See Also: [[#WorldTransform ( self )|WorldTransform]]
===GetMeshNames===
+
 
<syntaxhighlight lang="Python">
+
==== Returns ====
RLPy.RIObject.GetMeshNames ( self)
+
:Node local-transform - [[IC_Python_API:RLPy_RTransform|RTransform]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Get root bone
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
root_bone = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone local transform
 +
local_transform = root_bone.LocalTransform()
 +
print(local_transform)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get all mesh names of the object.
+
 
====Returns====
+
=== WorldTransform ( self ) ===
<div style="margin-left: 2em;">
+
 
Mesh name list - string
+
Get the world-transform for a node in a character skeleton or scene object.
</div>
+
 
-----
+
See Also: [[#LocalTransform ( self )|LocalTransform]]
===GetName===
+
 
<syntaxhighlight lang="Python">
+
==== Returns ====
RLPy.RIObject.GetName ( self)
+
:Node world-transform - [[IC_Python_API:RLPy_RTransform|RTransform]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Get root bone
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
root_bone = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone world transform
 +
world_transform = root_bone.WorldTransform()
 +
print(world_transform)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get name of the object.
+
 
====Returns====
+
=== WorldToLocal ( self, kWorldMatrix ) ===
<div style="margin-left: 2em;">
+
 
Object name - string
+
Convert the world-transform matrix for a node in a character skeleton or scene object to local-transform matrix.
</div>
+
 
-----
+
See Also: [[#LocalToWorld ( self, kLocalMatrix )|LocalToWorld]]
===GetType===
+
 
<syntaxhighlight lang="Python">
+
==== Parameters ====
RLPy.RIObject.GetType ( self)
+
:'''kWorldMatrix''' [IN] Node world-transform matrix - [[IC_Python_API:RLPy_RMatrix4|RMatrix4]]
 +
 
 +
==== Returns ====
 +
:Node local-transform matrix - [[IC_Python_API:RLPy_RMatrix4|RMatrix4]]
 +
 
 +
<syntaxhighlight lang="python" line='line'>
 +
# Get root bone
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
root_bone = skeleton_component.GetRootBone()
 +
 
 +
# Transfer root bone world transform matrix to local transform matrix
 +
world_transform = root_bone.WorldTransform()
 +
world_matrix = world_transform.Matrix() 
 +
world_to_local = bone.WorldToLocal(world_matrix)
 +
print(world_to_local)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get object type of the object.
+
 
====Returns====
+
=== LocalToWorld ( self, kLocalMatrix ) ===
<div style="margin-left: 2em;">
+
 
Object type - RLPy.EObjectType
+
Convert the local-transform matrix for a node in a character skeleton or scene object to world-transform matrix.
*'''RLPy.EObjectType_Object'''
+
 
*'''RLPy.EObjectType_Avatar'''
+
See Also: [[#WorldToLocal ( self, kWorldMatrix )|WorldToLocal]]
*'''RLPy.EObjectType_Prop'''
+
 
*'''RLPy.EObjectType_Camera'''
+
==== Parameters ====
*'''RLPy.EObjectType_Particle'''
+
:'''kLocalMatrix''' [IN] Node local-transform matrix - [[IC_Python_API:RLPy_RMatrix4|RMatrix4]]
*'''RLPy.EObjectType_Light'''
+
 
*'''RLPy.EObjectType_SpotLight'''
+
==== Returns ====
*'''RLPy.EObjectType_PointLight'''
+
:Node local-transform matrix - [[IC_Python_API:RLPy_RMatrix4|RMatrix4]]
*'''RLPy.EObjectType_DirectionalLight'''
+
 
</div>
+
<syntaxhighlight lang="python" line='line'>
-----
+
# Transfer root bone local transform matrix to world transform matrix
===LocalTransform===
+
local_transform = root_bone.LocalTransform()
<syntaxhighlight lang="Python">
+
local_matrix = local_transform.Matrix()   
RLPy.RIObject.LocalTransform ( self)
+
local_to_world = bone.LocalToWorld(local_matrix)
 +
print(local_to_world)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get local transform of the object.
+
 
( Experimental API )
+
=== Update ( self ) ===
====Returns====
+
 
<div style="margin-left: 2em;">
+
Update the Transform Control for a node in a character skeleton or scene object and update the scene.  After the [[#Update ( self )|Update]], the Transform Control's key values will reflect the world-transform values of the node for the current point in time.
Object transform - RLPy.RTransformf
+
 
</div>
+
<syntaxhighlight lang="python" line='line'>
-----
+
# Get root bone
===WorldTransform===
+
avatar_list = RLPy.RScene.GetAvatars()
<syntaxhighlight lang="Python">
+
avatar = avatar_list[0]
RLPy.RIObject.WorldTransform ( self)
+
skeleton_component = avatar.GetSkeletonComponent()
 +
root_bone = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone child node world transform rotation x-axis value
 +
motion_bones = skeleton_component.GetMotionBones()
 +
child = motion_bones[1]
 +
child_world = child.WorldTransform()
 +
child_rot_x = child_world.R().x
 +
 
 +
# Set float control rotation x-axis value
 +
RLPy.RGlobal.SetTime(RLPy.RTime(0))
 +
animation_clip = skeleton_component.GetClip(0)
 +
root_control = animation_clip.GetControl("Layer", root_bone)
 +
data_block = root_control.GetDataBlock()
 +
float_control_rotate_x = data_block.GetControl("Rotation/RotationX")
 +
float_control_rotate_x.SetValue(RLPy.RGlobal.GetTime(), math.radians(60))
 +
 
 +
# Update root bone with float control
 +
root_bone.Update()
 +
 
 +
# Get root bone child node world transform rotation x-axis value after updated
 +
new_child_world = child.WorldTransform()
 +
after_update_child_rot_x = new_child_world.R().x
 
</syntaxhighlight>
 
</syntaxhighlight>
Get world transform of the object.
 
( Experimental API )
 
====Returns====
 
<div style="margin-left: 2em;">
 
Object transform - RLPy.RTransformf
 
</div>
 

Latest revision as of 22:42, 14 April 2020

Main article: Modules.
Last modified: 04/14/2020

Description

This class is used to access node parameters in a character skeleton or scene object. Retrievable parameters include name, ID, parent node, list of child nodes, and more. Update to get the world-transform of the bone node for the current point in time.

Inheritance

RIBase > RINode 

Member Functions

GetName ( self )

Get the name of the node in a character skeleton or scene object.

Returns

Name of the node - str
1 # Get root bone
2 avatar_list = RLPy.RScene.GetAvatars()
3 avatar = avatar_list[0]
4 skeleton_component = avatar.GetSkeletonComponent()
5 root_bone = skeleton_component.GetRootBone()
6 
7 # Get root bone node name
8 node_name = root_bone.GetName()
9 print(node_name)

GetID ( self )

Get the ID of the node in a character skeleton or scene object.

Returns

ID of the node - int
1 # Get root bone
2 avatar_list = RLPy.RScene.GetAvatars()
3 avatar = avatar_list[0]
4 skeleton_component = avatar.GetSkeletonComponent()
5 root_bone = skeleton_component.GetRootBone()
6 
7 # Get root bone node ID
8 node_id = root_bone.GetID()
9 print(node_id)

GetParent ( self )

Get the parent node of the bone node in a character skeleton or scene object. If a parent does not exist, then return None.

Returns

Parent node - RINode
No parent node - None
1 # Get root bone
2 avatar_list = RLPy.RScene.GetAvatars()
3 avatar = avatar_list[0]
4 skeleton_component = avatar.GetSkeletonComponent()
5 root_bone = skeleton_component.GetRootBone()
6 
7 # Get root bone parent node
8 parent_node = root_bone.GetParent()
9 print(parent_node)

GetChildren ( self )

Get a list of child nodes for a node in a character skeleton or scene object. If this node does not have child nodes, then return None.

See Also: GetParent

Returns

List of child nodes - RINode list
No child nodes - None
1 # Get root bone
2 avatar_list = RLPy.RScene.GetAvatars()
3 avatar = avatar_list[0]
4 skeleton_component = avatar.GetSkeletonComponent()
5 root_bone = skeleton_component.GetRootBone()
6 
7 # Get root bone children node list
8 children_node_list = root_bone.GetChildren()
9 print(children_node_list)

LocalTransform ( self )

Get the local-transform for a node in a character skeleton or scene object.

See Also: WorldTransform

Returns

Node local-transform - RTransform
1 # Get root bone
2 avatar_list = RLPy.RScene.GetAvatars()
3 avatar = avatar_list[0]
4 skeleton_component = avatar.GetSkeletonComponent()
5 root_bone = skeleton_component.GetRootBone()
6 
7 # Get root bone local transform
8 local_transform = root_bone.LocalTransform()
9 print(local_transform)

WorldTransform ( self )

Get the world-transform for a node in a character skeleton or scene object.

See Also: LocalTransform

Returns

Node world-transform - RTransform
1 # Get root bone
2 avatar_list = RLPy.RScene.GetAvatars()
3 avatar = avatar_list[0]
4 skeleton_component = avatar.GetSkeletonComponent()
5 root_bone = skeleton_component.GetRootBone()
6 
7 # Get root bone world transform
8 world_transform = root_bone.WorldTransform()
9 print(world_transform)

WorldToLocal ( self, kWorldMatrix )

Convert the world-transform matrix for a node in a character skeleton or scene object to local-transform matrix.

See Also: LocalToWorld

Parameters

kWorldMatrix [IN] Node world-transform matrix - RMatrix4

Returns

Node local-transform matrix - RMatrix4
 1 # Get root bone
 2 avatar_list = RLPy.RScene.GetAvatars()
 3 avatar = avatar_list[0]
 4 skeleton_component = avatar.GetSkeletonComponent()
 5 root_bone = skeleton_component.GetRootBone()
 6 
 7 # Transfer root bone world transform matrix to local transform matrix
 8 world_transform = root_bone.WorldTransform()
 9 world_matrix = world_transform.Matrix()  
10 world_to_local = bone.WorldToLocal(world_matrix)
11 print(world_to_local)

LocalToWorld ( self, kLocalMatrix )

Convert the local-transform matrix for a node in a character skeleton or scene object to world-transform matrix.

See Also: WorldToLocal

Parameters

kLocalMatrix [IN] Node local-transform matrix - RMatrix4

Returns

Node local-transform matrix - RMatrix4
1 # Transfer root bone local transform matrix to world transform matrix
2 local_transform = root_bone.LocalTransform()
3 local_matrix = local_transform.Matrix()     
4 local_to_world = bone.LocalToWorld(local_matrix)
5 print(local_to_world)

Update ( self )

Update the Transform Control for a node in a character skeleton or scene object and update the scene. After the Update, the Transform Control's key values will reflect the world-transform values of the node for the current point in time.

 1 # Get root bone
 2 avatar_list = RLPy.RScene.GetAvatars()
 3 avatar = avatar_list[0]
 4 skeleton_component = avatar.GetSkeletonComponent()
 5 root_bone = skeleton_component.GetRootBone()
 6 
 7 # Get root bone child node world transform rotation x-axis value
 8 motion_bones = skeleton_component.GetMotionBones()
 9 child = motion_bones[1]
10 child_world = child.WorldTransform()
11 child_rot_x = child_world.R().x
12 
13 # Set float control rotation x-axis value
14 RLPy.RGlobal.SetTime(RLPy.RTime(0))
15 animation_clip = skeleton_component.GetClip(0)
16 root_control = animation_clip.GetControl("Layer", root_bone)
17 data_block = root_control.GetDataBlock()
18 float_control_rotate_x = data_block.GetControl("Rotation/RotationX")
19 float_control_rotate_x.SetValue(RLPy.RGlobal.GetTime(), math.radians(60))
20 
21 # Update root bone with float control
22 root_bone.Update()
23 
24 # Get root bone child node world transform rotation x-axis value after updated
25 new_child_world = child.WorldTransform()
26 after_update_child_rot_x = new_child_world.R().x