FCurveKey.LeftTanX

説明

FCurveKey.Time値を基準としたF カーブキーの左タンジェントX(フレーム)をDoubleとして設定したり、戻したりします。

左タンジェントX値は、2 つの連続するキー間の距離の 1/3から 0までの負の値をとることができます。この範囲の値の場合は、カーブが有効であることが保証されます。

最初のキーの左タンジェントおよび最後のキーの右タンジェントは変更できません。変更できないこれらのタンジェントを設定しようとした場合、プロパティでは何も行われず、C++でS_FLSE が戻されます。

タンジェント値は、標準 F カーブ(FCurve.Type = siStandardFCurve)にのみ適用されます。siFCurveType で定義されているその他すべての F カーブに対しては、タンジェント値 0 が戻されます。

C#構文

// get accessor

Object rtn = FCurveKey.LeftTanX;

// set accessor

FCurveKey.LeftTanX = Object;

1. JScript の例

/*

	This example illustrates how to create an fcurve and set the tangents on a specific key

*/

// Create new scene

NewScene( "", false );

// Create a null

var nullobj = Application.ActiveSceneRoot.AddNull();

// Get the posx parameter from the null

var posx = nullobj.posx;

// Create an fcurve on posx

var fc = posx.AddFCurve2();

// Define some keys (3 key-value pairs)

var keyvalues = new Array( 0,0, 50,25, 100,50 );

fc.SetKeys( keyvalues );

// Get the 1st, 2nd & 3rd FCurveKey objects

var key0 = fc.Keys(0);

var key1 = fc.Keys(1);

var key2 = fc.Keys(2);

// Make the key non-G1 continuous so it can have different left and right values

key1.Constraint( siG1ContinuousConstraint ) = false;

key1.LeftTanX = 0;

key1.LeftTanY = Math.abs( key1.Value - key0.Value );

key1.RightTanX = key2.Time - key1.Time;

key1.RightTanY = 0;

PrintKeys( fc );

// Convenience function to print the FCurveKeys

function PrintKeys( in_fcrv )

{

	for ( var i=0; i<in_fcrv.Keys.Count; i++ ) {

		var fckey = in_fcrv.Keys(i);

		var str = "key : " + fckey.Index;

		str += "\n\ttime : " + fckey.Time;

		str += "\n\tvalue : " + fckey.Value;

		str += "\n\ttangents : " + fckey.LeftTanX + "," + fckey.LeftTanY + "," + fckey.RightTanX + "," + fckey.RightTanY;

		str += "\n\tconstraints : " + GetConstraintType( fckey );

		Application.LogMessage( str );

	}

}

// Convenience function to get the user-friendly string describing the contraint type

function GetConstraintType( in_fcrvkey )

{

	var ConstraintTypes = new Array (

		new Array (siParameterConstraint,			"LockParameter"),

		new Array (siLeftRightValuesConstraint,			"LeftRightParameter"),

		new Array (siG1ContinuousConstraint,			"G1Continuous"),

		new Array (siLeftRightTangentDirectionConstraint,	"LeftRightTangentDirection"),

		new Array (siLeftRightTangentLengthConstraint,		"LeftRightTangentLength"),

		new Array (siLockConstraint,				"LockAll"),

		new Array (siHorizontalTangentConstraint,		"HorizontalTangent"),

		new Array (siExtremumHorizontalTangentConstraint,	"ExtremumHorizontalTangent"),

		new Array (siAdjustedTangentConstraint,			"AdjustedTangent"),

		new Array (siZeroLengthTangentConstraint,		"ZeroLengthTangent"),

		new Array (siSameLengthTangentConstraint,		"SameLengthTangent"), 

		new Array (siNeighborTangentConstraint,			"NeighborTangent"),

		new Array (siMirrorTangentConstraint,			"MirrorTangent"),

		new Array (siAutoPlateauTangentConstraint,		"AutoPlateauTangent") 

	)

	var str = "";

	for ( var i=0; i<ConstraintTypes.length; i++ ) {

		if ( in_fcrvkey.Constraint( ConstraintTypes[i][0] ) ) {

			str += ConstraintTypes[i][1] + " ";

		}		 

	}

	return str;

}

