#ifndef PROELEMENT_H
#define PROELEMENT_H

#include <ProObjects.h>
#include <ProValue.h>
#include <ProArray.h>
#include <ProElempath.h>
#include <ProElemId.h>
#include <ProReference.h>
#include <ProCollect.h>
#include <ProElemoptions.h>




PRO_BEGIN_C_DECLS

typedef               struct Pro_Elem  *ProElement;

#define PRO_ELEMTREE_MAX_LEVEL 256
 
#define PRO_ELEM_INDEX_PACK(index)  (-((index) + 1))
#define PRO_ELEM_INDEX_UNPACK(proelemindex)  (-(proelemindex) - 1)
 

/*---------------------- FUNCTIONS ---------------------------*/


/* Constructor -- following C++ convention, see ProValue.h */

extern ProError ProElementAlloc (ProElemId name_id,
                                 ProElement *p_elem);
/*
    Purpose: Allocates memory with the specified element identifier.

    Input Arguments:
        name_id - The element identifier

    Output Arguments:
        p_elem - The allocated element object

    Return Values:
        PRO_TK_NO_ERROR - The function successfully allocated the element.
        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()
*/


/* Destructor -- following C++ convention, see ProValue.h */

extern ProError ProElementFree (ProElement     *p_elem );
/*
    Purpose: Frees the memory for the specified element.

    Input Arguments:
        p_elem - The address of the element to be freed

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully freed the element.
        PRO_TK_BAD_INPUTS - The 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 ProElementIdGet (ProElement   elem, 
                                 ProElemId *p_name_id);
/*
    Purpose: Retrieves the specified element identifier.

    Input Arguments:
        elem - The <i>ProElement</i> object

    Output Arguments:
        p_name_id - The element identifier

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        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 ProElementIdSet (ProElement  elem,
                                 ProElemId elem_id);
/*
    Purpose: Sets the identifier of the specified element.

    Input Arguments:
        elem - The <i>ProElement</i> pointer
        elem_id - The element identifier

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the value.
        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 ProElemtreeElementGet (ProElement   elemtree,
                                       ProElempath  elempath,
                                       ProElement  *p_elem);
/*
    Purpose: Retrieves the element specified by the <i>elempath</i> argument.

    Input Arguments:
        elemtree - The element tree
        elempath - The path to the element

    Output Arguments:
        p_elem - The element at the specified path

    Return Values:
        PRO_TK_NO_ERROR - The function successfully returned the element.
        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 ProElemtreeElementAdd (ProElement    elemtree,
                                       ProElempath   elempath,
                                       ProElement    elem);
/*
    Purpose: Links the element at the location specified by the <i>elempath</i> 
             argument.

    Input Arguments:
        elemtree - The element tree
        elempath - The path to the location where the element should be linked
        elem - The element to link

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully linked the element.
        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 ProElemtreeElementRemove (ProElement      elemtree,
                                          ProElempath     elempath,
                                          ProElement     *p_elem);
/*
    Purpose: Unlinks the element specified by the <i>elempath</i> argument, and 
             returns its handle.

    Input Arguments:
        elemtree - The element tree
        elempath - The path to the element

    Output Arguments:
        p_elem - The unlinked element

    Return Values:
        PRO_TK_NO_ERROR - The function successfully unlinked the element.
        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 ProElementIsMultival (ProElement    elemtree,
                                      ProElempath   elempath,
                                      ProBoolean   *p_is_multi_value_elem);
/*
    Purpose: Determines whether the input element can have multiple values.

    Input Arguments:
        elemtree - The element tree.
        elempath - The path to the element.

    Output Arguments:
        p_is_multi_value_elem - If the input element can have multiple values, 
                                this is PRO_B_TRUE. Otherwise, this is 
                                PRO_B_FALSE.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully determined whether the 
                          element can have multiple values.
        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 ProElementIsCompound (ProElement    elemtree,
                                      ProElempath   elempath,
                                      ProBoolean   *p_is_compound);
/*
    Purpose: Determines whether the element specified by the <i>elempath</i> 
             argument is a compound element.

    Input Arguments:
        elemtree - The element tree.
        elempath - The path to the element.

    Output Arguments:
        p_is_compound - If the element is a compound element, this is 
                        PRO_B_TRUE.Otherwise, this is PRO_B_FALSE.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully determined whether the 
                          element is a compound element.
        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 ProElementChildrenSet (ProElement      elemtree,
                                       ProElempath  elempath,
                                       ProElement   *child_elems,
                                       int          n_elems);
/*
    Purpose: Sets the children of the element specified by the <i>elempath</i> 
             argument.

    Input Arguments:
        elemtree - The element tree
        elempath - The path to the element
        child_elems - The element children
        n_elems - The number of elements

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the element children.
        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 ProElementChildrenGet (ProElement   elemtree,
                                       ProElempath  elempath,
                                       ProElement **p_child_elems);
/*
    Purpose: Retrieves the children of the element specified by the 
             <i>elempath</i> argument.

    Input Arguments:
        elemtree - The element tree.
        elempath - The path to the element.

    Output Arguments:
        p_child_elems - The array of child elements. Note that you must 
                        preallocate the array using <b>ProArrayAlloc()</b>.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the element 
                          children.
        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 ProElementIsArray (ProElement    elemtree,
                                   ProElempath   elempath,
                                   ProBoolean   *p_is_array);
/*
    Purpose: Determines whether the element specified by the <i>elempath</i> 
             argument contains an array of elements.

    Input Arguments:
        elemtree - The element tree.
        elempath - The path to the element.

    Output Arguments:
        p_is_array - If the element is an array, this is PRO_B_TRUE. Otherwise, 
                     this is PRO_B_FALSE.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully determined whether the 
                          element contains an array of elements.
        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 ProElementArraySet (ProElement   elemtree,
                                    ProElempath  elempath,
                                    ProElement  *array_elems);
/*
    Purpose: Sets the children of the specified array element.

    Input Arguments:
        elemtree - The element tree.
        elempath - The path to the array element.
        array_elems - The element array. You must create this array using 
                      <b>ProArrayAlloc()</b>.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the element array.
        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 ProElementArrayGet (ProElement      elemtree,
                                    ProElempath     elempath,
                                    ProElement    **p_array_elems);
/*
    Purpose: Retrieves the child elements of an array element.

    Input Arguments:
        elemtree - The element tree.
        elempath - The path to the array element.

    Output Arguments:
        p_array_elems - The child elements of the array element. You must 
                        preallocate this array using <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 the element 
                          array.
        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 ProElementArrayCount (ProElement    elemtree,
                                      ProElempath   elempath,
                                      int          *p_array_count);
/*
    Purpose: Counts the number of elements in the specified array.

    Input Arguments:
        elemtree - The element tree
        elempath - The path to the element

    Output Arguments:
        p_array_count - The number of elements

    Return Values:
        PRO_TK_NO_ERROR - The function successfully counted the number of 
                          elements.
        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()
*/

