Difference between revisions of "IC Python API:Uses and Capabilities"

From Reallusion Wiki!
Jump to: navigation, search
m (Version 0.7.2)
m (Change Log)
 
(41 intermediate revisions by the same user not shown)
Line 4: Line 4:
 
The iClone Python API helps you to extend and customize iClone, and more easily integrate it into a Python-based pipeline. It provides a bridge between iClone and Python libraries and Python tools. The Python SDK is built on top of the iClone C++ SDK, and you can access a subset of the iClone API from Python scripts and execute them in iClone.
 
The iClone Python API helps you to extend and customize iClone, and more easily integrate it into a Python-based pipeline. It provides a bridge between iClone and Python libraries and Python tools. The Python SDK is built on top of the iClone C++ SDK, and you can access a subset of the iClone API from Python scripts and execute them in iClone.
  
The iClone Python API can do the following:
+
== Change Log ==
  
{|class = "wikitable"
+
The sections below are expandable and are organized according to module and application version history.
|rowspan="2"|
+
 
!colspan="3"|Character
+
=== v0.7.8 ===
!rowspan="2"|Prop
+
 
!rowspan="2"|Camera
+
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
!rowspan="2"|Light
+
<div style="font-weight:bold;line-height:1.6;">iC 7.8 ( 07/21/2020 ) </div>
 +
<div class="mw-collapsible-content">
 +
{|class= "wikitable"
 +
!scope="row" rowspan="21"|RIPointLight<br>RISPotLight
 +
|New ::IsTubeShape(): Check if the light's shape is a tube (tube length of 0 equates to a sphere).
 
|-
 
|-
!Std(G5, CC, etc.)
+
|New ::SetTubeShape(bool bTube): Set the light's shape to tubular.
!Non-Std
+
!Non-Human
+
 
|-
 
|-
!scope="row"|Transformation (RTS)
+
|New ::GetTubeLength(): Get the light's tube shape length (tube length of 0 equates to a sphere).
|7.4
+
|7.4
+
|7.4
+
|7.4
+
|7.4
+
|7.4
+
 
|-
 
|-
!scope="row"|Facial Expression
+
|New ::SetTubeLength(float Length): Set the light's tube shape length (tube length of 0 equates to a sphere).
|7.4 Mo-cap Module
+
|7.4 Mo-cap Module
+
| -
+
| -
+
| -
+
| -
+
 
|-
 
|-
!scope="row"|Morph Animation
+
|New ::GetRadiusLength(): Get the light's tube shape radius.
|7.4 Experimental
+
|7.4 Experimental
+
|7.4 Experimental
+
|7.4 Experimental
+
|
+
| -
+
 
|-
 
|-
!scope="row"|Material
+
|New ::SetRadiusLength(float Radius): Sets the light's tube shape radius.
|7.4 Experimental
+
|7.4 Experimental
+
|7.4 Experimental
+
|7.4 Experimental
+
|
+
|7.4 Experimental
+
 
|-
 
|-
!scope="row"|Parameters
+
|New ::GetSoftRadiusLength(float Radius): Gets the light's tube shape soft radius (softer specular).
| -
+
|-
| -
+
|New ::SetSoftRadiusLength(float SoftRadius): Sets the light's tube shape soft radius.
| -
+
|-
| -
+
|New ::IsRectangleShape(): Check if the light's shape is rectangular.
|7.4 Experimental
+
|-
|7.4 Experimental
+
|New ::SetRectangleShape(bool bRect): Set the light's shape to rectangular.
 +
|-
 +
|New ::GetRectWidthHeight(): Get the width and height of the light's rectangular shape.
 +
|-
 +
|New ::SetRectWidthHeight( RL::CVector2f vWidthHeight ): Set the width and height of the light's rectangular shape.
 +
|-
 +
|New ::GetInverseSquare(): Check if the light's strength and dropoff settings are inline with real-world physic's inverse-square law.
 +
|-
 +
|New ::SetInverseSquare(bool bls): Set the light's strength and dropoff to conform with real-world physic's inverse-square law.
 +
|-
 +
|New ::GetTransmission(): Check if the light is able to penetrate into SSS materials/surfaces.
 +
|-
 +
|New ::SetTransmission(bool bls): Set the light's ability to penetrate into SSS materials/surfaces.
 +
|-
 +
|New ::ClearRectTexture(): Remove the rectangular texture.
 +
|-
 +
|New ::LoadRectTexture(): Import a rectangular texture at a given file location.
 +
|-
 +
|New ::SaveRectTexture(): Save rectangular texture.
 +
|-
 +
|New ::LoadIes( const std::wstring& strIesFilePath ): Load Light-Emitting Surface (LES) data file from a given file location.
 +
|-
 +
|New ::SaveIes( const std::wstring& strIesFilePath ): Export Light-Emitting Surface (LES) data file.
 +
|-
 +
!scope="row"|PathPositionControl
 +
|Fixed erroneous key created by PathPositionControl's SetValue. This problem is caused by unallocated Refpath within the PathKey, causing the key to miss the path.
 +
|-
 +
!scope="row"|RGlobal
 +
|Modified RGlobal.RenderVideo( std::wstring strFileName ): RenderVideo now offers two options: render all or render within a time range. New default file name setting is also available for use.
 +
|-
 +
!scope="row" rowspan="2"|RISkeletonComponent
 +
|Fixed RISkeletonComponent::GetMotionBones(): Rectified GetMotionBones' inability to query Motion Bones from Non-Human characters.
 +
|-
 +
|New RISkeletonComponent.AddClip(RTime): Create a new Body Motion clip at a given time and return it - RIClip.
 +
|-
 +
!scope="row"|RScene
 +
|New RScene::FindChildObjects(): Use this API to find child object for a given object. Within this API, the bAllLevel parameter can be set to find all child nodes or just return the next direct child node.
 +
|-
 +
!scope="row" rowspan="2"|RFileIO
 +
|Fixed RFileIO::LoadFile(): Rectified import iMtlPlus defect.
 +
|-
 +
|Fixed RFileIO::ExportFbxFile(): Rectified import iMotionPlus defect.
 +
|-
 +
!scope="row" rowspan="2"|RIMaterialComponent
 +
|New RIMaterialComponent::GetAttributeValue( meshName, materialName, attributeName ): Currently supported attributes include '''TessellationLevel''', '''TessellationMultiplier''', and '''TessellationThreshold'''.
 +
|-
 +
|New RIMaterialComponent::SetAttributeValue(meshName, materialName, attributeName, value): Currently supported attributes include '''TessellationLevel''', '''TessellationMultiplier''', and '''TessellationThreshold'''.
 +
|-
 +
!scope="row"|RIVisemeComponent
 +
|Enhanced RIVisemeComponent::AddVisemeKey(): Enhanced performance for AddVisemeKey.
 
|}
 
|}
 +
</div></div>
  
== Capabilities ==
+
=== v0.7.7 ===
  
As the iClone Python API continues to evolve, additional capabilities will be added over time. Below are lists of iClone Python API's current capabilities categorized by version number. The lists below are by no means exhaustive.
+
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
 +
<div style="font-weight:bold;line-height:1.6;">iC 7.71 ( 12/05/2019 - 12/18/2019 ) </div>
 +
