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

From Reallusion Wiki!
Jump to: navigation, search
m
m
Line 1: Line 1:
 
{{TOC}}
 
{{TOC}}
 
{{Parent|IC_Python_API:RL_Python_Modules|Modules}}
 
{{Parent|IC_Python_API:RL_Python_Modules|Modules}}
==Inheritance==
+
{{last_modified}}
This class inherits public member functions from:
+
 
*[[IC_Python_API:RLPy_RIBase|RLPy.RIBase]]
+
== Description ==
==Detailed Description==
+
 
This class is the base class of the objects in the scene.
+
This class is used to access the bone node parameters for a character skeleton or object.  Retrievable parameters include name, ID, parent node, child nodes (list), etc.  Use [[#Update ( self )|Update]] to get the world transform values for the bone node for the current point in time.
 +
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
 +
# Get root bone node
 
avatar_list = RLPy.RScene.GetAvatars()
 
avatar_list = RLPy.RScene.GetAvatars()
 
avatar = avatar_list[0]
 
avatar = avatar_list[0]
+
skeleton_component = avatar.GetSkeletonComponent()
# basic information
+
bone_node = skeleton_component.GetRootBone()
print(avatar.GetName())
+
</syntaxhighlight>
print(avatar.GetID())
+
print(avatar.GetType()) # RLPy.EObjectType_Avatar
+
+
# get control
+
transform_control = avatar.GetControl("Transform") # type RTransformControl
+
avatar_path_position_control = avatar.GetControl("PathPosition") # type RFloatControl
+
avatar_path_offset_control = avatar.GetControl("PathOffset") # type RTransformControl
+
  
#clone object
+
== Member Functions ==
clone_avatar = avatar.Clone()
+
 
print( clone_avatar )
+
=== GetName ( self ) ===
 +
 
 +
Get the name of the bone node of a character skeleton or scene object.
 +
 
 +
==== Returns ====
 +
:Name of the bone node - str
  
#is selected
 
RLPy.RScene.SelectObject(avatar)
 
print(avatar.IsSelected()) #True
 
</syntaxhighlight>
 
==Operators==
 
This class supports the following operators:
 
{| class="wikitable"
 
!Member
 
!Operation
 
!Syntax
 
!Description
 
!Example
 
|-
 
! scope="row"|__eq__
 
|Equality
 
|a == b
 
|If the values of two operands are equal, then the condition becomes true.
 
|(a == b) is not true.
 
|}
 
==Member Functions==
 
===Clone===
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.Clone ( self )
+
# Get root bone node
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
bone_node = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone name
 +
bone_name = bone_node.GetName()
 +
print(bone_name)
 
</syntaxhighlight>
 
</syntaxhighlight>
Clones the object original and returns the clone.
 
<span style="background:#ffcccc">( Experimental API )</span>
 
====Return Values====
 
<div style="margin-left: 2em;">
 
  
'''cloned''' object.
+
=== GetID ( self ) ===
</div>
+
 
-----
+
Get the ID of the bone node of a character skeleton or scene object.
===GetBounds===
+
 
 +
==== Returns ====
 +
:ID of the bone node - int
 +
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.GetBounds ( self, kMaxPoint, kCenterPoint, kMinPoint )
+
# Get root bone node
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
bone_node = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone ID
 +
bone_id = bone_node.GetID()
 +
print(bone_id)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get world bound of this object.
 
<span style="background:#ffcccc">( Experimental API )</span>
 
====Parameters====
 
<div style="margin-left: 2em;">
 
  
'''kMaxPoint''' [OUT] The maximal point of the box - RLPy.RVector3f
+
=== GetParent ( self ) ===
  
'''kCenterPoint''' [OUT] The center of the bounding box - RLPy.RVector3f
+
Get the parent bone of the bone node of a character skeleton or scene object.
  
'''kMinPoint''' [OUT] The minimal point of the box - RLPy.RVector3f
+
See Also: [[#GetChildren ( self )|GetChildren]]
</div>
+
====Return Values====
+
<div style="margin-left: 2em;">
+
  
'''RLPy.RStatus.Success''' Success
+
==== Returns ====
 +
:Parent bone node - [[IC_Python_API:RLPy_RINode|RINode]]
  
'''RLPy.RStatus.Failure''' Fail
 
</div>
 
-----
 
===GetControl===
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.GetControl ( self, strKey )
+
# Get root bone node
</syntaxhighlight>
+
avatar_list = RLPy.RScene.GetAvatars()
Get control of the object.
+
avatar = avatar_list[0]
====Parameters====
+
skeleton_component = avatar.GetSkeletonComponent()
<div style="margin-left: 2em;">
+
bone_node = skeleton_component.GetRootBone()
  
'''strKey''' [IN] Key of the
+
# Get root bone parent bone
controller, allowing use "Transform" to retrieve the transform control
+
parent_bone = bone_node.GetParent()
of the Transform track, use "PathPosition" to retrieve the float control
+
print(parent_bone)
of Path position track, and use "PathOffset" to retrieve the transform
+
control of the Path Offset track, - string
+
</div>
+
====Returns====
+
<div style="margin-left: 2em;">The specified control - RLPy.RControl
+
</div>
+
-----
+
===GetID===
+
<syntaxhighlight lang="Python">
+
RLPy.RIObject.GetID ( self )
+
 
</syntaxhighlight>
 
</syntaxhighlight>
Get unique id of the object.
 
====Returns====
 
<div style="margin-left: 2em;">Object id - int
 
</div>
 
-----
 
===GetMeshNames===
 
<syntaxhighlight lang="Python">
 
RLPy.RIObject.GetMeshNames ( self )
 
</syntaxhighlight>
 
Get all mesh names of the object.
 
====Returns====
 
<div style="margin-left: 2em;">Mesh name list - string
 
</div>
 
-----
 
===GetName===
 
<syntaxhighlight lang="Python">
 
RLPy.RIObject.GetName ( self )
 
</syntaxhighlight>
 
Get name of the object.
 
====Returns====
 
<div style="margin-left: 2em;">Object name - string
 
</div>
 
-----
 
===GetPivot===
 
<syntaxhighlight lang="Python">
 
RLPy.RIObject.GetPivot ( self, kPosition, kOrientation )
 
</syntaxhighlight>
 
Get this object's pivot.
 
<span style="background:#ffcccc">( Experimental API )</span>
 
====Parameters====
 
<div style="margin-left: 2em;">
 
  
'''kPosition''' [OUT] current pivot position - RLPy.RVector3f
+
=== GetChildren ( self ) ===
  
'''kOrientation''' [OUT] current pivot orientation - RLPy.RVector3f
+
Get a list of child bones for a bone node of a character skeleton or scene object.
</div>
+
====Return Values====
+
<div style="margin-left: 2em;">
+
  
'''RLPy.RStatus.Success''' Success
+
See Also: [[#GetParent ( self )|GetParent]]
 +
 
 +
==== Returns ====
 +
:List of child bone nodes - [[IC_Python_API:RLPy_RINode|RINode]] list
  
'''RLPy.RStatus.Failure''' Fail
 
</div>
 
-----
 
===GetType===
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.GetType ( self )
+
# Get root bone node
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
bone_node = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone children bone list
 +
children_bone_list = bone_node.GetChildren()
 +
print(children_bone_list)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get object type of the object.
 
====Returns====
 
<div style="margin-left: 2em;">Object type - RLPy.EObjectType
 
*'''RLPy.EObjectType_Object'''
 
*'''RLPy.EObjectType_Avatar'''
 
*'''RLPy.EObjectType_Prop'''
 
*'''RLPy.EObjectType_Camera'''
 
*'''RLPy.EObjectType_Particle'''
 
*'''RLPy.EObjectType_Light'''
 
*'''RLPy.EObjectType_SpotLight'''
 
*'''RLPy.EObjectType_PointLight'''
 
*'''RLPy.EObjectType_DirectionalLight'''
 
</div>
 
-----
 
===IsSelected===
 
<syntaxhighlight lang="Python">
 
RLPy.RIObject.IsSelected ( self )
 
</syntaxhighlight>
 
A Boolean value indicating whether the object is in the selected state.
 
<span style="background:#ffcccc">( Experimental API )</span>
 
====Return Values====
 
<div style="margin-left: 2em;">
 
  
'''selected''' or not
+
=== LocalTransform ( self ) ===
</div>
+
 
-----
+
Get the local-transform for a bone node of a character skeleton or scene object.
===LinkTo===
+
 
 +
See Also: [[#WorldTransform ( self )|WorldTransform]]
 +
 
 +
==== Returns ====
 +
:Bone node local-transform - [[IC_Python_API:RLPy_RTransform|RTransform]]
 +
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.LinkTo ( self, spTargetObject, kTime )
+
# Get root bone node
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
bone_node = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone local transform
 +
local_transform = bone_node.LocalTransform()
 +
print(local_transform)
 
</syntaxhighlight>
 
</syntaxhighlight>
Simultaneously move or rotate link target object and this object.
 
And allowed to link your object to another one at a specific point of
 
time. The Link never changes the Hierarchy Structure of the current
 
object. <span style="background:#ffcccc">( Experimental API )</span>
 
====Parameters====
 
<div style="margin-left: 2em;">
 
  
'''spTargetObject''' [IN] Link target object - RLPy.RIObject
+
=== WorldTransform ( self ) ===
  
'''kTime''' [IN] Time of link - RLPy.RTime
+
Get the world-transform for a bone node of a character skeleton or scene object.
</div>
+
====Return Values====
+
<div style="margin-left: 2em;">
+
  
'''RLPy.RStatus.Success''' Success
+
See Also: [[#LocalTransform ( self )|LocalTransform]]
 +
 
 +
==== Returns ====
 +
:Bone node world-transform - [[IC_Python_API:RLPy_RTransform|RTransform]]
  
'''RLPy.RStatus.Failure''' Fail
 
</div>
 
-----
 
===LocalTransform===
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.LocalTransform ( self )
+
# Get root bone node
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
bone_node = skeleton_component.GetRootBone()
 +
 
 +
# Get root bone world transform
 +
world_transform = bone_node.WorldTransform()
 +
print(world_transform)
 
</syntaxhighlight>
 
</syntaxhighlight>
Get local transform of the object.
 
<span style="background:#ffcccc">( Experimental API )</span>
 
====Returns====
 
<div style="margin-left: 2em;">Object transform - RLPy.RTransformf
 
</div>
 
-----
 
===SetName===
 
<syntaxhighlight lang="Python">
 
RLPy.RIObject.SetName ( self, strName )
 
</syntaxhighlight>
 
Set object's name.
 
<span style="background:#ffcccc">( Experimental API )</span>
 
====Parameters====
 
<div style="margin-left: 2em;">
 
  
'''strName''' [IN] object name - string
+
=== WorldToLocal ( self, kWorldMatrix ) ===
</div>
+
====Return Values====
+
<div style="margin-left: 2em;">
+
  
'''RLPy.RStatus.Success''' Success
+
Convert the world-transform matrix for a bone node of a character skeleton or scene object to local-transform matrix.
 +
 
 +
See Also: [[#LocalToWorld ( self, kLocalMatrix )|LocalToWorld]]
 +
 
 +
==== Parameters ====
 +
:kWorldMatrix [IN] Character bone node world-transform matrix - [[IC_Python_API:RLPy_RMatrix4|RMatrix4]]
 +
 
 +
==== Returns ====
 +
:Bone node local-transform matrix - [[IC_Python_API:RLPy_RMatrix4|RMatrix4]]
  
'''RLPy.RStatus.Failure''' Fail
 
</div>
 
-----
 
===SetParent===
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.SetParent ( self, args )
+
# Get root bone node
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
bone_node = skeleton_component.GetRootBone()
 +
 
 +
# Transfer root bone world transform matrix to local transform matrix
 +
world_transform = bone_node.WorldTransform()
 +
world_matrix = world_transform.Matrix() 
 +
world_to_local = bone.WorldToLocal(world_matrix)
 +
print(world_to_local)
 
</syntaxhighlight>
 
</syntaxhighlight>
<span style="background:#ffcccc">( Experimental API )</span>
 
====Parameters====
 
<div style="margin-left: 2em;">
 
  
'''spParent''' [IN] If parent is null, this object will restore default parent - RLPy.RINode
+
=== LocalToWorld ( self, kLocalMatrix ) ===
</div>
+
 
====Returns====
+
Convert the local-transform matrix for a bone node of a character skeleton or scene object to world-transform matrix.
<div style="margin-left: 2em;">RStatus - RLPy.RStatus
+
 
</div>
+
See Also: [[#WorldToLocal ( self, kWorldMatrix )|WorldToLocal]]
-----
+
 
===UnLink===
+
==== Parameters ====
 +
:kLocalMatrix [IN] Character bone node local-transform matrix - [[IC_Python_API:RLPy_RMatrix4|RMatrix4]]
 +
 
 +
==== Returns ====
 +
:Bone node world-transform matrix - [[IC_Python_API:RLPy_RMatrix4|RMatrix4]]
 +
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.UnLink ( self, kTime )
+
# Get root bone node
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
bone_node = skeleton_component.GetRootBone()
 +
 
 +
# Transfer root bone local transform matrix to world transform matrix
 +
local_transform = bone_node.LocalTransform()
 +
local_matrix = local_transform.Matrix()   
 +
local_to_world = bone.LocalToWorld(local_matrix)
 +
print(local_to_world)
 
</syntaxhighlight>
 
</syntaxhighlight>
Unlink object of time.
 
<span style="background:#ffcccc">( Experimental API )</span>
 
====Parameters====
 
<div style="margin-left: 2em;">
 
  
'''kTime''' [IN] Time of unlink - RLPy.RTime
+
=== Update ( self ) ===
</div>
+
====Return Values====
+
<div style="margin-left: 2em;">
+
  
'''RLPy.RStatus.Success''' Success
+
Update the Transform Control for a bone node of a character skelecton or scene object.  After the update, the Transform Control's key value will reflect the world-transform values of the bone node for the current point in time.
  
'''RLPy.RStatus.Failure''' Fail
 
</div>
 
-----
 
===WorldTransform===
 
 
<syntaxhighlight lang="Python">
 
<syntaxhighlight lang="Python">
RLPy.RIObject.WorldTransform ( self )
+
# Get root bone node
 +
avatar_list = RLPy.RScene.GetAvatars()
 +
avatar = avatar_list[0]
 +
skeleton_component = avatar.GetSkeletonComponent()
 +
bone_node = 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)
 +
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
 +
bone_node.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.
 
<span style="background:#ffcccc">( Experimental API )</span>
 
====Returns====
 
<div style="margin-left: 2em;">Object transform - RLPy.RTransformf
 
</div>
 

Revision as of 23:02, 31 March 2020

Main article: Modules.
Last modified: 03/31/2020

Description

This class is used to access the bone node parameters for a character skeleton or object. Retrievable parameters include name, ID, parent node, child nodes (list), etc. Use Update to get the world transform values for the bone node for the current point in time.

# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

Member Functions

GetName ( self )

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

Returns

Name of the bone node - str
# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

# Get root bone name
bone_name = bone_node.GetName()
print(bone_name)

GetID ( self )

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

Returns

ID of the bone node - int
# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

# Get root bone ID
bone_id = bone_node.GetID()
print(bone_id)

GetParent ( self )

Get the parent bone of the bone node of a character skeleton or scene object.

See Also: GetChildren

Returns

Parent bone node - RINode
# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

# Get root bone parent bone
parent_bone = bone_node.GetParent()
print(parent_bone)

GetChildren ( self )

Get a list of child bones for a bone node of a character skeleton or scene object.

See Also: GetParent

Returns

List of child bone nodes - RINode list
# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

# Get root bone children bone list
children_bone_list = bone_node.GetChildren()
print(children_bone_list)

LocalTransform ( self )

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

See Also: WorldTransform

Returns

Bone node local-transform - RTransform
# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

# Get root bone local transform
local_transform = bone_node.LocalTransform()
print(local_transform)

WorldTransform ( self )

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

See Also: LocalTransform

Returns

Bone node world-transform - RTransform
# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

# Get root bone world transform
world_transform = bone_node.WorldTransform()
print(world_transform)

WorldToLocal ( self, kWorldMatrix )

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

See Also: LocalToWorld

Parameters

kWorldMatrix [IN] Character bone node world-transform matrix - RMatrix4

Returns

Bone node local-transform matrix - RMatrix4
# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

# Transfer root bone world transform matrix to local transform matrix
world_transform = bone_node.WorldTransform()
world_matrix = world_transform.Matrix()  
world_to_local = bone.WorldToLocal(world_matrix)
print(world_to_local)

LocalToWorld ( self, kLocalMatrix )

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

See Also: WorldToLocal

Parameters

kLocalMatrix [IN] Character bone node local-transform matrix - RMatrix4

Returns

Bone node world-transform matrix - RMatrix4
# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = skeleton_component.GetRootBone()

# Transfer root bone local transform matrix to world transform matrix
local_transform = bone_node.LocalTransform()
local_matrix = local_transform.Matrix()     
local_to_world = bone.LocalToWorld(local_matrix)
print(local_to_world)

Update ( self )

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

# Get root bone node
avatar_list = RLPy.RScene.GetAvatars()
avatar = avatar_list[0]
skeleton_component = avatar.GetSkeletonComponent()
bone_node = 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)
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
bone_node.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