/* The filter prototype for filtering elements */

typedef ProError (*ProElemtreeVisitFilter) (ProElement  elem_tree,
                                            ProElement  elem,
                                            ProElempath elem_path,
                                            ProAppData  appdata);
/*
    Purpose: This is the generic user function for filtering subelements in an 
             element tree.

    Input Arguments:
        elem_tree - The handle to the element tree
        elem - The handle to the element
        elem_path - The handle to <i>elem_path</i>
        appdata - The user data passed to <b>ProElemtreeElementVisit()</b>

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Visit the next subtree.
        PRO_TK_CONTINUE - Do not call action function for the current element.
        Other - Stop visiting. The function <b>ProElemtreeElementVisit()</b> 
                returns with that status.

*/

/* The action prototype for visiting elements */

typedef ProError (*ProElemtreeVisitAction) (ProElement  elem_tree,
                                            ProElement  elem,
                                            ProElempath elem_path,
                                            ProAppData  appdata);
/*
    Purpose: This is the generic user function for visiting subelements in an 
             element tree.

    Input Arguments:
        elem_tree - The handle to the element tree
        elem - The handle to the element
        elem_path - The handle to the <i>elem_path</i>
        appdata - The user data passed to <b>ProElemtreeElementVisit()</b>

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Visit the next subtree.
        Other - Stop visiting. The function <b>ProElemtreeElementVisit()</b> 
                returns with that status.

*/


