#ifndef PROELEMPATHH
#define PROELEMPATHH




#include <ProANSI.h>
#include <ProToolkit.h>
#include <ProToolkitErrors.h>

PRO_BEGIN_C_DECLS


/* tmp */

typedef struct _UiElemId *ProElempath;


typedef enum
{
   PRO_ELEM_PATH_ITEM_TYPE_ID = 1,
   PRO_ELEM_PATH_ITEM_TYPE_INDEX
} ProElempathItemtype;
 
 
typedef struct path
{
   ProElempathItemtype type;
   union
   {
      int       elem_id;
      int       elem_index;
   } path_item;
} ProElempathItem;
 


extern ProError ProElempathAlloc ( ProElempath    *p_elem_path );
/*
    Purpose: Allocates an element path.

    Input Arguments:
        none

    Output Arguments:
        p_elem_path - A pointer to the allocated element path

    Return Values:
        PRO_TK_NO_ERROR - The function successfully allocated the element path.
        PRO_TK_OUT_OF_MEMORY - The system ran out of memory.

    See Also:
        ProAnalysis.h()
        ProAsmcomp.h()
        ProBeltFeat.h()
        ProChamfer.h()
        ProContact3dFeat.h()
        ProDamperFeat.h()
        ProDesignatedArea.h()
        ProDraft.h()
        ProDtmAxis.h()
        ProDtmCrv.h()
        ProDtmCsys.h()
        ProDtmPln.h()
        ProDtmPnt.h()
        ProElemId.h()
        ProExtrude.h()
        ProFeatIntr.h()
        ProFixture.h()
        ProFlatSrf.h()
        ProForeignCurve.h()
        ProHole.h()
        ProMfgoper.h()
        ProMerge.h()
        ProMirror.h()
        ProMove.h()
        ProNcseq.h()
        ProNcseqElem.h()
        ProPattern.h()
        ProProcstep.h()
        ProReplace.h()
        ProRevolve.h()
        ProRib.h()
        ProRound.h()
        ProShell.h()
        ProSmtFlangeWall.h()
        ProSmtFlatWall.h()
        ProSmtForm.h()
        ProSolidify.h()
        ProSmtPunchQuilt.h()
        ProStdSection.h()
        ProSurfReg.h()
        ProSweep.h()
        ProThicken.h()
        ProTrim.h()
        ProToolElem.h()
        ProValue.h()
        ProWcell.h()
*/

extern ProError ProElempathFree ( ProElempath    *p_elem_path );
/*
    Purpose: Releases the specified element path.

    Input Arguments:
        p_elem_path - A pointer to the element path

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully released the element path 
                          and <I>*p_elem_path</I> is now NULL.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

    See Also:
        ProAnalysis.h()
        ProAsmcomp.h()
        ProBeltFeat.h()
        ProChamfer.h()
        ProContact3dFeat.h()
        ProDamperFeat.h()
        ProDesignatedArea.h()
        ProDraft.h()
        ProDtmAxis.h()
        ProDtmCrv.h()
        ProDtmCsys.h()
        ProDtmPln.h()
        ProDtmPnt.h()
        ProElemId.h()
        ProExtrude.h()
        ProFeatIntr.h()
        ProFixture.h()
        ProFlatSrf.h()
        ProForeignCurve.h()
        ProHole.h()
        ProMfgoper.h()
        ProMerge.h()
        ProMirror.h()
        ProMove.h()
        ProNcseq.h()
        ProNcseqElem.h()
        ProPattern.h()
        ProProcstep.h()
        ProReplace.h()
        ProRevolve.h()
        ProRib.h()
        ProRound.h()
        ProShell.h()
        ProSmtFlangeWall.h()
        ProSmtFlatWall.h()
        ProSmtForm.h()
        ProSolidify.h()
        ProSmtPunchQuilt.h()
        ProStdSection.h()
        ProSurfReg.h()
        ProSweep.h()
        ProThicken.h()
        ProTrim.h()
        ProToolElem.h()
        ProValue.h()
        ProWcell.h()
*/


extern ProError ProElempathDataSet ( ProElempath       elem_path,
                                     ProElempathItem  *elempath_data,
                                     int               path_size);
