#ifndef PROMECHMASS_H
#define PROMECHMASS_H


#include <ProToolkit.h>
#include <ProObjects.h>
#include <ProMechItem.h>
#include <ProMechGeomref.h>
#include <ProMechValue.h>

PRO_BEGIN_C_DECLS

typedef enum
{
  PRO_MECH_MASS_NONE             = PRO_VALUE_UNUSED,

  PRO_MECH_MASS_SIMPLE           = 0,
  PRO_MECH_MASS_ADVANCED         = 1,
  PRO_MECH_MASS_COMPONENT        = 2,
  PRO_MECH_MASS_COMP_AT_POINT    = PRO_MECH_MASS_COMPONENT,
  PRO_MECH_MASS_COMP_DISTRIBUTED = 3
}ProMechMassType;

typedef enum 
{
  PRO_MECH_MASS_DISTR_NONE     = PRO_VALUE_UNUSED,

  PRO_MECH_MASS_DISTR_AT_POINT = 1,
  PRO_MECH_MASS_DISTR_TOTAL    = 2,
  PRO_MECH_MASS_DISTR_PER_UNIT = 3
}ProMechMassDistribution;

typedef struct pro_mass_prop_simple* ProMechSimpleMassData;
typedef struct pro_mass_prop_advanced* ProMechAdvancedMassData;
typedef struct pro_mass_prop_component* ProMechComponentMassData;

extern ProError  ProMechmassReferencesGet (ProMechItem* item,
				ProMechGeomref** references);
/*
    Purpose: Obtains the mass reference objects. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.

    Output Arguments:
        references - ProArray of reference objects.The function allocates 
                     memory for this argument. Use ProMechgeomrefProarrayFree() 
                     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_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.

*/

extern ProError  ProMechmassDistributionGet (ProMechItem* item,
				ProMechMassDistribution* type);
/*
    Purpose: Obtains the mass distribution type. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.

    Output Arguments:
        type - The distribution 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  ProMechmassTypeGet (ProMechItem* item,
				ProMechMassType* type);
/*
    Purpose: Obtains the mass type (simple, advance, component). 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.

    Output Arguments:
        type - The mass 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  ProMechmassSimpledataGet (ProMechItem* item,
				ProMechSimpleMassData* value);
/*
    Purpose: Obtains the simple mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.

    Output Arguments:
        value - The simple mass data. Free this using 
                ProMechsimplemassdataFree().

    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. unable to 
                               convert mass data to principal units.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.

    See Also:
        ProMechmassTypeGet()
*/

extern ProError  ProMechsimplemassdataMassGet (ProMechSimpleMassData data,
				ProMechExpression mass);
/*
    Purpose: Obtains the mass value for the simple mass data. Use 
             ProMathExpressionEvaluate() to evaluate it. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The simple mass data.

    Output Arguments:
        mass - The mass.

    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  ProMechsimplemassdataFree (ProMechSimpleMassData data);
/*
    Purpose: Frees the memory for a Creo Simulate simple mass 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  ProMechmassAdvanceddataGet (ProMechItem* item,
				ProMechAdvancedMassData* value);
/*
    Purpose: Obtains the advanced mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.

    Output Arguments:
        value - The advanced mass data. Free this using 
                ProMechadvancedmassdataFree().

    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.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.

    See Also:
        ProMechmassTypeGet()
*/

extern ProError  ProMechadvancedmassdataCsysGet (ProMechAdvancedMassData data,
				ProMechGeomref* csys);
