#ifndef PROTHREAD_H
#define PROTHREAD_H

/*
   Creo Parametric TOOLKIT declarations related to cosmetic thread feature.
*/



#include <ProToolkit.h>

PRO_BEGIN_C_DECLS
/*==============================================================================

(1) Feature element tree

   PRO_E_FEATURE_TREE
      |
      |--PRO_E_FEATURE_TYPE
      |
      |--PRO_E_FEATURE_FORM
      |
      |-- PRO_E_STD_FEATURE_NAME
      |
      |-- PRO_E_THRD_TYPE_OPT_NEW
      |
      |-- PRO_E_THRD_SERIES_NEW 
      |
      |-- PRO_E_THRD_SCREWSIZE_NEW
      |
      |-- PRO_E_THRD_SURF_NEW
      |
      |-- PRO_E_THRD_DIAM_NEW
      |
      |-- PRO_E_THRD_START_REF_NEW
      |
      |-- PRO_E_THRD_DEP_COMP_NEW
      |      | 
      |      |-- PRO_E_THRD_DEP_OPT_NEW
      |      |
      |      |-- PRO_E_THRD_FLIP_OPT_NEW
      |      |
      |      |-- PRO_E_THRD_DEP_VAL_NEW
      |      |
      |      |-- PRO_E_THRD_END_REF
      |
      |-- PRO_E_THRD_NOTE_PARAMS_NEW

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

(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_FEATURE_FORM          Feature Form            PRO_VALUE_TYPE_INT        Note-2  (PRO_EXTRUDE, PRO_REVOLVE)
 PRO_E_STD_FEATURE_NAME      Feature Name            PRO_VALUE_TYPE_WSTRING    Note-3
 PRO_E_THRD_TYPE_OPT_NEW     Thread Type             PRO_VALUE_TYPE_BOOLEAN    Note-4
 PRO_E_THRD_SERIES_NEW       Thread Series           PRO_VALUE_TYPE_INT        Note-5
 PRO_E_THRD_SCREWSIZE_NEW    Screw Size              PRO_VALUE_TYPE_INT        Note-6
 PRO_E_THRD_SURF_NEW         Threaded surface        PRO_VALUE_TYPE_SELECTION  Note-7
 PRO_E_THRD_DIAM_NEW         Thread diameter         PRO_VALUE_TYPE_DOUBLE     Note-8
 PRO_E_THRD_START_REF_NEW    Thread start reference  PRO_VALUE_TYPE_SELECTION  Note-9
 PRO_E_THRD_DEP_COMP_NEW     Thread Depth            Compound                  
 PRO_E_THRD_DEP_OPT_NEW      Thread depth option     PRO_VALUE_TYPE_BOOLEAN    Note-10
 PRO_E_THRD_FLIP_OPT_NEW     Thread depth direction  PRO_VALUE_TYPE_INT        Note-11  (ProThreadFlip)
 PRO_E_THRD_DEP_VAL_NEW      Thread Depth Value      PRO_VALUE_TYPE_DOUBLE     Note-12
 PRO_E_THRD_END_REF          Thread depth reference  PRO_VALUE_TYPE_SELECTION  Note-13
 PRO_E_THRD_NOTE_PARAMS_NEW  Parameters              PRO_VALUE_TYPE_POINTER    Note-14

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

(3) Notes

   Note-1  : PRO_FEAT_THREAD. Mandatory.

   Note-2  : PRO_EXTRUDE or PRO_REVOLVE depending on Threaded surface. Optional.

   Note-3  : Cosmetic Thread feature name.
             Default value is "COSMETIC_THREAD". Optional.

   Note-4  : FALSE for simple thread, TRUE for standard thread. Optional.
   
   Note-5  : From the *.hol files, different THREAD_SERIES information are gathered
             and a list is formed. The current index to the list stored in this element.

   Note-6  : Stores the index to the screw_size list. The screw_size list extracted from the
             *.hol corresponding to the thread series. Optional.

   Note-7  : Stores threaded surface. Mandatory.

   Note-8  : If the referenced threaded surface is conical, [0.0, diam/4],
             where "diam" is the estimate largest diameter of the cone;
             otherwise, [0.1, MAX_DIM_VALUE]. Optional. 

   Note-9  : Stores start thread location. Mandatory.

   Note-10 : FALSE for "Blind" depth option, TRUE for "To Selected" depth option. Optional.

   Note-11 : The flip direction of type ProThreadFlip. Optional.

   Note-12 : [0.1, MAX_DIM_VALUE] when PRO_E_THRD_DEP_OPT_NEW is FALSE. Optional.
             The node is invisible if PRO_E_THRD_DEP_OPT_NEW is TRUE.
   
   Note-13 : Stores the upto reference when PRO_E_THRD_DEP_OPT_NEW is TRUE,
             The node is invisible if PRO_E_THRD_DEP_OPT_NEW is FALSE.
             Mandatory when PRO_E_THRD_DEP_OPT_NEW is TRUE.

   Note-14 : ProThreadParams. Optional.

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

/* PRO_E_THRD_FLIP_OPT_NEW */
typedef enum pro_thd_flip
{
   PRO_COSTHREAD_THD_FLIP_OPT_FLIP = -1,
   PRO_COSTHREAD_THD_FLIP_OPT_NORM = 1
}ProThreadFlip;

typedef struct named_param ** ProThreadParams; 

PRO_END_C_DECLS
#endif