#ifndef PROEXTRUDEH
#define PROEXTRUDEH



#include <ProToolkit.h>
#include <ProBodyOpts.h>

PRO_BEGIN_C_DECLS

/*****************************************************************************\

1  Summary of Element Tree Changes as compared to pre- Pro/E Wildfire releases :
====================================================
     The Element tree for Extrude has been updated to incorporate
 the following feature creation using the same element tree.

 1]  Solid Protrusion
 2]  Thin Protrusion
 3]  Solid/SMT Cut
 4]  Thin Solid/Smt Cut
 5]  Surface
 6]  Surface Trim
 7]  Thin Surface Trim
 8]  Solid Protrusion as First feature 
 9]  Thin Protrusion as First feature 
 10] Smt unattached wall
    
\*****************************************************************************/
/*****************************************************************************\

2  Feature element tree:
========================

   PRO_E_FEATURE_TREE
     |   
     |--PRO_E_STD_FEATURE_NAME
     |   
     |--PRO_E_EXT_SURF_CUT_SOLID_TYPE
     |   
     |--PRO_E_REMOVE_MATERIAL
     |
     |--PRO_E_BODY
     |    |
     |    |--PRO_E_BODY_USE
     |    |
     |    |--PRO_E_BODY_SELECT
     |
     |--PRO_E_IS_SMT_CUT              ( applicable only in sheetmetal parts )
     | 
     |--PRO_E_SMT_CUT_NORMAL_DIR      ( applicable only in sheetmetal parts )
     |
     |--PRO_E_FEATURE_FORM
     |   
     |--PRO_E_STD_SECTION             ( Section )
     |   
     |--PRO_E_FEAT_FORM_IS_THIN       ( Feature Form )
     |   
     |--PRO_E_STD_MATRLSIDE           ( Material Side )
     |   
     |--PRO_E_THICKNESS               ( Thickness )
     |   
     |--PRO_E_SRF_END_ATTRIBUTES
     |   
     |--PRO_E_TRIM_QLT_SIDE
     |   
     |--PRO_E_TRIM_QUILT
     |   
     |--PRO_E_STD_DIRECTION
     |   
     |--PRO_E_STD_EXT_DEPTH
     |    | 
     |    |--PRO_E_EXT_DEPTH_FROM
     |         |--PRO_E_EXT_DEPTH_FROM_TYPE
     |         |--PRO_E_EXT_DEPTH_FROM_REF
     |         |--PRO_E_EXT_DEPTH_FROM_REF_TRF
     |         |--PRO_E_EXT_DEPTH_FROM_REF_TRF_VAL
     |         |--PRO_E_EXT_DEPTH_FROM_VALUE
     |    |  
     |    |--PRO_E_EXT_DEPTH_TO
     |         |--PRO_E_EXT_DEPTH_TO_TYPE
     |         |--PRO_E_EXT_DEPTH_TO_REF
     |         |--PRO_E_EXT_DEPTH_TO_REF_TRF
     |         |--PRO_E_EXT_DEPTH_TO_REF_TRF_VAL
     |         |--PRO_E_EXT_DEPTH_TO_VALUE
     |
     |--PRO_E_STD_SMT_THICKNESS  ( applicable only in sheetmetal parts )
     |
     |--PRO_E_STD_SMT_SWAP_DRV_SIDE  ( applicable only in sheetmetal parts )
     |
     |--PRO_E_SMT_WALL_SHARPS_TO_BENDS  ( applicable only in sheetmetal parts )
     |
     |--PRO_E_SMT_PUNCH_AXIS_PNT ( applicable only in sheetmetal parts )
     |
     |--PRO_E_SMT_FILLETS  ( applicable only in sheetmetal parts )
     |    |
     |    |--PRO_E_SMT_FILLETS_SIDE
     |    |
     |    |--PRO_E_SMT_FILLETS_VALUE
     |
     |--PRO_E_SMT_DEV_LEN_CALCULATION  ( applicable only in sheetmetal parts )
     |    |
     |    |--PRO_E_SMT_DEV_LEN_SOURCE
     |    |
     |    |--PRO_E_SMT_DEV_LEN_Y_FACTOR
     |    |    |
     |    |    |--PRO_E_SMT_DEV_LEN_Y_FACTOR_TYPE
     |    |    |
     |    |    |--PRO_E_SMT_DEV_LEN_Y_FACTOR_VALUE
     |    |
     |    |--PRO_E_SMT_DEV_LEN_BEND_TABLE
     |
     |--PRO_E_SMT_PUNCH_TOOL_DATA ( applicable only in sheetmetal parts )
     |    |
     |    |--PRO_E_SMT_PUNCH_TOOL_ATTR
     |    |
     |    |--PRO_E_SMT_PUNCH_TOOL_NAME
     |
     |--PRO_E_SMT_MERGE_DATA ( applicable only in sheetmetal parts )
     |    |
     |    |--PRO_E_SMT_MERGE_AUTO
     |    |
     |    |--PRO_E_SMT_MERGE_KEEP_LINES
     |  
     |--PRO_E_EXT_COMP_DRFT_ANG
     |    |
     |    |--PRO_E_EXT_DRFT_ANG
     |    |
     |    |--PRO_E_EXT_DRFT_ANG_VAL
     |
     |--PRO_E_FEAT_THIN
     |    |
     |    |--PRO_E_FEAT_THIN_STRT
     |    |   |
     |    |   |--PRO_E_FEAT_THIN_STRT_OPT
     |    |   |
     |    |   |--PRO_E_FEAT_THIN_STRT_REF
     |    |
     |    |--PRO_E_FEAT_THIN_END
     |    |   |
     |    |   |--PRO_E_FEAT_THIN_END_OPT
     |    |   |
     |    |   |--PRO_E_FEAT_THIN_END_REF
     |
     |--PRO_E_SMT_NEW_BODY_LINKED  ( applicable only in sheetmetal parts )
     |

\*****************************************************************************/
/*****************************************************************************\

3. Feature elements table and Mapping with Old Element Tree:
============================================================

------------------------------------------------------------------------------
Element Id                       Element Name        Data Type             
------------------------------------------------------------------------------
PRO_E_STD_FEATURE_NAME           Feature Name        PRO_VALUE_TYPE_WSTRING
PRO_E_EXT_SURF_CUT_SOLID_TYPE    Feature Type        PRO_VALUE_TYPE_INT   
PRO_E_REMOVE_MATERIAL            Material            PRO_VALUE_TYPE_INT
PRO_E_BODY                       Body options        Compound
PRO_E_BODY_USE                   Body use option     PRO_VALUE_TYPE_INT
PRO_E_BODY_SELECT                Selected body ref   PRO_VALUE_TYPE_SELECTION
PRO_E_IS_SMT_CUT                 Is Smt Cut          PRO_VALUE_TYPE_INT
PRO_E_SMT_CUT_NORMAL_DIR         Normal Direction    PRO_VALUE_TYPE_INT
PRO_E_FEATURE_FORM               Feature Form        PRO_VALUE_TYPE_INT   
PRO_E_STD_SECTION                Section             Compound             
PRO_E_FEAT_FORM_IS_THIN          Feature Form        PRO_VALUE_TYPE_INT      
PRO_E_STD_MATRLSIDE              Material Side       PRO_VALUE_TYPE_INT 
PRO_E_THICKNESS                  Thin width          PRO_VALUE_TYPE_DOUBLE
PRO_E_SRF_END_ATTRIBUTES         End Cap             PRO_VALUE_TYPE_INT
PRO_E_TRIM_QLT_SIDE              Quilt Side          PRO_VALUE_TYPE_INT
PRO_E_TRIM_QUILT                 Trim Quilt          PRO_VALUE_TYPE_SELECTION 
PRO_E_STD_DIRECTION              Direction           PRO_VALUE_TYPE_INT
PRO_E_STD_EXT_DEPTH              Depth               Compound
PRO_E_EXT_DEPTH_FROM             Depth From          Compound
PRO_E_EXT_DEPTH_FROM_TYPE        Type                PRO_VALUE_TYPE_INT
PRO_E_EXT_DEPTH_FROM_REF         References          PRO_VALUE_TYPE_SELECTION
PRO_E_EXT_DEPTH_FROM_VALUE       Value               PRO_VALUE_TYPE_DOUBLE
PRO_E_EXT_DEPTH_FROM_REF_TRF     Transform           PRO_VALUE_TYPE_INT
PRO_E_EXT_DEPTH_FROM_REF_TRF_VAL Value               PRO_VALUE_TYPE_DOUBLE
PRO_E_EXT_DEPTH_TO               Depth To            Compound
PRO_E_EXT_DEPTH_TO_TYPE          Type                PRO_VALUE_TYPE_INT
PRO_E_EXT_DEPTH_TO_REF           References          PRO_VALUE_TYPE_SELECTION
PRO_E_EXT_DEPTH_TO_VALUE         Value               PRO_VALUE_TYPE_DOUBLE
PRO_E_EXT_DEPTH_TO_REF_TRF       Transform           PRO_VALUE_TYPE_INT
PRO_E_EXT_DEPTH_TO_REF_TRF_VAL   Value               PRO_VALUE_TYPE_DOUBLE
PRO_E_INT_PARTS                  Intsct Parts        Compound
PRO_E_PATTERN                    Pattern             Compound
PRO_E_STD_SMT_THICKNESS          Smt Thickness       PRO_VALUE_TYPE_DOUBLE
PRO_E_STD_SMT_SWAP_DRV_SIDE      Smt Swap Side       PRO_VALUE_TYPE_INT
PRO_E_SMT_WALL_SHARPS_TO_BENDS   Edges to Bends      PRO_VALUE_TYPE_INT
PRO_E_SMT_PUNCH_AXIS_PNT         Punch Axis Point    PRO_VALUE_TYPE_INT
PRO_E_SMT_FILLETS                Smt Fillets         Compound
PRO_E_SMT_FILLETS_SIDE           Smt Radius Side     PRO_VALUE_TYPE_INT
PRO_E_SMT_FILLETS_VALUE          Smt Radius Value    PRO_VALUE_TYPE_DOUBLE
PRO_E_SMT_DEV_LEN_CALCULATION    Smt Develop Length  Compound
PRO_E_SMT_DEV_LEN_SOURCE         Smt Dev Len Source  PRO_VALUE_TYPE_INT
PRO_E_SMT_DEV_LEN_Y_FACTOR       Smt Dev Len Y Fact  Compound
PRO_E_SMT_DEV_LEN_Y_FACTOR_VALUE Y Factor Value      PRO_VALUE_TYPE_DOUBLE
PRO_E_SMT_DEV_LEN_Y_FACTOR_TYPE  Y Factor Type       PRO_VALUE_TYPE_INT
PRO_E_SMT_DEV_LEN_BEND_TABLE     Smt Dev Bend Table  PRO_VALUE_TYPE_INT
PRO_E_SMT_PUNCH_TOOL_DATA        Punch Tool Data     Compound
PRO_E_SMT_PUNCH_TOOL_ATTR        Punch Tool Attribs  PRO_VALUE_INT
PRO_E_SMT_PUNCH_TOOL_NAME        Punch Tool Name     PRO_VALUE_WSTRING
PRO_E_SMT_MERGE_DATA             Smt Merge Wall Data Compound
PRO_E_SMT_MERGE_AUTO             Auto Merge Flag     PRO_VALUE_INT
PRO_E_SMT_MERGE_KEEP_LINES       Keep Merged Lines   PRO_VALUE_INT
PRO_E_EXT_COMP_DRFT_ANG          Draft               Compound
PRO_E_EXT_DRFT_ANG               Add Draft           PRO_VALUE_TYPE_INT
PRO_E_EXT_DRFT_ANG_VAL           Draft Angle         PRO_VALUE_TYPE_DOUBLE
PRO_E_FEAT_THIN                  Thin Def            Compound
PRO_E_FEAT_THIN_STRT             Thin Start          Compound
PRO_E_FEAT_THIN_STRT_OPT         Thin Option         PRO_VALUE_TYPE_INT
PRO_E_FEAT_THIN_STRT_REF         Reference           PRO_VALUE_TYPE_SELECTION
PRO_E_FEAT_THIN_END              Thin Start          Compound
PRO_E_FEAT_THIN_END_OPT          Thin Option         PRO_VALUE_TYPE_INT
PRO_E_FEAT_THIN_END_REF          Reference           PRO_VALUE_TYPE_SELECTION
PRO_E_SMT_NEW_BODY_LINKED        Link Smt Body to Part PRO_VALUE_TYPE_OPTION

-----------------------------------------------------------------------------
3.1 Mapping given only for changed Element Ids.
------------------------------------------------------------------------------
New Element Id                        Old Element ID 
------------------------------------------------------------------------------
PRO_E_EXT_SURF_CUT_SOLID_TYPE         PRO_E_FEATURE_TYPE 
PRO_E_SRF_END_ATTRIBUTES              PRO_E_ATTRIBUTES->PRO_E_ATTR_SRF_END_COND
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
3.2 New Element IDs in the element tree .
------------------------------------------------------------------------------
New Element Id                        
------------------------------------------------------------------------------
PRO_E_EXT_SURF_CUT_SOLID_TYPE
PRO_E_SRF_END_ATTRIBUTES
PRO_E_THICKNESS
PRO_E_STD_MATRLSIDE
PRO_E_REMOVE_MATERIAL
PRO_E_STD_FEATURE_NAME
PRO_E_TRIM_QUILT
PRO_E_TRIM_QLT_SIDE
PRO_E_STD_DIRECTION
PRO_E_BODY

-----------------------------------------------------------------------------
\*****************************************************************************/
/*****************************************************************************\

The Elements mentioned in the table below are for Solid Protrusion.
For other features, additional elements required, are mentioned below in
table 4.2.
-----------------------------------------------------------------------------
Table 4.1 : Common elements for all type of Extrusions and it's value
-----------------------------------------------------------------------------
| Element Id                  | Value                                  |
---------------------------------------------------------------------
|PRO_E_EXT_SURF_CUT_SOLID_TYPE| Mandatory, Of type ProExtFeatType      |
|                             |                                        |
|                             | = PRO_EXT_FEAT_TYPE_SOLID              |
|                             |        for Solid feat type             |
|                             | = PRO_EXT_FEAT_TYPE_SURFACE            |
|                             |        for Surface feat type           |
|.............................|........................................|
| PRO_E_REMOVE_MATERIAL       | Of type ProExtRemMaterial              |
|                             | Material Removal                       |
|                             | = PRO_EXT_MATERIAL_ADD                 |
|                             |        for Protruded feature           |
|                             | = PRO_EXT_MATERIAL_REMOVE              |
|                             |        for Cut feature                 |
|.............................|........................................|
| PRO_E_FEATURE_FORM          | Feature Form. Valid Value: PRO_EXTRUDE |
|                             |                                        |
|.............................|........................................|
| PRO_E_STD_SECTION           | For more details refer ProStdSection.h |
|.............................|........................................|
| PRO_E_STD_DIRECTION         | Of type ProExtDirection                |
|                             | Direction of creation.                 |
|                             | Depends on PRO_E_STD_SECTION           |
|                             | See Note 3 for details.                |
|                             | = PRO_EXT_CR_IN_SIDE_ONE               |
|                             |        for depth in side one           |
|                             | = PRO_EXT_CR_IN_SIDE_TWO               |
|                             |        for depth in side two           |
|.............................|........................................|
| PRO_E_STD_MATRLSIDE         | Of type ProExtMatlSide.                |
|                             | Required if open section               |
|                             | and if  ProExtFeatType  is             |
|                             | PRO_EXT_FEAT_TYPE_SOLID                |
|                             | Depends on PRO_E_STD_SECTION           |
|                             | See Note 3 for details.                |
|.............................|........................................|
| PRO_E_STD_EXT_DEPTH         | Compound Element                       |
|                             |                                        |
|.............................|........................................|
| PRO_E_EXT_DEPTH_TO          | Compound Element                       |
|                             |                                        |
|.............................|........................................|
| PRO_E_EXT_DEPTH_TO_TYPE     | Mandatory, Of type ProExtDepthToType   |
|                             |                                        |
|.............................|........................................|
| PRO_E_EXT_DEPTH_TO_VALUE    | Depends on PRO_E_EXT_DEPTH_TO_TYPE     |
|                             | Of type  PRO_VALUE_TYPE_DOUBLE         |
|.............................|........................................|
| PRO_E_EXT_DEPTH_TO_REF      | Depends on PRO_E_EXT_DEPTH_TO_TYPE     |
|                             | Of type  See Note 1.                   |
|.............................|........................................|
| PRO_E_EXT_DEPTH_FROM        | Compound Element                       |
|                             |                                        |
|.............................|........................................|
| PRO_E_EXT_DEPTH_FROM_TYPE   | Mandatory, Of type ProExtDepthFromType |
|                             |                                        |
|.............................|........................................|
| PRO_E_EXT_DEPTH_FROM_VALUE  | Depends on PRO_E_EXT_DEPTH_FROM_TYPE   |
|                             | Of type  PRO_VALUE_TYPE_DOUBLE         |
|.............................|........................................|
| PRO_E_EXT_DEPTH_FROM_REF    | Depends on PRO_E_EXT_DEPTH_FROM_TYPE   |
|                             | Of type   See Note 1.                  |
|.............................|........................................|
| PRO_E_STD_FEATURE_NAME      | Default given by application depending |
|                             | on feature type.Can be modified by user|
|.............................|........................................|

-----------------------------------------------------------------------------
Table Extrude:4.2 : Elements required for each feature in addition to 
                     those mentioned above. 
-----------------------------------------------------------------------------
|          | Element Id                     | Comment                         |
------------------------------------------------------------------------------
| Solid    :                                :                                 |
|          : PRO_E_BODY                     : Compound element                |
|          : PRO_E_BODY_USE                 : Mandatory                       |                       |
|          :                                : To which body feature adds      |
|          :                                : geometry                        |
|          :                                : Valid values:                   |
|          :                                :   PRO_BODY_USE_NEW              |
|          :                                :   Feature stores it's geometry  |
|          :                                :   in new body                   |
|          :                                :   PRO_BODY_USE_SELECTED         |
|          :                                :   Feature adds it's geometry to |
|          :                                :   single selected body          |
|          : PRO_E_BODY_SELECTED            : Reference to selected body      |
|          :                                :   Mandatory if PRO_E_BODY_USE   | 
|          :                                :   is set to                     |
|          :                                :   PRO_BODY_USE_SELECTED         |
|          :                                :   Ignored otherwise             |
|          :                                :   Single reference allowed      |
|          : PRO_E_EXT_COMP_DRFT_ANG        : Compound Element                |                |
|          : PRO_E_EXT_DRFT_ANG             : Of type ProExtDrftAng           |
|          :                                : = PRO_EXT_DRFT_ANG_NO_DRAFT     |
|          :                                : for feature not having Draft    |
|          :                                : = PRO_EXT_DRFT_ANG_DRAFT        |
|          :                                : for Tapered feature             |
|          : PRO_E_EXT_DRFT_ANG_VAL         : [-89.9,89.9]                    |
|          :                                : Of type PRO_VALUE_TYPE_DOUBLE   |
|..........:................................:.................................|
| Thin     :                                :                                 |
|          : PRO_E_STD_MATRLSIDE            : Mandatory                       |
|          :                                : Of type ProExtMatlSide          |
|          : PRO_E_BODY                     : Compound element                |
|          : PRO_E_BODY_USE                 : Same as Solid                   |
|          : PRO_E_BODY_SELECTED            : Same as Solid                   |
|          : PRO_E_THICKNESS                : Mandatory   >= 0.0              |
|          :                                : Of type PRO_VALUE_TYPE_DOUBLE   |
|          :                                :                                 |
|          : PRO_E_FEAT_FORM_IS_THIN        : Of type ProExtFeatForm          |
|          :                                : = PRO_EXT_FEAT_FORM_NO_THIN     |
|          :                                : for feature not having Thin     |
|          :                                : = PRO_EXT_FEAT_FORM_THIN        |
|          :                                : for Thin feature                |
|          :                                :                                 |
|          : PRO_E_FEAT_THIN                : Compound Element                |
|          :                                : Available only for open section |
|          : PRO_E_FEAT_THIN_STRT           : Compound Element                |
|          : PRO_E_FEAT_THIN_END            : Compound Element                |
|          : PRO_E_FEAT_THIN_STRT_OPT       : Of type ProFeatThinOpt          |
|          :                                : = PRO_FEAT_THIN_IGNORE          |
|          :                                : for feature ignoring solution   |
|          :                                : = PRO_FEAT_THIN_DEFAULT         |
|          :                                : for feature using default       | 
|          :                                : solution.                       |
|          : PRO_E_FEAT_THIN_END_OPT        : Of type ProFeatThinOpt          |
|          :                                : = PRO_FEAT_THIN_IGNORE          |
|          :                                : for feature ignoring solution   |
|          :                                : = PRO_FEAT_THIN_DEFAULT         |
|          :                                : for feature using default       | 
|          :                                : solution.                       |
|          : PRO_E_FEAT_THIN_STRT_REF       : Stores the reference found from |
|          :                                : the start section point when    |
|          :                                : PRO_E_FEAT_THIN_STRT_OPT =      |
|          :                                : PRO_FEAT_THIN_DEFAULT           |
|          : PRO_E_FEAT_THIN_END_REF        : Stores the reference found from |
|          :                                : the end section point when      |
|          :                                : PRO_E_FEAT_THIN_END_OPT =       |
|          :                                : PRO_FEAT_THIN_DEFAULT           |
|..........:................................:.................................|
| Solid Cut:                                :                                 |
|          : PRO_E_BODY                     : Compound element                |
|          : PRO_E_BODY_USE                 : Mandatory                       |                       |
|          :                                : from what body(ies) feature cuts|
|          :                                : geometry                        |
|          :                                : Valid values:                   |
|          :                                :   PRO_BODY_USE_ALL              |
|          :                                :   Feature cuts from all existing| 
|          :                                :   bodies                        |
|          :                                :   PRO_BODY_USE_SELECTED         |
|          :                                :   Feature adds it's geometry to |
|          :                                :   selected bodies               |
|          : PRO_E_BODY_SELECTED            : Reference to selected bodies    |
|          :                                :   Mandatory if PRO_E_BODY_USE   | 
|          :                                :   is set to                     |
|          :                                :   PRO_BODY_USE_SELECTED         |
|          :                                :   Ignored otherwise             |
|          :                                :   Multiple references allowed   |
|          : PRO_E_STD_MATRLSIDE            : Mandatory                       |
|          :                                : Of type ProExtMatlSide          |
|          : PRO_E_FEAT_FORM_IS_THIN        : Of type ProExtFeatForm          |
|          :                                : = PRO_EXT_FEAT_FORM_NO_THIN     |
|          :                                : for feature not having Thin     |
|          :                                : = PRO_EXT_FEAT_FORM_THIN        |
|          :                                : for Thin feature                |
|          :                                :                                 |
|          : PRO_E_IS_SMT_CUT               : Controls cut type, SMT or SOLID |
|          :                                : PRO_B_TRUE / PRO_B_FALSE        |
|          :                                :                                 |
|          : PRO_E_SMT_CUT_NORMAL_DIR       : See: ProSmtCutNormDir           |
|          :                                : SMT Cut geometry driving surface|
|          :                                :                                 |
|          : PRO_E_SMT_PUNCH_TOOL_ATTR      : See: ProPunchToolAttr           |
|          :                                : SMT Cut punch tool attributes   |
|          :                                :                                 |
|          : PRO_E_SMT_PUNCH_TOOL_NAME      : SMT Cut punch tool name         |
|          :                                :                                 |
|          : PRO_E_SMT_PUNCH_AXIS_PNT       : SMT Cut punch axis point        |
|          :                                : PRO_B_TRUE / PRO_B_FALSE        |
|          :				                :	                              |
|          : PRO_E_EXT_COMP_DRFT_ANG        : Compound Element                |  
|          :                                : for feature not having Thin     |
|          :                                : See: Table Extrude:4.2, Solid   |
|..........:................................:.................................|
| Thin Cut :                                :                                 |
|          : PRO_E_BODY                     : Compound element                |
|          : PRO_E_BODY_USE                 : Same as Solid Cut               |
|          : PRO_E_BODY_SELECTED            : Same as Solid Cut               |
|          : PRO_E_STD_MATRLSIDE            : Mandatory                       |
|          :                                : Of type ProExtMatlSide          |
|          : PRO_E_THICKNESS                : Mandatory  >= 0.0               |
|          :                                : Of type PRO_VALUE_TYPE_DOUBLE   |
|          :                                :                                 |
|          : PRO_E_FEAT_FORM_IS_THIN        : Of type ProExtFeatForm          |
|          :                                : = PRO_EXT_FEAT_FORM_NO_THIN     |
|          :                                : for feature not having Thin     |
|          :                                : = PRO_EXT_FEAT_FORM_THIN        |
|          :                                : for Thin feature                |
|          :                                :                                 |
|          : PRO_E_IS_SMT_CUT               : Controls cut type, SMT or SOLID |
|          :                                : PRO_B_TRUE / PRO_B_FALSE        |
|          :                                :                                 |
|          : PRO_E_SMT_CUT_NORMAL_DIR       : SMT Cut geometry driving surface|
|          :                                : See: ProSmtCutNormDir           |
|          :                                :                                 |
|          : PRO_E_SMT_PUNCH_TOOL_ATTR      : SMT Cut punch tool attributes   |
|          :                                : See: ProPunchToolAttr           |
|          :                                :                                 |
|          : PRO_E_SMT_PUNCH_TOOL_NAME      : SMT Cut punch tool name         |
|          :                                :                                 |
|          : PRO_E_FEAT_THIN                : Compound Element                |
|          :                                : See: Table Extrude:4.2, Thin    |
|..........:................................:.................................|
| Surface  :                                :                                 |
|          : PRO_E_SRF_END_ATTRIBUTES       : Of type ProExtSurfEndAttr       |
|          :                                : Depends on PRO_E_STD_SECTION    |
|          :                                : See Note 3 for details.         |
|          :                                : Required only for closed section|
|          :                                :                                 |
|          :                                :                                 |
|          : PRO_E_FEAT_FORM_IS_THIN        : Of type ProExtFeatForm          |
|          :                                : = PRO_EXT_FEAT_FORM_NO_THIN     |
|          :                                : for feature not having Thin     |
|          :                                : = PRO_EXT_FEAT_FORM_THIN        |
|          :                                : for Thin feature                |
|          : PRO_E_EXT_COMP_DRFT_ANG        : Compound Element                |  
|          :                                : for feature not having Thin     |
|          :                                : See: Table Extrude:4.2, Solid   |
|..........:................................:.................................|
| Surface  :                                :                                 |
| Trim     : PRO_E_STD_MATRLSIDE            : Mandatory                       |
|          :                                : Of type ProExtMatlSide          |
|          : PRO_E_TRIM_QUILT               : Mandatory                       |
|          :                                : Of type Quilt.                  |
|          :                                :                                 |
|          : PRO_E_TRIM_QLT_SIDE            : Of type ProExtTrimQltSide       |
|          :                                : Depends on PRO_E_STD_MATRLSIDE  |
|          :                                : See Note 3 for details.         |
|          :                                : Required only if ProExtMatlSide |
|          :                                :  is PRO_EXT_MATERIAL_BOTH_SIDES |
|          :                                :                                 |
|          : PRO_E_FEAT_FORM_IS_THIN        : Of type ProExtFeatForm          |
|          :                                : = PRO_EXT_FEAT_FORM_NO_THIN     |
|          :                                : for feature not having Thin     |
|          :                                : = PRO_EXT_FEAT_FORM_THIN        |
|          :                                : for Thin feature                |
|          : PRO_E_EXT_COMP_DRFT_ANG        : Compound Element                |  
|          :                                : for feature not having Thin     |
|          :                                : See: Table Extrude:4.2, Solid   |
|..........:................................:.................................|
| Thin     :                                :                                 |
| Surface  : PRO_E_STD_MATRLSIDE            : Mandatory                       |
| Trim     :                                : Of type ProExtMatlSide          |
|          : PRO_E_THICKNESS                : Mandatory    >= 0.0             |
|          :                                : Of type PRO_VALUE_TYPE_DOUBLE   |
|          : PRO_E_TRIM_QUILT               : Mandatory                       |
|          :                                : Of type Quilt.                  |
|          :                                :                                 |
|          : PRO_E_TRIM_QLT_SIDE            : Of type ProExtTrimQltSide       |
|          :                                : Depends on PRO_E_STD_MATRLSIDE  |
|          :                                : See Note 3 for details.         |
|          :                                : Required only if ProExtMatlSide |
|          :                                :  is PRO_EXT_MATERIAL_BOTH_SIDES |
|          :                                :                                 |
|          : PRO_E_FEAT_FORM_IS_THIN        : Of type ProExtFeatForm          |
|          :                                : = PRO_EXT_FEAT_FORM_NO_THIN     |
|          :                                : for feature not having Thin     |
|          :                                : = PRO_EXT_FEAT_FORM_THIN        |
|          :                                : for Thin feature                |
|..........:................................:.................................|
| SMT      :                                :                                 |
|Unattached: PRO_E_STD_SMT_THICKNESS        : Non-relevant for non first wall.|
| Wall     :                                : DOUBLE  >= 0.0                  |
|          : PRO_E_STD_SMT_SWAP_DRV_SIDE    : PRO_B_TRUE, PRO_B_FALSE         |
|          :                                :                                 |
|          : PRO_E_SMT_WALL_SHARPS_TO_BENDS : PRO_B_TRUE, PRO_B_FALSE         |
|          :                                :                                 |
|          : PRO_E_SMT_FILLETS_SIDE         : ProSmdRadType                   |
|          :                                :                                 |
|          : PRO_E_SMT_FILLETS_VALUE        : DOUBLE                          |
|          :                                :                                 |
|          : PRO_E_SMT_DEV_LEN_SOURCE       : see :ProDvlLenSrcType           |
|          :                                :                                 |
|          : PRO_E_SMT_DEV_LEN_Y_FACTOR_TYPE: see :ProDvlLenFactor            |
|          :                                :                                 |
|          : PRO_E_SMT_DEV_LEN_BEND_TABLE   : int (bend table ID)             |
|          :                                :                                 |
|          : PRO_E_SMT_MERGE_AUTO           : PRO_B_TRUE, PRO_B_FALSE         |
|          :                                :                                 |
|          : PRO_E_SMT_MERGE_KEEP_LINES     : PRO_B_TRUE, PRO_B_FALSE         |
|          :                                :                                 |
|          : PRO_E_BODY                     : Compound element                |
|          :                                :                                 |
|          : PRO_E_BODY_USE                 : Same as Solid                   |
|          :                                :PRO_BODY_USE_NEW marks first wall|
|          : PRO_E_BODY_SELECTED            : Same as Solid                   |
|          :                                :                                 |
|          : PRO_E_SMT_NEW_BODY_LINKED      : PRO_B_TRUE, PRO_B_FALSE         |
|          :                                : whether created smt body is     |
|          :                                : linked to part                  |
|          :                                :   Mandatory if PRO_E_BODY_USE   | 
|          :                                :   is set to                     |
|          :                                :   PRO_BODY_USE_NEW              |
|..........:................................:.................................|


-----------------------------------------------------------------------------------
Table Extrude:4.3 : Which subelements of Depth compound element are valid
                     and when? 
-----------------------------------------------------------------------------------
|          | Element Id                      | Comment                            |
-----------------------------------------------------------------------------------
| Depth    :                                 :                                    |
| Elements :......................................................................|
|          : PRO_E_STD_EXT_DEPTH             : Depth compound Element             |
|          :                                 :....................................|
|          : PRO_E_EXT_DEPTH_TO              : Info of First Side depth in UI     |
|          :                                 : ( compound element )               |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_TO_TYPE         : of type ProExtDepthToType          |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_TO_VALUE        : Variable depth double value >= 0.0 |
|          :                                 : when PRO_E_EXT_DEPTH_TO_TYPE       |
|          :                                 :      == PRO_EXT_DEPTH_TO_BLIND   OR|
|          :                                 :      == PRO_EXT_DEPTH_SYMMETRIC    |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_TO_REF          : Stores the upto reference          |
|          :                                 : when PRO_E_EXT_DEPTH_TO_TYPE       |
|          :                                 :  == PRO_EXT_DEPTH_TO_REF       OR  |
|          :                                 :  == PRO_EXT_DEPTH_TO_UNTIL         |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_TO_REF_TRF      : of type ProExtDepthRefOpt          |
|          :                                 : when PRO_E_EXT_DEPTH_TO_TYPE       |
|          :                                 :  == PRO_EXT_DEPTH_TO_REF           |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_TO_REF_TRF_VAL  : Offset/translation double value    |
|          :                                 : when PRO_E_EXT_DEPTH_TO_REF_TRF    |
|          :                                 :  != PRO_EXT_DEPTH_REF_NONE         |
|          :                                 :                                    |
|          :                                 :....................................|
|          : PRO_E_EXT_DEPTH_FROM            : Info of Second Side depth in UI    |
|          :                                 : ( Compound Element  )              |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_FROM_TYPE       : of ProExtDepthFromType             |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_FROM_VALUE      : Variable depth double value >= 0.0 |
|          :                                 : when PRO_E_EXT_DEPTH_FROM_TYPE     |
|          :                                 :      == PRO_EXT_DEPTH_FROM_BLIND   |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_FROM_REF        : stores the upto reference          |
|          :                                 : when PRO_E_EXT_DEPTH_FROM_TYPE     |
|          :                                 :  == PRO_EXT_DEPTH_FROM_REF     OR  |
|          :                                 :  == PRO_EXT_DEPTH_FROM_UNTIL       |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_FROM_REF_TRF    : of type ProExtDepthRefOpt          |
|          :                                 : when PRO_E_EXT_DEPTH_FROM_TYPE     |
|          :                                 :  == PRO_EXT_DEPTH_FROM_REF         |
|          :                                 :                                    |
|          : PRO_E_EXT_DEPTH_FROM_REF_TRF_VAL: Offset/translation double value    |
|          :                                 : when PRO_E_EXT_DEPTH_FROM_REF_TRF  |
|          :                                 :  != PRO_EXT_DEPTH_REF_NONE         |
|          :                                 :                                    |
|..........:.................................:....................................|

-------------------------------------------------------------------------------
Table Extrude:4.4 :  Values of Specific Elements for each feature
-------------------------------------------------------------------------------
|          | Element Id                     | Value                           |
-------------------------------------------------------------------------------
| Solid    :                                :                                 |
|          : PRO_E_EXT_SURF_CUT_SOLID_TYPE  : PRO_EXT_FEAT_TYPE_SOLID         |
|          : PRO_E_FEAT_FORM_IS_THIN        : PRO_EXT_FEAT_FORM_NO_THIN       |
|          : PRO_E_REMOVE_MATERIAL          : PRO_EXT_MATERIAL_ADD            |
|          : PRO_E_BODY_USE                 : PRO_BODY_USE_NEW /              |
|          :                                : PRO_BODY_USE_SELECTED           |
|..........:................................:.................................|
| Thin     :                                :                                 |
|          : PRO_E_EXT_SURF_CUT_SOLID_TYPE  : PRO_EXT_FEAT_TYPE_SOLID         |
|          : PRO_E_FEAT_FORM_IS_THIN        : PRO_EXT_FEAT_FORM_THIN          |
|          : PRO_E_REMOVE_MATERIAL          : PRO_EXT_MATERIAL_ADD            |
|          : PRO_E_BODY_USE                 : PRO_BODY_USE_NEW /              |
|          :                                : PRO_BODY_USE_SELECTED           |
|..........:................................:.................................|
| Solid Cut:                                :                                 |
|          : PRO_E_EXT_SURF_CUT_SOLID_TYPE  : PRO_EXT_FEAT_TYPE_SOLID         |
|          : PRO_E_FEAT_FORM_IS_THIN        : PRO_EXT_FEAT_FORM_NO_THIN       |
|          : PRO_E_REMOVE_MATERIAL          : PRO_EXT_MATERIAL_REMOVE         |
|          : PRO_E_BODY_USE                 : PRO_BODY_USE_ALL /              |
|          :                                : PRO_BODY_USE_SELECTED           |
|..........:................................:.................................|
| Thin Cut :                                :                                 |
|          : PRO_E_EXT_SURF_CUT_SOLID_TYPE  : PRO_EXT_FEAT_TYPE_SOLID         |
|          : PRO_E_FEAT_FORM_IS_THIN        : PRO_EXT_FEAT_FORM_THIN          |
|          : PRO_E_REMOVE_MATERIAL          : PRO_EXT_MATERIAL_REMOVE         |
|          : PRO_E_BODY_USE                 : PRO_BODY_USE_ALL /              |
|          :                                : PRO_BODY_USE_SELECTED           |
|..........:................................:.................................|
| Surface  :                                :                                 |
|          : PRO_E_EXT_SURF_CUT_SOLID_TYPE  : PRO_EXT_FEAT_TYPE_SURFACE       |
|          : PRO_E_FEAT_FORM_IS_THIN        : PRO_EXT_FEAT_FORM_NO_THIN       |
|          : PRO_E_REMOVE_MATERIAL          : PRO_EXT_MATERIAL_ADD            |
|..........:................................:.................................|
| Surface  :                                :                                 |
| Trim     : PRO_E_EXT_SURF_CUT_SOLID_TYPE  : PRO_EXT_FEAT_TYPE_SURFACE       |
|          : PRO_E_FEAT_FORM_IS_THIN        : PRO_EXT_FEAT_FORM_NO_THIN       |
|          : PRO_E_REMOVE_MATERIAL          : PRO_EXT_MATERIAL_REMOVE         |
|..........:................................:.................................|
| Thin     :                                :                                 |
| Surface  : PRO_E_EXT_SURF_CUT_SOLID_TYPE  : PRO_EXT_FEAT_TYPE_SURFACE       |
| Trim     : PRO_E_FEAT_FORM_IS_THIN        : PRO_EXT_FEAT_FORM_THIN          |
|          : PRO_E_REMOVE_MATERIAL          : PRO_EXT_MATERIAL_REMOVE         |
|..........:................................:.................................|
| SMT      :                                :                                 |
|Unattached: PRO_E_EXT_SURF_CUT_SOLID_TYPE  : PRO_EXT_FEAT_TYPE_SOLID         |
| Wall     : PRO_E_FEAT_FORM_IS_THIN        : Non-relevant                    |
|          : PRO_E_REMOVE_MATERIAL          : PRO_EXT_MATERIAL_ADD            |
|          : PRO_E_BODY_USE                 : PRO_BODY_USE_NEW /              |
|          :                                : PRO_BODY_USE_SELECTED           |
|..........:................................:.................................|


-------------------------------------------------------------------------------
Table Extrude:4.5 :  Non SMT Extrude Vs. Sheet Metal Extrude (Unattached Wall)|
------------------------------------------------------------------------------
| Elements that are common to both features                                   |
|-----------------------------------------------------------------------------|
| PRO_E_STD_FEATURE_NAME                                                      |
| PRO_E_EXT_SURF_CUT_SOLID_TYPE                                               |
| PRO_E_REMOVE_MATERIAL                                                       |
| PRO_E_BODY                                                                  |
| PRO_E_FEATURE_FORM                                                          |
| PRO_E_STD_SECTION                                                           |
| PRO_E_STD_MATRLSIDE                                                         |
| PRO_E_STD_DIRECTION                                                         |
| PRO_E_STD_EXT_DEPTH                                                         |
|.............................................................................|
| Extrude specific                      | Wall specific                       |
|-----------------------------------------------------------------------------|
|.......................................:.....................................|
| PRO_E_IS_SMT_CUT                      :  PRO_E_STD_SMT_THICKNESS            |
| PRO_E_SMT_CUT_NORMAL_DIR              :  PRO_E_STD_SMT_SWAP_DRV_SIDE        |
| PRO_E_FEAT_FORM_IS_THIN               :  PRO_E_SMT_WALL_SHARPS_TO_BENDS     |
| PRO_E_THICKNESS                       :  PRO_E_SMT_FILLETS                  |
| PRO_E_SRF_END_ATTRIBUTES              :  PRO_E_SMT_DEV_LEN_CALCULATION      |
| PRO_E_TRIM_QLT_SIDE                   :  PRO_E_SMT_MERGE_DATA               |
| PRO_E_TRIM_QUILT                      :  PRO_E_SMT_NEW_BODY_LINKED          |
| PRO_E_EXT_COMP_DRFT_ANG               :                                     |
| PRO_E_FEAT_THIN                       :                                     |
|.......................................:.....................................|


5  Feature element tree for first feat:
=======================================
 
   PRO_E_FEATURE_TREE
     |   
     |--PRO_E_STD_FEATURE_NAME
     |  
     |--PRO_E_FEATURE_TYPE
     |   
     |--PRO_E_EXT_SURF_CUT_SOLID_TYPE
	 |
     |--PRO_E_BODY
     |    |
     |    |--PRO_E_BODY_USE
     |    |
     |    |--PRO_E_BODY_SELECT
     |
     |--PRO_E_FEATURE_FORM
     |   
     |--PRO_E_SKETCHER                ( Section )
     |   
     |--PRO_E_FEAT_FORM_IS_THIN       ( Feature Form )
     |   
     |--PRO_E_STD_MATRLSIDE           ( Material Side )
     |   
     |--PRO_E_THICKNESS               ( Thickness )
     |   
     |--PRO_E_STD_EXT_DEPTH
     |    |
     |    |--PRO_E_EXT_DEPTH_FROM
     |         |--PRO_E_EXT_DEPTH_FROM_TYPE
     |         |--PRO_E_EXT_DEPTH_FROM_VALUE
   
-----------------------------------------------------------------------------
Table 5.1 : Common element for all First feat Extrusions and it's value
-----------------------------------------------------------------------------
| Element Id                   | Value                                  | 
----------------------------------------------------------------------
| PRO_E_FEATURE_FORM           | Feature Form                           | 
|                              | Valid Value : PRO_EXTRUDE              | 
|..............................|........................................|
| PRO_E_FEATURE_TYPE           | Feature type                           |
|                              | Valid Value : PRO_FEAT_FIRST_FEAT      |
|..............................|........................................|
| PRO_E_EXT_SURF_CUT_SOLID_TYPE| Feature type                           |
|                              | Valid Value : PRO_EXT_FEAT_TYPE_SOLID  |
|..............................|........................................|
| PRO_E_BODY_USE               | Mandatory                              |
|                              | To which body feature adds geometry    |
|                              | Valid values:                          |
|                              |   PRO_BODY_USE_NEW                     |
|                              |   Feature stores it's geometry in new  |
|                              |   body                                 |
|                              |   PRO_BODY_USE_SELECTED                |
|                              |   Feature adds it's geometry to single |
|                              |   selected body                        |
|..............................|........................................|
| PRO_E_BODY_SELECTED          | Reference to signle selected body      |
|                              | Mandatory if PRO_E_BODY_USE is set to  | 
|                              | PRO_BODY_USE_SELECTED                  |
|                              | Ignored otherwise                      |
|..............................|........................................|
| PRO_E_SKETCHER               | 2D section.  Must be closed for solid  | 
|                              | first features.i.e ProExtFeatForm ==   | 
|                              | PRO_EXT_FEAT_FORM_NO_THIN.             | 
|..............................|........................................|
| PRO_E_FEAT_FORM_IS_THIN      | Feature Form                           | 
|                              | Of type ProExtFeatForm                 | 
|                              | = PRO_EXT_FEAT_FORM_NO_THIN            | 
|                              |        for Solid feature               | 
|                              | = PRO_EXT_FEAT_FORM_THIN               | 
|                              |        for Thin feature                | 
|..............................|........................................|
| PRO_E_STD_EXT_DEPTH          | Compound Element                       | 
|                              |                                        |
|..............................|........................................|
| PRO_E_EXT_DEPTH_FROM         | Compound Element                       | 
|                              |                                        |
|..............................|........................................|
| PRO_E_EXT_DEPTH_FROM_TYPE    | Mandatory                              | 
|                              | = PRO_EXT_DEPTH_FROM_BLIND             | 
|..............................|........................................|
| PRO_E_EXT_DEPTH_FROM_VALUE   | Of type  PRO_VALUE_TYPE_DOUBLE         |
|..............................|........................................|
| PRO_E_STD_FEATURE_NAME       | Default given by application depending |
|                              | on feature type.Can be modified by user|
|..............................|........................................|



-----------------------------------------------------------------------------
Table Extrude:5.2 : Elements required for each First feature in addition to
                    those mentioned above.
-----------------------------------------------------------------------------
|          | Element Id                     | Comment                         |
------------------------------------------------------------------------------
| Solid    :                                : No Additional Elements Required |
|..........:................................:.................................|
| Thin     :                                :                                 |
|          : PRO_E_STD_MATRLSIDE            : Mandatory                       |
|          :                                : Of type ProExtMatlSide          |
|          :                                : Dependent on PRO_E_SKETCHER     |
|          :                                : See Note 6 for details.         |
|          :                                :                                 |
|          : PRO_E_THICKNESS                : Mandatory   >= 0.0              |
|          :                                : Of type PRO_VALUE_TYPE_DOUBLE   |
|          :                                : Dependent on PRO_E_SKETCHER     |
|          :                                : See Note 6 for details.         |
|..........:................................:.................................|

\*****************************************************************************/
/*****************************************************************************/