/*
    Purpose: Obtains the reference coordinate system for the advanced mass 
             data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The advanced mass data.

    Output Arguments:
        csys - The coordinate system. Free this using ProMechgeomrefFree().

    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  ProMechadvancedmassdataPropertiesGet (ProMechAdvancedMassData data,
				int* properties_id);
/*
    Purpose: Obtains the mass properties id from the advanced mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The advanced mass data.

    Output Arguments:
        properties_id - The mass 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  ProMechadvancedmassdataFree (ProMechAdvancedMassData data);
/*
    Purpose: Frees the memory for a Creo Simulate advanced mass 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  ProMechmassComponentdataGet (ProMechItem* item,
				ProMechComponentMassData* value);
/*
    Purpose: Obtains the component mass data. Note: This function operates on 
             masses of type PRO_MECH_MASS_COMP_AT_POINT and 
             PRO_MECH_COMP_DISTRIBUTED. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.

    Output Arguments:
        value - The component mass data. Free this using 
                ProMechcomponentmassdataFree().

    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.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.

    See Also:
        ProMechmassTypeGet()
*/

extern ProError  ProMechcomponentmassdataComponentGet (ProMechComponentMassData data,
				ProMechGeomref* component);
/*
    Purpose: Obtains the reference component for the component mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The component mass data.

    Output Arguments:
        component - The component. Free this using ProMechgeomrefFree().

    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  ProMechcomponentmassdataFree (ProMechComponentMassData data);
/*
    Purpose: Frees the memory for a Creo Simulate advanced mass 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 ProMechmassReferencesSet (ProMechItem* item, ProMechGeomref* references);
/*
    Purpose: Sets the mass reference objects. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.
        references - ProArray of reference objects.

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

*/

extern ProError ProMechmassDistributionSet (ProMechItem* item, ProMechMassDistribution type);
/*
    Purpose: Sets the mass distribution type. Setting this type is necessary 
             for creation of mass object. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.
        type - The distribution type. For point references, this type should be 
               set to PRO_MECH_MASS_DISTR_AT_POINT.

    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 ProMechmassSimpledataSet (ProMechItem* item, ProMechSimpleMassData data);
/*
    Purpose: Sets the simple mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.
        data - The simple mass 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 of item is not allowed to change.
        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 ProMechsimplemassdataMassSet (ProMechSimpleMassData data, ProMechExpression mass);
/*
    Purpose: Sets the mass value for the simple mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The simple mass data.
        mass - The mass.

    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 ProMechsimplemassdataAlloc (ProMechSimpleMassData* data);
/*
    Purpose: Allocates the memory for a Creo Simulate simple mass 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.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.

*/

extern ProError ProMechmassAdvanceddataSet (ProMechItem* item, ProMechAdvancedMassData data);
/*
    Purpose: Sets the advanced mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.
        data - The advanced mass 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 of item is not allowed to change.
        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 ProMechadvancedmassdataCsysSet (ProMechAdvancedMassData data, ProMechGeomref csys);
/*
    Purpose: Sets the reference coordinate system for the advanced mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The advanced mass data.
        csys - The coordinate system.

    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 ProMechadvancedmassdataPropertiesSet (ProMechAdvancedMassData data, int properties_id);
/*
    Purpose: Sets the mass properties id from the advanced mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The advanced mass data.
        properties_id - The mass 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 ProMechadvancedmassdataAlloc (ProMechAdvancedMassData* data);
/*
    Purpose: Allocates the memory for a Creo Simulate advanced mass 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.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.

*/

extern ProError ProMechmassComponentpointdataSet (ProMechItem* item, ProMechComponentMassData data);
/*
    Purpose: Sets the component at point mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.
        data - The component at point mass 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 of item is not allowed to change.
        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 ProMechmassComponentdistributeddataSet (ProMechItem* item, ProMechComponentMassData data);
/*
    Purpose: Sets the component distributed mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        item - The mass.
        data - The component distributed mass 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 of item is not allowed to change.
        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 ProMechcomponentmassdataComponentSet (ProMechComponentMassData data, ProMechGeomref component);
/*
    Purpose: Sets the reference component for the component mass data. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The component mass data.
        component - The component.

    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 ProMechcomponentmassdataAlloc (ProMechComponentMassData* data);
/*
    Purpose: Allocates the memory for a Creo Simulate advanced mass 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.
        PRO_TK_OUT_OF_MEMORY - There is not enough memory to perform the 
                               operation.

*/
PRO_END_C_DECLS

#endif /* PROMECHMASS_H */