#ifndef PROREMOVESURFH
#define PROREMOVESURFH



#include <ProToolkit.h>
#include <ProExclCntrs.h>

PRO_BEGIN_C_DECLS

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

(1) Feature element tree

   PRO_E_FEATURE_TREE
      |
      |
      |-- PRO_E_FEATURE_TYPE
      |
      |-- PRO_E_STD_FEATURE_NAME
      |
      |-- PRO_E_RM_SURF_REF_TYPE
      |
      |-- PRO_E_RM_SURF_ATTACH_TYPE
      |
      |-- PRO_E_RM_SURF_SRF_REFS
      |    |
      |    |-- PRO_E_STD_SURF_COLLECTION_APPL
      |    |
      |    |-- PRO_E_STD_EXCL_CNTRS
      |    |    |
      |    |    |-- PRO_E_STD_EXCL_CNTRS_ONE_CNTR
      |    |         |
      |    |         |-- PRO_E_STD_EXCL_CNTR_SRF_REF      
      |    |         |
      |    |         |-- PRO_E_STD_EXCL_CNTR_EDGE_REF      
      |    |
      |    |-- PRO_E_KEEP_REMOVED_SRFS_OPT
      |    
      |-- PRO_E_RM_SURF_CRV_REFS
      |    |
      |    |-- PRO_E_STD_CURVE_COLLECTION_APPL      
      |
      |-- PRO_E_RM_SURF_LEAVE_OPEN_OPT
      |
      |-- PRO_E_RM_SURF_AUTO_SPLIT_SRF
      |
      |-- PRO_E_RM_SURF_MAINTAIN_TOPO
     
===============================================================================

(2) Feature elements table

---------------------------------------------------------------------------------------------------
Element Id                     Element Name                  Data Type                 Valid Values
---------------------------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE                Feature Type               PRO_VALUE_TYPE_INT        PRO_FEAT_RM_SURF
PRO_E_STD_FEATURE_NAME            Feature Name               PRO_VALUE_TYPE_WSTRING    Wide character string
PRO_E_RM_SURF_REF_TYPE            Reference type             PRO_VALUE_TYPE_INT        Note-1
PRO_E_RM_SURF_ATTACH_TYPE         Attachment type            PRO_VALUE_TYPE_INT        Note-2
PRO_E_RM_SURF_SRF_REFS            Surface references         Compound                  Note-3
PRO_E_STD_SURF_COLLECTION_APPL    Exclude surfaces           PRO_VALUE_TYPE_SELECTION  Note-4
PRO_E_STD_EXCL_CNTRS              Exclude loop               Array                     Note-5
PRO_E_RM_SURF_CRV_REFS            Curve-chain references     Compound                  Note-6
PRO_E_STD_CURVE_COLLECTION_APPL   Chains to remove           PRO_VALUE_TYPE_SELECTION  Note-7
PRO_E_KEEP_REMOVED_SRFS_OPT       Keep removed surfaces      PRO_VALUE_TYPE_BOOLEAN
PRO_E_RM_SURF_LEAVE_OPEN_OPT      Leave open                 PRO_VALUE_TYPE_BOOLEAN
PRO_E_RM_SURF_AUTO_SPLIT_SRF      Auto split shape surfaces  PRO_VALUE_TYPE_BOOLEAN
PRO_E_RM_SURF_MAINTAIN_TOPO       Maintain Solution Topology PRO_VALUE_TYPE_BOOLEAN    Note-8
===============================================================================

(3) Notes

   Note-1 : Value type is ProRmSurfRefType. The value of this element determines which
            references compound (PRO_E_RM_SURF_SRF_REFS/PRO_E_RM_SURF_CRV_REFS) is visible.
   
   Note-2 : Value type is ProRmSurfAttachType. The value of this element determines whether
            the geometry of the feature will created as a separate quilt or will be attached   
            to the selected surface/quilt.         
   
   Note-3 : Compound of surface references. 
            This element is required if PRO_E_RM_SURF_REF_TYPE is PRO_RM_SURF_SRF_REF.
   
   Note-4 : Select the surfaces to be removed from the part. 
            Multiple selection allowed. This element is required provided 
            PRO_E_RM_SURF_SRF_REFS compound is visible. See Note-1.
   
   Note-5 : Array of excluded contours. Optional. See ProExclCntrs.h
   
   Note-6 : Compound of crv references.
            This element is required if PRO_E_RM_SURF_REF_TYPE is PRO_RM_SURF_CRV_REF.

   Note-7 : Select a single closed loop of one sided edges. This element is required provided 
            PRO_E_RM_SURF_CRV_REFS compound is visible. See Note-1. 

   Note-8:  Value type is ProBool.
                                    
            If PRO_B_TRUE - The system will always attempt to generate feature geometry 
                            that is topologically similar to the solution selected by the 
                            user (The solution set using "Next/Previous" buttons in the 
                            feature UI). If such a solution cannot be created - the 
                            feature will fail.
 
            If PRO_B_FALSE  - The system will attempt to generate geometry that is
                              topologically similar to the solution selected by the user,
                              however if such a solution cannot be created - the system 
                              will attempt to generate ANY successful solution. If no
                              successful solution can be generated - the feature will 
                              fail.

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


typedef enum pro_rm_surf_ref_type
{
   PRO_RM_SURF_SRF_REF  = 0,
   PRO_RM_SURF_CRV_REF  = 1
} 
ProRmSurfRefType;

typedef enum pro_rm_surf_attach_type
{
   FM_RM_SURF_ATTACH_SAME  = 2,
   FM_RM_SURF_ATTACH_SEP   = 3
} 
ProRmSurfAttachType;

PRO_END_C_DECLS

#endif