// Expected results:

//INFO : key : 0

//	time : 0

//	value : 0

//	tangents : -16.666666666666668,0,16.666666666666668,0

//	constraints : G1Continuous  

//INFO : key : 1

//	time : 50

//	value : 25

//	tangents : 0,25,50,0

//	constraints : 

//INFO : key : 2

//	time : 100

//	value : 50

//	tangents : -16.666666666666664,0,16.666666666666664,0

//	constraints : G1Continuous

2. VBScript の例

'

' This example illustrates how to create an fcurve and set the tangents on a specific key

' 

' Create new scene

NewScene , false 

' Create a null

set nullobj = Application.ActiveSceneRoot.AddNull()

' Get the posx parameter from the null

set posx = nullobj.posx

' Create an fcurve on posx

set fc = posx.AddFCurve2()

' Define some keys (3 key-value pairs)

keyvalues = array( 0,0, 50,25, 100,50 )

fc.SetKeys keyvalues 

' Get the 1st, 2nd & 3rd FCurveKey objects

set key0 = fc.Keys(0)

set key1 = fc.Keys(1)

set key2 = fc.Keys(2)

' Make the key non-G1 continuous so it can have different left and right values

key1.Constraint( siG1ContinuousConstraint ) = false

key1.LeftTanX = 0

key1.LeftTanY = Abs( key1.Value - key0.Value )

key1.RightTanX = key2.Time - key1.Time

key1.RightTanY = 0

PrintKeys fc 

' Convenience routine to print the FCurveKeys

sub PrintKeys( in_fcrv )

	for each fckey in in_fcrv.Keys

		str = "key : " & fckey.Index

		str = str & vbCrLf & vbTab & "time : " & fckey.Time

		str = str & vbCrLf & vbTab & "value : " & fckey.Value

		str = str & vbCrLf & vbTab & "tangents : " & fckey.LeftTanX & "," & fckey.LeftTanY & "," & fckey.RightTanX & "," & fckey.RightTanY

		str = str & vbCrLf & vbTab & "constraints : " & GetConstraintType( fckey )

		Application.LogMessage str 

	next

end sub

' Convenience function to get the user-friendly string describing the contraint type

function GetConstraintType( in_fcrvkey )

	set ConstraintTypes = CreateObject( "Scripting.Dictionary" )

	ConstraintTypes.Add siParameterConstraint, 			"LockParameter"

	ConstraintTypes.Add siLeftRightValuesConstraint,		"LeftRightParameter"

	ConstraintTypes.Add siG1ContinuousConstraint,			"G1Continuous"

	ConstraintTypes.Add siLeftRightTangentDirectionConstraint,	"LeftRightTangentDirection"

	ConstraintTypes.Add siLeftRightTangentLengthConstraint,		"LeftRightTangentLength"

	ConstraintTypes.Add siLockConstraint,				"LockAll"

	ConstraintTypes.Add siHorizontalTangentConstraint,		"HorizontalTangent"

	ConstraintTypes.Add siExtremumHorizontalTangentConstraint,	"ExtremumHorizontalTangent"

	ConstraintTypes.Add siAdjustedTangentConstraint,		"AdjustedTangent"

	ConstraintTypes.Add siZeroLengthTangentConstraint,		"ZeroLengthTangent"

	ConstraintTypes.Add siSameLengthTangentConstraint,		"SameLengthTangent"

	ConstraintTypes.Add siNeighborTangentConstraint,		"NeighborTangent"

	ConstraintTypes.Add siMirrorTangentConstraint,			"MirrorTangent"

	ConstraintTypes.Add siAutoPlateauTangentConstraint,		"AutoPlateauTangent"

	str = ""

	for each k in ConstraintTypes.Keys

		if in_fcrvkey.Constraint( k ) then

			str = str & ConstraintTypes(k) & " "

		end if

	next

	GetConstraintType = str

end function

' Expected results:

'INFO : key : 0

'	time : 0

