#ifndef PROVPDDH
#define PROVPDDH



#include <ProToolkit.h>

PRO_BEGIN_C_DECLS

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

(1) Feature element tree

  PRO_E_FEATURE_TREE
      |
      |
      |-- PRO_E_FEATURE_TYPE
      |
      |-- PRO_E_STD_FEATURE_NAME
      |
      |-- PRO_E_VPDD_PULL_DIR_CMP
      |    |   
      |    |-- PRO_E_VPDD_PULL_DIR_REF
      |    |   
      |    |-- PRO_E_VPDD_PULL_DIR_FLIP
      |      
      |-- PRO_E_VPDD_SETS_ARR
      |    |   
      |    |-- PRO_E_VPDD_SET_CMP
      |         |
      |         |-- PRO_E_VPDD_HINGES_ARR
      |         |    |
      |         |    |-- PRO_E_VPDD_HINGE_CMP
      |         |         |
      |         |         |-- PRO_E_STD_CURVE_COLLECTION_APPL 
      |         |         |
      |         |         |-- PRO_E_VPDD_HINGE_FLIP 
      |         |
      |         |-- PRO_E_VPDD_SPLIT_SRFS_OPTS
      |         |     
      |         |-- PRO_E_VPDD_SPLIT_SRFS_REFS
      |         |  
      |         |-- PRO_E_VPDD_CONST_OR_VAR
      |         |
      |         |-- PRO_E_VPDD_ANGLES_AND_POINTS_ARR
      |              |
      |              |-- PRO_E_VPDD_POINT_AND_ANGLES_CMP
      |                   |
      |	                 |-- PRO_E_STD_POINT_COLLECTION_APPL  
      |                   |     
      |                   |-- PRO_E_VPDD_ANGLES_ARR
      |                        |
      |	        	             |-- PRO_E_VPDD_ONE_ANGLE_CMP
      |                             |
      |	        	                  |-- PRO_E_VPDD_ANG_VAL 
      |
      |-- PRO_E_VPDD_ATTACH_OPTS
      |
      |-- PRO_E_VPDD_EXTENT_CMP 
           |
           |-- PRO_E_VPDD_EXT_OPTS
           |
           |-- PRO_E_VPDD_EXT_LENGTH
           |
           |-- PRO_E_VPDD_EXT_REF
    
===============================================================================

(2) Feature elements table

-----------------------------------------------------------------------------------------------
Element Id                     Element Name              Data Type                    Valid Values
-----------------------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE                Feature Type           PRO_VALUE_TYPE_INT           PRO_FEAT_VPDD
PRO_E_STD_FEATURE_NAME            Feature Name           PRO_VALUE_TYPE_WSTRING       Wide character string
PRO_E_VPDD_PULL_DIR_CMP           Pull direction         Compound
PRO_E_VPDD_PULL_DIR_REF           Reference              PRO_ELEM_TYPE_MULTI_VALUE    Note-1 
PRO_E_VPDD_PULL_DIR_FLIP          Flip                   PRO_VALUE_TYPE_BOOLEAN       TRUE/FALSE 
PRO_E_VPDD_SETS_ARR               Sets                   Array
PRO_E_VPDD_SET_CMP                Set                    Compound
PRO_E_VPDD_HINGES_ARR             Hinges                 Array
PRO_E_VPDD_HINGE_CMP              Hinge                  Compound
PRO_E_STD_CURVE_COLLECTION_APPL   Chain                  PRO_VALUE_TYPE_SELECTION
PRO_E_VPDD_HINGE_FLIP             Hinge Flip             PRO_VALUE_TYPE_BOOLEAN       TRUE/FALSE
PRO_E_VPDD_SPLIT_SRFS_OPTS        Split                  PRO_VALUE_TYPE_BOOLEAN       TRUE/FALSE, Note-2
PRO_E_VPDD_SPLIT_SRFS_REFS        Splitting Surfaces     PRO_ELEM_TYPE_MULTI_VALUE    Note-3
PRO_E_VPDD_CONST_OR_VAR           Constant or variable   PRO_ELEM_TYPE_OPTION         Pro_vpdd_const_var_type, Note-4 
PRO_E_VPDD_ANGLES_AND_POINTS_ARR  Angles and points      Array
PRO_E_VPDD_POINT_AND_ANGLES_CMP   Point and angles       Compound
PRO_E_STD_POINT_COLLECTION_APPL   Point                  PRO_VALUE_TYPE_SELECTION     
PRO_E_VPDD_ANGLES_ARR             Angles                 Array                        Note-5
PRO_E_VPDD_ONE_ANGLE_CMP          Angle                  Compound
PRO_E_VPDD_ANG_VAL                Value                  PRO_VALUE_TYPE_DOUBLE        [-90:90]
PRO_E_VPDD_ATTACH_OPTS            Attachment type        PRO_ELEM_TYPE_OPTION         Pro_vpdd_attach_type
PRO_E_VPDD_EXTENT_CMP             Extent                 Compound                     Note-8
PRO_E_VPDD_EXT_OPTS               Type                   PRO_ELEM_TYPE_OPTION         Pro_vpdd_extent_type, Note-6
PRO_E_VPDD_EXT_LENGTH             Length                 PRO_VALUE_TYPE_DOUBLE        
PRO_E_VPDD_EXT_REF                Bottom Surface         PRO_VALUE_TYPE_SELECTION     Note-7
===============================================================================

