#ifndef PROMECHGEOMETRY_H
#define PROMECHGEOMETRY_H



#include <ProANSI.h>

PRO_BEGIN_C_DECLS

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

#include <ProGeomitem.h>
#include <ProSurface.h>
#include <ProSurfacedata.h>
#include <ProEdge.h>
#include <ProEdgedata.h>
#include <ProContour.h>
#include <ProContourdata.h>
#include <ProCurve.h>
#include <ProCurvedata.h>
#include <ProSurface.h>
#include <ProMechGeomref.h>

typedef struct pro_sim_model* ProMechModel;
typedef struct pro_sim_solid* ProMechSolid;
typedef struct pro_sim_face* ProMechSurface;
typedef struct pro_sim_contour* ProMechContour;
typedef struct pro_sim_edge* ProMechEdge;
typedef struct pro_sim_vertex* ProMechVertex;
typedef struct pro_sim_point* ProMechPoint;
typedef struct pro_sim_compcurve* ProMechCompositeCurve;
typedef struct pro_sim_curve* ProMechCurve;

typedef struct pro_sim_model_data* ProMechModelData;

typedef double ProUvTransform[2][3];

typedef enum
{
  /* Solid surfaces + shells on quilt surfaces. */
  PRO_MECH_MODEL_SOLID    = 0,

  /* Shell-compressed surfaces + shells on quilt surfaces.
     Requires the Creo Simulate license to be available.  */
  PRO_MECH_MODEL_SHELL    = 1,

  /* Solid and Shell-compressed surfaces + shells on quilt surfaces.
     Requires the Creo Simulate license to be available.  */
  PRO_MECH_MODEL_MIXED    = 2,

  /* Shell surfaces on solid boundary + shells on quilt surfaces. */
  PRO_MECH_MODEL_BOUNDARY = 3,

  /* Shells on quilt surfaces. */
  PRO_MECH_MODEL_QUILT    = 4,

  /* Bars on given datum curves. */
  PRO_MECH_MODEL_BAR      = 5
}
ProMechModelType;

typedef enum
{
  PRO_MECH_MODEL_SUCCESS          = 0,  /* Success */
  PRO_MECH_MODEL_GENERAL_FAILURE  = 1,  /* General failure */
  PRO_MECH_MODEL_USER_INTERRUPT   = 2,  /* User interrupt */
  PRO_MECH_MODEL_SHELL_NO_PAIRS   = 3,  /* No shell pairs were defined */
  PRO_MECH_MODEL_SHELL_SOME_PAIRS = 4,  /* Some paired and some unpaired srfs
                                           found for type PRO_MECH_MODEL_SHELL
                                           (where every portion of the model
                                           should compress to shell surfs) */
  PRO_MECH_MODEL_NO_MESHABLE_GEOM = 5   /* No meshable geometry
                                           or idealizations */
}
ProMechModelStatus;

typedef enum
{
  PRO_MECH_SOLID_PART     = 1,
  PRO_MECH_SOLID_ASSEMBLY = 2
}
ProMechSolidType;

typedef enum
{
  PRO_MECH_FACE_SOLID         = 0,  /* A solid surface */
  PRO_MECH_FACE_SHELL         = 1,  /* A shell mid-plane surface */
  PRO_MECH_FACE_SIDE          = 2,  /* A shell side surface (will have zero
                                       surface area) */
  PRO_MECH_FACE_SHELL_QLT     = 3,  /* A quilt surface */
  PRO_MECH_FACE_BOUNDARY      = 4,  /* A solid boundary surface for
                                       type PRO_MECH_MODEL_BOUNDARY */
  PRO_MECH_FACE_PERIM_WELD    = 5,  /* A generated surface for a perimeter
                                       weld idealization */
  PRO_MECH_FACE_PROWELD_WELD  = 6,  /* A generated surface for a Pro/WELD
                                       weld idealization */
  PRO_MECH_FACE_2P5D_INTERNAL = 7   /* An internal planar surface for
                                       2.5D meshing */
}
ProMechSurfaceType;

typedef enum
{
  PRO_MECH_PNT_FREE   = 0,    /* Point is not attached to a solid/shell */
  PRO_MECH_PNT_FACE   = 1,    /* Point lies on a ProMechSurface */
  PRO_MECH_PNT_EDGE   = 2,    /* Point lies on a ProMechEdge */
  PRO_MECH_PNT_VERTEX = 3     /* Point lies on a ProMechVertex */
}
ProMechpointPlacementType;

typedef enum
{
  PRO_MECH_SEGMENT_FREE    = 0,   /* Curve is not on any edge */
  PRO_MECH_SEGMENT_ON_EDGE = 1    /* Curve lies on an edge */
}
ProMechCurveType;

typedef ProError (*ProMechsolidFilterAction) (ProMechSolid solid, ProAppData app_data);
/*
    Purpose: Filter action for the solid volumes that make up a Creo Simulate 
             model.

    Input Arguments:
        solid - The solid volumes in the geometry.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Don't pass the item to the visit action.
        PRO_TK_NO_ERROR - Pass the item to the visit action, and pass this 
                          value as filter status.

*/

