## FCurve.SI3DStyle

### Introduced

v3.0

### Description

Sets or returns the SI3DStyle property of the fcurve as a Boolean (true for SI3DStyle). If the fcurve is set as SI3DStyle then the key tangents are constrained using the SI3D tangent constraints. This forces all the key tangents to have a slope length where the horizontal component is 1/3 of the distance between 2 consecutive keys. Furthermore, the adjust tangent constraint (siFCurveKeyConstraint) is turned off. If you change an existing fcurve to use the SI3D style then all tangents are adjusted to meet the SI3D tangent constraints.
The SI3D style is only applicable to standard fcurves (FCurve.Type == siStandardFCurve). If you set this property on other fcurve types the method returns S_FALSE in C++ and getting the SI3DStyle always returns VARIANT_FALSE.

### C# Syntax

    // get accessor
    Boolean rtn = FCurve.SI3DStyle;
    // set accessor
    FCurve.SI3DStyle = Boolean;

### Examples

#### 1. VBScript Example

    '
    '       This example illustrates how to create an fcurve with
    '       the SI3D style for constraining tangents.
    '
    set o = getprim( "Null" )
    set fc = o.posx.addfcurve()
    fc.setkeys( Array(1,50,50,0,100,50) )
    fc.si3dstyle = true
    ' Get the object as though it was selected and get the fcurve
    ' on its local.posx parameter
    set o = selection(0)
    set fc = o.posx.source
    if fc.si3dstyle then
            LogMessage "fcurve has SI3D style of tangent constraints."
    end iF
    ' Outputs:
    'INFO : fcurve has SI3D style of tangent constraints.

#### 2. JScript Example

    /*
            This example illustrates how to create an fcurve with
            the SI3D style for constraining tangents.
    */
    // Create a null
    Application.NewScene( "", false );
    var nullobj = ActiveSceneRoot.AddNull();
    // Get the posx, posy parameters from the null
    var posx = nullobj.posx;
    var posy = nullobj.posy;
    // Create an fcurve on posx, posy
    var fc1 = posx.AddFCurve();
    var fc2 = posy.AddFCurve();
    // Define the number of keys
    var nbkeys = 100;
    // Start editing the fcurves
    fc1.BeginEdit();
    fc2.BeginEdit();
    // Set the style of fc1 to SI3D style
    fc1.SI3DStyle = true;
    var tangents = new Array( nbkeys * 4 );
    // Add keys to the fcurve
    for ( i=0, j=0; i<nbkeys; i++, j+=4 )
    {
            val = (Math.cos( (i+1)/10 ) * 100);
            fc1.AddKey( i, val );
            fc2.AddKey( i, val );
            tangents[j] = 0;
            tangents[j+1] = 0;
            tangents[j+2] = 0;
            tangents[j+3] = 0;
    }
    // Set the tangent to zero to illustrate the difference
    // between the Softimage & SI|3D styles
    fc1.SetKeyTangents(tangents);
    fc2.SetKeyTangents(tangents);
    // End editing the fcurve and put undo event onto the
    // undo/redo stack
    fc1.EndEdit();
    fc2.EndEdit();
    // Print the key tangents from both curves to compare
    var key1;
    var key2;
    for ( i=0; i<nbkeys; i++ )
    {
            key1 = fc1.GetKeyAtIndex(i);
            key2 = fc2.GetKeyAtIndex(i);
            str = "fc1: " + key1.lefttanx + ","+ key1.lefttany + ","+ key1.righttanx + ","+ key1.righttany;
            str += " fc2: " + key2.lefttanx + ","+ key2.lefttany + ","+ key2.righttanx + ","+ key2.righttany;
            LogMessage(str);
    }
    // Outputs:
    //INFO : fc1: 0,0,0.3333333333333333,0 fc2: 0,0,0,0
    //INFO : fc1: -0.33333333333333326,0,0.33333333333333326,0 fc2: 0,0,0,0
    //INFO : fc1: -0.33333333333333326,0,0.3333333333333335,0 fc2: 0,0,0,0
    //      etc.
    //INFO : fc1: -0.3333333333333343,0,0.3333333333333343,0 fc2: 0,0,0,0
    //INFO : fc1: -0.3333333333333343,0,0.3333333333333343,0 fc2: 0,0,0,0
    //INFO : fc1: -0.3333333333333343,0,0,0 fc2: 0,0,0,0