(3) Notes

   Note-1 : The valid references are either a single PRO_QUILT or a single PRO_DATUM_PLANE or a single PRO_LOG_SRF or 
            multiple PRO_SURFACE references tangent to each other.
   
   Note-2 : If the node's value is FALSE the node PRO_E_VPDD_SPLIT_SRFS_REFS becomes invisible. 
            The default value is FALSE.
   
   Note-3 : The node can contain upto 2 references that are either PRO_QUILT or PRO_DATUM_PLANE. 
   
   Note-4 : If the node's value is PRO_VPDD_CONST the node PRO_E_STD_POINT_COLLECTION_APPL becomes invisible and  
            the array PRO_E_VPDD_ANGLES_AND_POINTS_ARR shall contain only a single element.          
   
   Note-5 : The size of the angles array is 1 + the number of split references. 
   
   Note-6 : If the node's value is PRO_VPDD_EXT_LENGTH the node PRO_E_VPDD_EXT_LENGTH becomes visible.
            If the node's value is PRO_VPDD_EXT_TO_SEL the node PRO_E_VPDD_EXT_REF becomes visible.
            Otherwise, the nodes PRO_E_VPDD_EXT_LENGTH and PRO_E_VPDD_EXT_REF are invisible.
    
   Note-7 : The valid references are PRO_QUILT, PRO_SURFACE, PRO_DATUM_PLANE.
   
   Note-8 : The node is visible only if PRO_E_VPDD_ATTACH_OPTS node's value is PRO_VPDD_ATTACH_NEW_QUILT.  
==============================================================================*/

typedef enum pro_vpdd_const_var_type
{
   PRO_VPDD_CONST = 0,
   PRO_VPDD_VAR   = 1
} 
Pro_vpdd_const_var_type;

typedef enum pro_vpdd_attach_type
{
   PRO_VPDD_ATTACH_NEW_QUILT     = -1,
   PRO_VPDD_ATTACH_SAME_QUILT    =  0
} 
Pro_vpdd_attach_type;

typedef enum pro_vpdd_extent_type
{
   PRO_VPDD_EXT_LENGTH        = 3,
   PRO_VPDD_EXT_TO_SEL        = 4,
   PRO_VPDD_EXT_TO_NEXT       = 5,
   PRO_VPDD_EXT_UNATTACHED    = 6
} 
Pro_vpdd_extent_type;

PRO_END_C_DECLS

#endif