extern ProError ProElemtreeElementVisit (ProElement      elemtree,
                                             ProElempath            elempath,
                                             ProElemtreeVisitFilter filterfunc,
                                             ProElemtreeVisitAction visitfunc,
                                             ProAppData             appdata);
/*
    Purpose: Recursively visits the subelements of the specified element in the 
             element tree. Note that the element must be an array, and the 
             element path cannot contain an index to visit subelements for each 
             index.
             <p> The visit function is called if the filter function is 
             PRO_TK_NO_FUNCTION, or if it returns an error code other than 
             PRO_TK_NO_ERROR.
             <p> Traversal continues until all the elements have been visited, 
             or if the visit function returns an error code other than 
             PRO_TK_NO_ERROR, or filter function returns an error code other 
             than PRO_TK_NO_ERROR and PRO_TK_CONTINUE.

    Input Arguments:
        elemtree - The element tree
        elempath - The path to the element
        filterfunc - The filter function. If NULL, all elements are visited 
                     using the action function.
        visitfunc - The visit function
        appdata - The user data passed to the visit and filter functions

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully visited all the 
                          subelements.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.
        PRO_TK_E_NOT_FOUND - Visit function was never called.
        Other - Any other value is the error code returned by the visit or 
                filter function (visiting stopped).

    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()
*/

/*===========================================================================*/
/* Functions used for accessing element values. */
/*===========================================================================*/

extern ProError ProElementValuetypeGet( ProElement                  element, 
                                        ProValueDataType*           type );