<div class="mw-collapsible-content">
 +
{|class= "wikitable"
 +
!scope="row" rowspan="2"|RFileIO
 +
|Modified RLPy.RFileIO.LoadObject(): New Parameter(bRecordStep) to decide whether to record this operation into Undo/Redo list
 +
|-
 +
|Modified RLPy.RFileIO.LoadFile(): New Parameter(bRecordStep) to decide whether to record this operation into Undo/Redo list.
 +
|-
 +
!scope="row" rowspan="7"|RIPopcornFXObject
 +
|New RIPopcornFXObject::GetAttributeCount(): Get the number of PopcornFX attributes.
 +
|-
 +
|New RIPopcornFXObject::GetAttributeName(index): Get the attribute name of a given index.
 +
|-
 +
|New RIPopcornFXObject::GetAttributeValue(index): Get the attribute value of given index.
 +
|-
 +
|New RIPopcornFXObject::AddAttributeKey(Time, str, list(4)): Add the attribute key by time and name.
 +
|-
 +
|New RIPopcornFXObject::GetSamplerList(EPopcornFxSamplerType): Get the name of all samplers.
 +
|-
 +
|New RIPopcornFXObject::GetMeshSamplerTarget(str): Set the sampler object.
 +
|-
 +
|New RIPopcornFXObject::GetMeshSamplerTarget(str, RIObject):
 +
|-
 +
!scope="row"|EPopcornFxSamplerType
 +
|New EPopcornFxSamplerType(): Get the sampler object.
 +
|-
 +
!scope="row"|EObjectModifiedType
 +
|New EObjectModifiedType(): Provides the type of the object that was modified.
 +
|-
 +
!scope="row"|RIGlobal
 +
|New RIGlobal::ObjectModified(RIObject): This command can detect changes made to an object which is useful for refreshing a custom user interface or informing a plugin of the changes.
 +
|-
 +
!scope="row"|RIPopcornFXObject
 +
|New RIPopcornFXObject::ClearMeshSamplerTarget(str): Removes the Mesh Sampler target object.
 +
|}
 +
</div></div>
  
=== Version 0.7 ===
+
=== v0.7.6 ===
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
<div style="font-weight:bold;line-height:1.6;">iClone 7.4 Open Change Log</div>
+
<div style="font-weight:bold;line-height:1.6;">iC 7.7 ( 08/08/2019 - 11/05/2019 ) </div>
 
<div class="mw-collapsible-content">
 
<div class="mw-collapsible-content">
 
{|class= "wikitable"
 
{|class= "wikitable"
!scope="row"|Load iClone Formats
+
!scope="row"|RICamera
|This includes *.iProjects, *.iAvatars, *.iProps, and any number of supported file formats readable and writable by iClone.
+
|Fixed RICamera.GetFocalLength(): retrieves faulty value when the query is not of the current time.
 
|-
 
|-
!scope="row"|Animate Props
+
!scope="row"|RIProp
|RTS (Rotate, Translate, Scale) prop transformations, including playing their animation clips.
+
|Modified RIProp: Added ConvertBoneAxisAndParent in RISkeletonCompoment
 
|-
 
|-
!scope="row"|Animate Characters
+
!scope="row"|RIPopcornObject
|Play motion clips and rotate joints of a character in FK mode (Forward Kinetic).
+
|New RIPopcornObject: Added New RIPopcornObject to control PopcornFX object
 
|-
 
|-
!scope="row"|Morph Animation
+
!scope="row"|RScene
|Drive morph sliders and key morph slider values in the timeline.
+
|Modified RScene: RLPy.RScene.FindObject now supports PopcornFX object types.
 
|-
 
|-
!scope="row"|Add audio to objects
+
!scope="row" rowspan="4"|RICamera
|Add or remove audio tracks to props and characters that can playback in real-time.
+
|New RLPy.RICamera.RemoveDofKey( RKey ): Deletes DOF key at specified times
 
|-
 
|-
!scope="row"|Adjust Materials
+
|New RICamera.RemoveDofKeys(): Deletes all the DOF keys for a given camera.
|Adjust strength contributions per texture channel, UV settings, diffuse color, ambient color, opacity values, etc.
+
 
|-
 
|-
!scope="row"|Camera Controls
+
|New RLPy.RICamera.GetDofKeyCount(): Gets the total count of all DOF keys for a specified camera.
|Adjust focal length, angle of view, near and far clipping planes, etc. on any camera in the scene.
+
 
|-
 
|-
!scope="row"|Light Controls
+
|New RLPy.RICamera.IsLookAtMode( RTime ): Get the status of camera at a specified time.
|Control settings for direction, spot and point lights. Such as range, angle, falloff, attenuation, etc.
+
 
|-
 
|-
!scope="row"|Device Input
+
!scope="row"|Console
|Drive animations and object parameters with the keyboard, mice, joystick, etc.
+
|Fixed Console: Fixed log support for UTF-8 strings.
 
|-
 
|-
!scope="row"|TCP/IP
+
!scope="row" rowspan="3"|RIObject
|Drive animations and object parameters remotely with IOT (Internet of Things) from other computers, cell-phones, etc. Or, have iClone drive IOT with smart network connectivity for lights, doors, etc.
+
|New RLPy.RIObject.GetLinkedObject( RTime ): Get the linked object at a specified time.
 
|-
 
|-
!scope="row"|Get Events
+
|Fixed RLPy.RIObject.Clone(): Not returning the right object type (such as RIAvatar, RIProp etc)
|Setup callbacks for iClone run-time events such as on load, on selection, on parameter value change, on set timer, etc. Useful for tasks that need to trigger following an event like adding newly created items into a list tree, deploying automatic settings on load, or driving corrective morph targets when certain combinations of morphs are activated.
+
 
|-
 
|-
!scope="row"|Render Project
+
|RIObject: RLPy.RIObject.SetVisible: Effects the visibility of the entire object hierarchy rather than just the object itself.
|Write batch render scripts and specify target directories for output.
+
 
|-
 
|-
!scope="row"|Custom UI Design
+
!scope="row" rowspan="2"|RIFileIO
|Use iClone's native UI classes, or extend beyond it with QT's Pyside2 to create buttons, forms, dropdowns, modal windows, etc.
+
|Fixed RLPy.RIFileIO.LoadFile(): Now supports iPkfx file format.
 
|-
 
|-
!scope="row"|Animation Keys
+
|Fixed RLPy.RIFileIO.LoadObject(): Now supports iPkfx file format.
|Set timeline keys for various motion clips. Animate props, characters, lights, etc. via scripting.
+
 
|}
 
|}
 
</div></div>
 
</div></div>
  
=== Version 0.7.1 ===
+
=== v0.7.5 ===
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
<div style="font-weight:bold;line-height:1.6;">iClone 7.41 Open Change Log: 01/17/2019 - 01/31/2019 </div>
+
<div style="font-weight:bold;line-height:1.6;">iC 7.6 (07/05/2019 - 07/29/2019) </div>
 
<div class="mw-collapsible-content">
 
