#ifndef PROMECHGEOMREF_H
#define PROMECHGEOMREF_H



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

typedef enum 
{
  PRO_MECH_GEOMREF_UNUSED = PRO_VALUE_UNUSED,

  PRO_MECH_POINT         = 0,
  PRO_MECH_EDGE          = 1,
  PRO_MECH_SURFACE       = 2,
  PRO_MECH_VERTEX        = 3,
  PRO_MECH_QUILT         = 4,
  PRO_MECH_BOUNDARY      = 5,    /* All Surfaces */
  PRO_MECH_CURVE         = 6,
  PRO_MECH_MODEL         = 7,    /* Whole Part / Assembly */
  PRO_MECH_AXIS          = 8,
  PRO_MECH_COORD_SYSTEM  = 9,
  PRO_MECH_LAYER         = 10,
  PRO_MECH_VOLUME        = 11,
  PRO_MECH_INT_PNT       = 12,
  PRO_MECH_INT_CURVE     = 13,
  PRO_MECH_INT_EDGE      = 14,
  PRO_MECH_INT_SURFACE   = 15,
  PRO_MECH_FEAT          = 16,
  PRO_MECH_COSMETIC      = 17,
  PRO_MECH_BODY          = 18
}
ProMechGeomrefType;

typedef enum 
{
  PRO_MECH_GEOMREF_SUBTYPE_UNUSED = PRO_VALUE_UNUSED,

                                     /* Point sub-types */
  PRO_MECH_POINT_SINGLE      = 0,
  PRO_MECH_POINT_FEATURE     = 1,
  PRO_MECH_POINT_PATTERN     = 2,
  PRO_MECH_POINT_LATT_SINGLE = 3,    /* Reserved for internal use */
  PRO_MECH_POINT_LATT_SET    = 4,    /* Reserved for internal use */

                                     /* Vertex sub-types */
  PRO_MECH_VERTEX_EDGE_START = 10,
  PRO_MECH_VERTEX_EDGE_END   = 11,

                                     /* Coordinate System sub-types */
  PRO_MECH_CSYS_CARTESIAN    = 20,
  PRO_MECH_CSYS_CYLINDRICAL  = 21,
  PRO_MECH_CSYS_SPHERICAL    = 22,

                                     /* Surfaces sub-types */
  PRO_MECH_SURFACE_NORMAL    = PRO_MECH_GEOMREF_SUBTYPE_UNUSED,
  PRO_MECH_SURFACE_REVERSED  = 31,

                                     /* Edge/Curve sub-types */
  PRO_MECH_CURVE_NORMAL      = PRO_MECH_GEOMREF_SUBTYPE_UNUSED,
  PRO_MECH_CURVE_REVERSED    = 41,

                                     /* Edge sub-types */
  PRO_MECH_EDGE_SURF_0       = 50,
  PRO_MECH_EDGE_SURF_1       = 51,

                                     /* Simplified lattices sub-types */
  PRO_MECH_FEAT_3D_LATT      = 61,
  PRO_MECH_FEAT_2P5D_LATT    = 62
}
ProMechGeomrefSubType;

#define PRO_MECH_WCS (-2) /* use it as Csys "id" for referencing WCS */

typedef struct pro_sim_entity* ProMechGeomref;

PRO_BEGIN_C_DECLS

extern ProError  ProMechgeomrefTypeGet (ProMechGeomref entity,
				ProMechGeomrefType* type);
/*
    Purpose: Obtains the entity type. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The entity.

    Output Arguments:
        type - The type.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/

extern ProError ProMechgeomrefTypeSet (ProMechGeomref entity, ProMechGeomrefType type);
/*
    Purpose: Sets the entity type. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The entity.
        type - The type.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/

extern ProError  ProMechgeomrefSubtypeGet (ProMechGeomref entity,
				ProMechGeomrefSubType* sub_type);
/*
    Purpose: Obtains the entity subtype. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The entity.

    Output Arguments:
        sub_type - The subtype.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/

extern ProError ProMechgeomrefSubtypeSet (ProMechGeomref entity, ProMechGeomrefSubType sub_type);
/*
    Purpose: Sets the entity subtype. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The entity.
        sub_type - The subtype.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/

extern ProError  ProMechgeomrefIdGet (ProMechGeomref entity,
				int* id);
/*
    Purpose: Obtains the entity id. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The entity.

    Output Arguments:
        id - The entity id. Creo Simulate uses PRO_MECH_WCS as the id of the 
             default world coordinate system.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/
extern ProError ProMechgeomrefIdSet (ProMechGeomref entity, int id);
/*
    Purpose: Sets the entity id. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The entity.
        id - The entity id. Creo Simulate uses PRO_MECH_WCS as the id of the 
             default world coordinate system.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/

extern ProError  ProMechgeomrefPathGet (ProMechGeomref entity,
				ProAsmcomppath* path);
/*
    Purpose: Obtains the component path to the entity. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The entity.

    Output Arguments:
        path - The component path.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/

extern ProError ProMechgeomrefPathSet (ProMechGeomref entity, ProAsmcomppath* path);
/*
    Purpose: Sets the component path to the entity. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The entity.
        path - The component path.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/

extern ProError ProMechgeomrefAlloc (ProMechGeomref* entity);
/*
    Purpose: Allocates the memory for a Creo Simulate geometric entity. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        none

    Output Arguments:
        entity - The handle.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/
extern ProError  ProMechgeomrefFree (ProMechGeomref entity);
/*
    Purpose: Frees the memory for a Creo Simulate geometric entity. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The handle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/

extern ProError  ProMechgeomrefProarrayFree (ProMechGeomref* entity);
/*
    Purpose: Frees the memory for a ProArray of Creo Simulate geometric 
             entities. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        entity - The array.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session was not initialized.
        PRO_TK_NO_LICENSE - No license was available to enable this function.

*/


PRO_END_C_DECLS

#endif /* PROMECHGEOMREF_H */