#ifndef PRO_SOLIDIFY_H
#define PRO_SOLIDIFY_H

/*
   Creo Parametric TOOLKIT declarations related to Solidify feature.
*/



#include <ProToolkit.h>
#include <ProExtrude.h>

PRO_BEGIN_C_DECLS

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

(1) Feature element tree

   PRO_E_FEATURE_TREE
      |
      |-- PRO_E_FEATURE_TYPE
      |
      |-- PRO_E_FEATURE_FORM
      |
      |-- PRO_E_PATCH_QUILT
      |
      |-- PRO_E_PATCH_TYPE
      |
      |-- PRO_E_PATCH_MATERIAL_SIDE
      |
      |-- PRO_E_IS_SMT_CUT
      |
      |-- PRO_E_SMT_CUT_NORMAL_DIR
      |
      |-- PRO_E_STD_FEATURE_NAME

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

(2) Feature elements table

-------------------------------------------------------------------------------
 Element Id                  Element Name           Data Type
-------------------------------------------------------------------------------
 PRO_E_FEATURE_TYPE          Feature Type           PRO_VALUE_TYPE_INT         
 PRO_E_FEATURE_FORM          Feature Form           PRO_VALUE_TYPE_INT         
 PRO_E_PATCH_QUILT           Reference              PRO_VALUE_TYPE_SELECTION
 PRO_E_PATCH_TYPE            Solidify Type          PRO_VALUE_TYPE_INT
 PRO_E_PATCH_MATERIAL_SIDE   Material Side          PRO_VALUE_TYPE_INT
 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_STD_FEATURE_NAME      Feature Name           PRO_VALUE_TYPE_WSTRING
===============================================================================

(3) Element Values Table

-------------------------------------------------------------------------------
 Element Id                  Element Name         Valid Values                 
-------------------------------------------------------------------------------
 PRO_E_FEATURE_TYPE          Feature Type         See Note-1
 PRO_E_FEATURE_FORM          Feature Form         See Note-2
 PRO_E_PATCH_QUILT           Reference            PRO_QUILT
                                                   or PRO_DATUM_PLANE
 PRO_E_PATCH_TYPE            Solidify Type        See Note-3
 PRO_E_PATCH_MATERIAL_SIDE   Material Side        ProSolidifySideOption
 PRO_E_IS_SMT_CUT            Is Smt Cut           See Note-4
 PRO_E_SMT_CUT_NORMAL_DIR    Normal Direction     See Note-5
 PRO_E_STD_FEATURE_NAME      Feature Name         See Note-6
===============================================================================

(4) Mapping Table

-------------------------------------------------------------------------------
 Variation                         Element Name                Comment
-------------------------------------------------------------------------------
 All types                         PRO_E_FEATURE_TYPE          Mandatory
                                   PRO_E_FEATURE_FORM          Mandatory
                                   PRO_E_PATCH_QUILT           Mandatory
                                   PRO_E_PATCH_TYPE            Optional(Note-3)
                                   PRO_E_PATCH_MATERIAL_SIDE   Optional
                                   PRO_E_IS_SMT_CUT            Optional(Note-4)
                                   PRO_E_SMT_CUT_NORMAL_DIR    Optional(Note-5)
                                   PRO_E_STD_FEATURE_NAME      Optional(Note-6)
===============================================================================

(5) Notes

   Note-1 : PRO_E_FEATURE_TYPE can be PRO_FEAT_PROTRUSION 
                              or PRO_FEAT_CUT 
                              or PRO_FEAT_PATCH
                              or PRO_FEAT_CUT_SMT ( only in sheetmetal parts ).

   Note-2 : PRO_E_FEATURE_FORM can be :
            PRO_USE_SURFS if PRO_E_FEATURE_TYPE is PRO_FEAT_PROTRUSION 
                                                    or PRO_FEAT_CUT
                                                    or PRO_FEAT_CUT_SMT
            PRO_NOTYPE if PRO_E_FEATURE_TYPE is PRO_FEAT_PATCH

   Note-3 : This element is optional. If present this element should
            have same value as PRO_E_FEATURE_TYPE except the case 
            of PRO_FEAT_CUT_SMT. For PRO_FEAT_CUT_SMT this element
            has the value PRO_FEAT_CUT and the element
            PRO_E_IS_SMT_CUT has the value PRO_B_TRUE.
          
   Note-4 : This element is applicable only in sheetmetal parts.
            Controls cut type, SMT or SOLID.
            PRO_B_TRUE for SMT cut type.

   Note-5 : This element is applicable only in sheetmetal parts.
            SMT Cut geometry driving surface.
            This element can be PRO_SMT_CUT_DRVSIDE_GREEN for normal to 
            Driven Surface or PRO_SMT_CUT_DRVSIDE_WHITE for normal to
            Offset Surface.
            ProSmtCutNormDir.

   Note-6 : Solidify feature name.
            Default value is:
              "PROTRUSION" if PRO_E_FEATURE_TYPE is PRO_FEAT_PROTRUSION
              "CUT"        if PRO_E_FEATURE_TYPE is PRO_FEAT_CUT
              "PATCH"      if PRO_E_FEATURE_TYPE is PRO_FEAT_PATCH
              
=============================================================================*/

/* 
(6) Enum Declarations 
*/

/* ==================== */
/* Side options of Solidify: */
/* ==================== */

typedef enum _ProSolidifySideOption
{
 PRO_SOLIDIFY_SIDE_ONE     = -1,
 PRO_SOLIDIFY_SIDE_TWO     = 1
} ProSolidifySideOption;


PRO_END_C_DECLS
#endif /* PRO_SOLIDIFY_H */