typedef ProError (*ProMechsolidVisitAction) (ProMechSolid solid, ProError error, ProAppData app_data);
/*
    Purpose: Visit action for the solid volumes that make up a Creo Simulate 
             model.

    Input Arguments:
        solid - The solid volumes in the geometry.
        error - Error return passed from the filter action.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting.
        Any other value - Stop visiting and pass this value as a return from 
                          the visit function.

*/

typedef ProError (*ProMechpointFilterAction) (ProMechPoint point, ProAppData app_data);
/*
    Purpose: Filter action for the datum points that are included in a Creo 
             Simulate geometry model.

    Input Arguments:
        point - The datum points.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Don't pass the item to the visit action.
        PRO_TK_NO_ERROR - Pass the item to the visit action, and pass this 
                          value as filter status.

*/

typedef ProError (*ProMechpointVisitAction) (ProMechPoint point, ProError error, ProAppData app_data);
/*
    Purpose: Visit action for the datum points that are included in a Creo 
             Simulate geometry model.

    Input Arguments:
        point - The datum points.
        error - Error return passed from the filter action.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting.
        Any other value - Stop visiting and pass this value as a return from 
                          the visit function.

*/

typedef ProError (*ProMechcompositecurveFilterAction) (ProMechCompositeCurve curve, ProAppData app_data);
/*
    Purpose: Filter action for the composite curves that are included in a Creo 
             Simulate geometry model.

    Input Arguments:
        curve - The composite curve handle.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Don't pass the item to the visit action.
        PRO_TK_NO_ERROR - Pass the item to the visit action, and pass this 
                          value as filter status.

*/

typedef ProError (*ProMechcompositecurveVisitAction) (ProMechCompositeCurve curve, ProError error, ProAppData app_data);
/*
    Purpose: Visit action for the composite curves that are included in a Creo 
             Simulate geometry model.

    Input Arguments:
        curve - The composite curve handle.
        error - Error return passed from the filter action.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting.
        Any other value - Stop visiting and pass this value as a return from 
                          the visit function.

*/

typedef ProError (*ProMechsurfaceFilterAction) (ProMechSurface surface, ProAppData app_data);
/*
    Purpose: Filter action for the surfaces that are included in a given solid 
             volume.

    Input Arguments:
        surface - The surfaces for a given solid volume.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Don't pass the item to the visit action.
        PRO_TK_NO_ERROR - Pass the item to the visit action, and pass this 
                          value as filter status.

*/

typedef ProError (*ProMechsurfaceVisitAction) (ProMechSurface surface, ProError error, ProAppData app_data);
/*
    Purpose: Visit action for the surfaces that are included in a given solid 
             volume.

    Input Arguments:
        surface - The surfaces for a given solid volume.
        error - Error return passed from the filter action.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting.
        Any other value - Stop visiting and pass this value as a return from 
                          the visit function.

*/

typedef ProError (*ProMechedgeFilterAction) (ProMechEdge edge, ProAppData app_data);
/*
    Purpose: Filter action for the edges that are included in a given solid 
             volume, surface, or contour.

    Input Arguments:
        edge - The edge.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Don't pass the item to the visit action.
        PRO_TK_NO_ERROR - Pass the item to the visit action, and pass this 
                          value as filter status.

*/

typedef ProError (*ProMechedgeVisitAction) (ProMechEdge edge, ProError error, ProAppData app_data);
/*
    Purpose: Visit action for the edges that are included in a given solid 
             volume, surface, or contour.

    Input Arguments:
        edge - The edge.
        error - Error return passed from the filter action.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting.
        Any other value - Stop visiting and pass this value as a return from 
                          the visit function.

*/

typedef ProError (*ProMechcontourFilterAction) (ProMechContour contour, ProAppData app_data);
/*
    Purpose: Filter action for the contours that are included in a given 
             surface.

    Input Arguments:
        contour - The contour.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Don't pass the item to the visit action.
        PRO_TK_NO_ERROR - Pass the item to the visit action, and pass this 
                          value as filter status.

*/

typedef ProError (*ProMechcontourVisitAction) (ProMechContour contour, ProError error, ProAppData app_data);
/*
    Purpose: Visit action for the contours that are included in a given 
             surface.

    Input Arguments:
        contour - The contour.
        error - Error return passed from the filter action.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting.
        Any other value - Stop visiting and pass this value as a return from 
                          the visit function.

*/

typedef ProError (*ProMechcurveFilterAction) (ProMechCurve curve, ProAppData app_data);
/*
    Purpose: Filter action for the curves that make up this composite curve.

    Input Arguments:
        curve - The curve.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Don't pass the item to the visit action.
        PRO_TK_NO_ERROR - Pass the item to the visit action, and pass this 
                          value as filter status.

*/

typedef ProError (*ProMechcurveVisitAction) (ProMechCurve curve, ProError error, ProAppData app_data);
/*
    Purpose: Visit action for the curves that make up this composite curve.

    Input Arguments:
        curve - The curve.
        error - Error return passed from the filter action.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting.
        Any other value - Stop visiting and pass this value as a return from 
                          the visit function.

*/