<div class="mw-collapsible-content">
{|class="wikitable"
+
{|class= "wikitable"
!scope="row"|LocalTransform & WorldTransform
+
!scope="row"|RCameraDofData
|Fixed incorrect transform rotations for RIObject, RIAvatar, RIProp, RILight, RICamera.
+
|Modified RLPy.RCameraDofData: Set Function can now be used.  Originally all SetEnable, SetFocus, etc. were hidden functions.
 
|-
 
|-
!scope="row"|RINode::WorldTransform
+
!scope="row" rowspan="5"|RICamera
|New WorldTransform for RINode; No need for the user to write a function to retrieve it.
+
|New <RStatus> AddDofKey( RKey, RCameraDofData ): The key used to download the Camera Dof, the Preview Camera cannot be downloaded (not Pause).
 
|-
 
|-
!scope="row"|Rkey
+
|New <int> GetNearClippingPlane(): Get the near clipping plane of the camera
|New RKey can be used to carry additional data such as Time, TransitionType, and TransitionStrength.
+
 
|-
 
|-
!scope="row"|Material Component
+
|New <RStatus> SetNearClippingPlane( int nNearPlane ): Set the near clipping plane of the camera to nNearPlane
|Fixed kTime > kKey for the MaterialComponent; Besides setting the frame time, one can also set the Transition Type and Strength.
+
 
|-
 
|-
!scope="row"|LoadImageToTexture
+
|New <int> GetFarClippingPlane(): Get the far clipping plane of the camera
|Ability to load texture images to any channel within a material accessible via Mesh > Material Name.
+
 
|-
 
|-
!scope="row"|RIHikEffectorComponent
+
|New <RStatus> SetFarClippingPlane( int nFarPlane ): Set the far clipping plane of the camera to nFarPlane
|Established framework for the RIHikEffoectorComponent API and test case is provided (not yet implemented).
+
 
|-
 
|-
!scope="row"|Ignore API
+
!scope="row" rowspan="2"|RIObject
|Fixed RAudio:SetAudioPtr and RScene:SetScenePtr not being ignored (currently the online documentation also has this problem).
+
|Update(): RTS & Geronetry to update all Child bone & Mesh of this object
 
|-
 
|-
!scope="row"|RApplication class
+
|Modified RIObject::LinkTo( std::shared_ptr< RIObject > spTargetObject, RO::ELinkObjectAlignType eAlignType, RTime kTime ): Link objects often pass AlignType to determine the Position / Rotation of the Target object.
|New RApplication class can retreive registry related data and API version number.  Test case has been added.
+
 
|-
 
|-
!scope="row"|RIObject::SetParent(RIObject/RINode)
+
!scope="row"|RINode
|All classes that derive from RIObject also inherit the SetParent member function.
+
|Update(): Transform to update all Childe Nodes
 
|-
 
|-
!scope="row"|RIObject::LinkTo(RIObject, RTime)
+
!scope="row"|ELinkObjectAlignType
|All classes that derive from RIObject also inherit the LinkTo member function.
+
|AlignType referenced when adding Link objects
 
|-
 
|-
!scope="row"|RIObject::Unlink(RTime)
+
!scope="row"|RIClip
|All classes that derive from RIObject also inherit the Unlink member function.
+
|Fixed RLPy.RIClip.SetLength(): that now even the props from the Prop SetParent group can correctly modify the Clip Length of each Child Prop
 
|-
 
|-
!scope="row"|RIFaceComponent::GetKey(args)
+
!scope="row" rowspan="2"|RScene
|Used to retrieve the current time's Facial Expression, Eye, and Head key values.  Usage:  RIFaceComponent::GetKey(RTime, Head, LeftEye, RightEye, Morph, Custom, Bone, Weight)
+
|Modified GetProps(): Restricted to get only the outermost Props on the scene (excluding the meaning of Props children)
 
|-
 
|-
!scope="row"|RIFaceComponent::AddClip(RTime)
+
|Modified FindObjects( RO::EObjectType eType ): Restricted to get only the outermost Props on the scene (excluding the meaning of Props children)
|Adds a default Facial clip at the designated point in time.
+
|}
 +
</div></div>
 +
 
 +
=== v0.7.4 ===
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
 +
<div style="font-weight:bold;line-height:1.6;">iC 7.5 ( 04/08/2019 - 07/01/2019 )</div>
 +
<div class="mw-collapsible-content">
 +
{|class= "wikitable"
 +
!scope="row" rowspan="3"|CCameraObject
 +
|New <RO::RCameraDofData> CCameraObject::GetDOFData(): Get camera Dof data.
 
|-
 
|-
!scope="row"|RIFaceComponent::AddEyeKey()
+
|<float> CCameraObject::GetAngleOfView( RO::RTime kTime ) const: Get Iclone camera FOV.
|Create a EyeKey under the Facial Layer.
+
 
|-
 
|-
!scope="row"|RIFaceComponent::AddHeadKey()
+
|<RO::RStatus> CCameraObject::GetAperture( float& fWidth, float& fHeight ): Get Filmback width and height.
|Create a HeadKey under the Facial Layer.
+
 
|-
 
|-
!scope="row"|RIFaceComponent::AddExpressionKey()
+
!scope="row" rowspan="2"|RScene
|Create a ExpressionKey under the Facial Layer.
+
|New <RO::RICameraPtr> RScene::GetCurrentCamera(): Get the camera currently used in the current scene.
 
|-
 
|-
!scope="row"|RIFaceComponent::AddVisemeKey()
+
|<RO::RStatus> RScene::ClearSelectObjects(): Added the state of deselecting objects in the scene.
|Create a LipsKey under the Viseme layer.
+
 
|-
 
|-
!scope="row"|RIObject::SetName(std::wstring)
+
!scope="row" rowspan="3"|RGlobal
|Used to change the name of an object.
+
|New <RO::RStatus> RGlobal::GetScreenSize( int& nWidth, int& nHeight ): Get Export Render size.
 
|-
 
|-
!scope="row"|RIObject::GetPivot()
+
|New <bool> RGlobal::IsTrialContentMode(): detect whether the current AP is loaded with trial content (for internal API).
|All classes that derive from RIObject also inherit the GetPivot member function.
+
 
|-
 
|-
!scope="row"|RIObject::SetPivot()
+
|New RGlobal.TrialVersionRemainingTimes( const std::wstring& strBinPath, unsigned int uProductID, const std::wstring& strProductFold,const std::wstring& strRegRoot,unsigned int uTimeNo ): Can check the remaining number of trails (some Trial will be useful, ex 3DX).
|Provides a way to retrieve the pivot point of a prop.
+
 
|-
 
|-
!scope="row"|RIObject::GetBounds()
+
!scope="row"|RIObject
|All classes that derive from RIObject also inherit the GetBounds member function.
+
|Fixed RIObject::SetName: SetName will now be recorded into undo/redo history.
 +
|-
 +
!scope="row" rowspan="4"|RIVisemeComponent
 +
|Modified RIVisemeComponent::AddVisemeKey( RVisemeKey ): Pass in RVisemeKey instead.
 +
|-
 +
|Modified RIVisemeComponent::RemoveVisemesKey( RVisemeKey ): Pass in RVisemeKey instead.
 +
|-
 +
|Modified RIVisemeComponent::GetVisemeKey( RTime kTime, RVisemeKey& kKey ): Pass in RVisemeKey and Reference to retrieve data.
 +
|-
 +
|Modified RIVisemeComponent::GetVisemeKeys(): Directly return std :: vector <RVisemeKey>.
 +
|-
 +
!scope="row"|RIAvatar
 +
|Modified RIAvatar::GetGeneration: Added two types CC_Game_Base_One & CC_Game_Base_Multi.
 +
|-
 +
!scope="row" rowspan="2"|RISkeletonComponent
 +
|New RISkeletonComponent::ConvertBoneAxisAndParent(kAxisMaps, kReParentMaps): Calculate the current RTS according to the incoming axial map & change the parent's map.
 +
|-
 +
|New RISkeletonComponent::ConvertToOriginalBoneAxis(): Turn the current Pose into the axis of the original skeleton (NonStd characters only).
 +
|-
 +
!scope="row" rowspan="2"|CCameraObject
 +
|New <RO::ECameraFitResolution> CCameraObject::GetFitRenderRegionType(): Get Camera fit render region type (Horizontal / Vertical).
 +
|-
 +
|New <RO::ECameraFitResolution> CCameraObject::GetFitFovType(): Get Camera fit fov type (Horizontal / Vertical).
 +
|-
 +
!scope="row"|REventCallback
 +
|New REventCallback::OnObjectDataChangedWithType( int nObjectChangeDataType ): Added the type corresponding to the event when the AP triggers the ObjectDataChanged event.
 +
|-
 +
!scope="row"|OnHierarchyChanged
 +
|New REventCallback::OnHierarchyChanged(): AP to trigger HierarchyChanged event, currently occurs in reach effector.
 +
|-
 +
!scope="row"|RIAvatar
 +
|New RIAvatar::GetAvatarType(): Which Type is used to get the current character (Standard, NonStd, StandardSearize).
 +
|-
 +
!scope="row" rowspan="3"|RFileIO
 +
|New <bool> RFileIO::CheckExportFbxHasLicense( RO::RIObjectPtr spObject ): Added judging whether the output Fbx comes with a sell / export license (for internal API).
 +
|-
 +
|Modified RFileIO::ExportFbxFile: When exporting Fbx, judge whether it has a sell / export license
 +
|-
 +
|Modified RFileIO::ExportFbxFile: Take one more parameter std :: wstring strIncludeMotionPath to output together with Object.
 +
|-
 +
!scope="row"|RICCamera
 +
|Modify RICCamera::GetFocalLength(): Correction If it is judged that the control (CameraFovClipControl / CCameraFovKeyControl) is wrong, the focal length is calculated based on the FrustumFov in the current camera.
 
|}
 
|}
 
