#ifndef PRO_BOOLEANBODIES_H
#define PRO_BOOLEANBODIES_H



#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_BOOLEAN_TYPE
	 |
	 |--PRO_E_TARGET_BODY
	 |
	 |--PRO_E_TOOL_BODIES
	 |
	 |--PRO_E_KEEP_TOOLS
         |
         |--PRO_E_IS_SMT_CUT
         |
         |--PRO_E_SMT_CUT_NORMAL_DIR

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

(2) Feature elements table

-------------------------------------------------------------------------------
 Element Id                Element Name       Data Type                 Valid Values
-------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE         Feature Type       PRO_VALUE_TYPE_INT        Note-1
PRO_E_STD_FEATURE_NAME     Feature name       PRO_VALUE_TYPE_WSTRING    Note-2
PRO_E_BOOLEAN_TYPE         Operation type     PRO_VALUE_TYPE_INT        Note-3 (ProBooleanbodiesTypeOption)
PRO_E_TARGET_BODY          Modified bodies    PRO_VALUE_TYPE_SELECTION  Note-4
PRO_E_TOOL_BODIES          Modifying bodies   PRO_VALUE_TYPE_SELECTION  Note-5
PRO_E_KEEP_TOOLS           Keep body          PRO_VALUE_TYPE_INT        Note-6 (ProBooleanbodiesKeepBodyOption)
PRO_E_IS_SMT_CUT           Normal Smt Cut     PRO_VALUE_TYPE_INT        Note-7
PRO_E_SMT_CUT_NORMAL_DIR   Normal Direction   PRO_VALUE_TYPE_INT        Note-8 (ProSmtCutNormDir)

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

(3) Notes
   Note-1 : PRO_FEAT_BOOLEANBODIES

   Note-2 : Combine boolean body feature name.
			Default value depends on the operation type:
			Body Merge , Body Intersect or Body Subtract.
		
   Note-3 : boolean operation type options: Body Merge ( MERGE_BOOL_TYPE ),
			Body Intersect ( INTERSECT_BOOL_TYPE ),
			Body Subtract ( SUBTRACT_BOOL_TYPE ).

   Note-4 : References to modified body/bodies.
			valid selection refernce is from type PRO_BODY only.
			This is a mandatory element, could be filled with single body
			(MERGE_BOOL_TYPE or INTERSECT_BOOL_TYPE) or multiple bodies
			(SUBTRACT_BOOL_TYPE).
			In case of multiple bodies, please use ProElementReferencesSet().

   Note-5 : References to modifying body/bodies.
			valid selection refernce is from type PRO_BODY only.
			This is a mandatory element, could be filled with single body
			(SUBTRACT_BOOL_TYPE) or multiple bodies
			(MERGE_BOOL_TYPE or INTERSECT_BOOL_TYPE).

   Note-6 : Keep body options: available only when the boolean type is 
            SUBTRACT_BOOL_TYPE.
            KEEP_TOOL_NO (default) will delete the modifying bodies, 
            KEEP_TOOL_YES will keep the modifying body.

   Note-7 : This element is applicable only in sheetmetal parts.
            Controls cut type, SMT or SOLID.  PRO_B_TRUE for SMT cut type.

   Note-8 : 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.


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


/* ==================== */
/* Type options of combine boolean body: */
/* ==================== */

typedef enum
{
	PRO_MERGE_BOOL_TYPE = 1,
	PRO_INTERSECT_BOOL_TYPE = 2,
	PRO_SUBTRACT_BOOL_TYPE = 3
} ProBooleanbodiesTypeOption;

/* ===================== */
/* Keep body for combine boolean body: */
/* ===================== */

typedef enum
{
	PRO_KEEP_TOOL_NO = 0,
	PRO_KEEP_TOOL_YES = 1
} ProBooleanbodiesKeepBodyOption;



PRO_END_C_DECLS
#endif /* PRO_BOOLEANBODIES_H */