/*
    Purpose: Assigns element path data to the specified element path.

    Input Arguments:
        elem_path - The element path.
        elempath_data - The element path data. This is an array of 
                        <I>ProElempathItem</I> data structures.
        path_size - The size of the array <I>elempath_data</I>.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully assigned element path data 
                          to the element path.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.

    See Also:
        ProAnalysis.h()
        ProAsmcomp.h()
        ProBeltFeat.h()
        ProChamfer.h()
        ProContact3dFeat.h()
        ProDamperFeat.h()
        ProDesignatedArea.h()
        ProDraft.h()
        ProDtmAxis.h()
        ProDtmCrv.h()
        ProDtmCsys.h()
        ProDtmPln.h()
        ProDtmPnt.h()
        ProElemId.h()
        ProExtrude.h()
        ProFeatIntr.h()
        ProFixture.h()
        ProFlatSrf.h()
        ProForeignCurve.h()
        ProHole.h()
        ProMfgoper.h()
        ProMerge.h()
        ProMirror.h()
        ProMove.h()
        ProNcseq.h()
        ProNcseqElem.h()
        ProPattern.h()
        ProProcstep.h()
        ProReplace.h()
        ProRevolve.h()
        ProRib.h()
        ProRound.h()
        ProShell.h()
        ProSmtFlangeWall.h()
        ProSmtFlatWall.h()
        ProSmtForm.h()
        ProSolidify.h()
        ProSmtPunchQuilt.h()
        ProStdSection.h()
        ProSurfReg.h()
        ProSweep.h()
        ProThicken.h()
        ProTrim.h()
        ProToolElem.h()
        ProValue.h()
        ProWcell.h()
*/


extern ProError ProElempathDataGet (ProElempath       elem_path,
                                    ProElempathItem **p_elempath_data);
/*
    Purpose: Retrieves the element path data from the specified element path.

    Input Arguments:
        elem_path - The element path.

    Output Arguments:
        p_elempath_data - The element path data that is an array of 
                          <I>ProElempathItem</I> data structures. You must 
                          preallocate this array using the function 
                          <B>ProArrayAlloc()</B>. If you reuse the array, new 
                          elements will be appended to the existing elements 
                          unless you reset the array size to 0 with 
                          ProArraySizeSet.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved element path data 
                          from the element path.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

    See Also:
        ProArrayAlloc()
        ProAnalysis.h()
        ProAsmcomp.h()
        ProBeltFeat.h()
        ProChamfer.h()
        ProContact3dFeat.h()
        ProDamperFeat.h()
        ProDesignatedArea.h()
        ProDraft.h()
        ProDtmAxis.h()
        ProDtmCrv.h()
        ProDtmCsys.h()
        ProDtmPln.h()
        ProDtmPnt.h()
        ProElemId.h()
        ProExtrude.h()
        ProFeatIntr.h()
        ProFixture.h()
        ProFlatSrf.h()
        ProForeignCurve.h()
        ProHole.h()
        ProMfgoper.h()
        ProMerge.h()
        ProMirror.h()
        ProMove.h()
        ProNcseq.h()
        ProNcseqElem.h()
        ProPattern.h()
        ProProcstep.h()
        ProReplace.h()
        ProRevolve.h()
        ProRib.h()
        ProRound.h()
        ProShell.h()
        ProSmtFlangeWall.h()
        ProSmtFlatWall.h()
        ProSmtForm.h()
        ProSolidify.h()
        ProSmtPunchQuilt.h()
        ProStdSection.h()
        ProSurfReg.h()
        ProSweep.h()
        ProThicken.h()
        ProTrim.h()
        ProToolElem.h()
        ProValue.h()
        ProWcell.h()
*/



extern ProError ProElempathCopy (ProElempath  elem_path_from,
                                 ProElempath  elem_path_to);
