#ifndef PRODRAFT_H
#define PRODRAFT_H
/*
   Creo Parametric TOOLKIT declarations related to draft feature.
*/



#include <ProToolkit.h>
#include <ProDirection.h>

PRO_BEGIN_C_DECLS


/*****************************************************************************

Feature element tree

PRO_E_FEATURE_TREE
     |
     |--PRO_E_FEATURE_TYPE
     |
     |--PRO_E_STD_FEATURE_NAME
     |
     |--PRO_E_DRAFT_TWEAK_OR_INTERSEC
     |
     |--PRO_E_DRAFT_EXTEND
     |
     |--PRO_E_DRAFT_SPLIT
     |
     |--PRO_E_STD_SURF_COLLECTION_APPL
     |
     |--PRO_E_DIRECTION_COMPOUND
     |
     |--PRO_E_DRAFT_CONSTANT_OR_VARIABLE
     |
     |--PRO_E_STD_CURVE_COLLECTION_APPL
     |
     |--PRO_E_DRAFT_SPLIT_GEOM
     |
     |--PRO_E_STD_SECTION
     |  |--PRO_E_SEC_USE_SKETCH
     |
     |--PRO_E_DRAFT_INCLUDE_TANGENT 
     |
     |--PRO_E_DRAFT_SIDE_1
     |  |--PRO_E_DRAFT_NEUTRAL_OBJECT_TYPE_1
     |  |--PRO_E_DRAFT_NEUTRAL_PLANE_1
     |  |--PRO_E_STD_CURVE_COLLECTION_APPL
     |  |--PRO_E_DRAFT_DEPENDENT_1
     |  |--PRO_E_DRAFT_ANGLE_1
     |  |--PRO_E_DRAFT_ANGLES
     |  |  |--PRO_E_DRAFT_ANG_PNT
     |  |     |--PRO_E_STD_POINT_COLLECTION_APPL
     |  |     |--PRO_E_DRAFT_ANGLE
     |  |
     |  |--PRO_E_DRAFT_NEUTRAL_QUILT_1
     |
     |--PRO_E_DRAFT_SIDE_2
        |--PRO_E_DRAFT_NEUTRAL_OBJECT_TYPE_2
        |--PRO_E_DRAFT_NEUTRAL_PLANE_2
        |--PRO_E_STD_CURVE_COLLECTION_APPL
        |--PRO_E_DRAFT_DEPENDENT_2
        |--PRO_E_DRAFT_ANGLE_2
        |--PRO_E_DRAFT_ANGLES
        |  |--PRO_E_DRAFT_ANG_PNT
        |  |  |--PRO_E_STD_POINT_COLLECTION_APPL
        |  |  |--PRO_E_DRAFT_ANGLE
        |   
        |--PRO_E_DRAFT_NEUTRAL_QUILT_2

Feature elements table

-------------------------------------------------------------------------------------
Element Id                         Element Name              Data Type
-------------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE                 Feature Type             PRO_VALUE_TYPE_INT (PRO_FEAT_DRAFT)
PRO_E_STD_FEATURE_NAME             Feature Name             PRO_VALUE_TYPE_WSTRING
PRO_E_DRAFT_TWEAK_OR_INTERSEC      Tweak or Intersect       PRO_VALUE_TYPE_INT 
				    - See Note 1. 
PRO_E_DRAFT_EXTEND                 Extend                   PRO_VALUE_TYPE_INT
				    - See Note 2. 
PRO_E_STD_SURF_COLLECTION_APPL     Drafted Surfaces         PRO_VALUE_TYPE_SELECTION
				    - Refer ProSrfcollection.h

PRO_E_DRAFT_SPLIT                  Split                    PRO_VALUE_TYPE_INT
PRO_E_DIRECTION_COMPOUND           Direction Utility        Compound
				    - See ProDirection.h
PRO_E_DRAFT_CONSTANT_OR_VARIABLE   Constant or Variable     PRO_VALUE_TYPE_INT
PRO_E_STD_CURVE_COLLECTION_APPL    Exclude Loop (optional)  PRO_VALUE_TYPE_SELECTION
                                   Draft hinge(s) 
				    - See ProCrvcollection.h 

PRO_E_STD_SECTION                  Split Sketch (optional)  Compound
				    - See ProStdSection.h
PRO_E_SEC_USE_SKETCH               Split Sketch (optional)  PRO_VALUE_TYPE_SELECTION
PRO_E_DRAFT_SPLIT_GEOM             Split Geom (optional)    PRO_VALUE_TYPE_SELECTION
PRO_E_DRAFT_INCLUDE_TANGENT        Include Tangent          PRO_VALUE_TYPE_INT

PRO_E_DRAFT_SIDE_1                 1st draft's side         Compound 
PRO_E_DRAFT_NEUTRAL_OBJECT_TYPE_1  Type of Draft hinge      PRO_VALUE_TYPE_INT
PRO_E_DRAFT_NEUTRAL_PLANE_1        Draft hinge              PRO_VALUE_TYPE_SELECTION
PRO_E_DRAFT_DEPENDENT_1            Dependence               PRO_VALUE_TYPE_INT
PRO_E_DRAFT_ANGLE_1                Draft Angle (constant)   PRO_VALUE_TYPE_DOUBLE
PRO_E_DRAFT_SIDE_2                 1st draft's side         Compound 
PRO_E_DRAFT_NEUTRAL_OBJECT_TYPE_2  Typr of Draft hinge      PRO_VALUE_TYPE_INT
PRO_E_DRAFT_NEUTRAL_PLANE_2        Draft hinge              PRO_VALUE_TYPE_SELECTION
PRO_E_DRAFT_DEPENDENT_2            Dependence               PRO_VALUE_TYPE_INT
PRO_E_DRAFT_ANGLE_2                Draft Angle (constant)   PRO_VALUE_TYPE_DOUBLE 
PRO_E_DRAFT_ANGLES                 Draft Angles and Points  Array
PRO_E_DRAFT_ANG_PNT                Draft Angle and Point    Compound
PRO_E_STD_POINT_COLLECTION_APPL    Point for Angle          PRO_VALUE_TYPE_SELECTION
				    - See ProCrvcollection.h 

PRO_E_DRAFT_ANGLE                  Draft angle (variable)   PRO_VALUE_TYPE_DOUBLE 

PRO_E_DRAFT_NEUTRAL_QUILT_1
PRO_E_DRAFT_NEUTRAL_QUILT_2        Hinge quilt              PRO_VALUE_TYPE_SELECTION     
-------------------------------------------------------------------------------------


Table Draft 1 : Common elements and their values

 ---------------------------------------------------------------------
 |      Element ID 			  Correponding enum          |
 |-------------------------------------------------------------------|
 |  PRO_E_DRAFT_TWEAK_OR_INTERSEC 	  ProDraftTweakOrIntsctOpts  |
 |  PRO_E_DRAFT_EXTEND			  ProDraftExtendOpts         |
 |  PRO_E_DRAFT_SPLIT			  ProDraftSplitOpts          |
 |  PRO_E_DRAFT_CONSTANT_OR_VARIABLE	  ProDraftConstOrVarOpts     |
 |  PRO_E_DRAFT_INCLUDE_TANGENT		  ProDraftIncludeTangentOpts |
 |  PRO_E_DRAFT_NEUTRAL_OBJECT_TYPE_1/_2  ProDraftHingeType;	     |
 |  PRO_E_DRAFT_DEPENDENT_1/_2		  ProDraftDependenceOpts     |
 ---------------------------------------------------------------------


 Notes :
 ******

Note 1. PRO_E_DRAFT_TWEAK_OR_INTERSEC option is available for features created 
	Pro/E Version prior to WildFire 2.0. 

Note 2. PRO_E_DRAFT_EXTEND - For features created using Pro/E Version prior to 
        WildFire 2.0 - is available only for 
        PRO_E_DRAFT_TWEAK_OR_INTERSEC ==  PRO_DRAFT_UI_INTERSECT

Note 3. PRO_E_DRAFT_DEPENDENT_1 / _2 :: control whether corresponding side 
	is drafted. Depends upon the type of Draft hinge the 
	PRO_E_STD_CURVE_COLLECTION_APPL or if PRO_E_DRAFT_NEUTRAL_PLANE_... 
	is used for Draft hinge.


*/     