/* 1. PRO_E_EXT_DEPTH_FROM_TYPE */ 

typedef enum pro_ext_depth_from_type
{
   PRO_EXT_DEPTH_FROM_BLIND    = (1 << 7),
   PRO_EXT_DEPTH_FROM_NEXT     = (1 << 8),
   PRO_EXT_DEPTH_FROM_ALL      = (1 << 9),
   PRO_EXT_DEPTH_FROM_UNTIL    = (1 << 10),
   PRO_EXT_DEPTH_FROM_REF      = (1 << 11),
   PRO_EXT_DEPTH_FROM_NONE     = (1 << 12)
} ProExtDepthFromType;

/* 2. PRO_E_EXT_DEPTH_TO_TYPE */

typedef enum pro_depth_to_type
{
   PRO_EXT_DEPTH_TO_BLIND    = (1 << 18),
   PRO_EXT_DEPTH_TO_NEXT     = (1 << 19),
   PRO_EXT_DEPTH_TO_ALL      = (1 << 20),
   PRO_EXT_DEPTH_TO_UNTIL    = (1 << 21),
   PRO_EXT_DEPTH_TO_REF      = (1 << 22),
   PRO_EXT_DEPTH_TO_NONE     = (1 << 23), /* Obsoleted. See Note Below*/
   PRO_EXT_DEPTH_SYMMETRIC   = (1 << 28)
} ProExtDepthToType;
/* PRO_EXT_DEPTH_TO_NONE should not be used as depth type. 
   Instead use PRO_EXT_DEPTH_FROM_NONE and proper PRO_E_STD_DIRECTION */