/*
    Purpose: Copies the specified element path.

    Input Arguments:
        elem_path_from - The source element path.

    Output Arguments:
        elem_path_to - The target element path. You must preallocate the memory 
                       for this argument.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully copied the element path.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

    See Also:
        ProAnalysis.h()
        ProAsmcomp.h()
        ProBeltFeat.h()
        ProChamfer.h()
        ProContact3dFeat.h()
        ProDamperFeat.h()
        ProDesignatedArea.h()
        ProDraft.h()
        ProDtmAxis.h()
        ProDtmCrv.h()
        ProDtmCsys.h()
        ProDtmPln.h()
        ProDtmPnt.h()
        ProElemId.h()
        ProExtrude.h()
        ProFeatIntr.h()
        ProFixture.h()
        ProFlatSrf.h()
        ProForeignCurve.h()
        ProHole.h()
        ProMfgoper.h()
        ProMerge.h()
        ProMirror.h()
        ProMove.h()
        ProNcseq.h()
        ProNcseqElem.h()
        ProPattern.h()
        ProProcstep.h()
        ProReplace.h()
        ProRevolve.h()
        ProRib.h()
        ProRound.h()
        ProShell.h()
        ProSmtFlangeWall.h()
        ProSmtFlatWall.h()
        ProSmtForm.h()
        ProSolidify.h()
        ProSmtPunchQuilt.h()
        ProStdSection.h()
        ProSurfReg.h()
        ProSweep.h()
        ProThicken.h()
        ProTrim.h()
        ProToolElem.h()
        ProValue.h()
        ProWcell.h()
*/



extern ProError ProElempathCompare (ProElempath  elem_path1,
                                    ProElempath  elem_path2,
                                    ProBoolean  *p_same);
/*
    Purpose: Compares two element paths.

    Input Arguments:
        elem_path1 - The source element path.
        elem_path2 - The target element path. You must preallocate the memory 
                     for this argument.

    Output Arguments:
        p_same - If both paths are the same, this is PRO_B_TRUE; otherwise, 
                 this is PRO_B_FALSE.

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

    See Also:
        ProAnalysis.h()
        ProAsmcomp.h()
        ProBeltFeat.h()
        ProChamfer.h()
        ProContact3dFeat.h()
        ProDamperFeat.h()
        ProDesignatedArea.h()
        ProDraft.h()
        ProDtmAxis.h()
        ProDtmCrv.h()
        ProDtmCsys.h()
        ProDtmPln.h()
        ProDtmPnt.h()
        ProElemId.h()
        ProExtrude.h()
        ProFeatIntr.h()
        ProFixture.h()
        ProFlatSrf.h()
        ProForeignCurve.h()
        ProHole.h()
        ProMfgoper.h()
        ProMerge.h()
        ProMirror.h()
        ProMove.h()
        ProNcseq.h()
        ProNcseqElem.h()
        ProPattern.h()
        ProProcstep.h()
        ProReplace.h()
        ProRevolve.h()
        ProRib.h()
        ProRound.h()
        ProShell.h()
        ProSmtFlangeWall.h()
        ProSmtFlatWall.h()
        ProSmtForm.h()
        ProSolidify.h()
        ProSmtPunchQuilt.h()
        ProStdSection.h()
        ProSurfReg.h()
        ProSweep.h()
        ProThicken.h()
        ProTrim.h()
        ProToolElem.h()
        ProValue.h()
        ProWcell.h()
*/

extern ProError ProElempathSizeGet (ProElempath   elem_path,
                                    int          *p_size);
/*
    Purpose: Retrieves the size of the element path.

    Input Arguments:
        elem_path - The element path

    Output Arguments:
        p_size - The size of the element path

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

    See Also:
        ProAnalysis.h()
        ProAsmcomp.h()
        ProBeltFeat.h()
        ProChamfer.h()
        ProContact3dFeat.h()
        ProDamperFeat.h()
        ProDesignatedArea.h()
        ProDraft.h()
        ProDtmAxis.h()
        ProDtmCrv.h()
        ProDtmCsys.h()
        ProDtmPln.h()
        ProDtmPnt.h()
        ProElemId.h()
        ProExtrude.h()
        ProFeatIntr.h()
        ProFixture.h()
        ProFlatSrf.h()
        ProForeignCurve.h()
        ProHole.h()
        ProMfgoper.h()
        ProMerge.h()
        ProMirror.h()
        ProMove.h()
        ProNcseq.h()
        ProNcseqElem.h()
        ProPattern.h()
        ProProcstep.h()
        ProReplace.h()
        ProRevolve.h()
        ProRib.h()
        ProRound.h()
        ProShell.h()
        ProSmtFlangeWall.h()
        ProSmtFlatWall.h()
        ProSmtForm.h()
        ProSolidify.h()
        ProSmtPunchQuilt.h()
        ProStdSection.h()
        ProSurfReg.h()
        ProSweep.h()
        ProThicken.h()
        ProTrim.h()
        ProToolElem.h()
        ProValue.h()
        ProWcell.h()
*/


PRO_END_C_DECLS

#endif