/*
    Purpose: Returns the nominal value type for the element.

    Input Arguments:
        element - The element.

    Output Arguments:
        type - The type of value stored in the element.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_EMPTY - The element does not have a value yet.
        PRO_TK_INVALID_TYPE - The element is compound or array, use 
                              ProElementIsCompound or ProElementIsArray.

    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 ProElementReferenceGet ( ProElement                 element,
                                         ProElementReferenceOptions options,
                                         ProReference*              reference);
/*
    Purpose: Returns a single reference value for the element.

    Input Arguments:
        element - The element.
        options - Options for how the reference should be obtained. Reserved 
                  for future use: pass NULL for now.

    Output Arguments:
        reference - The reference value.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_EMPTY - The element does not contain reference.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as a single reference element.

    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 ProElementReferenceSet ( ProElement   element,
                                         ProReference reference);
/*
    Purpose: Sets the reference value for the element.

    Input Arguments:
        element - The element.
        reference - The reference value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.

    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 ProElementReferencesGet (ProElement                 element,
                                         ProElementReferenceOptions options,
                                         ProReference**             references);
/*
    Purpose: Returns an array of reference values for the element.

    Input Arguments:
        element - The element.
        options - Options for how the references should be obtained. Reserved 
                  for future use: pass NULL for now.

    Output Arguments:
        references - The reference array (a ProArray).

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as an array of references.
        PRO_TK_EMPTY - The element does not contain references.

    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 ProElementReferencesSet (ProElement    element,
                                         ProReference* references);
/*
    Purpose: Sets the multiple reference values for the element.

    Input Arguments:
        element - The element.
        references - The references ProArray.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.

    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 ProElementIntegerGet (ProElement               element, 
                                      ProElementIntegerOptions options, 
                                      int*                     value);
/*
    Purpose: Returns an integer value representation for the element.

    Input Arguments:
        element - The element.
        options - Options for how the integer should be obtained. Reserved for 
                  future use: pass NULL for now.

    Output Arguments:
        value - The integer value.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as a this type.

    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 ProElementIntegerSet (ProElement element, int value);
/*
    Purpose: Sets the integer value for the element.

    Input Arguments:
        element - The element.
        value - The integer value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.

    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 ProElementDoubleGet (ProElement              element, 
                                     ProElementDoubleOptions options, 
				     double*                 value);
/*
    Purpose: Returns a double value representation for the element.

    Input Arguments:
        element - The element.
        options - Options for how the double should be obtained. Reserved for 
                  future use: pass NULL for now.

    Output Arguments:
        value - The double value.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as a this type.

    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 ProElementDoubleSet (ProElement element, double value);
/*
    Purpose: Sets the double value for the element. 
             <p><b>Note: </b>Before using this function, use 
             ProElementDecimalsSet() to assign the number of decimal places to 
             be used for the double value.

    Input Arguments:
        element - The element.
        value - The double value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.
        PRO_TK_CANT_WRITE - The element is relation driven

    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 ProElementWstringGet (ProElement               element, 
                                      ProElementWstringOptions options, 
                                      wchar_t**                value);
/*
    Purpose: Returns a string value representation for the element. 
             <P><B>Note: </B> When called on an element driven by relations, 
             the function will return the first appropriate relations string 
             involving this element value. The relation string should be used 
             only to identify that the element is driven by relations, and 
             should not be used to calculate the element value. This is because 
             the element value may be driven by more than one relation 
             simultaneously in the feature's relation set. Refer to ProRelSet.h 
             for more details about relations and relation sets.

    Input Arguments:
        element - The element.
        options - Options for how the string should be obtained. Can be NULL.

    Output Arguments:
        value - The wide-string value. Free this string using ProWstringFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as a this type.

    See Also:
        ProElementwstroptsAlloc()
        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 ProElementWstringSet (ProElement element, wchar_t* value);
/*
    Purpose: Sets the string value for the element.

    Input Arguments:
        element - The element.
        value - The wide-string value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.
        PRO_TK_CANT_WRITE - The element is relation driven.

    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 ProElementStringGet (ProElement              element, 
                                     ProElementStringOptions options, 
                                     char**                  value);
/*
    Purpose: Returns an ASCII string value representation for the element.

    Input Arguments:
        element - The element.
        options - Options for how the string should be obtained. Reserved for 
                  future use: pass NULL for now.

    Output Arguments:
        value - The ASCII string value. Free this string using ProStringFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as a this type.

    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 ProElementStringSet (ProElement element, char* value);
/*
    Purpose: Sets the ASCII string value for the element.

    Input Arguments:
        element - The element.
        value - The ASCII string value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.

    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 ProElementSpecialvalueGet (ProElement               element, 
                                           ProElementSpecialOptions options, 
                                           ProAppData*              value);
/*
    Purpose: Returns the pointer representation for the element.

    Input Arguments:
        element - The element.
        options - Options for how the pointer should be obtained. Reserved for 
                  future use: pass NULL for now.

    Output Arguments:
        value - The pointer value.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as a this type.

    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 ProElementSpecialvalueSet (ProElement element, 
                                           ProAppData value);
/*
    Purpose: Sets the pointer value for the element.

    Input Arguments:
        element - The element.
        value - The pointer value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.

    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 ProElementBooleanGet( ProElement               element, 
                                      ProElementBooleanOptions options, 
                                      ProBoolean*              value);
/*
    Purpose: Returns the boolean representation for the element.

    Input Arguments:
        element - The element.
        options - Options for how the boolean should be obtained. Reserved for 
                  future use: pass NULL for now.

    Output Arguments:
        value - The boolean value.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as a this type.

    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 ProElementBooleanSet (ProElement element, ProBoolean value);
/*
    Purpose: Sets the boolean value for the element.

    Input Arguments:
        element - The element.
        value - The boolean value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.

    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 ProElementTransformGet ( ProElement                 element, 
                                         ProElementTransformOptions options, 
                                         ProMatrix                  value);
/*
    Purpose: Returns the transform representation for the element.

    Input Arguments:
        element - The element.
        options - Options for how the transform should be obtained. Reserved 
                  for future use; pass NULL for now.

    Output Arguments:
        value - The transform value.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not contain a value that can be 
                              represented as a this type.

    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 ProElementTransformSet (ProElement element, ProMatrix value);
/*
    Purpose: Sets the transform value for the element.

    Input Arguments:
        element - The element.
        value - The transform value.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - The element does not allow this type of value.

    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   ProElementCollectionGet (ProElement element, 
                                           ProCollectionGetOptions opts,
                                           ProCollection* collection);
/*
    Purpose: Extracts a collection from a feature element tree element of type 
             PRO_E_STD_CURVE_COLLECTION_APPL, PRO_E_STD_SURF_COLLECTION_APPL.

    Input Arguments:
        element - The element.
        opts - Options to use when extracting the element. Reserved for future 
               use; pass NULL in this release.

    Output Arguments:
        collection - A copy of the collection object. Free this using 
                     ProCollectionFree().

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - This element does not contain a collection.

*/