typedef ProError (*ProMechvertexFilterAction) (ProMechVertex vertex, ProAppData app_data);
/*
    Purpose: Filter action for the vertices that are included in a given solid 
             volume.

    Input Arguments:
        vertex - The vertex.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_CONTINUE - Don't pass the item to the visit action.
        PRO_TK_NO_ERROR - Pass the item to the visit action, and pass this 
                          value as filter status.

*/

typedef ProError (*ProMechvertexVisitAction) (ProMechVertex vertex, ProError error, ProAppData app_data);
/*
    Purpose: Visit action for the vertices that are included in a given solid 
             volume.

    Input Arguments:
        vertex - The vertex.
        error - Error return passed from the filter action.
        app_data - Application data passed to the function.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Continue visiting.
        Any other value - Stop visiting and pass this value as a return from 
                          the visit function.

*/

extern ProError ProMechmodelGet (ProSolid solid, ProMechModelData data,
                                 ProMechModel* mech_model, ProMechModelStatus* status);
/*
    Purpose: Obtains the root handle to a Creo Simulate geometry model. 
             <b>NOTE: Call ProMdlDisplay() to display model in current active 
             window before using this function.</b> 
             <p> If the type of geometry generated is PRO_MECH_MODEL_SHELL or 
             PRO_MECH_MODEL_MIXED, the function requires the Creo Simulate 
             license (and will attempt to obtain it if its not in session). 
             <p> If the input solid (or any of its components) contains Creo 
             Simulate Volume Region or Surface Region features, the function 
             requires the Creo Simulate license (and will attempt to obtain it 
             if its not in session). 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        solid - The root solid model (part or assembly).
        data - Options for the generation of geometry.

    Output Arguments:
        mech_model - Root handle to the generated geometry.
        status - The status of generation.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_NOT_DISPLAYED - Specified model was not displayed.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_BAD_CONTEXT - The Creo Simulate session is not initialized.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechmodelFree (ProMechModel model);
/*
    Purpose: Frees a Creo Simulate model handle. This invalidates all geometric 
             entities obtained from this handle. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        model - The Creo Simulate model handle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechmodeldataAlloc (ProMechModelData* data);
/*
    Purpose: Allocates a data handle used for genereation of a Creo Simulate 
             geometry model. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        none

    Output Arguments:
        data - The data handle.

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

*/

extern ProError ProMechmodeldataFree (ProMechModelData data);
/*
    Purpose: Frees a data handle used for genereation of a Creo Simulate 
             geometry model. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The data handle.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechmodeldataTypeSet (ProMechModelData data, ProMechModelType type);
/*
    Purpose: Assigns the type of model to be generated. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The data handle.
        type - The type.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechmodeldataEntitiesSet (ProMechModelData data, ProMechGeomref* entities);
/*
    Purpose: Assigns the additional datum points, curves, quilts and individual 
             quilt surfaces to include in the geometric processing. Typically 
             Creo Simulate uses only the entities which have a simulation item 
             assigned to them. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The data handle.
        entities - ProArray of the geometric entities.

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

*/

