#ifndef PROMECHSHELL_H
#define PROMECHSHELL_H


#include <ProToolkit.h>
#include <ProObjects.h>

#include <ProMechValue.h>

PRO_BEGIN_C_DECLS

typedef struct pro_shell_prop_simple* ProMechShellSimpleData;
typedef struct pro_shell_prop_advanced* ProMechShellAdvancedData;

typedef enum
{
  PRO_MECH_SHELL_NONE     = PRO_VALUE_UNUSED,

  PRO_MECH_SHELL_SIMPLE   = 0,
  PRO_MECH_SHELL_ADVANCED = 1
}
ProMechShellDataType;

extern ProError  ProMechshellReferencesGet (ProMechItem* item,
				ProMechGeomref** references);
/*
    Purpose: Obtains the references for the shell. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

    Output Arguments:
        references - ProArray of references. Free this using 
                     ProMechgeomrefProarrayFree().

    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  ProMechshellMaterialGet (ProMechItem* item,
				ProName material);
/*
    Purpose: Obtains the material name. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

    Output Arguments:
        material - The material name.

    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  ProMechshellMaterialIdGet (ProMechItem* item,
				int * matl_id);
/*
    Purpose: Obtains the material id. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

    Output Arguments:
        matl_id - The material id.

    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  ProMechshellTypeGet (ProMechItem* item,
				ProMechShellDataType* type);
/*
    Purpose: Obtains the type of the shell (simple or advanced). 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

    Output Arguments:
        type - The shell type.

    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  ProMechshellSimpledataGet (ProMechItem* item,
				ProMechShellSimpleData* data);
/*
    Purpose: Obtains the simple shell data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

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

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_INVALID_TYPE - This item does not contain this type of data.
        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.

    See Also:
        ProMechshellTypeGet()
*/

extern ProError  ProMechshellAdvanceddataGet (ProMechItem* item,
				ProMechShellAdvancedData* data);
/*
    Purpose: Obtains the advanced shell data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

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

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_INVALID_TYPE - This item does not contain this type of data.
        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.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.

    See Also:
        ProMechshellTypeGet()
*/

extern ProError  ProMechshellsimpleThicknessGet (ProMechShellSimpleData item,
				ProMechExpression thickness);
/*
    Purpose: Obtains the thickness for the shell. Use 
             ProMathExpressionEvaluate() to evaluate it. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

    Output Arguments:
        thickness - The thickness.

    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  ProMechshellsimpleFree (ProMechShellSimpleData data);
/*
    Purpose: Frees the memory for a Creo Simulate simple shell 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  ProMechshelladvancedShellpropsGet (ProMechShellAdvancedData item,
				int* shell_props_id);
/*
    Purpose: Obtains the shell properties id for this shell. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

    Output Arguments:
        shell_props_id - The shell properties id.

    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  ProMechshelladvancedMaterialorientGet (ProMechShellAdvancedData item,
				int* material_orient_id);
/*
    Purpose: Obtains the material orientation id for this shell. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.

    Output Arguments:
        material_orient_id - The material orientation id.

    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  ProMechshelladvancedFree (ProMechShellAdvancedData data);
/*
    Purpose: Frees the memory for a Creo Simulate advanced shell 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 ProMechshellReferencesSet (ProMechItem* item, ProMechGeomref* references);
/*
    Purpose: Sets the references for the shell. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.
        references - ProArray of references.

    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_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.
        PRO_TK_CANT_MODIFY - Cannot modify the item.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechshellMaterialIdSet (ProMechItem* item, int matl_id);
/*
    Purpose: Sets the material id for shell. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.
        matl_id - The Material id.

    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 ProMechshellSimpledataSet (ProMechItem* item, ProMechShellSimpleData data);
/*
    Purpose: Sets the simple shell data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.
        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_CANT_WRITE - Subtype cannot be changed.
        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 ProMechshellAdvanceddataSet (ProMechItem* item, ProMechShellAdvancedData data);
/*
    Purpose: Sets the advanced shell data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.
        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_CANT_WRITE - Subtype cannot be changed.
        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 ProMechshellsimpleThicknessSet (ProMechShellSimpleData item, ProMechExpression thickness);
/*
    Purpose: Sets the thickness for the shell. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.
        thickness - The thickness.

    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 ProMechshellsimpleAlloc (ProMechShellSimpleData* data);
/*
    Purpose: Allocates the memory for a Creo Simulate simple shell 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 ProMechshelladvancedShellpropsSet (ProMechShellAdvancedData item, int shell_props_id);
/*
    Purpose: Sets the shell properties id for this shell. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.
        shell_props_id - The shell properties id.

    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 ProMechshelladvancedMaterialorientSet (ProMechShellAdvancedData item, int material_orient_id);
/*
    Purpose: Sets the material orientation id for this shell. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The shell.
        material_orient_id - The material orientation id.

    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 ProMechshelladvancedAlloc (ProMechShellAdvancedData* data);
/*
    Purpose: Allocates the memory for a Creo Simulate advanced shell 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.

*/
PRO_END_C_DECLS

#endif /* PROMECHSHELL_H */