#ifndef PROEDITBENDRELIEF_H
#define PROEDITBENDRELIEF_H



#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_EDIT_BEND_RELIEF
    |    |
    |    |--PRO_E_EDIT_BEND_RELIEF_SEL_MODE
    |    |
    |    |--PRO_E_EDIT_BEND_RELIEF_GEOMS
    |    |
    |    |--PRO_E_EDIT_BEND_RELIEF_SHAPE
    |    |    |
    |    |    |--PRO_E_BEND_RELIEF_TYPE
    |    |    |
    |    |    |--PRO_E_BEND_RELIEF_WIDTH
    |    |    |
    |    |    |--PRO_E_BEND_RELIEF_DEPTH_TYPE
    |    |    |
    |    |    |--PRO_E_BEND_RELIEF_DEPTH
    |    |    |
    |    |    |--PRO_E_BEND_RELIEF_LENGTH_TYPE
    |    |    |
    |    |    |--PRO_E_BEND_RELIEF_LENGTH
    |    |
    |    |--PRO_E_EDIT_BEND_RELIEF_TABLE
    |         |
    |         |--PRO_E_BEND_RELIEF_RMV_SETTINGS
    |              |
    |              |--PRO_E_BEND_RELIEF_VERTEX
    |              |
    |              |--PRO_E_BEND_RELIEF_RMV_SIDES
    |              |
    |              |--PRO_E_BEND_RELIEF_RMV_DEFAULT
    |              |
    |              |--PRO_E_BEND_RELIEF_RMV_METHOD
    |              |
    |              |--PRO_E_BEND_RELIEF_RMV_REF_TYPE
    |
    |--PRO_E_BODY
    |    |
    |    |--PRO_E_BODY_USE
    |    |
    |    |--PRO_E_BODY_SELECT
===============================================================================

(2) Feature elements table

------------------------------------------------------------------------------
  Element Id                      Element Name          Data Type
------------------------------------------------------------------------------  
PRO_E_FEATURE_TYPE                Feature Type          PRO_VALUE_TYPE_INT
PRO_E_STD_FEATURE_NAME            Feature Name          PRO_VALUE_TYPE_WSTRING
PRO_E_EDIT_BEND_RELIEF	          Edit Bend Relief      Compound
PRO_E_EDIT_BEND_RELIEF_SEL_MODE   Selection Mode        PRO_VALUE_TYPE_INT
PRO_E_EDIT_BEND_RELIEF_GEOMS      Bend Relief Geometry  Multi Collector
PRO_E_EDIT_BEND_RELIEF_SHAPE      Bend Relief Shape     Compound
PRO_E_BEND_RELIEF_TYPE            Type                  PRO_VALUE_TYPE_INT
PRO_E_BEND_RELIEF_WIDTH           Width                 PRO_VALUE_TYPE_DOUBLE
PRO_E_BEND_RELIEF_DEPTH_TYPE      Depth Type            PRO_VALUE_TYPE_INT
PRO_E_BEND_RELIEF_DEPTH           Depth                 PRO_VALUE_TYPE_DOUBLE
PRO_E_BEND_RELIEF_LENGTH_TYPE     Relief Length type    PRO_VALUE_TYPE_INT
PRO_E_BEND_RELIEF_LENGTH          Relief Length value   PRO_VALUE_TYPE_DOUBLE
PRO_E_EDIT_BEND_RELIEF_TABLE      Bend Reliefs List     Array
PRO_E_BEND_RELIEF_RMV_SETTINGS    Removal Settings      Compound
PRO_E_BEND_RELIEF_VERTEX          Bend Relief Vertex    PRO_VALUE_TYPE_SELECTION
PRO_E_BEND_RELIEF_RMV_SIDES       Bounding Sides        Multi Collector
PRO_E_BEND_RELIEF_RMV_DEFAULT     Default Removal       PRO_VALUE_TYPE_BOOLEAN
PRO_E_BEND_RELIEF_RMV_METHOD      Removal Method        PRO_VALUE_TYPE_INT
PRO_E_BEND_RELIEF_RMV_REF_TYPE    Removal Reference     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
===============================================================================

(3) Element Values Table

-------------------------------------------------------------------------------
 Element Id                      Element Name                Valid Values
-------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE		         Feature Type                PRO_FEAT_EDIT_BEND_RELIEF
PRO_E_STD_FEATURE_NAME           Feature Name                See Note 1
PRO_E_EDIT_BEND_RELIEF           Edit Bend Relief
PRO_E_EDIT_BEND_RELIEF_SEL_MODE  Selection Mode              See Note 2  (PRO_SMT_RECOGNITION_MANUAL_SEL, PRO_SMT_RECOGNITION_AUTO_SEL)
PRO_E_EDIT_BEND_RELIEF_GEOMS     Bend Relief Geometry        See Note 3
PRO_E_EDIT_BEND_RELIEF_SHAPE     Bend Relief Shape
PRO_E_BEND_RELIEF_TYPE           Type                        See Note 4  (PRO_BEND_RLF_RIP, PRO_BEND_RLF_RECTANGULAR, PRO_BEND_RLF_OBROUND)
PRO_E_BEND_RELIEF_WIDTH          Width                       See Note 5  
PRO_E_BEND_RELIEF_DEPTH_TYPE     Depth Type                  See Note 6  (PRO_BEND_RLF_DEPTH_BLIND, PRO_BEND_RLF_DEPTH_UP_TO_BEND, PRO_BEND_RLF_DEPTH_TAN_TO_BEND)
PRO_E_BEND_RELIEF_LENGTH_TYPE     
PRO_E_BEND_RELIEF_DEPTH          Depth                       See Note 7
PRO_E_BEND_RELIEF_LENGTH_TYPE     Relief Length type    ProBendRlfLengthType(See ProSmtFlangeWall.h)
PRO_E_BEND_RELIEF_LENGTH          Relief Length value   PRO_VALUE_TYPE_DOUBLE