extern ProError ProMechmodeldataPreserveidsSet (ProMechModelData data, ProBoolean preserve_ids);
/*
    Purpose: Set the flag that controls preservation of IDs. When "Preserve 
             IDs" flag is set, Creo Simulate will try to preserve IDs of 
             surfaces and edges in simulation geometry between different calls 
             to ProMechmodelGet(), even if original geometry of the model has 
             changed slightly. The success of this attempt to preserve geometry 
             IDs is not guaranteed, though. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The data handle.
        preserve_ids - PRO_B_TRUE if the IDs are to be preserved.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechmodeldataMergeCoincSolidEdgesSet (ProMechModelData data,
                                                         ProBoolean merge_coinc_solid_edges);
/*
    Purpose: Set the flag that controls whether coincident solid edges will be 
             merged. By default they will not be merged. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        data - The data handle.
        merge_coinc_solid_edges - PRO_B_TRUE if solid edges to be merged.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechmodelMdlGet (ProMechModel model, ProSolid* mdl);
/*
    Purpose: Obtains gets the root solid model used for generation of this Creo 
             Simulate model. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        model - The Creo Simulate root model.

    Output Arguments:
        mdl - The root solid model used for generation of this Creo Simulate 
              model.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechmodelSolidVisit (ProMechModel model, ProMechsolidVisitAction action, ProMechsolidFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the solid volumes that make up a Creo Simulate geometry 
             model. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        model - The Creo Simulate root model.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No solid models were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechmodelPointVisit (ProMechModel model, ProMechpointVisitAction action, ProMechpointFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the datum points that are included in a Creo Simulate 
             geometry model. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        model - The Creo Simulate root model.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No points were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechmodelCurveVisit (ProMechModel model, ProMechcompositecurveVisitAction action, ProMechcompositecurveFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the composite curves that are included in a Creo Simulate 
             geometry model. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        model - The Creo Simulate root model.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No curves were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechmodelToleranceGet (ProMechModel model, double* tolerance);
/*
    Purpose: Obtains the overall tolerance/epsilon value used for the 
             preparation of the Creo Simulate geometry. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        model - The Creo Simulate root model.

    Output Arguments:
        tolerance - The tolerance.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsolidIdGet (ProMechSolid solid, int* id);
/*
    Purpose: Obtains the ID of the solid volume. This is just an index in the 
             array of generated solid volumes and is not persistent among 
             different calls to ProMechmodelCreate(). 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        solid - The solid volume.

    Output Arguments:
        id - The ID.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsolidModelGet (ProMechSolid solid, ProMechModel* model);
/*
    Purpose: Obtains the root Creo Simulate geometry model. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        solid - The solid volume.

    Output Arguments:
        model - The root model.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsolidTypeGet (ProMechSolid solid, ProMechSolidType* type);
/*
    Purpose: Obtains the solid volume type. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        solid - The solid volume.

    Output Arguments:
        type - The type (part or assembly).

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsolidAsmcomppathGet (ProMechSolid solid, ProAsmcomppath* comp_path);
/*
    Purpose: Obtains the assembly component path from the top assembly to this 
             model. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        solid - The solid volume.

    Output Arguments:
        comp_path - The assembly component path.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsolidSurfaceVisit (ProMechSolid solid, ProMechsurfaceVisitAction action, ProMechsurfaceFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the surfaces that are included in a given solid volume. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        solid - The solid volume.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No surfaces were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechsolidEdgeVisit (ProMechSolid solid, ProMechedgeVisitAction action, ProMechedgeFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the edges that are included in a given solid volume. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        solid - The solid volumne.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No edges were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechsolidVertexVisit (ProMechSolid solid, ProMechvertexVisitAction action, ProMechvertexFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the vertices that are included in a given solid volume. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        solid - The solid volume.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No vertices were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechsurfaceIdGet (ProMechSurface surface, int* id);
/*
    Purpose: Obtains the ID of the surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.

    Output Arguments:
        id - The surface ID.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsurfaceOwnerGet (ProMechSurface surface, ProMechSolid* owner);
/*
    Purpose: Obtains the owner volume for the surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.

    Output Arguments:
        owner - The owner volume.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsurfaceTypeGet (ProMechSurface surface, ProMechSurfaceType* type);
/*
    Purpose: Obtains the type of surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.

    Output Arguments:
        type - The type.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsurfaceContourVisit (ProMechSurface surface, ProMechcontourVisitAction action, ProMechcontourFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the contours that are included in a given surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No contours were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechsurfaceEdgeVisit (ProMechSurface surface, ProMechedgeVisitAction action, ProMechedgeFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the edges that are included in a given surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No edges were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechsurfaceVertexVisit (ProMechSurface surface, ProMechvertexVisitAction action, ProMechvertexFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the vertices that are included in a given surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No vertices were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechsurfaceIncontactfacesGet (ProMechSurface surface, ProMechSurface** in_contact_faces);
/*
    Purpose: Obtains the list of surfaces which have been combined by the 
             geometry evaluation because they are in contact with one another. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.

    Output Arguments:
        in_contact_faces - ProArray of the surfaces which are in contact with 
                           the given surface.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_E_NOT_FOUND - No other surfaces were found in contact with this 
                             one.
        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 ProMechsurfaceDataGet (ProMechSurface surface, ProGeomitemdata** data);
/*
    Purpose: Obtains the geometric representation of the surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.

    Output Arguments:
        data - The surface data. The function allocates the memory for this 
               argument. Use the function <b>ProGeomitemdataFree()</b> to free 
               the memory.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechcontourIdGet (ProMechContour contour, int* id);
/*
    Purpose: Obtains the ID for a given contour (unique within the surface that 
             owns the contour). 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        contour - The contour.

    Output Arguments:
        id - The ID.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcontourSurfaceGet (ProMechContour contour, ProMechSurface* surface);
/*
    Purpose: Obtains the surface that contains the contour. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        contour - The contour.

    Output Arguments:
        surface - The surface.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcontourTraversalGet (ProMechContour contour, ProContourTraversal* traversal);
/*
    Purpose: Obtains the contour traversal. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        contour - The contour.

    Output Arguments:
        traversal - The contour traversal.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_E_NOT_FOUND - No traversals were found for the given contour.

*/

extern ProError ProMechcontourContainingContourGet (ProMechContour contour, ProMechContour* containing);
/*
    Purpose: Obtains the contour's containing contour. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        contour - The contour.

    Output Arguments:
        containing - The containing contour. NULL if there is no containing 
                     contour.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcontourEdgeVisit (ProMechContour contour, ProMechedgeVisitAction action, ProMechedgeFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the edges that make up a given contour. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        contour - The contour.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No edges were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechedgeDirectionGet (ProMechEdge edge, ProMechContour contour, ProEdgeDirection* direction);
/*
    Purpose: Obtains the edge direction with respect to the given contour. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        contour - The contour.

    Output Arguments:
        direction - The edge direction in the given contour.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_E_NOT_FOUND - The edge is not contained in the given contour.

*/