extern ProError   ProElementCollectionSet (ProElement element,
                                           ProCollection collection);
/*
    Purpose: Assigns a collection object to an element of type 
             PRO_E_STD_CURVE_COLLECTION_APPL, PRO_E_STD_SURF_COLLECTION_APPL.

    Input Arguments:
        element - The element.
        collection - The collection object.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more arguments is invalid.
        PRO_TK_INVALID_TYPE - This element does not accept a collection.
        PRO_TK_MULTIBODY_UNSUPPORTED - input collection is not supported in 
                                       multi-body models.

*/

extern ProError   ProElementCollectionProcess (ProElement element,
                                               ProReference** reference_array);
/*
    Purpose: Processes the collection contained in a given element according to 
             the rules of the feature it belongs to. Unlike 
             ProSrfcollectionRegenerate() and ProCrvcollectionRegenerate(), the 
             results of this function are a true picture of which items are 
             referenced by the collection stored in the feature. 
             <p><b>Note: </b>This function will not be able to extract 
             geometry, if some or all of the resulting geometry is inactive due 
             to material removal features occuring in the model. In order to 
             extract the reference geometry for such a collection,use 
             ProFeatureInsertModeActivate() to roll back the model before the 
             material removal feature.

    Input Arguments:
        element - The PRO_E_STD_CURVE_COLLECTION_APPL or 
                  PRO_E_STD_SURFACE_COLLECTION_APPL element. If this element 
                  was extracted from an existing feature tree using 
                  ProFeatureElemtreeCreate(), the results will use the feature 
                  rules to determine the collected references. If this element 
                  is newly created and not yet assigned to a feature, the 
                  default rules are used like ProCrvcollectionRegenerate() and 
                  ProSrfcollectionRegenerate().

    Output Arguments:
        reference_array - ProArray of references collected by the collection in 
                          the element. Free this array using 
                          ProReferencearrayFree() when finished with it.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_EMPTY - If the collection in element is empty.
        PRO_TK_BAD_INPUTS - One or more inputs was invalid.
        PRO_TK_GENERAL_ERROR - Error evaluating the collected references.

*/

extern ProError   ProElementDirectionGet (ProElement element,
                                          ProVector vector, Pro3dPnt origin);
/*
    Purpose: Calculates direction vector and origin point based on direction 
             reference and flip orientation stored inside Direction element.

    Input Arguments:
        element - The PRO_E_DIRECTION_COMPOUND element. This is a compound 
                  element that contains 2 sub-elements inside: 
                  PRO_E_DIRECTION_REFERENCE and PRO_E_DIRECTION_FLIP.

    Output Arguments:
        vector - calculated ProVector direction vector.
        origin - calculated Pro3dPnt direction origin point.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_INVALID_TYPE - Element is not of type PRO_E_DIRECTION_COMPOUND
        PRO_TK_BAD_INPUTS - One or more inputs was invalid or direction was not 
                            calculated.

*/

extern ProError ProElementValuesGet (ProElement       elem,
                                     ProValue       **p_values);