'	value : 0

'	tangents : -16.6666666666667,0,16.6666666666667,0

'	constraints : G1Continuous  

'INFO : key : 1

'	time : 50

'	value : 25

'	tangents : 0,25,50,0

'	constraints : 

'INFO : key : 2

'	time : 100

'	value : 50

'	tangents : -16.6666666666667,0,16.6666666666667,0

'	constraints : G1Continuous

3. Python の例

#

# This example illustrates how to create an fcurve and set the tangents on a specific key

# 

from win32com.client import constants as c

# Convenience function to get the user-friendly string describing the contraint type

def GetConstraintType( in_fcrvkey ) :

	ConstraintTypes = {

		c.siParameterConstraint:"LockParameter", 

		c.siLeftRightValuesConstraint:"LeftRightParameter", 

		c.siG1ContinuousConstraint:"G1Continuous", 

		c.siLeftRightTangentDirectionConstraint:"LeftRightTangentDirection", 

		c.siLeftRightTangentLengthConstraint:"LeftRightTangentLength", 

		c.siLockConstraint:"LockAll", 

		c.siHorizontalTangentConstraint:"HorizontalTangent", 

		c.siExtremumHorizontalTangentConstraint:"ExtremumHorizontalTangent", 

		c.siAdjustedTangentConstraint:"AdjustedTangent", 

		c.siZeroLengthTangentConstraint:"ZeroLengthTangent", 

		c.siSameLengthTangentConstraint:"SameLengthTangent",

		c.siNeighborTangentConstraint:"NeighborTangent",

		c.siMirrorTangentConstraint:"MirrorTangent",

		c.siAutoPlateauTangentConstraint:"AutoPlateauTangent"

	}

	str = ""

	for k in ConstraintTypes.keys() :

		if ( in_fcrvkey.Constraint(k) ) :

			str += ConstraintTypes[k] + " "

	return str

# Convenience function to print the FCurveKeys

def PrintKeys( in_fcrv ) :

	for fckey in in_fcrv.Keys :

		str = "key : %d" % (fckey.Index)

		str = str + "\n\ttime : %d" % (fckey.Time)

		str = str + "\n\tvalue : %d" % (fckey.Value)

		str = str + "\n\ttangents : %d,%d,%d,%d" % (fckey.LeftTanX,fckey.LeftTanY,fckey.RightTanX,fckey.RightTanY)

		str = str + "\n\tconstraints : " + GetConstraintType( fckey )

		Application.LogMessage( str )

	return None

# Create new scene

Application.NewScene( "", 0 )

# Create a null

nullobj = Application.ActiveSceneRoot.AddNull()

# Get the posx parameter from the null

posx = nullobj.posx

# Create an fcurve on posx

fc = posx.AddFCurve2()

# Define some keys (3 key-value pairs)

keyvalues = [ 0,0, 50,25, 100,50 ]

fc.SetKeys( keyvalues )

# Get the 1st, 2nd & 3rd FCurveKey objects

key0 = fc.Keys(0)

key1 = fc.Keys(1)

key2 = fc.Keys(2)

# Make the key non-G1 continuous so it can have different left and right values

# (Python can't use the Constraint property as-is, so use SetConstraint as an alias)

key1.SetConstraint( c.siG1ContinuousConstraint, 0 )

key1.LeftTanX = 0

key1.LeftTanY = abs( key1.Value - key0.Value )

key1.RightTanX = key2.Time - key1.Time

key1.RightTanY = 0

PrintKeys( fc )

# Expected results:

# INFO : key : 0

# 	time : 0

# 	value : 0

# 	tangents : -16,0,16,0

# 	constraints : G1Continuous 

# INFO : key : 1

# 	time : 50

# 	value : 25

# 	tangents : 0,25,50,0

# 	constraints : 

# INFO : key : 2

# 	time : 100

# 	value : 50

# 	tangents : -16,0,16,0

# 	constraints : G1Continuous

関連項目

FCurve.SetKeyTangents FCurveKey.LeftTanY FCurveKey.RightTanY FCurveKey.RightTanX