/* 3. PRO_E_TRIM_QLT_SIDE */

 typedef enum pro_ext_trimqlt_side 
 {
   PRO_EXT_TRIMQLT_SIDE_ONE         = -1,  /* Side 1 */ 
   PRO_EXT_TRIMQLT_SIDE_TWO         =  1   /* Side 2 */ 
 } ProExtTrimQltSide;


/* 4. PRO_E_STD_MATRLSIDE */

 typedef enum pro_ext_material_side
 {
   PRO_EXT_MATERIAL_SIDE_ONE        =  1,  /* Side 1      */ 
   PRO_EXT_MATERIAL_SIDE_TWO        =  2,  /* Side 2      */ 
   PRO_EXT_MATERIAL_BOTH_SIDES      =  3   /* Both sides  */ 
 } ProExtMatlSide;

/* Important : PRO_EXT_MATERIAL_BOTH_SIDES should be used with Thin and trim
               features only. */

/* 5. PRO_E_EXT_SURF_CUT_SOLID_TYPE */

 typedef enum pro_ext_feat_type 
 {
   PRO_EXT_FEAT_TYPE_SOLID          =  917, /* Solid Protrusion */
   PRO_EXT_FEAT_TYPE_SURFACE        =  942  /* Surface Protrusion */
 } ProExtFeatType;


