#ifndef PRO_MERGE_H
#define PRO_MERGE_H

/*
   Creo Parametric TOOLKIT declarations related to Surface Merge feature.
*/



#include <ProToolkit.h>

PRO_BEGIN_C_DECLS

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

(1) Feature element tree

   PRO_E_FEATURE_TREE
      |
      |--PRO_E_FEATURE_TYPE
      |
      |--PRO_E_SRF_MRG_QUILT_ARR
      |   |
      |   |--PRO_E_SRF_MRG_QUILT_CMPD
      |       |
      |       |--PRO_E_SRF_MRG_QUILT_REF
      |       |--PRO_E_SRF_MRG_QUILT_SIDE
      |
      |--PRO_E_SRF_MRG_TYPE
      |--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_SRF_MRG_QUILT_ARR     Quilts                Array
 PRO_E_SRF_MRG_QUILT_CMPD    Quilt                 Compound
 PRO_E_SRF_MRG_QUILT_REF     Quilt                 PRO_VALUE_TYPE_SELECTION
 PRO_E_SRF_MRG_QUILT_SIDE    Quilt Side            PRO_VALUE_TYPE_INT
 PRO_E_SRF_MRG_TYPE          Merge Type            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          PRO_FEAT_DATUM_QUILT
 PRO_E_SRF_MRG_QUILT_ARR     Quilts                Array element
 PRO_E_SRF_MRG_QUILT_CMPD    Quilt                 Compound element
 PRO_E_SRF_MRG_QUILT_REF     Quilt                 PRO_QUILT
 PRO_E_SRF_MRG_QUILT_SIDE    Quilt Side            ProSrfMrgQltSide
 PRO_E_SRF_MRG_TYPE          Merge Type            ProSrfMrgType
 PRO_E_STD_FEATURE_NAME      Feature Name          See Note-4
===============================================================================

(4) Mapping Table

-------------------------------------------------------------------------------
 Element Name                                      Comment
-------------------------------------------------------------------------------
 PRO_E_FEATURE_TYPE                                Mandatory
 PRO_E_SRF_MRG_QUILT_ARR                           Array element (Note-1)
 PRO_E_SRF_MRG_QUILT_CMPD                          Compound element
 PRO_E_SRF_MRG_QUILT_REF                           Mandatory
 PRO_E_SRF_MRG_QUILT_SIDE                          Optional (Note-2)
 PRO_E_SRF_MRG_TYPE                                Optional (Note-2, Note-3)
 PRO_E_STD_FEATURE_NAME                            Optional (Note-4)
===============================================================================

(5) Notes

   Note-1 : Must have at least two elements to create a feature.

   Note-2 : Unavailible when the "Quilts" array contains more than 2 elements.

   Note-3 : Default Merge Type is PRO_MRG_TYPE_INTERSECT.

   Note-4 : Merge feature name.
            Default value is "SURFACE_MERGE".

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

/*
(6) Enum Declarations
*/

/* ==================== */
/* Merge Type Options   */
/* ==================== */

typedef enum pro_srf_mrg_type
{
   PRO_SRF_MRG_JOIN   = 1,
   PRO_SRF_MRG_INTSCT = 2
} ProSrfMrgType;

/* ==================== */
/* Side options of Merge: */
/* ==================== */

typedef enum pro_srf_mrg_qlt_side
{
   PRO_SRF_MRG_QLT_SIDE_1 =  1,
   PRO_SRF_MRG_QLT_SIDE_2 = -1
} ProSrfMrgQltSide;


/*=============================================================================
  Legacy Surface Merge element tree.
=============================================================================*/
/*=============================================================================

(1) Feature element tree

   PRO_E_FEATURE_TREE
      |
      |--PRO_E_FEATURE_TYPE
      |
      |-- PRO_E_SRF_MRG_PRNT_QLT
      |
      |-- PRO_E_SRF_MRG_ADTL_QLT
      |
      |-- PRO_E_SRF_MRG_TYPE
      |
      |-- PRO_E_SRF_MRG_PRNT_QLT_SIDE
      |
      |-- PRO_E_SRF_MRG_ADTL_QLT_SIDE
      |
      |-- 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_SRF_MRG_PRNT_QLT      Parent Quilt          PRO_VALUE_TYPE_SELECTION
 PRO_E_SRF_MRG_ADTL_QLT      Additional Quilt      PRO_VALUE_TYPE_SELECTION
 PRO_E_SRF_MRG_TYPE          Merge Type            PRO_VALUE_TYPE_INT
 PRO_E_SRF_MRG_PRNT_QLT_SIDE Parent Quilt Side     PRO_VALUE_TYPE_INT
 PRO_E_SRF_MRG_ADTL_QLT_SIDE Additional Quilt Side 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          PRO_FEAT_DATUM_QUILT
 PRO_E_SRF_MRG_PRNT_QLT      Parent Quilt          PRO_QUILT
 PRO_E_SRF_MRG_ADTL_QLT      Additional Quilt      PRO_QUILT
 PRO_E_SRF_MRG_TYPE          Merge Type            ProSrfMrgType
 PRO_E_SRF_MRG_PRNT_QLT_SIDE Parent Quilt Side     ProSrfMrgQltSide
 PRO_E_SRF_MRG_ADTL_QLT_SIDE Additional Quilt Side ProSrfMrgQltSide
 PRO_E_STD_FEATURE_NAME      Feature Name          See Note-4
===============================================================================

(4) Mapping Table

-------------------------------------------------------------------------------
 Element Name                                        Comment
-------------------------------------------------------------------------------
 PRO_E_FEATURE_TYPE                                  Mandatory
 PRO_E_SRF_MRG_PRNT_QLT                              Mandatory
 PRO_E_SRF_MRG_ADTL_QLT                              Mandatory
 PRO_E_SRF_MRG_TYPE                                  Optional(Note-3)
 PRO_E_SRF_MRG_PRNT_QLT_SIDE                         Optional
 PRO_E_SRF_MRG_ADTL_QLT_SIDE                         Optional
 PRO_E_STD_FEATURE_NAME                              Optional(Note-4)
===============================================================================

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

PRO_END_C_DECLS
#endif /* PRO_MERGE_H */