/*
    Purpose: Retrieves all the values of the specified element. 
             <P><B>Warning: </B>Starting with Wildfire 2.0, tree elements with 
             multiple values are considered to be deprecated and will be 
             gradually superseded with reference elements or type-specific 
             elements - for which either ProElementReferencesGet or 
             ProElement<type>Get should be used. See also the comment for 
             ProElementValueGet.

    Input Arguments:
        elem - The element.

    Output Arguments:
        p_values - The array of values belonging to the element. You must 
                   preallocate the array using the function 
                   <b>ProArrayAlloc()</b>.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the values.
        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 ProElementValueGet (ProElement       elem,
                                    ProValue        *p_value);
/*
    Purpose: 
             <P><B>Note: </B>From release Wildfire 2.0 this function is 
             superseded by the function ProElementValuetypeGet() followed by 
             one of the following: 
             <UL> 
             <LI>ProElementReferenceGet() 
             <LI>ProElementIntegerGet() 
             <LI>ProElementDoubleGet() 
             <LI>ProElementStringGet() 
             <LI>ProElementWstringGet() 
             <LI>ProElementBooleanGet() 
             <LI>ProElementTransformGet() 
             <LI>ProElementSpecialvalueGet() 
             <LI>ProElementCollectionGet() 
             </UL> PTC recommends using the new functions in place of this 
             function in all new or updated user applications. 
             <P>Retrieves the single value of the specified element.

    Input Arguments:
        elem - The element

    Output Arguments:
        p_value - The value of the element

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the value.
        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 ProElementValuesSet (ProElement  elem,
                                     ProValue    values[],
                                     int         value_num);
/*
    Purpose: Sets the values of the specified element. 
             <P><B>Warning: </B>Starting with Wildfire 2.0, tree elements with 
             multiple values are considered to be deprecated and will be 
             gradually superseded with reference elements or type-specific 
             elements - for which either ProElementReferencesSet or 
             ProElement<type>Set should be used. See also the comment for 
             ProElementValueSet.

    Input Arguments:
        elem - The element
        values - The array of values
        value_num - The number of values

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the values.
        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 ProElementValueSet (ProElement  elem,
                                    ProValue    value);
/*
    Purpose: 
             <P><B>Note: </B>From release Wildfire 2.0 this function is 
             superseded by the function ProElementValuetypeGet() followed by 
             one of the following: 
             <UL> 
             <LI>ProElementReferenceSet() 
             <LI>ProElementIntegerSet() 
             <LI>ProElementDoubleSet() 
             <LI>ProElementStringSet() 
             <LI>ProElementWstringSet() 
             <LI>ProElementBooleanSet() 
             <LI>ProElementTransformSet() 
             <LI>ProElementSpecialvalueSet() 
             <LI>ProElementCollectionSet() 
             </UL> PTC recommends using the new functions in place of this 
             function in all new or updated user applications. 
             <P>Sets the single value of the specified element.

    Input Arguments:
        elem - The element
        value - The value to set

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the value.
        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 ProElementDecimalsGet (ProElement element, int* decimals);
/*
    Purpose: Obtains the number of decimals places to used for a double value 
             in the feature.

    Input Arguments:
        element - The element.

    Output Arguments:
        decimals - The number of decimal places to be used.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_INVALID_TYPE - The element is not a double element.

    See Also:
        ProElementDoubleGet()
        ProElementDoubleSet()
        ProElementDecimalsSet()
*/

extern ProError ProElementDecimalsSet (ProElement element, int decimals);
/*
    Purpose: Assigns the number of decimals places to used for a double value 
             in the feature. This value will be used in the part dimension 
             related to this element. 
             <P> <b>Notes:</b> 
             <UL> 
             <LI>Creo Parametric has a limit of 0-9 to nine decimal places for 
             feature dimensions. 
             <LI>This function should be used before ProElementDoubleSet to 
             ensure that the value is assigned with the correct intended number 
             of decimal places. 
             <LI>Relations referring to the related dimension will not be 
             affected by the decimal places setting. 
             <LI>This will have no effect on the related dimension if it is 
             created as fractional. 
             </UL>

    Input Arguments:
        element - The element.
        decimals - The number of decimal places to be used.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_INVALID_TYPE - The element is not a double element.
        PRO_TK_CANT_WRITE - The element is relation driven

    See Also:
        ProElementDoubleGet()
        ProElementDoubleSet()
        ProElementDecimalsGet()
*/