/* 6. PRO_E_REMOVE_MATERIAL */

 typedef enum pro_ext_rem_material 
 {
   PRO_EXT_MATERIAL_ADD             = -1,   /* Solid protrusion */ 
   PRO_EXT_MATERIAL_REMOVE          =  916  /* Solid Cut protrusion */ 
 } ProExtRemMaterial;


/* 7. PRO_E_STD_DIRECTION */

 typedef enum pro_ext_direction 
 {
   PRO_EXT_CR_IN_SIDE_ONE           = -1, /* Protrusion in Side 1 */ 
   PRO_EXT_CR_IN_SIDE_TWO           =  1  /* Protrusion in Side 2 */ 
 } ProExtDirection;


/* 8. PRO_E_FEAT_FORM_IS_THIN */

 typedef enum pro_ext_feat_form 
 {
   PRO_EXT_FEAT_FORM_NO_THIN        =  0,  /* Solid protrusion */ 
   PRO_EXT_FEAT_FORM_THIN           =  128 /* Thin protrusion */ 
 } ProExtFeatForm;


/* 9. PRO_E_SRF_END_ATTRIBUTES */

 typedef enum pro_ext_surf_end_attr 
 {
   PRO_EXT_SURF_END_ATTR_OPEN       =  1, 
   PRO_EXT_SURF_END_ATTR_CAPPED     =  14 
 } ProExtSurfEndAttr;

