#ifndef PROMECHSPRINGPROPS_H
#define PROMECHSPRINGPROPS_H


#include <ProToolkit.h>
#include <ProObjects.h>
#include <ProMechItem.h>
#include <ProMechMatrix.h>
#include <ProMechVector.h>

PRO_BEGIN_C_DECLS

typedef struct pro_spring_prop_data_int*  ProMechSpringPropsData; 

typedef enum
{
  PRO_MECH_SPRINGPROPS_EXTENSIONAL  = 0,  /* ProMechMatrix (3x3, symmetrical)
                                             [ Kxx  Kxy  Kxz ]
                                             [      Kyy  Kyz ]
                                             [           Kzz ]
                                          */
  PRO_MECH_SPRINGPROPS_TORSIONAL    = 1,  /* ProMechMatrix (3x3, symmetrical)
                                             [ Txx  Txy  Txz ]
                                             [      Tyy  Tyz ]
                                             [           Tzz ]
                                          */
  PRO_MECH_SPRINGPROPS_COUPLING     = 2,  /* ProMechMatrix (3x3, full)
                                             [ KTxx  KTxy  KTxz ]
                                             [ KTyx  KTyy  KTyz ]
                                             [ KTzx  KTzy  KTzz ]
                                          */
  PRO_MECH_SPRINGPROPS_DAMPING      = 3,  /* ProMechVector (3)
                                             [ Cxx  Cyy  Czz ]
                                          */
  PRO_MECH_SPRINGPROPS_AUTOCOUPLING = 4   /* ProBoolean */

}
ProMechSpringpropsPropertyType;

typedef double ProMechSpringPropValues [6];   /* deprecated */
typedef double ProMechSpringPropCoupling [9]; /* deprecated */

extern ProError  ProMechspringpropsDescriptionGet (ProMechItem* item,
				ProComment description);
/*
    Purpose: Obtains the spring properties description. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring properties.

    Output Arguments:
        description - The description.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError  ProMechspringpropsDataGet (ProMechItem* item,
				ProMechSpringPropsData* data);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsMatrixGet(), ProMechSpringpropsVectorGet() 
             instead. 
             <p> Obtains the spring properties data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring properties.

    Output Arguments:
        data - The data. Free this using ProMechspringpropsdataFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError  ProMechspringpropsdataDampingcoefficientsGet (ProMechSpringPropsData data,
				ProMechSpringPropValues coefficients);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsVectorGet() instead. 
             <p> Obtains the damping coefficients (Cxx, Cyy, Czz) for the 
             spring properties. First 3 members of ProMechSpringPropValues are 
             Cxx,Cyy,Cyy, remaining will be 0.0 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.

    Output Arguments:
        coefficients - The damping coefficients.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError  ProMechspringpropsdataFree (ProMechSpringPropsData data);
/*
    Purpose: <B>Note</B>: This function is deprecated. 
             <p> Frees the memory for a Creo Simulate spring properties data 
             handle. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The handle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError  ProMechspringpropsdataExtensionalcoefficientsGet (ProMechSpringPropsData data,
                                ProMechSpringPropValues coefficients);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsMatrixGet() instead. 
             <p> Obtains the extensional coefficients (Kxx,Kyy,Kzz,Kxy,Kxz,Kyz) 
             for the spring properties. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.

    Output Arguments:
        coefficients - The extensional coefficients.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError  ProMechspringpropsdataTorsionalcoefficientsGet (ProMechSpringPropsData data,
                                ProMechSpringPropValues coefficients);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsMatrixGet() instead. 
             <p> Obtains the torsional coefficients (Txx,Tyy,Tzz,Txy,Txz,Tyz) 
             for the spring properties. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.

    Output Arguments:
        coefficients - The torsional coefficients.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError ProMechspringpropsdataCouplingcoefficientsGet (ProMechSpringPropsData data, ProMechSpringPropCoupling coefficients);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsMatrixGet() instead. 
             <p> Obtains the coupling coefficients (KTxx, KTxy, KTxz, KTyx, 
             KTyy, KTyz, KTzx, KTzy, KTzz) for the spring properties. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.

    Output Arguments:
        coefficients - The coupling coefficients.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_E_NOT_FOUND - Auto-coupling is used, so there are no assigned 
                             values for coupling.

*/

extern ProError ProMechspringpropsdataAutocouplingGet (ProMechSpringPropsData data, ProBoolean* auto_coupling);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsBooleanGet() instead. 
             <p> Identifies whether Creo Simulate should calculate the coupling 
             properties automatically for the spring properties. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.

    Output Arguments:
        auto_coupling - PRO_B_TRUE if it calculates the coupling automatically, 
                        PRO_B_FALSE otherwise.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError ProMechspringpropsDescriptionSet (ProMechItem* item, ProComment description);
/*
    Purpose: Sets the spring properties description. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring properties.
        description - The description.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_CANT_ACCESS - Cannot access the object in the current mode.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_CANT_MODIFY - Cannot modify the item.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechspringpropsDataSet (ProMechItem* item, ProMechSpringPropsData data);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsMatrixSet(), ProMechSpringpropsVectorSet() 
             instead. 
             <p> Sets the spring properties data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring properties.
        data - The data.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_CANT_ACCESS - Cannot access the object in the current mode.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_CANT_MODIFY - Cannot modify the item.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechspringpropsdataDampingcoefficientsSet (ProMechSpringPropsData data, ProMechSpringPropValues coefficients);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsVectorSet() instead. 
             <p> Sets the damping coefficients (Cxx, Cyy, Czz) for the spring 
             properties. First 3 members of ProMechSpringPropValues are 
             Cxx,Cyy,Cyy, remaining will be 0.0 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.
        coefficients - The damping coefficients.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError ProMechspringpropsdataAlloc (ProMechSpringPropsData* data);
/*
    Purpose: <B>Note</B>: This function is deprecated. 
             <p> Allocates the memory for a Creo Simulate spring properties 
             data handle. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        none

    Output Arguments:
        data - The handle.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.

*/