PRO_E_EDIT_BEND_RELIEF_TABLE     Bend Reliefs List           See Note 8
PRO_E_BEND_RELIEF_RMV_SETTINGS   Removal Settings            See Note 8
PRO_E_BEND_RELIEF_VERTEX         Bend Relief Vertex          See Note 8
PRO_E_BEND_RELIEF_RMV_SIDES      Bounding Sides              See Note 8
PRO_E_BEND_RELIEF_RMV_DEFAULT    Default Removal             See Note 8
PRO_E_BEND_RELIEF_RMV_METHOD     Removal Method              See Note 8  ProBendRlfRmvMethod
PRO_E_BEND_RELIEF_RMV_REF_TYPE   Removal Reference           See Note 8  ProBendRlfRmvRefType
PRO_E_BODY                     Body options              See Note 10 in ProSmtEditCornerSeam.h
===============================================================================

(4) Mapping Table

-------------------------------------------------------------------------------
 Element Name                    Comment
-------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE               Mandatory
PRO_E_STD_FEATURE_NAME           Mandatory
PRO_E_EDIT_BEND_RELIEF           Mandatory
PRO_E_EDIT_BEND_RELIEF_SEL_MODE  Mandatory
PRO_E_EDIT_BEND_RELIEF_GEOMS     See Note 3
PRO_E_EDIT_BEND_RELIEF_SHAPE     Mandatory
PRO_E_BEND_RELIEF_TYPE           Mandatory
PRO_E_BEND_RELIEF_WIDTH          See Note 5
PRO_E_BEND_RELIEF_DEPTH_TYPE     See Note 6
PRO_E_BEND_RELIEF_DEPTH          See Note 7
PRO_E_BEND_RELIEF_LENGTH_TYPE    Mandatory 
PRO_E_BEND_RELIEF_LENGTH         See Note 9
PRO_E_EDIT_BEND_RELIEF_TABLE     See Note 8
PRO_E_BEND_RELIEF_RMV_SETTINGS   See Note 8
PRO_E_BEND_RELIEF_VERTEX         See Note 8
PRO_E_BEND_RELIEF_RMV_SIDES      See Note 8
PRO_E_BEND_RELIEF_RMV_DEFAULT    See Note 8
PRO_E_BEND_RELIEF_RMV_METHOD     See Note 8
PRO_E_BEND_RELIEF_RMV_REF_TYPE   See Note 8
PRO_E_BODY                       See Note 10 in ProSmtEditCornerSeam.h
===============================================================================

(5) Notes

  Note-1  : Edit Bend Relief feature name. Default is "EDIT_BEND_RELIEF".

  Note-2  : Selection Mode might be
            PRO_SMT_RECOGNITION_MANUAL_SEL or PRO_SMT_RECOGNITION_AUTO_SEL.

  Note-3  : Bend Relief Geometry is unnecessary when Selection Type is
            PRO_SMT_RECOGNITION_AUTO_SEL and it is mandatory otherwise.
	    Existing bend reliefs, surfaces, intent surfaces, thickness
            edges or bend edge vertexes can be selected.
            Side surfaces have to belong to recognizable bend reliefs.
            Thickness edges have to exit bend edge vertexes. Thickness edges
            can not be used if a Bend Relief or a side surface can be selected.
            Vertexes can not be used if a Bend Relief, a side surface or
            a thickness edge can be selected.

  Note-4  : Type might be PRO_BEND_RLF_RIP, PRO_BEND_RLF_RECTANGULAR
            or PRO_BEND_RLF_OBROUND.

  Note-5  : Width is mandatory when Type is not PRO_BEND_RLF_RIP.
            Positive non zero values only are allowed.
  Note-6  : Depth Type is mandatory when Type is not PRO_BEND_RLF_RIP.
            It might be PRO_BEND_RLF_DEPTH_BLIND, PRO_BEND_RLF_DEPTH_UP_TO_BEND
            or PRO_BEND_RLF_DEPTH_TAN_TO_BEND.
	    PRO_BEND_RLF_DEPTH_TAN_TO_BEND is valid
            when Type is PRO_BEND_RLF_OBROUND.
  Note-7  : Depth is mandatory when Depth Type is PRO_BEND_RLF_DEPTH_BLIND.
            Positive or zero values only are allowed.
            Depth is measured from a bend edge.

  Note-8  : For internal usage only.

  Note-9  :  Length is mandatory when Length Type is PRO_BEND_RLF_LENGTH_BLIND.
            Positive or zero values only are allowed.

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

typedef enum
{
  PRO_BR_RMV_METHOD_NOT_DEF     = -1,
  PRO_BR_RMV_METHOD_NONE        = 1,
  PRO_BR_RMV_METHOD_SAME        = 2,
  PRO_BR_RMV_METHOD_TANG        = 4,
  PRO_BR_RMV_METHOD_LINEAR      = 8

} ProBendRlfRmvMethod;

typedef enum
{
  PRO_BR_RMV_REF_NOT_DEF                = -1,
  PRO_BR_RMV_REF_UP_TO_BEND_SIDE        = 64,
  PRO_BR_RMV_REF_UP_TO_BEND_START       = 128,
  PRO_BR_RMV_REF_UP_TO_BEND_AXIS        = 256,
  PRO_BR_RMV_REF_UP_TO_BEND_END         = 512,
  PRO_BR_RMV_REF_UP_TO_BEND_APEX        = 1024

} ProBendRlfRmvRefType;


PRO_END_C_DECLS
#endif