/* 10. PRO_E_SMT_CUT_NORMAL_DIR */

 typedef enum pro_smt_cut_norm_dir 
 {
   PRO_SMT_CUT_DRVSIDE_GREEN        = 2,
   PRO_SMT_CUT_DRVSIDE_WHITE        = 3,
   PRO_SMT_CUT_DRVSIDE_BOTH         = 4 
 } ProSmtCutNormDir;


/* 11. PRO_E_SMT_PUNCH_TOOL_ATTR */

 typedef enum pro_punch_tool_attr 
 {
   PRO_PUNCH_TOOL_ATTR_SYM_NONE     = 0,  /* No symmetry                */
   PRO_PUNCH_TOOL_ATTR_SYM_X        = 1,  /* Symmetry around X axis     */
   PRO_PUNCH_TOOL_ATTR_SYM_Y        = 2,  /* Symmetry around Y axis     */
   PRO_PUNCH_TOOL_ATTR_SYM_XY       = 3   /* Symmetry around both X & Y */
 } ProPunchToolAttr;

/* 12. PRO_E_EXT_DRFT_ANG */

 
 typedef enum pro_ext_drft_ang
 {
   PRO_EXT_DRFT_ANG_NO_DRAFT        = -1,
   PRO_EXT_DRFT_ANG_DRAFT           = 80
 } ProExtDrftAng; 