</div></div>
 
</div></div>
  
=== Version 0.7.2 ===
+
=== v0.7.2 ===
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
<div style="font-weight:bold;line-height:1.6;">iC 7.4x Open Change Log: 02/15/2019 - 02/27/2019 </div>
+
<div style="font-weight:bold;line-height:1.6;">iC 7.4x ( 02/15/2019 - 02/27/2019 )</div>
 
<div class="mw-collapsible-content">
 
<div class="mw-collapsible-content">
 
{|class= "wikitable"
 
{|class= "wikitable"
!scope="row"|RIObjectPtr CICFileIO::LoadObject( strPath )
+
!scope="row"|CICFileIO
|Function that can load objects, and directly get the loaded objects, currently only the types that inherit RIObject can use this API
+
|New <RIObjectPtr> CICFileIO::LoadObject( strPath ): Function that can load objects, and directly get the loaded objects, currently only the types that inherit RIObject can use this API
 
|-
 
|-
!scope="row"|RlVisemeComponent::AddVisemesClip( args... )
+
!scope="row" rowspan="6"|RlVisemeComponent
|Used to create Viseme Clip.  Usage: RlVisemeComponent::AddVisemesClip( RO::RTime kTime, const std::wstring& nClipName, RO::RTime kTimeLength )
+
|New RlVisemeComponent::AddVisemesClip( RO::RTime kTime, const std::wstring& nClipName, RO::RTime kTimeLength ): Used to create Viseme Clip.
 
|-
 
|-
!scope="row"|RIProp::SetDummy( bIsDummy)
+
|New RlVisemeComponent::RemoveVisemesKey( RO::RTime kTime ): Remove a viseme key at the specified point in time.
|Used to set whether Prop is Dummy.
+
 
|-
 
|-
!scope="row"|bool RIProp::IsDummy()
+
|New RlVisemeComponent::GetVisemeMorphWeights(): Used to get the weight of each Morph of viseme.
|Used to check if Prop is Dummy.
+
 
|-
 
|-
!scope="row"|std::vector< std::wstring > RIMorphComponent::GetMorphNames()
+
|New RlVisemeComponent::GetVisemeBones(): Used to get the Bone used by Viseme.
|Used to get all MorphName in the specified mesh.
+
 
|-
 
|-
!scope="row"|RIObject::Clone()
+
|New RlVisemeComponent::GetVisemeKeys(): Used to get the time of all Viseme keys, and return RTime as an array.
|Used to copy the object.
+
 
|-
 
|-
!scope="row"|RIObject::IsSelected()
+
|New RlVisemeComponent::GetVisemeKey( RO::RTime kTime, RO::EVisemeID& eVisemeID, float& fWeight ): Used to get the VisemeID and Weight of Viseme at a specified point in time.
|Used to confirm whether the object is selected in the scene.
+
 
|-
 
|-
!scope="row"|RemoveVisemesClip( RO::RTime kTime )
+
!scope="row" rowspan="2"|RIProp
|Used to remove the Viseme Clip at the specified time.
+
|New RIProp::SetDummy( bIsDummy): Used to set whether Prop is Dummy.
 
|-
 
|-
!scope="row"|RlVisemeComponent::RemoveVisemesKey( RO::RTime kTime )
+
|New <bool> RIProp::IsDummy(): Used to check if Prop is Dummy.
|Used to remove the Viseme key at the specified point in time..
+
 
|-
 
|-
!scope="row"|RlVisemeComponent::GetVisemeMorphWeights()
+
!scope="row"|RIMorphComponent
|Used to get the weight of each Morph of Viseme.
+
|New std::vector< std::wstring > RIMorphComponent::GetMorphNames(): Get all morph names for the specified mesh.
 
|-
 
|-
!scope="row"|RlVisemeComponent::GetVisemeBones()
+
!scope="row" rowspan="2"|RIObject
|Used to get the Bone used by Viseme.
+
|New RIObject::Clone(): Used to copy the object.
 
|-
 
|-
!scope="row"|RlVisemeComponent::GetVisemeKeys()
+
|New RIObject::IsSelected(): Confirm whether the object is selected in the scene.
|Used to get the time of all Viseme keys, and return RTime as an array.
+
 
|-
 
|-
!scope="row"|RlVisemeComponent::GetVisemeKey( args... )
+
!scope="row"|RemoveVisemesClip
|Used to get the VisemeID and Weight of Viseme at a specified point in time. Usage: RlVisemeComponent::GetVisemeKey( RO::RTime kTime, RO::EVisemeID& eVisemeID, float& fWeight )
+
|New RemoveVisemesClip( RO::RTime kTime ): Remove a viseme Clip at the specified time.
 
|}
 
|}
 
</div></div>
 
</div></div>
  
=== Version 0.7.3 ===
+
=== v0.7.1 ===
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
<div style="font-weight:bold;line-height:1.6;">iClone 7.4x Open Change Log: 03/03/2019 - 04/29/2019 </div>
+
<div style="font-weight:bold;line-height:1.6;">iC 7.4x ( 01/17/2019 - 01/31/2019 ) </div>
 
<div class="mw-collapsible-content">
 