typedef void* ProElemdiagnostic;

typedef enum 
{
   PRO_ELEM_INFO    = 0,
   PRO_ELEM_WARNING = 1,
   PRO_ELEM_ERROR   = 2
} ProDiagnosticSeverity;

extern ProError ProReferenceDiagnosticsCollect(ProReference reference,
                                               ProElemdiagnostic** diagnostics);
/*
    Purpose: Obtains a list of the reference diagnostics for the reference 
             handle. These contain warnings and errors regarding the state of 
             the reference, within the context of the feature.

    Input Arguments:
        reference - The reference handle.

    Output Arguments:
        diagnostics - A ProArray containing any potential problems associated 
                      to this reference handle. Free this using 
                      ProElemdiagnosticProarrayFree.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded. PRO_TK_E_NOT_FOUND -The size 
                          of diagnostic array is zero.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/

extern ProError ProElementDiagnosticsCollect (ProElement element,
                                              ProElemdiagnostic** diagnostics);
/*
    Purpose: Obtains a list of the element diagnostics for the element. These 
             contain warnings and errors regarding the value of the element, 
             within the context of the feature and remainder of the element 
             tree.

    Input Arguments:
        element - The element.

    Output Arguments:
        diagnostics - A ProArray containing any potential problems associated 
                      to this element or its value. Free this using 
                      ProElemdiagnosticProarrayFree.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded. PRO_TK_E_NOT_FOUND -The size 
                          of diagnostic array is zero.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.

*/

extern ProError ProElemdiagnosticSeverityGet (ProElemdiagnostic diagnostic,
                                              ProDiagnosticSeverity* severity);
/*
    Purpose: Obtains the severity of the diagnostic item.

    Input Arguments:
        diagnostic - The element diagnostic item.

    Output Arguments:
        severity - The severity.

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

*/

extern ProError ProElemdiagnosticMessageGet (ProElemdiagnostic diagnostic, 
                                             ProComment message);
/*
    Purpose: Obtains the message describing the diagnostic item. This will be 
             in the user's localized language.

    Input Arguments:
        diagnostic - The diagnostic item.

    Output Arguments:
        message - The message.

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

*/

extern ProError ProElemdiagnosticFree (ProElemdiagnostic diagnostic);
/*
    Purpose: Frees a diagnostic item.

    Input Arguments:
        diagnostic - The diagnostic item.

    Output Arguments:
        none

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

*/

extern ProError ProElemdiagnosticProarrayFree (ProElemdiagnostic* diag_array);
/*
    Purpose: Frees an array of an array of diagnostic items returned from 
             ProElementDiagnosticsCollect.

    Input Arguments:
        diag_array - The diagnostic ProArray.

    Output Arguments:
        none

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

*/

extern ProError ProElemtreeVerify (ProSolid solid, 
                                   ProAsmcomppath* assembly_reference, 
                                   ProElement elemtree);
/*
    Purpose: Verifies the contents of the element tree. This will parse the 
             element tree and determine, where possible, if any elements have 
             potentially incorrect values. The results of this verification can 
             be obtained from two different paths: 
             <OL> 
             <LI> Use ProElementDiagnosticsCollect() to see if any diagnostic 
             items were added to certain elements in the tree. 
             <LI> Use ProReferenceStatusGet() to see if certain references in 
             the tree now show a missing or error status. 
             </OL> This function is primarily intended for new element trees 
             created in order to create a new feature in the model. Trees which 
             are extracted using ProFeatureElemtreeCreate() will already have 
             diagnostics information embedded based on the owner model state at 
             the time of extraction.

    Input Arguments:
        solid - The solid model where the element tree will be used.
        assembly_reference - Path from the top level assembly to the solid 
                             model, if the feature will be created with 
                             external assembly references.
        elemtree - The element tree.

    Output Arguments:
        none

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

*/

