#ifndef PROEDGEDATA_H
#define PROEDGEDATA_H

#include   <ProObjects.h>
#include   <ProCurvedata.h>

/*
   Function declarations and specific data structures for ProEdgedata
*/




PRO_BEGIN_C_DECLS

/*===========================================================================*/

typedef enum
{
	PRO_EDGE_NO_FLIP = 0,
	PRO_EDGE_FLIP
} ProEdgeDir;

typedef struct pro_edge_data
{
    int			id;			/* Edge id */
    int			surf_ids[2];		/* Ids of each side surface */
    ProEdgeDir		directions[2];		/* Directions on each side
						   surface */
    ProUvParam		(*uv_points)[2];	/* ProArray of curve UV-points
	on each side surface:
	uv_points[i][0] - uv-coordinates of point "i" on one surface
	uv_points[i][1] - uv_coordinates of point "i" on another surface */
    ProCurvedata	*p_uv_curve_data[2];	/* UV-curves on each side
						   surface */
    ProCurvedata	*p_curve_data;		/* XYZ-curve */
} ProEdgedata;


LIB_PTK_INTF_API  ProError ProEdgedataAlloc ( ProEdgedata **pp_edge_data );
/*
    Purpose: Allocates memory for the edge data structure.

    Input Arguments:
        none

    Output Arguments:
        pp_edge_data - The edge data structure

    Return Values:
        PRO_TK_NO_ERROR - The function successfully allocated memory for the 
                          edge data structure.
        PRO_TK_OUT_OF_MEMORY - Insufficient memory.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

*/

LIB_PTK_INTF_API  ProError ProEdgedataFree ( ProEdgedata *p_edge_data );
/*
    Purpose: Frees all the underlying memory for the edge data structure.

    Input Arguments:
        p_edge_data - The edge data structure

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully freed the memory.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

*/

LIB_PTK_INTF_API  ProError ProEdgedataMemoryFree ( ProEdgedata *p_edge_data );
/*
    Purpose: Frees the top-level memory used by the edge data structure.

    Input Arguments:
        p_edge_data - The edge data structure

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully freed the memory.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

*/

LIB_PTK_INTF_API  ProError ProEdgedataInit ( int			edge_id,
				  int			edge_surf_ids[2],
				  ProEdgeDir		edge_directions[2],
				  ProUvParam		(*edge_uv_point_arr)[2],
				  ProCurvedata		*p_edge_uv_curve_data[2],
				  ProCurvedata		*p_edge_curve_data,
				  ProEdgedata *p_edge_data );
/*
    Purpose: Initializes the edge data structure.

    Input Arguments:
        edge_id - The edge identifier.
        edge_surf_ids - The edge identifiers of the surfaces.
        edge_directions - The edge directions on the surfaces.
        edge_uv_point_arr - The <i>ProArray</i> of UV-points on the surfaces. 
                            This can be NULL.
        p_edge_uv_curve_data - The edge UV-curves on the surfaces. This can be 
                               NULL.
        p_edge_curve_data - The edge XYZ-curve. This can be NULL.

    Output Arguments:
        p_edge_data - The edge data structure.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully initialized the data 
                          structure.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.

*/

LIB_PTK_INTF_API  ProError ProEdgedataGet ( ProEdgedata *p_edge_data,
				 int		*p_edge_id,
				 int		edge_surf_ids[2],
				 ProEdgeDir	edge_directions[2],
				 ProUvParam	(**p_edge_uv_point_arr)[2],
				 ProCurvedata	*p_edge_uv_curve_data[2],
				 ProCurvedata	*p_edge_curve_data );
/*
    Purpose: Retrieves information from the edge data structure. 
             <p> NOTE: 
             <p> The function ignores the output argument pointers that are 
             NULL.

    Input Arguments:
        p_edge_data - The edge data structure

    Output Arguments:
        p_edge_id - The edge identifier
        edge_surf_ids - The edge identifiers of the surfaces
        edge_directions - The edge directions on the surfaces
        p_edge_uv_point_arr - The pointer to a <i>ProArray</i> of UV-points on 
                              the surfaces
        p_edge_uv_curve_data - The edge UV-curves on the surfaces
        p_edge_curve_data - The edge XYZ-curve

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

*/


PRO_END_C_DECLS

#endif /* PROEDGEDATA_H */