#ifndef PROSMTFORM_H
#define PROSMTFORM_H

/*
   Creo Parametric TOOLKIT declarations related to SheetMetal Form feature
*/





#include <ProToolkit.h>
#include <ProSheetmetal.h>
#include <ProBodyOpts.h>

PRO_BEGIN_C_DECLS

/*****************************************************************************\

 PRO_E_FEATURE_TREE
 |
 |-PRO_E_FEATURE_TYPE
 |-PRO_E_STD_FEATURE_NAME
 |-PRO_E_GMRG_SMT_TYPE
 |-PRO_E_GMRG_FEAT_TYPE
 |-PRO_E_DSF_REF_MDL
 |   |--PRO_E_DSF_SEL_REF_MDL
 |-PRO_E_COMP_PLACE_INTERFACE
 |-PRO_E_COMPONENT_CONSTRAINTS
 |-PRO_E_GMRG_VARIED_ITEMS
 |-PRO_E_DSF_DEPENDENCY
 |-PRO_E_FORM_PUNCH_SIDE                     ( Punch Form Only )
 |-PRO_E_STD_SURF_COLLECTION_APPL
 |-PRO_E_FORM_DIE_POCKET_GEOM_CMP            ( Die Form Only )
      |--PRO_E_STD_SURF_COLLECTION_APPL
 |-PRO_E_FORM_TOOL_CSYS
 |-PRO_E_FORM_TOOL_NAME
 |-PRO_E_GMRG_FORM_AUTO_ROUNDS
 |-PRO_E_SMT_FILLET_INTERSECT
 |   |--PRO_E_SMT_FILLET_RADIUS_USEFLAG
 |   |--PRO_E_SMT_FILLET_RADIUS_SIDE
 |   |--PRO_E_SMT_FILLET_RADIUS_VALUE
 |-PRO_E_SMT_TRIM_FORM_SIDES
 |-PRO_E_BODY
 |    |
 |    |--PRO_E_BODY_USE
 |    |
 |    |--PRO_E_BODY_SELECT

Feature elements table

-------------------------------------------------------------------------------
Element Id			Element Name		Data Type
				Valid Values
-------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE		Feature Type		PRO_VALUE_TYPE_INT
				PRO_FEAT_GEN_MERGE

PRO_E_STD_FEATURE_NAME		Feature Name		PRO_VALUE_TYPE_WSTRING

PRO_E_GMRG_SMT_TYPE		Sheet Metal Form	PRO_VALUE_TYPE_INT
				See Note 1.

PRO_E_GMRG_FEAT_TYPE		Gen Merge feat type	PRO_VALUE_TYPE_INT
				ProGenMergeType. See Note 6 ( Note 2 is outdated ).

PRO_E_DSF_REF_MDL		Reference Model	compound

PRO_E_DSF_SEL_REF_MDL		Select Reference Model	PRO_VALUE_TYPE_SELECTION
				Any Part model.

PRO_E_COMP_PLACE_INTERFACE	Placement Interface compound
				See ProAsmcomp.h

PRO_E_COMPONENT_CONSTRAINTS	Placement constraints compound
				See ProAsmcomp.h

PRO_E_GMRG_VARIED_ITEMS		Inheritance Varied Items Dlg
				See ProDataShareFeat.h

PRO_E_DSF_DEPENDENCY		Dependency		PRO_VALUE_TYPE_INT
				ProDsfDependency. See Note 6 ( Note 2 is outdated).

PRO_E_FORM_PUNCH_SIDE		Creation Side		PRO_VALUE_TYPE_INT
				ProSmtSurfType. See Note 3.

PRO_E_STD_SURF_COLLECTION_APPL	Excluded Surfaces	PRO_VALUE_TYPE_SELECTION
				Standard surface collection. See Note 4.

PRO_E_FORM_DIE_POCKET_GEOM_CMP  Pocket Geometry compound
       See Note 5.

PRO_E_STD_SURF_COLLECTION_APPL Pocket Geometry PRO_VALUE_TYPE_SELECTION
   				Standard surface collection. See Note 4.

PRO_E_FORM_TOOL_CSYS		Punch Tool Csys		PRO_VALUE_TYPE_SELECTION
				Any csys from the reference model.

PRO_E_FORM_TOOL_NAME		Punch ToolName		PRO_VALUE_TYPE_WSTRING

PRO_E_GMRG_FORM_AUTO_ROUNDS	Round Sharp Edges	PRO_VALUE_TYPE_BOOLEAN
				ProBoolean

PRO_E_SMT_FILLET_INTERSECT	Intersect fillet	Compound

PRO_E_SMT_FILLET_RADIUS_USEFLAG	Use Radius		PRO_VALUE_TYPE_BOOLEAN
				ProBoolean

PRO_E_SMT_FILLET_RADIUS_SIDE	Radius Side		PRO_VALUE_TYPE_INT
				ProSmdRadType(PRO_BEND_RAD_INSIDE,
					      PRO_BEND_RAD_OUTSIDE)

PRO_E_SMT_FILLET_RADIUS_VALUE	Radius Value		PRO_VALUE_TYPE_DOUBLE

PRO_E_SMT_TRIM_FORM_SIDES       Trim Form Sides         PRO_VALUE_TYPE_INT

PRO_E_BODY                       Body options           Compound    
                                 see note 6. in ProSmtSplitArea.h
PRO_E_BODY_USE                   Body use option     PRO_VALUE_TYPE_INT        
                                 PRO_BODY_USE_SELECTED
PRO_E_BODY_SELECT                Selected body ref   PRO_VALUE_TYPE_SELECTION

-------------------------------------------------------------------------------
Note 1.
  PRO_E_GMRG_SMT_TYPE is of type ProGenMergeSmtType .

-------------------------------------------------------------------------------
Note 2.
  PRO_E_GMRG_FEAT_TYPE is related to PRO_E_DSF_DEPENDENCY.
  Two combinations of these elements are valid in a Form feature:
  PRO_GEN_MERGE_TYPE_MERGE	 & PRO_DSF_DEPENDENT	and
  PRO_GEN_MERGE_TYPE_INHERITANCE & PRO_DSF_INDEPENDENT.

-------------------------------------------------------------------------------
Note 3.
  PRO_SMT_SURF_FACE or PRO_SMT_SURF_OFFSET only are allowed
  as a value of PRO_E_FORM_PUNCH_SIDE element.

-------------------------------------------------------------------------------
Note 4.
  See ProSrfcollection.h and ProElementCollection*() API in ProElement.h
-------------------------------------------------------------------------------
Note 5.
 Element PRO_E_FORM_DIE_POCKET_GEOM_CMP is Available only if 
 ProGenMergeSmtType is of type PRO_GEN_MERGE_SMT_TYPE_FORM_DIE.

-------------------------------------------------------------------------------
Note 6.
  PRO_E_GMRG_FEAT_TYPE & PRO_E_DSF_DEPENDENCY are not related,and can be set 
  separately.
  
  PRO_E_DSF_DEPENDENCY supports PRO_DSF_UPDATE_AUTOMATICALLY,
  PRO_DSF_UPDATE_MANUALLY & PRO_DSF_NO_DEPENDENCY.

  For legacy issues, 
  PRO_DSF_UPDATE_AUTOMATICALLY = PRO_DSF_DEPENDENT
  PRO_DSF_UPDATE_MANUALLY = PRO_DSF_INDEPENDENT

  Currently, for PRO_GEN_MERGE_TYPE_MERGE , only
  PRO_DSF_UPDATE_AUTOMATICALLY is allowed.
******************************************************************************/


typedef enum ProGenMergeSmtTypes
{
  PRO_GEN_MERGE_SMT_TYPE_NOT_SMT    	= 0,
  PRO_GEN_MERGE_SMT_TYPE_FORM 		    = 1,  /* Pre Creo3 Parts for Punch */
  PRO_GEN_MERGE_SMT_TYPE_FORM_PUNCH		= 1,
  PRO_GEN_MERGE_SMT_TYPE_FORM_DIE    	= 2

} ProGenMergeSmtType;


PRO_END_C_DECLS

#endif	/* PROSMTFORM_H */