typedef enum pro_elemtree_type { 
        PRO_ELEMTREE_XML = 1 
} ProElemtreeFormat ;

extern ProError   ProElemtreeWrite ( 
                     ProElement         elemtree, 
                     ProElemtreeFormat  format,
                     ProPath            output_file 
                );
/*
    Purpose: Writes the Element Tree in the specified file in XML format

    Input Arguments:
        elemtree - root element of the element tree to be printed
        format - pass PRO_ELEMTREE_XML
        output_file - Full path to the output file, including extension.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Successful in writing the element tree
        PRO_TK_BAD_INPUTS - Invalid inputs
        PRO_TK_GENERAL_ERROR - Errors in generating the output
        PRO_TK_NO_PERMISSION - The function does not have permission to operate 
                               on this model.

*/


typedef enum pro_xml_errortype {
        PRO_XML_WARNING,
        PRO_XML_ERROR,
        PRO_XML_FATALERROR, 
        PRO_XML_OTHERERROR
} ProXMLErrorType;

typedef struct pro_xml_errorlist {
        ProXMLErrorType         error_type;
        ProPath                 error_source;
        int                     line_number;
        int                     column_number;
        wchar_t*                message;
} ProXMLErrorlist;

extern ProError   ProElemtreeFromXMLCreate (
                     ProPath            xml_file,
                     ProElement         *elemtree,
                     ProXMLErrorlist    **p_errors
                );
/*
    Purpose: Reads in the xml file and converts into an element tree. This 
             element tree can be used as an input to 
             ProFeatureWithoptionsCreate or ProFeatureWithoptionsRedefine

    Input Arguments:
        xml_file - the name of the xml file with location this can be a 
                   relative or absolute path to the xml file or a URL ( http or 
                   file ) for the xml file

    Output Arguments:
        elemtree - root element of the created element tree Memory allocated by 
                   the function and to be freed by caller using 
                   ProElementFree()
        p_errors - ProArray of errors. The memory allocated by the function has 
                   to be freed by using the function 
                   ProXmlerrorlistProarrayFree().

    Return Values:
        PRO_TK_NO_ERROR - Successful in creating the element tree
        PRO_TK_BAD_INPUTS - Invalid inputs
        PRO_TK_GENERAL_ERROR - Errors in the XML file; The function populates 
                               the ProArray p_errors to hold the errors ( refer 
                               all fields )
        PRO_TK_OUT_OF_MEMORY - XML Parser failed to initialize
        PRO_TK_CANT_ACCESS - XML Parser failed during parsing
        PRO_TK_CANT_OPEN - XML Parser failed opening DOM Tree
        PRO_TK_NOT_VALID - XML Parser failed due to other errors
        PRO_TK_E_AMBIGUOUS - Error occurred during creation of output 
                             transcoder
        PRO_TK_BAD_CONTEXT - Function failed to create the element tree due to 
                             an error in the ProElemId, ProType, or Enum Value 
                             in the XML file The function populates the 
                             ProArray p_errors to hold the errors ( refer to 
                             fields: <UL> <LI>error_type = PRO_XML_OTHERERROR 
                             <LI>line_number = sr. no. of Element in file 
                             <LI>message = name of Element <LI>column_number = 
                             elem_id of Element </UL> )

*/

LIB_COREUTILS_API  ProError   ProXmlerrorlistProarrayFree ( ProXMLErrorlist** errors_array );
/*
    Purpose: Frees errors_array returned by ProElemtreeFromXMLCreate in error 
             conditions

    Input Arguments:
        errors_array - ProArray of ProXMLErrorlist

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully freed errors_array
        PRO_TK_BAD_INPUTS - The input argument is invalid.
        PRO_TK_BAD_CONTEXT - Problem with errors_array

*/
PRO_END_C_DECLS

#endif /* PROELEMENT_H */