extern ProError ProMechspringpropsdataExtensionalcoefficientsSet (ProMechSpringPropsData data, ProMechSpringPropValues coefficients);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsMatrixGet() instead. 
             <p> Sets the extensional coefficients (Kxx, Kyy, Kzz, Kxy, Kxz, 
             Kyz) for the spring properties. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.
        coefficients - The extensional coefficients.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError ProMechspringpropsdataTorsionalcoefficientsSet (ProMechSpringPropsData data, ProMechSpringPropValues coefficients);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsMatrixGet() instead. 
             <p> Sets the torsional coefficients (Txx, Tyy, Tzz, Txy, Txz, Tyz) 
             for the spring properties. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.
        coefficients - The torsional coefficients.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError ProMechspringpropsdataCouplingcoefficientsSet (ProMechSpringPropsData data, ProMechSpringPropCoupling coefficients);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsMatrixGet() instead. 
             <p> Sets the coupling coefficients (KTxx, KTxy, KTxz, KTyx, KTyy, 
             KTyz, KTzx, KTzy, KTzz) for the spring properties. 
             <P> These properties will be set if the data's auto-coupling flag 
             is not set to PRO_B_TRUE. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.
        coefficients - The coupling coefficients.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_CANT_WRITE - data's auto-coupling flag is set to PRO_B_TRUE, 
                            unable to set the coupling coefficients.

*/

extern ProError ProMechspringpropsdataAutocouplingSet (ProMechSpringPropsData data, ProBoolean auto_coupling);
/*
    Purpose: <B>Note</B>: This function is deprecated. Use 
             ProMechSpringpropsBooleanSet() instead. 
             <p> Identifies whether Creo Simulate should calculate the coupling 
             properties automatically for the spring properties. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The spring properties data.
        auto_coupling - PRO_B_TRUE if it calculates the coupling automatically, 
                        PRO_B_FALSE otherwise.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.

*/

extern ProError ProMechSpringpropsBooleanGet (ProMechItem              * item,
                                        ProMechSpringpropsPropertyType   type,
                                        ProBoolean                     * value);
/*
    Purpose: Obtains the boolean value corresponding to 'type' of the spring 
             property object. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring property.
        type - The spring property type.

    Output Arguments:
        value - The property value (bool).

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechSpringpropsMatrixGet (ProMechItem              * item,
                                       ProMechSpringpropsPropertyType   type,
                                       ProMechMatrix                  * matrix);
/*
    Purpose: Obtains the matrix corresponding to 'type' of the spring property 
             object. Use ProMathExpressionEvaluate() to evaluate each 
             component. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring property.
        type - The spring property type.

    Output Arguments:
        matrix - The property value (matrix). The function allocates memory for 
                 this argument. Use ProMechMatrixFree() to free it.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.
        PRO_TK_NO_LICENSE - No license was available to enable this function.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechSpringpropsVectorGet (ProMechItem              * item,
                                       ProMechSpringpropsPropertyType   type,
                                       ProMechVector                  * vector);
/*
    Purpose: Obtains the vector corresponding to 'type' of the spring property 
             object. Use ProMathExpressionEvaluate() to evaluate each 
             component. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring property.
        type - The spring property type.

    Output Arguments:
        vector - The property value (vector). The function allocates memory for 
                 this argument. Use ProMechVectorFree() to free it.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.
        PRO_TK_NO_LICENSE - No license was available to enable this function.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechSpringpropsBooleanSet (ProMechItem              * item,
                                        ProMechSpringpropsPropertyType   type,
                                        ProBoolean                       value);
/*
    Purpose: Sets the boolean value corresponding to 'type' of the spring 
             property object. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring property.
        type - The spring property type.
        value - The property value (bool).

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_CANT_MODIFY - Cannot modify the item.
        PRO_TK_NO_LICENSE - No license was available to enable this function.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechSpringpropsMatrixSet (ProMechItem              * item,
                                       ProMechSpringpropsPropertyType   type,
                                       ProMechMatrix                    matrix);
/*
    Purpose: Sets the matrix corresponding to 'type' of the spring property 
             object. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring property.
        type - The spring property type.
        matrix - The property value (matrix).

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_CANT_MODIFY - Cannot modify the item.
        PRO_TK_NO_LICENSE - No license was available to enable this function.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechSpringpropsVectorSet (ProMechItem              * item,
                                       ProMechSpringpropsPropertyType   type,
                                       ProMechVector                    vector);
/*
    Purpose: Sets the vector corresponding to 'type' of the spring property 
             object. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The spring property.
        type - The spring property type.
        vector - The property value (vector).

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_CANT_MODIFY - Cannot modify the item.
        PRO_TK_NO_LICENSE - No license was available to enable this function.
        PRO_TK_INVALID_PTR - The Input ProMechItem Solid pointer is invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

PRO_END_C_DECLS

#endif /* PROMECHSPRINGPROPS_H */