<div class="mw-collapsible-content">
{|class= "wikitable"
+
{|class="wikitable"
!scope="row"|RO::EHikEffector
+
!scope="row"|LocalTransform<br>WorldTransform
|Provide the same number as the core Hik enumeration that is aligned with RLHumanIK \ RLHikDef.h (the old version was aligned to ICInterfaceEnumDef.h).  This fix is applied to both LeftHandThumb and RightFootExtraFinger enums.
+
|Fixed LocalTransform/WorldTransform( RIObject, RIAvatar, RIProp,RILight, RICamera ): Incorrect transform rotations for RIObject, RIAvatar, RIProp, RILight, RICamera.
 
|-
 
|-
!scope="row"|RO::EHikEffectorType enum(Translate/Rotate)
+
!scope="row"|RINode
|Provide settings for HIK effector translate / rotate.
+
|New RINode::WorldTransform(): New WorldTransform for RINode; No need for the user to write a function to retrieve it.
 
|-
 
|-
!scope="row"|RMatrix4 RINode::WorldToLocal( RMatrix4 kWorld )
+
!scope="row"|Rkey
|Used to convert the input world space matrix into a local space matrix relative to this node.
+
|New RKey can be used to carry additional data such as Time, TransitionType, and TransitionStrength.
 
|-
 
|-
!scope="row"|RMatrix4 RINode::LocalToWorld( RMatrix4 kWorld )
+
!scope="row"|MaterialComponent
|Used to convert the input local space matrix into a matrix in actual wolrd space.
+
|Fixed MaterialComponent( AddAmbientKey, AddDiffuseKey, AddSpecularKey, AddGlossinessKey, AddSpecularKey, AddSelfIlluminationKey, AddOpacityKey, AddTextureWeightKey,  AddUvDataKey, RemoveUvDataKey, LoadVideoToTexture, AddVideoVolumeKey): kTime > kKey for the MaterialComponent; Besides setting the frame time, one can also set the Transition Type and Strength.
 
|-
 
|-
!scope="row"|Modified RISkeletonComponent::GetSkinBones
+
!scope="row"|LoadImageToTexture
|Fixed the problem of not returning all the skin bones.  The original method will only have 54 Bone (CC), but it should be more than this.
+
|Ability to load texture images to any channel within a material accessible via Mesh > Material Name.
 
|-
 
|-
!scope="row"|Modified RIProp::WorldTransform()
+
!scope="row"|RIHikEffectorComponent
|Fixed the faulty rotation problem.  The original Rotation did not do Degree to Radian, which caused the calculated Quaterion to be wrong.
+
|Established framework for the RIHikEffoectorComponent API and test case is provided (not yet implemented).
 
|-
 
|-
!scope="row"|CHikEffectorComponent::SetActive( RO::EHikEffector eEffector, RO::EHikEffectorType eType, bool bActive )
+
!scope="row"|Ignore API
|Used to set HIK effector active state.
+
|Fixed RAudio:SetAudioPtr and RScene:SetScenePtr not being ignored (currently the online documentation also has this problem).
 
|-
 
|-
!scope="row"|CHikEffectorComponent::GetActive( RO::EHikEffector eEffector, RO::EHikEffectorType eType )
+
!scope="row"|RApplication class
|Used to get the current HIK effector active state.
+
|New RApplication class can retreive registry related data and API version number.  Test case has been added.
 
|-
 
|-
!scope="row"|std::map< std::wstring, RL::CMatrix4f > CHikEffectorComponent::Solve( args... )
+
!scope="row" rowspan="7"|RIObject
|Mocap solution for HIK.  Usage: RL::CMatrix4f > CHikEffectorComponent::Solve( RO::EHikEffector eEffector, const RL::CMatrix4f& kMatrix )
+
|New RIObject::SetParent(RIObject/RINode): All classes that derive from RIObject also inherit the SetParent member function.
 
|-
 
|-
!scope="row"|CHikEffectorComponent::SetLock( args... )
+
|New RIObject::LinkTo(RIObject, RTime): All classes that derive from RIObject also inherit the LinkTo member function.
|Used to set IK effector Lock. CHikEffectorComponent::SetLock( RO::EHikEffector eEffector, RO::EHikEffectorType eType, bool bLock ).
+
 
|-
 
|-
!scope="row"|CHikEffectorComponent::GetLock( args... )
+
|New RIObject::SetName(std::wstring): Used to change the name of an object.
|Used to get the current IK effector Lock status.  Usage: CHikEffectorComponent::GetLock( RO::EHikEffector eEffector, RO::EHikEffectorType eType ).
+
 
|-
 
|-
!scope="row"|CHikEffectorComponent::SetPosition( args... )
+
|New RIObject::GetPivot(): All classes that derive from RIObject also inherit the GetPivot member function.
|Used to set IK effector Position coordinates. Usage: CHikEffectorComponent::SetPosition( RO::EHikEffector eEffector, const RL::CVector3f& vPosition ).
+
 
|-
 
|-
!scope="row"|CHikEffectorComponent::SetPosition( args... )
+
|New RIObject::SetPivot(): Provides a way to retrieve the pivot point of a prop.
|Used to set multiple IK effector Position coordinates. Usage: CHikEffectorComponent::SetPosition( const std::vector< RO::EHikEffector >& kEffectorIds, const std::vector< RL::CMatrix4f >& kEffectorWorld, const std::vector< bool >& kRotateActive, const std::vector< bool >& kTranslateActive)
+
 
|-
 
|-
!scope="row"|CHikEffectorComponent::SetBodyWeight( const float fWeight )
+
|New RIObject::GetBounds(): All classes that derive from RIObject also inherit the GetBounds member function.
|It is used to set the weight ratio of whole body ik when IK effector moves (0-1).
+
 
|-
 
|-
!scope="row"|CVisemeComponent::TextToSpeech( args... )
+
|New RIObject::Unlink(RTime): All classes that derive from RIObject also inherit the Unlink member function.
|Used to turn text into sound and set Viseme lips at the same time.  Usage: CVisemeComponent::TextToSpeech( std::wstring strContent, RO::ELanguage eLanguage, float fVolume, float fPitch, float fSpeed ).
+
 
|-
 
|-
!scope="row"|CVisemeComponent::TextToVisemeData( args... )
+
!scope="row" rowspan="6"|RIFaceComponent
|Used to convert input text into Visme lip data (English TTS system).  Usage: CVisemeComponent::TextToVisemeData( std::wstring strContent, float fVolume, float fPitch, float fSpeed )
+
|New RIFaceComponent::GetKey(RTime, Head, LeftEye, RightEye, Morph, Custom, Bone, Weight): Used to retrieve the current time's Facial Expression, Eye, and Head key values.
 
|-
 
|-
!scope="row"|Modify std::vector< RTime > GetVisemeKeyTimes()
+
|New RIFaceComponent::AddClip(RTime): Adds a default Facial clip at the designated point in time.
|Fixed the key time conversion problem.  Originally did not convert Frequency and changed GetVisemeKeys to GetVisemeKeyTimes.
+
 
|-
 
|-
!scope="row"|Modify CVisemeComponent::ProcessTTS( args... )
+
|New RIFaceComponent::AddEyeKey(): Create a EyeKey under the Facial Layer.
|private function Modify the language system to determine the system according to RO :: ELanguage. Usage: CVisemeComponent::ProcessTTS( std::wstring strContent, RO::ELanguage eLanguage, float fVolume, float fPitch, float fSpeed, std::wstring& wsWaveFilePath, RL::CArrayList< std::pair< unsigned short, unsigned int > >& kPhonemeDatas )
+
 
|-
 
|-
!scope="row"|RAudio.Load
+
|New RIFaceComponent::AddHeadKey(): Create a HeadKey under the Facial Layer.
|Fixed issues with wave files crashing twice.
+
 
|-
 
|-
!scope="row"|RFileIO::ExportFbxFile
+
|New RIFaceComponent::AddExpressionKey(): Create a ExpressionKey under the Facial Layer.
|Used for exporting FBX files.
+
 
|-
 
|-
!scope="row"|API Versioning
+
|New RIFaceComponent::AddVisemeKey(): Create a LipsKey under the Viseme layer.
|Changed API version to 0.7.3 from 0.7.2.
+
|}
 +
</div></div>
 +
 
 +
=== v0.7.0 ===
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="overflow:auto;">
 +
<div style="font-weight:bold;line-height:1.6;">iC 7.4x </div>
 +
<div class="mw-collapsible-content">
 +
{|class= "wikitable"
 +
!scope="row"|Load iClone Formats
 +
|This includes *.iProjects, *.iAvatars, *.iProps, and any number of supported file formats readable and writable by iClone.
 
|-
 
|-
!scope="row"|RISkeletonComponent::GetRootPositionRetargetingRatio
+
!scope="row"|Animate Props
|Provides how to convert from Position of SkinRoot to Position of MotionRoot.
+
|RTS (Rotate, Translate, Scale) prop transformations, including playing their animation clips.
 
|-
 
|-
!scope="row"|Modify ICCameraObject  - preview camera
+
!scope="row"|Animate Characters
|You can get preview camera through find camera object
+
|Play motion clips and rotate joints of a character in FK mode (Forward Kinetic).
 
|-
 
|-
!scope="row"|CFaceComponent::GetWeight( args... )
+
!scope="row"|Morph Animation
|Get the clip and layer overlay result of the current facial expression. Usage: CFaceComponent::GetWeight(RO::RTime kTime,std::vector< float >& kHead,std::vector< float >& kLeftEye,std::vector< float >& kRightEye,std::vector< float >& kMorph,std::vector< float >& kBone,std::vector< float >& kCustom,float& fStrength)
+
|Drive morph sliders and key morph slider values in the timeline.
 
|-
 
|-
!scope="row"|RIAvatar::GetGeneration()
+
!scope="row"|Add audio to objects
|Provides CC roles belonging to CC_G1 or CC_G3
+
|Add or remove audio tracks to props and characters that can playback in real-time.
 
|-
 
|-
!scope="row"|eunm EAvatarGeneration{ CC_G1_Avatar, CC_G3_Avatar }
+
!scope="row"|Adjust Materials
|Provide CC role type
+
|Adjust strength contributions per texture channel, UV settings, diffuse color, ambient color, opacity values, etc.
 
|-
 
|-
!scope="row"|Modify RISpotLight::SetSpotLightBeam( args... )
+
!scope="row"|Camera Controls
|Fixed the original misused fFalloffPower parameter, and the angle / falloff / attenuation is currently corresponding to GetSpotLightBeam. RISpotLight::SetSpotLightBeam( RTime kTime, float fAngle, float fFalloff, float fAttenuation ).
+
|Adjust focal length, angle of view, near and far clipping planes, etc. on any camera in the scene.
 
|-
 
|-
!scope="row"|Modify RISpotLight::GetSpotLightBeam( args... )
+
!scope="row"|Light Controls
|Modify the attenuation parameter value of the spotlight. Usage: RISpotLight::GetSpotLightBeam( int& nAngle, int& nFalloff, int& nAttenuation )
+
|Control settings for direction, spot and point lights. Such as range, angle, falloff, attenuation, etc.
 +
|-
 +
!scope="row"|Device Input
 +
|Drive animations and object parameters with the keyboard, mice, joystick, etc.
 +
|-
 +
!scope="row"|TCP/IP
 +
|Drive animations and object parameters remotely with IOT (Internet of Things) from other computers, cell-phones, etc. Or, have iClone drive IOT with smart network connectivity for lights, doors, etc.
 +
|-
 +
!scope="row"|Get Events
 +
|Setup callbacks for iClone run-time events such as on load, on selection, on parameter value change, on set timer, etc. Useful for tasks that need to trigger following an event like adding newly created items into a list tree, deploying automatic settings on load, or driving corrective morph targets when certain combinations of morphs are activated.
 +
|-
 +
!scope="row"|Render Project
 +
|Write batch render scripts and specify target directories for output.
 +
|-
 +
!scope="row"|Custom UI Design
 +
|Use iClone's native UI classes, or extend beyond it with QT's Pyside2 to create buttons, forms, dropdowns, modal windows, etc.
 +
|-
 +
!scope="row"|Animation Keys
 +
|Set timeline keys for various motion clips. Animate props, characters, lights, etc. via scripting.
 
|}
 
|}
 