extern ProError ProMechedgeIdGet (ProMechEdge edge, int* id);
/*
    Purpose: Obtains the ID of the given edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.

    Output Arguments:
        id - The ID.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechedgeOwnerGet (ProMechEdge edge, ProMechSolid* owner);
/*
    Purpose: Obtains the owner volume of a given edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.

    Output Arguments:
        owner - The owner volume.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechedgeSurfaceVisit (ProMechEdge edge, ProMechsurfaceVisitAction action, ProMechsurfaceFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the surfaces that share this edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No surfaces were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechedgeContourVisit (ProMechEdge edge, ProMechcontourVisitAction action, ProMechcontourFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the contours that contain this edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No contours were found to visit because the edge 
                             is not a part of any surface's contours.
        Other - Error return from the visit action.

*/

extern ProError ProMechedgeEndpointsGet (ProMechEdge edge, ProMechVertex* endpoint_1, ProMechVertex* endpoint_2);
/*
    Purpose: Obtains the endpoints of the given edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.

    Output Arguments:
        endpoint_1 - The start point for the edge (t = 0.0).
        endpoint_2 - The end point for the edge (t = 1.0).

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechedgeIncontactedgesGet (ProMechEdge edge, ProMechEdge** in_contact_edges);
/*
    Purpose: Obtains a list of the edges which have been combined by the 
             geometry evaluation because they are in contact. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.

    Output Arguments:
        in_contact_edges - ProArray of the edges in contact with this one.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_E_NOT_FOUND - No other edges were found that were in contact 
                             with this one.

*/

extern ProError ProMechedgeDataGet (ProMechEdge edge, ProGeomitemdata** data);
/*
    Purpose: Obtains the geometric representation of the edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.

    Output Arguments:
        data - The edge data. The function allocates the memory for this 
               argument. Use the function <b>ProGeomitemdataFree()</b> to free 
               the memory.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechvertexIdGet (ProMechVertex vertex, int* id);
/*
    Purpose: Obtains the ID of a given vertex. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        vertex - The vertex.

    Output Arguments:
        id - The ID.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechvertexOwnerGet (ProMechVertex vertex, ProMechSolid* owner);
/*
    Purpose: Obtains the volume that owns the vertex. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        vertex - The vertex.

    Output Arguments:
        owner - The solid volume owner.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechvertexPointGet (ProMechVertex vertex, Pro3dPnt point);
/*
    Purpose: Obtains the coordinate point for a given vertex. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        vertex - The vertex.

    Output Arguments:
        point - The point.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechvertexSurfaceVisit (ProMechVertex vertex, ProMechsurfaceVisitAction action, ProMechsurfaceFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the surfaces that include this vertex. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        vertex - The vertex.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No surfaces were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechvertexEdgeVisit (ProMechVertex vertex, ProMechedgeVisitAction action, ProMechedgeFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the edges that contain this vertex. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        vertex - The vertex.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No edges were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechvertexIncontactverticesGet (ProMechVertex vertex, ProMechVertex** in_contact_vertices);
/*
    Purpose: Obtains the list of the vertices that the geometry evaluation has 
             combined because they are in contact with this one. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        vertex - The vertex.

    Output Arguments:
        in_contact_vertices - ProArray of vertices that are in contact with 
                              this one.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_E_NOT_FOUND - No other vertices were found in contact with this 
                             one.
        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 ProMechpointIdGet (ProMechPoint point, int* id);
/*
    Purpose: Obtains the ID of the point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        point - The point.

    Output Arguments:
        id - The ID.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechpointOwnerGet (ProMechPoint point, ProMechModel* owner);
/*
    Purpose: Obtains the owner model for a given point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        point - The point.

    Output Arguments:
        owner - The owner.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechpointPointGet (ProMechPoint point, Pro3dPnt out_point);
/*
    Purpose: Obtains the coordinates of the point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        point - The point.

    Output Arguments:
        out_point - The coordinates of the point.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechpointPlacementtypeGet (ProMechPoint point, ProMechpointPlacementType* placement_type);
/*
    Purpose: Obtains the placement type for the point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        point - The point.

    Output Arguments:
        placement_type - The placement type.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechpointPlacementsurfaceGet (ProMechPoint point, ProMechSurface* placement_surface, ProUvParam param);
/*
    Purpose: Obtains the placment surface, if the placement type is 
             PRO_MECH_POINT_FACE. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        point - The point.

    Output Arguments:
        placement_surface - The placement surface.
        param - The UV coordinates of the placement on the surface.

    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 surface.

*/

extern ProError ProMechpointPlacementedgeGet (ProMechPoint point, ProMechEdge* placement_edge, double* parameter);
/*
    Purpose: Obtains the placement edge, if placement type is 
             PRO_MECH_POINT_EDGE. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        point - The point.

    Output Arguments:
        placement_edge - The placement edge.
        parameter - The parameter along the edge that identifies the placement.

    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 edge.

*/

extern ProError ProMechpointPlacementvertexGet (ProMechPoint point, ProMechVertex* placement_vertex);
/*
    Purpose: Obtains the placement vertex, if the placement type is 
             PRO_MECH_POINT_VERTEX. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        point - The point.

    Output Arguments:
        placement_vertex - The placement vertex.

    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 vertex.

*/

