#ifndef PROSHELLH
#define PROSHELLH



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

PRO_BEGIN_C_DECLS

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

(1) Feature element tree

   PRO_E_FEATURE_TREE
      |
      |-- PRO_E_FEATURE_TYPE
      |
      |-- PRO_E_STD_FEATURE_NAME
      |
      |-- PRO_E_BODY (Body options branch, see ProBodyOpts.h)
      |
      |-- PRO_E_SHELL_SRF
      |
      |-- PRO_E_SHELL_THICK
      |
      |-- PRO_E_SHELL_FLIP
      |
      |-- PRO_E_STD_SURF_COLLECTION_APPL
      |
      |-- PRO_E_SHELL_LACE_BNDRY
      |
      |-- PRO_E_SHELL_ALT_CUT_METHOD
      |
      |-- PRO_E_ST_SHELL_LOCL_LIST
           |
           |-- PRO_E_ST_SHELL_LOCL_CMPD
                |
                |-- PRO_E_ST_SHELL_SPEC_SRF
                |
                |-- PRO_E_ST_SHELL_SPEC_THCK

===============================================================================

(2) Feature elements table

-------------------------------------------------------------------------------
Element Id                     Element Name     Data Type                 Valid Values
-------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE             Feature Type     PRO_VALUE_TYPE_INT        Note-1
PRO_E_STD_FEATURE_NAME         Feature Name     PRO_VALUE_TYPE_WSTRING    Note-2
PRO_E_BODY                     Body options     Compound                  Note-3
PRO_E_SHELL_SRF                Remove Surfaces  PRO_VALUE_TYPE_SELECTION  Note-4
PRO_E_SHELL_THICK              Main Thickness   PRO_VALUE_TYPE_DOUBLE     Note-5
PRO_E_SHELL_FLIP               Flip             PRO_VALUE_TYPE_INT        ProShellSide
PRO_E_STD_SURF_COLLECTION_APPL Exclude surfaces PRO_VALUE_TYPE_SELECTION  Note-6
PRO_E_SHELL_LACE_BNDRY         Lace boundary    PRO_VALUE_TYPE_INT        ProShellLace
PRO_E_SHELL_ALT_CUT_METHOD     Alternate cut    PRO_VALUE_TYPE_INT        ProShellAltCut
PRO_E_ST_SHELL_LOCL_LIST       Local Thickness  Array
PRO_E_ST_SHELL_LOCL_CMPD       Local Thickness  Compound
PRO_E_ST_SHELL_SPEC_SRF        Surface          PRO_VALUE_TYPE_SELECTION  Note-7
PRO_E_ST_SHELL_SPEC_THCK       Thickness        PRO_VALUE_TYPE_DOUBLE     Note-8

===============================================================================

(3) Notes

   Note-1 : PRO_FEAT_SHELL

   Note-2 : Shell feature name.

   Note-3 : Mandatory - a branch of general body options elements defined in
            ProBodyOpts.h
            PRO_E_BODY_USE must be PRO_BODY_USE_SELECTED.
            PRO_E_BODY_SELECTED must contain a single selected body to shell

   Note-4 : Select the surfaces to be removed from the part to create shell
            feature. Multiple selection allowed. This element is optional.

   Note-5 : Default thickness for the shell.
            Should be positive and bigger than zero.

   Note-6 : Select a surface to specify a local thickness value.
            Only single selection is allowed.
            Cannot select any of the "Remove Surfaces".

   Note-7 : Local thickness value for surface selected in Note-6.
            Should be positive and bigger than zero.

   Note-8 : Select surfaces to be excluded during shell.
            Use Lace boundary to specify closure of excluded part.
            Use Alternate cut to specify cut method for extracting interior.

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

/* PRO_E_SHELL_FLIP values */

typedef enum
{
   PRO_SHELL_OUTSIDE = -1,
   PRO_SHELL_INSIDE  = 1
} ProShellSide;

typedef enum
{
   PRO_SHELL_LACE       = 0,
   PRO_SHELL_DONT_LACE  = 1
} ProShellLace;

typedef enum
{
   PRO_SHELL_ALT_CUT_METHOD_NO  = 0,
   PRO_SHELL_ALT_CUT_METHOD_YES = 1
} ProShellAltCut;

PRO_END_C_DECLS

#endif