</div></div>
 
</div></div>
Line 330: Line 440:
 
The following items can not be manipulated and acted upon with Python scripting:
 
The following items can not be manipulated and acted upon with Python scripting:
  
*Particle FX (iClone & PopcornFX)
 
 
*SpeedTrees
 
*SpeedTrees
 
*Substance Materials
 
*Substance Materials
 
*Textures Images
 
*Textures Images
*Constraints: Path, Spring, LookAt, Link, Physics, etc.
+
*Constraints: Path, Spring, LookAt, Physics, etc.
 
*Physics (Soft & Rigid)
 
*Physics (Soft & Rigid)
 
*IK end-effectors (control attached props instead to drive IK reach)
 
*IK end-effectors (control attached props instead to drive IK reach)

Latest revision as of 20:31, 21 July 2020

Main article: iClone Python API.

The iClone Python API helps you to extend and customize iClone, and more easily integrate it into a Python-based pipeline. It provides a bridge between iClone and Python libraries and Python tools. The Python SDK is built on top of the iClone C++ SDK, and you can access a subset of the iClone API from Python scripts and execute them in iClone.

Change Log

The sections below are expandable and are organized according to module and application version history.

v0.7.8

iC 7.8 ( 07/21/2020 )
RIPointLight
RISPotLight
New ::IsTubeShape(): Check if the light's shape is a tube (tube length of 0 equates to a sphere).
New ::SetTubeShape(bool bTube): Set the light's shape to tubular.
New ::GetTubeLength(): Get the light's tube shape length (tube length of 0 equates to a sphere).
New ::SetTubeLength(float Length): Set the light's tube shape length (tube length of 0 equates to a sphere).
New ::GetRadiusLength(): Get the light's tube shape radius.
New ::SetRadiusLength(float Radius): Sets the light's tube shape radius.
New ::GetSoftRadiusLength(float Radius): Gets the light's tube shape soft radius (softer specular).
New ::SetSoftRadiusLength(float SoftRadius): Sets the light's tube shape soft radius.
New ::IsRectangleShape(): Check if the light's shape is rectangular.
New ::SetRectangleShape(bool bRect): Set the light's shape to rectangular.
New ::GetRectWidthHeight(): Get the width and height of the light's rectangular shape.
New ::SetRectWidthHeight( RL::CVector2f vWidthHeight ): Set the width and height of the light's rectangular shape.
New ::GetInverseSquare(): Check if the light's strength and dropoff settings are inline with real-world physic's inverse-square law.
New ::SetInverseSquare(bool bls): Set the light's strength and dropoff to conform with real-world physic's inverse-square law.
New ::GetTransmission(): Check if the light is able to penetrate into SSS materials/surfaces.
New ::SetTransmission(bool bls): Set the light's ability to penetrate into SSS materials/surfaces.
New ::ClearRectTexture(): Remove the rectangular texture.
New ::LoadRectTexture(): Import a rectangular texture at a given file location.
New ::SaveRectTexture(): Save rectangular texture.
New ::LoadIes( const std::wstring& strIesFilePath ): Load Light-Emitting Surface (LES) data file from a given file location.
New ::SaveIes( const std::wstring& strIesFilePath ): Export Light-Emitting Surface (LES) data file.
PathPositionControl Fixed erroneous key created by PathPositionControl's SetValue. This problem is caused by unallocated Refpath within the PathKey, causing the key to miss the path.
RGlobal Modified RGlobal.RenderVideo( std::wstring strFileName ): RenderVideo now offers two options: render all or render within a time range. New default file name setting is also available for use.
RISkeletonComponent Fixed RISkeletonComponent::GetMotionBones(): Rectified GetMotionBones' inability to query Motion Bones from Non-Human characters.
New RISkeletonComponent.AddClip(RTime): Create a new Body Motion clip at a given time and return it - RIClip.
RScene New RScene::FindChildObjects(): Use this API to find child object for a given object. Within this API, the bAllLevel parameter can be set to find all child nodes or just return the next direct child node.
RFileIO Fixed RFileIO::LoadFile(): Rectified import iMtlPlus defect.
Fixed RFileIO::ExportFbxFile(): Rectified import iMotionPlus defect.
RIMaterialComponent New RIMaterialComponent::GetAttributeValue( meshName, materialName, attributeName ): Currently supported attributes include TessellationLevel, TessellationMultiplier, and TessellationThreshold.
New RIMaterialComponent::SetAttributeValue(meshName, materialName, attributeName, value): Currently supported attributes include TessellationLevel, TessellationMultiplier, and TessellationThreshold.
RIVisemeComponent Enhanced RIVisemeComponent::AddVisemeKey(): Enhanced performance for AddVisemeKey.