/* Include Tangent  :: PRO_E_DRAFT_INCLUDE_TANGENT */
typedef enum  
{
 PRO_DRAFT_UI_NOT_INC_TANG = 0,  /* Not include tangrnts */
 PRO_DRAFT_UI_INC_TANG = 1  /* Include tangrnts */
} ProDraftIncludeTangentOpts;

/* Constant or Variable :: PRO_E_DRAFT_CONSTANT_OR_VARIABLE  */
typedef enum 
{
 PRO_DRAFT_UI_VARIABLE = 0, /* Variable */
 PRO_DRAFT_UI_CONSTANT = 1 /* Constant */
} ProDraftConstOrVarOpts;

/* Tweak or Intersect :: PRO_E_DRAFT_TWEAK_OR_INTERSEC */
typedef enum 
{
 PRO_DRAFT_UI_TWEAK = 0,             /* Tweak */
 PRO_DRAFT_UI_INTERSECT = 1         /* Intersect */
} ProDraftTweakOrIntsctOpts;

/* Extend :: PRO_E_DRAFT_EXTEND */
typedef enum 
{
 PRO_DRAFT_UI_NO_EXTEND = 0,  /* Intersect with Extend */
 PRO_DRAFT_UI_EXTEND =   1         /* Intersect with Extend */
} ProDraftExtendOpts;


/* Split :: PRO_E_DRAFT_SPLIT */
typedef enum 
{
 PRO_DRAFT_UI_SPLIT_NONE = 0,   /* No Split */
 PRO_DRAFT_UI_SPLIT_NEUT = 1,   /* Split on Draft hinge */
 PRO_DRAFT_UI_SPLIT_SURF = 2,   /* Split at Surface */
 PRO_DRAFT_UI_SPLIT_SCTCH = 3  /* Split at Sketch */
} ProDraftSplitOpts;

/* Dependence :: PRO_E_DRAFT_DEPENDENT_1 / _2 */
typedef enum 
{
 PRO_DRAFT_UI_INDEPENDENT = 0,  /* Side drafted independently */ 
 PRO_DRAFT_UI_DEPENDENT = 1,    /* Side drafted dependently */ 
 PRO_DRAFT_UI_NONE = 2         /* Side is not drafted */
} ProDraftDependenceOpts;

/* Type of Draft hinge :: PRO_E_DRAFT_NEUTRAL_OBJECT_TYPE_1 / _2 */
typedef enum 
{
 PRO_DRAFT_UI_NO_NEUT = 0,      /* None, use draft hinge for an other side */
 PRO_DRAFT_UI_PLANE = 1,        /* Plane */
 PRO_DRAFT_UI_CURVE = 2,        /* Curve */
 PRO_DRAFT_UI_QUILT = 3
} ProDraftHingeType;   

PRO_END_C_DECLS

#endif