/* 13. PRO_E_FEAT_THIN */

typedef enum pro_thin_opts
{
   PRO_FEAT_THIN_IGNORE           = -1, /* Ignore thin ending references */
   PRO_FEAT_THIN_DEFAULT          = 1  /* Use Default Algorithm */
} ProFeatThinOpt;

/* 14. PRO_E_EXT_DEPTH_FROM/TO_REF_TRF */
typedef enum pro_ext_depth_ref_opts
{
   PRO_EXT_DEPTH_REF_NONE      = -1, /* Use Depth Reference */
   PRO_EXT_DEPTH_REF_OFFS      = 90, /* Offset Depth Reference */
   PRO_EXT_DEPTH_REF_TRNSLT    = 95  /* Translate Depth Regerence */
} ProExtDepthRefOpt;


/*****************************************************************************/
/*****************************************************************************\
 
   Note 1.   Depth reference types:
 
   Depth Type              Valid Reference Types
   ---------------------------------------------------------------------
   PRO_EXT_DEPTH_FROM_REF       PRO_SURFACE, PRO_AXIS, PRO_EDGE, PRO_CURVE,
                                PRO_POINT, PRO_EDGE_START, PRO_EDGE_END, 
                                PRO_CRV_START, PRO_CRV_END, PRO_BODY

   PRO_EXT_DEPTH_TO_REF         PRO_SURFACE, PRO_AXIS, PRO_EDGE, PRO_CURVE,
                                PRO_POINT, PRO_EDGE_START, PRO_EDGE_END, 
                                PRO_CRV_START, PRO_CRV_END, PRO_BODY

   Note 2.  Extrude  with symetric depth option

            Following elements needs to be set:
            PRO_E_EXT_DEPTH_FROM_TYPE  -> PRO_EXT_DEPTH_FROM_NONE
            PRO_E_EXT_DEPTH_TO_TYPE    -> PRO_EXT_DEPTH_SYMMETRIC
            PRO_E_EXT_DEPTH_TO_VALUE   -> The symmetric depth double value.

            Other depth related elements are ignored.

   Note 3. Important: The elements PRO_E_STD_DIRECTION, PRO_E_STD_MATRLSIDE,
           PRO_E_TRIM_QLT_SIDE and PRO_E_SRF_END_ATTRIBUTES, are  directly
           dependent upon the presence of a fully defined PRO_E_STD_SECTION
           element tree (including PRO_E_SKETCHER).  
           Values assigned to these elements before fully defining the 
           PRO_E_STD_SECTION will be ignored.


   Note 4. Depth Type values valid for Surface feature are as below.

           ProExtDepthFromType:
             PRO_EXT_DEPTH_FROM_BLIND  
             PRO_EXT_DEPTH_FROM_REF   
             PRO_EXT_DEPTH_FROM_NONE 

           ProExtDepthToType:
             PRO_EXT_DEPTH_TO_BLIND 
             PRO_EXT_DEPTH_TO_REF  
             PRO_EXT_DEPTH_SYMMETRIC
          
   Note 5. Depth Type values valid for Surface Trim feature are as below.

           ProExtDepthFromType:
             PRO_EXT_DEPTH_FROM_BLIND  
             PRO_EXT_DEPTH_FROM_REF   
             PRO_EXT_DEPTH_FROM_NONE 
             PRO_EXT_DEPTH_FROM_ALL 

           ProExtDepthToType:
             PRO_EXT_DEPTH_TO_BLIND 
             PRO_EXT_DEPTH_TO_REF  
             PRO_EXT_DEPTH_SYMMETRIC
             PRO_EXT_DEPTH_TO_ALL

   Note 6. Important: In First feature, the elements PRO_E_STD_MATRLSIDE
           and PRO_E_THICKNESS, are  directly dependent upon the presence
           of a defined PRO_E_SKETCHER element.
           Values assigned to these elements before fully defining the 
           PRO_E_SKETCHER will be ignored.
           
   Note 7. For more info on Body elements refer ProBodyOpts.h

\*****************************************************************************/
/*========= OLD IMPLEMENTATION prior to Pro/E Wildfire 1.0 ==================*/
/*****************************************************************************\

Feature element tree
 
   PRO_E_FEATURE_TREE
     |
     |--PRO_E_FEATURE_TYPE
     |
     |--PRO_E_FEATURE_FORM
     |
     |--PRO_E_ATTRIBUTES
     |    |--PRO_E_ATTR_SRF_END_COND
     |
     |--PRO_E_STD_SECTION
     |
     |--PRO_E_STD_EXT_DEPTH 
     |    |--PRO_E_EXT_DEPTH_FROM
     |         |--PRO_E_EXT_DEPTH_FROM_TYPE
     |         |--PRO_E_EXT_DEPTH_FROM_REF   If Type = Reference
     |         |--PRO_E_EXT_DEPTH_FROM_VALUE If Type = Blind
     |
     |    |--PRO_E_EXT_DEPTH_TO
     |         |--PRO_E_EXT_DEPTH_TO_TYPE
     |         |--PRO_E_EXT_DEPTH_TO_REF     If Type = Reference
     |         |--PRO_E_EXT_DEPTH_TO_VALUE    If Type = Blind
     |

3. Feature elements table
 
--------------------------------------------------------------------------------------------
Element Id                     Element Name   Data Type             Valid Values
--------------------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE             Feature Type   PRO_VALUE_TYPE_INT       PRO_FEAT_PROTRUSION
                                                                       PRO_FEAT_FIRST_FEAT,
                                                                       PRO_FEAT_CUT,
                                                                       PRO_FEAT_SLOT
PRO_E_FEATURE_FORM             Feature Form   PRO_VALUE_TYPE_INT       PRO_EXTRUDE
PRO_E_ATTRIBUTES               Attributes     Compound
PRO_E_ATTR_SRF_END_COND        EndCond        PRO_VALUE_TYPE_INT       ProSrfEndCond
PRO_E_STD_SECTION              Section        Compound
PRO_E_STD_EXT_DEPTH            Depth          Compound
PRO_E_EXT_DEPTH_FROM           Depth From     Compound
PRO_E_EXT_DEPTH_FROM_TYPE      Type           PRO_VALUE_TYPE_INT       ProExtDepthFromType
PRO_E_EXT_DEPTH_FROM_REF       References     PRO_VALUE_TYPE_SELECTION See Note 1
PRO_E_EXT_DEPTH_FROM_VALUE     Value          PRO_VALUE_TYPE_DOUBLE    >= 0.0
PRO_E_EXT_DEPTH_TO             Depth To       Compound
PRO_E_EXT_DEPTH_TO_TYPE        Type           PRO_VALUE_TYPE_INT       ProExtDepthToType
PRO_E_EXT_DEPTH_TO_REF         References     PRO_VALUE_TYPE_SELECTION See Note 1
PRO_E_EXT_DEPTH_TO_VALUE       Value          PRO_VALUE_TYPE_DOUBLE    >= 0.0
--------------------------------------------------------------------------------------------
 
\*****************************************************************************/
PRO_END_C_DECLS
 
#endif