v0.7.7

iC 7.71 ( 12/05/2019 - 12/18/2019 )
RFileIO Modified RLPy.RFileIO.LoadObject(): New Parameter(bRecordStep) to decide whether to record this operation into Undo/Redo list
Modified RLPy.RFileIO.LoadFile(): New Parameter(bRecordStep) to decide whether to record this operation into Undo/Redo list.
RIPopcornFXObject New RIPopcornFXObject::GetAttributeCount(): Get the number of PopcornFX attributes.
New RIPopcornFXObject::GetAttributeName(index): Get the attribute name of a given index.
New RIPopcornFXObject::GetAttributeValue(index): Get the attribute value of given index.
New RIPopcornFXObject::AddAttributeKey(Time, str, list(4)): Add the attribute key by time and name.
New RIPopcornFXObject::GetSamplerList(EPopcornFxSamplerType): Get the name of all samplers.
New RIPopcornFXObject::GetMeshSamplerTarget(str): Set the sampler object.
New RIPopcornFXObject::GetMeshSamplerTarget(str, RIObject):
EPopcornFxSamplerType New EPopcornFxSamplerType(): Get the sampler object.
EObjectModifiedType New EObjectModifiedType(): Provides the type of the object that was modified.
RIGlobal New RIGlobal::ObjectModified(RIObject): This command can detect changes made to an object which is useful for refreshing a custom user interface or informing a plugin of the changes.
RIPopcornFXObject New RIPopcornFXObject::ClearMeshSamplerTarget(str): Removes the Mesh Sampler target object.

v0.7.6

iC 7.7 ( 08/08/2019 - 11/05/2019 )
RICamera Fixed RICamera.GetFocalLength(): retrieves faulty value when the query is not of the current time.
RIProp Modified RIProp: Added ConvertBoneAxisAndParent in RISkeletonCompoment
RIPopcornObject New RIPopcornObject: Added New RIPopcornObject to control PopcornFX object
RScene Modified RScene: RLPy.RScene.FindObject now supports PopcornFX object types.
RICamera New RLPy.RICamera.RemoveDofKey( RKey ): Deletes DOF key at specified times
New RICamera.RemoveDofKeys(): Deletes all the DOF keys for a given camera.
New RLPy.RICamera.GetDofKeyCount(): Gets the total count of all DOF keys for a specified camera.
New RLPy.RICamera.IsLookAtMode( RTime ): Get the status of camera at a specified time.
Console Fixed Console: Fixed log support for UTF-8 strings.
RIObject New RLPy.RIObject.GetLinkedObject( RTime ): Get the linked object at a specified time.
Fixed RLPy.RIObject.Clone(): Not returning the right object type (such as RIAvatar, RIProp etc)
RIObject: RLPy.RIObject.SetVisible: Effects the visibility of the entire object hierarchy rather than just the object itself.
RIFileIO Fixed RLPy.RIFileIO.LoadFile(): Now supports iPkfx file format.
Fixed RLPy.RIFileIO.LoadObject(): Now supports iPkfx file format.

v0.7.5

iC 7.6 (07/05/2019 - 07/29/2019)
RCameraDofData Modified RLPy.RCameraDofData: Set Function can now be used. Originally all SetEnable, SetFocus, etc. were hidden functions.
RICamera New <RStatus> AddDofKey( RKey, RCameraDofData ): The key used to download the Camera Dof, the Preview Camera cannot be downloaded (not Pause).
New <int> GetNearClippingPlane(): Get the near clipping plane of the camera
New <RStatus> SetNearClippingPlane( int nNearPlane ): Set the near clipping plane of the camera to nNearPlane
New <int> GetFarClippingPlane(): Get the far clipping plane of the camera
New <RStatus> SetFarClippingPlane( int nFarPlane ): Set the far clipping plane of the camera to nFarPlane
RIObject Update(): RTS & Geronetry to update all Child bone & Mesh of this object
Modified RIObject::LinkTo( std::shared_ptr< RIObject > spTargetObject, RO::ELinkObjectAlignType eAlignType, RTime kTime ): Link objects often pass AlignType to determine the Position / Rotation of the Target object.
RINode Update(): Transform to update all Childe Nodes
ELinkObjectAlignType AlignType referenced when adding Link objects
RIClip Fixed RLPy.RIClip.SetLength(): that now even the props from the Prop SetParent group can correctly modify the Clip Length of each Child Prop
RScene Modified GetProps(): Restricted to get only the outermost Props on the scene (excluding the meaning of Props children)
Modified FindObjects( RO::EObjectType eType ): Restricted to get only the outermost Props on the scene (excluding the meaning of Props children)

v0.7.4

iC 7.5 ( 04/08/2019 - 07/01/2019 )
CCameraObject New <RO::RCameraDofData> CCameraObject::GetDOFData(): Get camera Dof data.
<float> CCameraObject::GetAngleOfView( RO::RTime kTime ) const: Get Iclone camera FOV.
<RO::RStatus> CCameraObject::GetAperture( float& fWidth, float& fHeight ): Get Filmback width and height.
RScene New <RO::RICameraPtr> RScene::GetCurrentCamera(): Get the camera currently used in the current scene.
<RO::RStatus> RScene::ClearSelectObjects(): Added the state of deselecting objects in the scene.
RGlobal New <RO::RStatus> RGlobal::GetScreenSize( int& nWidth, int& nHeight ): Get Export Render size.
New <bool> RGlobal::IsTrialContentMode(): detect whether the current AP is loaded with trial content (for internal API).
New RGlobal.TrialVersionRemainingTimes( const std::wstring& strBinPath, unsigned int uProductID, const std::wstring& strProductFold,const std::wstring& strRegRoot,unsigned int uTimeNo ): Can check the remaining number of trails (some Trial will be useful, ex 3DX).
RIObject Fixed RIObject::SetName: SetName will now be recorded into undo/redo history.
RIVisemeComponent Modified RIVisemeComponent::AddVisemeKey( RVisemeKey ): Pass in RVisemeKey instead.
Modified RIVisemeComponent::RemoveVisemesKey( RVisemeKey ): Pass in RVisemeKey instead.
Modified RIVisemeComponent::GetVisemeKey( RTime kTime, RVisemeKey& kKey ): Pass in RVisemeKey and Reference to retrieve data.
Modified RIVisemeComponent::GetVisemeKeys(): Directly return std :: vector <RVisemeKey>.
RIAvatar Modified RIAvatar::GetGeneration: Added two types CC_Game_Base_One & CC_Game_Base_Multi.
RISkeletonComponent New RISkeletonComponent::ConvertBoneAxisAndParent(kAxisMaps, kReParentMaps): Calculate the current RTS according to the incoming axial map & change the parent's map.
New RISkeletonComponent::ConvertToOriginalBoneAxis(): Turn the current Pose into the axis of the original skeleton (NonStd characters only).
CCameraObject New <RO::ECameraFitResolution> CCameraObject::GetFitRenderRegionType(): Get Camera fit render region type (Horizontal / Vertical).
New <RO::ECameraFitResolution> CCameraObject::GetFitFovType(): Get Camera fit fov type (Horizontal / Vertical).
REventCallback New REventCallback::OnObjectDataChangedWithType( int nObjectChangeDataType ): Added the type corresponding to the event when the AP triggers the ObjectDataChanged event.
OnHierarchyChanged New REventCallback::OnHierarchyChanged(): AP to trigger HierarchyChanged event, currently occurs in reach effector.
RIAvatar New RIAvatar::GetAvatarType(): Which Type is used to get the current character (Standard, NonStd, StandardSearize).
RFileIO New <bool> RFileIO::CheckExportFbxHasLicense( RO::RIObjectPtr spObject ): Added judging whether the output Fbx comes with a sell / export license (for internal API).
Modified RFileIO::ExportFbxFile: When exporting Fbx, judge whether it has a sell / export license
Modified RFileIO::ExportFbxFile: Take one more parameter std :: wstring strIncludeMotionPath to output together with Object.
RICCamera Modify RICCamera::GetFocalLength(): Correction If it is judged that the control (CameraFovClipControl / CCameraFovKeyControl) is wrong, the focal length is calculated based on the FrustumFov in the current camera.