extern ProError ProMechpointAncestorsGet (ProMechPoint point, ProMechGeomref** ancestors);
/*
    Purpose: Obtains the ancestor point for the given point. These are the 
             actual Creo Parametric geometry point used to construct this Creo 
             Simulate point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        point - The point handle.

    Output Arguments:
        ancestors - ProArray of the ancestor geometry for the point.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcompositecurveIdGet (ProMechCompositeCurve composite_curve, int* id);
/*
    Purpose: Obtains the ID of the composite curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        composite_curve - The composite curve.

    Output Arguments:
        id - The ID.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcompositecurveOwnerGet (ProMechCompositeCurve composite_curve, ProMechModel* owner);
/*
    Purpose: Obtains the owner model for the composite curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        composite_curve - The composite curve.

    Output Arguments:
        owner - The owner model.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcompositecurveCurveVisit (ProMechCompositeCurve composite_curve, ProMechcurveVisitAction action, ProMechcurveFilterAction filter, ProAppData app_data);
/*
    Purpose: Visits the curves that make up this composite curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        composite_curve - The composite curve.
        action - The visit action
        filter - The filter action
        app_data - Application data passed to the action functions.

    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_E_NOT_FOUND - No curves were found to visit.
        Other - Error return from the visit action.

*/

extern ProError ProMechcompositecurveAncestorsGet (ProMechCompositeCurve curve, ProMechGeomref** ancestors);
/*
    Purpose: Obtains the ancestor curves for the given composite curve. These 
             are the actual Creo Parametric geometry curves used to construct 
             this Creo Simulate curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve handle.

    Output Arguments:
        ancestors - ProArray of the ancestor geometry for the curve.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are 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 ProMechcurveTypeGet (ProMechCurve curve, ProMechCurveType* type);
/*
    Purpose: Obtains the curve's type. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.

    Output Arguments:
        type - The curve type.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcurveParentGet (ProMechCurve curve, ProMechCompositeCurve* parent);
/*
    Purpose: Obtains the parent composite curve for this curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.

    Output Arguments:
        parent - The composite curve parent.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcurveParamGet (ProMechCurve curve, double* param);
/*
    Purpose: Obtains the parameter along the parent composite curve at which 
             this curve begins. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.

    Output Arguments:
        param - The parameter.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcurveEndpointsGet (ProMechCurve curve, ProMechPoint* endpoints1, ProMechPoint* endpoints2);
/*
    Purpose: Obtains the endpoints of the curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.

    Output Arguments:
        endpoints1 - The first endpoint. May be NULL, if the curve doesn't end 
                     at a designated point.
        endpoints2 - The second endpoint. May be NULL, if the curve doesn't end 
                     at a designated point.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcurveEdgeGet (ProMechCurve curve, ProMechEdge* edge, ProEdgeDirection* rel_direction);
/*
    Purpose: Obtains the edge, if the curve type is PRO_MECH_CURVE_EDGE. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.

    Output Arguments:
        edge - The edge.
        rel_direction - Relative direction of the curve with respect to the 
                        edge.

    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 edge.

*/

