#ifndef PROCLCMDELEM_H
#define PROCLCMDELEM_H


#include <ProObjects.h>
#include <ProElement.h>



PRO_BEGIN_C_DECLS

extern ProError ProClcmdElemSet (ProElement ncl_commd_elem,
                          wchar_t **commd_lines,
                          int num_lines,
                          ProVector commd_loc,
                          ProVector commd_axis);
/*
    Purpose: Fills the specified CL command element with user data.

    Input Arguments:
        ncl_commd_elem - The CL command element
        commd_lines - The array of command lines
        num_lines - The number of command lines in the <i>commd_lines</i> array
        commd_loc - The XYZ coordinates of the CL command in the NC sequence 
                    coordinate system
        commd_axis - The tool axis in the location

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the information for the 
                          element.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.

*/
 
 
extern ProError ProClcmdElemCreate ( wchar_t    **commd_lines,
                                     int          num_lines,
                                     ProVector    commd_loc,
                                     ProVector    commd_axis,
			             ProElement  *r_ncl_cmd_elem);
/*
    Purpose: Allocates and sets up a CL command element.

    Input Arguments:
        commd_lines - The array of command lines
        num_lines - The number command lines in the <i>commd_lines</i> array
        commd_loc - The XYZ coordinates of the CL command in the NC sequence 
                    coordinate system
        commd_axis - The tool axis in the location

    Output Arguments:
        r_ncl_cmd_elem - The pointer to the CL command element

    Return Values:
        PRO_TK_NO_ERROR - The function successfully allocated the CL command 
                          element.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.

*/


extern int ProClcmdElemNumberGet (ProElement feat_elem_tree, 
				  int *r_number);
/*
    Purpose: Gets the number of CL command elements in the specified feature.

    Input Arguments:
        feat_elem_tree - The element tree of the customized (build path) 
                         feature

    Output Arguments:
        r_number - The number of CL command elements in the feature

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

*/


extern ProError ProClcmdElemAdd (ProElement feat_elem_tree,
                                 ProElement ncl_cmd_elem,
                                 int        index);
/*
    Purpose: Adds the specified CL command element to the feature element tree.

    Input Arguments:
        feat_elem_tree - The element tree of the customized (build path) 
                         feature.
        ncl_cmd_elem - The CL command element to add.
        index - The index in the CL command array at which to insert the new 
                element. Set this to -1 to add the element to the end of the 
                tree.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully added the element to the 
                          tree.
        Other - The function failed.

*/
 
extern ProError ProClcmdElemGetByIndex (ProElement  feat_elem_tree,
                                        int         index,
                                        ProElement *r_ncl_cmd_elem);
/*
    Purpose: Gets the pointer to the CL command element, given the index.

    Input Arguments:
        feat_elem_tree - The element tree of the customized (build path) 
                         feature
        index - The index of the element in the CL command array
        r_ncl_cmd_elem - The CL command element

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        Other - The function failed.

*/
 
 
extern ProError ProClcmdElemRemoveByIndex (ProElement  feat_elem_tree,
                                           int         index,
                                           ProElement *r_elem);
/*
    Purpose: Removes the specified CL command element from the feature element 
             tree.

    Input Arguments:
        feat_elem_tree - The element tree of the customized (build path) 
                         feature
        index - The index of the element in the CL command array

    Output Arguments:
        r_elem - The element removed. May be NULL

    Return Values:
        PRO_TK_NO_ERROR - The function successfully removed the element from 
                          the element tree.
        Other - The function did not remove the element from the element tree.

*/
 
 
 
extern ProError ProClcmdElemGet (ProElement   feat_elem_tree,
                                 wchar_t    **commd_lines,
                                 int          num_lines,
                                 ProVector    commd_loc,
                                 ProVector    commd_axis,
                                 ProElement  *r_ncl_cmd_elem);
/*
    Purpose: Gets the pointer to the specified CL command element.

    Input Arguments:
        feat_elem_tree - The element tree of the customized (build path) 
                         feature
        commd_lines - The array of command lines
        num_lines - The number of command lines in the <i>commd_lines</i> array
        commd_loc - The XYZ coordinates of the CL command in the NC sequence 
                    coordinate system
        commd_axis - The tool axis in the location

    Output Arguments:
        r_ncl_cmd_elem - The pointer to the element

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        Other - The function failed.

*/
 
extern ProError ProClcmdElemRemove (ProElement  feat_elem_tree,
                                    wchar_t   **commd_lines,
                                    int         num_lines,
                                    ProVector   commd_loc,
                                    ProVector   commd_axis,
                                    ProElement *r_ncl_cmd_elem);
/*
    Purpose: Removes the specified CL command element, given its data.

    Input Arguments:
        feat_elem_tree - The element tree of the customized (build path) 
                         feature
        commd_lines - The array of command lines
        num_lines - The number of command lines in the <i>commd_lines</i> array
        commd_loc - The XYZ coordinates of the CL command in the NC sequence 
                    coordinate system
        commd_axis - The tool axis in the location
        r_ncl_cmd_elem - The element to remove

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully removed the element.
        Other - The function failed.

*/

PRO_END_C_DECLS

#endif