v0.7.2

iC 7.4x ( 02/15/2019 - 02/27/2019 )
CICFileIO New <RIObjectPtr> CICFileIO::LoadObject( strPath ): Function that can load objects, and directly get the loaded objects, currently only the types that inherit RIObject can use this API
RlVisemeComponent New RlVisemeComponent::AddVisemesClip( RO::RTime kTime, const std::wstring& nClipName, RO::RTime kTimeLength ): Used to create Viseme Clip.
New RlVisemeComponent::RemoveVisemesKey( RO::RTime kTime ): Remove a viseme key at the specified point in time.
New RlVisemeComponent::GetVisemeMorphWeights(): Used to get the weight of each Morph of viseme.
New RlVisemeComponent::GetVisemeBones(): Used to get the Bone used by Viseme.
New RlVisemeComponent::GetVisemeKeys(): Used to get the time of all Viseme keys, and return RTime as an array.
New RlVisemeComponent::GetVisemeKey( RO::RTime kTime, RO::EVisemeID& eVisemeID, float& fWeight ): Used to get the VisemeID and Weight of Viseme at a specified point in time.
RIProp New RIProp::SetDummy( bIsDummy): Used to set whether Prop is Dummy.
New <bool> RIProp::IsDummy(): Used to check if Prop is Dummy.
RIMorphComponent New std::vector< std::wstring > RIMorphComponent::GetMorphNames(): Get all morph names for the specified mesh.
RIObject New RIObject::Clone(): Used to copy the object.
New RIObject::IsSelected(): Confirm whether the object is selected in the scene.
RemoveVisemesClip New RemoveVisemesClip( RO::RTime kTime ): Remove a viseme Clip at the specified time.

v0.7.1

iC 7.4x ( 01/17/2019 - 01/31/2019 )
LocalTransform
WorldTransform
Fixed LocalTransform/WorldTransform( RIObject, RIAvatar, RIProp,RILight, RICamera ): Incorrect transform rotations for RIObject, RIAvatar, RIProp, RILight, RICamera.
RINode New RINode::WorldTransform(): New WorldTransform for RINode; No need for the user to write a function to retrieve it.
Rkey New RKey can be used to carry additional data such as Time, TransitionType, and TransitionStrength.
MaterialComponent Fixed MaterialComponent( AddAmbientKey, AddDiffuseKey, AddSpecularKey, AddGlossinessKey, AddSpecularKey, AddSelfIlluminationKey, AddOpacityKey, AddTextureWeightKey, AddUvDataKey, RemoveUvDataKey, LoadVideoToTexture, AddVideoVolumeKey): kTime > kKey for the MaterialComponent; Besides setting the frame time, one can also set the Transition Type and Strength.
LoadImageToTexture Ability to load texture images to any channel within a material accessible via Mesh > Material Name.
RIHikEffectorComponent Established framework for the RIHikEffoectorComponent API and test case is provided (not yet implemented).
Ignore API Fixed RAudio:SetAudioPtr and RScene:SetScenePtr not being ignored (currently the online documentation also has this problem).
RApplication class New RApplication class can retreive registry related data and API version number. Test case has been added.
RIObject New RIObject::SetParent(RIObject/RINode): All classes that derive from RIObject also inherit the SetParent member function.
New RIObject::LinkTo(RIObject, RTime): All classes that derive from RIObject also inherit the LinkTo member function.
New RIObject::SetName(std::wstring): Used to change the name of an object.
New RIObject::GetPivot(): All classes that derive from RIObject also inherit the GetPivot member function.
New RIObject::SetPivot(): Provides a way to retrieve the pivot point of a prop.
New RIObject::GetBounds(): All classes that derive from RIObject also inherit the GetBounds member function.
New RIObject::Unlink(RTime): All classes that derive from RIObject also inherit the Unlink member function.
RIFaceComponent New RIFaceComponent::GetKey(RTime, Head, LeftEye, RightEye, Morph, Custom, Bone, Weight): Used to retrieve the current time's Facial Expression, Eye, and Head key values.
New RIFaceComponent::AddClip(RTime): Adds a default Facial clip at the designated point in time.
New RIFaceComponent::AddEyeKey(): Create a EyeKey under the Facial Layer.
New RIFaceComponent::AddHeadKey(): Create a HeadKey under the Facial Layer.
New RIFaceComponent::AddExpressionKey(): Create a ExpressionKey under the Facial Layer.
New RIFaceComponent::AddVisemeKey(): Create a LipsKey under the Viseme layer.

v0.7.0

iC 7.4x
Load iClone Formats This includes *.iProjects, *.iAvatars, *.iProps, and any number of supported file formats readable and writable by iClone.
Animate Props RTS (Rotate, Translate, Scale) prop transformations, including playing their animation clips.
Animate Characters Play motion clips and rotate joints of a character in FK mode (Forward Kinetic).
Morph Animation Drive morph sliders and key morph slider values in the timeline.
Add audio to objects Add or remove audio tracks to props and characters that can playback in real-time.
Adjust Materials Adjust strength contributions per texture channel, UV settings, diffuse color, ambient color, opacity values, etc.
Camera Controls Adjust focal length, angle of view, near and far clipping planes, etc. on any camera in the scene.
Light Controls Control settings for direction, spot and point lights. Such as range, angle, falloff, attenuation, etc.
Device Input Drive animations and object parameters with the keyboard, mice, joystick, etc.
TCP/IP Drive animations and object parameters remotely with IOT (Internet of Things) from other computers, cell-phones, etc. Or, have iClone drive IOT with smart network connectivity for lights, doors, etc.
Get Events Setup callbacks for iClone run-time events such as on load, on selection, on parameter value change, on set timer, etc. Useful for tasks that need to trigger following an event like adding newly created items into a list tree, deploying automatic settings on load, or driving corrective morph targets when certain combinations of morphs are activated.
Render Project Write batch render scripts and specify target directories for output.
Custom UI Design Use iClone's native UI classes, or extend beyond it with QT's Pyside2 to create buttons, forms, dropdowns, modal windows, etc.
Animation Keys Set timeline keys for various motion clips. Animate props, characters, lights, etc. via scripting.

Limitations

As the iClone Python API continues to evolve, limitations may expand or contract over time. Below are lists of iClone Python API's currently known limitations. This list is not exhaustive.

Inoperable Assets

The following items can not be manipulated and acted upon with Python scripting:

  • SpeedTrees
  • Substance Materials
  • Textures Images
  • Constraints: Path, Spring, LookAt, Physics, etc.
  • Physics (Soft & Rigid)
  • IK end-effectors (control attached props instead to drive IK reach)
  • Mesh level components: vertices, edges, faces, etc.
  • Preview camera

Unsupported Operations

The following operations are not available via Python scripting:

  • Saving iClone formats: iProjects, iAvatars, iProps, etc.
  • Pixel operations: multiply, add, overlay, etc.
  • Image processing: Brightness, Hue, Saturation, Sharpen, Soften, Blend, etc.
  • Render parameter settings (Project settings can not be changed)
  • Facial lip-sync keying
  • Preference settings
  • Attach/Detach: changing object parent-child relation
  • Align motion/character root alignment
  • Modeling operations: manipulation of mesh components