extern ProError ProMechcurveAncestorsGet (ProMechCurve curve, ProMechGeomref** ancestors);
/*
    Purpose: Obtains the ancestor curves for the given simple curve. These are 
             the actual Creo Parametric geometry curves used to construct this 
             Creo Simulate curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve handle.

    Output Arguments:
        ancestors - ProArray of the ancestor geometry for the curve.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are 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 ProMechcurveDataGet (ProMechCurve curve, ProGeomitemdata** data);
/*
    Purpose: Obtains the geometric representation of the curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.

    Output Arguments:
        data - The curve data. The function allocates the memory for this 
               argument. Use the function <b>ProGeomitemdataFree()</b> to free 
               the memory.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_NOT_IMPLEMENTED - The function does not support composite 
                                 curves.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechsurfaceParamEval (ProMechSurface surface, Pro3dPnt xyz_point, ProUvParam uv_point);
/*
    Purpose: Finds the corresponding UV point on the Creo Simulate surface, 
             given the XYZ point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.
        xyz_point - The XYZ point. The point does not necessarily have to lie 
                    on the surface. If the point is off of the surface, the 
                    function finds the closest point.

    Output Arguments:
        uv_point - The corresponding UV point on the surface.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechsurfacePrincipalCrvtEval (ProMechSurface surface, ProUvParam uv_point, double* max_curvature, double* min_curvature,ProVector curv_dirs[2]);
/*
    Purpose: Finds principal curvatures and directions of the Creo Simulate 
             surface at the given UV point.

    Input Arguments:
        surface - The surface.
        uv_point - The UV point.

    Output Arguments:
        max_curvature - Maximum curvature at the point.
        min_curvature - Minimum curvature at the point.
        curv_dirs - Principal directions at the point.

    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_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechsurfaceXyzdataEval (ProMechSurface surface, ProUvParam param, Pro3dPnt xyz_point, ProVector deriv1[2], ProVector deriv2[3], ProVector normal);
/*
    Purpose: Evaluates the Creo Simulate surface at the specified UV point.

    Input Arguments:
        surface - The surface.
        param - The UV params.

    Output Arguments:
        xyz_point - The resulting XYZ point.
        deriv1 - The first derivative in the UV point.
        deriv2 - The second derivative in the UV point.
        normal - The normal to the surface in the UV point.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechsurfaceUvpntVerify (ProMechSurface surface, ProUvParam uv_point, ProUvStatus *status);
/*
    Purpose: Verifies whether the specified UV point lies within the boundaries 
             of the Creo Simulate surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.
        uv_point - The UV point.
        status - The resulting status.

    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_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechsurfaceTessellationGet (ProMechSurface surface,
                                               ProSurfaceTessellationInput input_data,
                                               ProTessellation* tessellation);
/*
    Purpose: Calculates the tessellation for the provided Creo Simulate 
             surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.
        input_data - The input data for the tessellation.

    Output Arguments:
        tessellation - The tessellation for the surface.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechsurfaceToNURBS (ProMechSurface surface, ProSurfacedata** nurbs_data);
/*
    Purpose: Obtains the NURBS representation of the Creo Simulate surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.

    Output Arguments:
        nurbs_data - The NURBS data. Free this using ProSurfacedataFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechsurfaceTransformGet (ProMechSurface surface_1, ProMechSurface surface_2, ProUvTransform transform);
/*
    Purpose: Obtains the UV transform between two surfaces in contact. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface_1 - The first surface.
        surface_2 - The second surface.

    Output Arguments:
        transform - The UV transformation.

    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_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechsurfaceThicknessEval (ProMechSurface surface, ProUvParam uv_point, double* thickness);
/*
    Purpose: Obtains the thickness of the shell Creo Simulate surface at the 
             given UV point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface.
        uv_point - The UV parameter on the surface.

    Output Arguments:
        thickness - The shell thickness at the given point.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechsurfaceAncestorsGet (ProMechSurface surface, ProMechGeomref** ancestors);
/*
    Purpose: Obtains the ancestor surfaces for the given surface. These are the 
             actual Creo Parametric geometry surfaces used to construct this 
             Creo Simulate surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        surface - The surface handle.

    Output Arguments:
        ancestors - ProArray of the ancestor geometry for the surface.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are 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 ProMechcontourUvpntVerify (ProMechContour contour, ProUvParam uv_point, ProUvStatus* status);
/*
    Purpose: Verifies whether the specified UV point lies within the given Creo 
             Simulate contour. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        contour - The contour.
        uv_point - The UV point.

    Output Arguments:
        status - The status of the point.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechcontourAreaEval (ProMechContour contour, double* area);
/*
    Purpose: Finds the surface area inside the given outer contour, accounting 
             for internal voids. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        contour - The contour.

    Output Arguments:
        area - The area.

    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 contour.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechcontourBoundbox2dCompute (ProMechContour contour, ProUvParam outline_points[2]);
/*
    Purpose: Finds the 2d bounding box of the Creo Simulate outer contour.

    Input Arguments:
        contour - The contour.

    Output Arguments:
        outline_points - The 2d bounding box.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechcontourBoundbox3dCompute (ProMechContour contour, Pro3dPnt outline_points[2]);
/*
    Purpose: Finds the 3d bounding box of the Creo Simulate outer contour.

    Input Arguments:
        contour - The contour.

    Output Arguments:
        outline_points - The 3d bounding box for the contour.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechedgeUvdataEval (ProMechEdge edge, ProMechSurface surface, double edge_param, ProUvParam uv_point, ProUvParam deriv1, ProUvParam deriv2);
/*
    Purpose: Evaluates the Creo Simulate edge in the UV space of the given 
             surface. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        surface - The surface.
        edge_param - The normalized parameter on the edge.

    Output Arguments:
        uv_point - The resulting UV point, pass NULL if not interested in this 
                   data.
        deriv1 - The first UV derivative, pass NULL if not interested in this 
                 data.
        deriv2 - The second UV derivative, pass NULL if not interested in this 
                 data.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechedgeXyzdataEval (ProMechEdge edge, double edge_param, Pro3dPnt xyz_point, ProVector deriv1, ProVector deriv2, ProVector normal);
/*
    Purpose: Evaluates the Creo Simulate edge parameter point in XYZ space. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        edge_param - The normalized parameter on the edge.

    Output Arguments:
        xyz_point - The resulting XYZ point, pass NULL if not interested in 
                    this data.
        deriv1 - The first derivative at the point, pass NULL if not interested 
                 in this data.
        deriv2 - The second derivative at the point, pass NULL if not 
                 interested in this data.
        normal - The normal at the point, pass NULL if not interested in this 
                 data.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechedgeParamEval (ProMechEdge edge, Pro3dPnt xyz_point, double* param);
/*
    Purpose: Finds the corresponding normalized parameter on the Creo Simulate 
             Edge by XYZ point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        xyz_point - The XYZ point. The point does not necessarily have to lie 
                    on the edge. If the point is not the edge, the function 
                    finds the closest point.

    Output Arguments:
        param - The normalized parameter.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechedgeLengthEval (ProMechEdge edge, double* length);
/*
    Purpose: Obtains the length of the edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.

    Output Arguments:
        length - The length.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechedgeLengthT1T2Eval (ProMechEdge edge, double t1, double t2, double* length);
/*
    Purpose: Finds the length of the Creo Simulate edge between the given 
             parameters. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        t1 - The start parameter.
        t2 - The end parameter.

    Output Arguments:
        length - The length between t1 and t2.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechedgeParamByLengthEval (ProMechEdge edge, double t_start, double length, double* t_eval, Pro3dPnt point);
/*
    Purpose: Finds the parameter of the point located at the given length from 
             the given parameter. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        t_start - The start parameter.
        length - The length.

    Output Arguments:
        t_eval - The evaluated parameter.
        point - The XYZ point at that location.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechedgeTessellationGet (ProMechEdge edge,
                                            ProMechSurface surface,
                                            ProUvParam** uv_points,
                                            Pro3dPnt** points);
/*
    Purpose: Returns the edge tessellation for the specified Creo Simulate 
             edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.
        surface - The surface used to evaluate UV results. Can be NULL.

    Output Arguments:
        uv_points - ProArray of UV points on the specified surface. Can be 
                    NULL. If surface is NULL, this will contain NULL. Free this 
                    using ProArrayFree().
        points - ProArray of tessellation points. Can be NULL. Free this using 
                 ProArrayFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are 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 ProMechedgeToNURBS (ProMechEdge edge, ProCurvedata** nurbs);
/*
    Purpose: Obtains the NURBS representation of the Creo Simulate edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge.

    Output Arguments:
        nurbs - The NURBS representation of the edge. Free this using 
                ProCurvedataFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechedgeReldirGet (ProMechEdge edge_1, ProMechEdge edge_2, ProEdgeDirection* rel_dir);
/*
    Purpose: Obtains the relative direction of two Creo Simulate edges in 
             contact. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge_1 - The first edge.
        edge_2 - The second edge.

    Output Arguments:
        rel_dir - The relative direction.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechedgeAncestorsGet (ProMechEdge edge, ProMechGeomref** ancestors, ProEdgeDirection** relative_directions);
/*
    Purpose: Obtains the ancestor edges for the given edge. These are the 
             actual Creo Parametric geometry edges used to construct this Creo 
             Simulate edge. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        edge - The edge handle.

    Output Arguments:
        ancestors - ProArray of the ancestor geometry for the edge.
        relative_directions - ProArray of the relative edge direction for each 
                              edge.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are 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 ProMechcurveXyzdataEval (ProMechCurve curve, double curve_param,
                                         Pro3dPnt xyz_point,
                                         ProVector deriv1, ProVector deriv2);
/*
    Purpose: Evaluates the Creo Simulate curve parameter point in XYZ space. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.
        curve_param - The normalized parameter on the curve.

    Output Arguments:
        xyz_point - The resulting XYZ point, pass NULL if not interested in 
                    this data.
        deriv1 - The first derivative at the point, pass NULL if not interested 
                 in this data.
        deriv2 - The second derivative at the point, pass NULL if not 
                 interested in this data.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.

*/

extern ProError ProMechcurveParamEval (ProMechCurve curve, Pro3dPnt xyz_point, double* param);
/*
    Purpose: Finds the corresponding normalized parameter on the Creo Simulate 
             curve by XYZ point. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.
        xyz_point - The XYZ point. The point does not necessarily have to lie 
                    on the curve. If the point is not the curve, the function 
                    finds the closest point.

    Output Arguments:
        param - The normalized parameter.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechcurveLengthEval (ProMechCurve curve, double* length);
/*
    Purpose: Obtains the length of the curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.

    Output Arguments:
        length - The length.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechcurveLengthT1T2Eval (ProMechCurve curve, double t1, double t2, double* length);
/*
    Purpose: Finds the length of the Creo Simulate curve between the given 
             parameters. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.
        t1 - The start parameter.
        t2 - The end parameter.

    Output Arguments:
        length - The length between t1 and t2.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechcurveParamByLengthEval (ProMechCurve curve, double t_start, double length, double* t_eval, Pro3dPnt point);
/*
    Purpose: Finds the parameter of the point located at the given length from 
             the given parameter. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.
        t_start - The start parameter.
        length - The length.

    Output Arguments:
        t_eval - The evaluated parameter.
        point - The XYZ point at that location.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

extern ProError ProMechcurveToNURBS (ProMechCurve curve, ProCurvedata** nurbs);
/*
    Purpose: Obtains the NURBS representation of the Creo Simulate curve. 

    Licensing Requirement:
        UNRECOGNIZED

    Input Arguments:
        curve - The curve.

    Output Arguments:
        nurbs - The NURBS representation of the curve. Free this using 
                ProCurvedataFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments are invalid.
        PRO_TK_GENERAL_ERROR - A general error is encountered.

*/

PRO_END_C_DECLS

#endif