#ifndef PRONCSEQ_H
#define PRONCSEQ_H

/* ProNcseq.h:  this include file contains the following details of NC Sequences

                 * NC Sequence feature definition
                 * some utility functions for the NC Sequence feature
*/

#include <ProObjects.h>
#include <ProMfgoper.h>
#include <ProWcell.h>
#include <ProMfgOptions.h>




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

WARNING: This Feature element tree is deprecated and will be removed in subsequent
releases. Refer to these headers for replacement:

ProMfgFeat2xCurvTraj.h
ProMfgFeatCornerFinishing.h
ProMfgFeatFacing.h
ProMfgFeatFinishing.h
ProMfgFeatHolemaking.h
ProMfgFeatManualCycle.h
ProMfgFeatProfMilling.h
ProMfgFeatReroughing.h
ProMfgFeatRoughing.h
ProMfgFeatThreadMilling.h
ProMfgFeatTrajectory.h
ProMfgFeatTurnThread.h
ProMfgFeatTurning.h


Feature element tree
 
   PRO_E_FEATURE_TREE
     |
     |--PRO_E_FEAT_TYPE              Non-redefinable
     |
     |--PRO_E_NCSEQ_TYPE             Non-redefinable
     |
     |--PRO_E_HOLEMAKING_TYPE        Holemaking only, Non-redefinable
     |
     |--PRO_E_HOLE_CYCLE_TYPE        Holemaking only, Non-redefinable
     |
     |--PRO_E_PECK_TYPE              Holemaking only, with CYCLE_TYPE == DEEP
     |                               Non-redefinable
     |
     |--PRO_E_DRILL_MODE	     Optional element, applicable when workcell
     |				     is MILL_N_TRN Non-redefinable
     |	
     |--PRO_E_NUM_AXES               Non-redefinable, Optional element
     |
     |--PRO_E_MACH_HEAD              Optional element, applicable when workcell
     |                               is multi-axis LATHE or MILL_N_TRN
     |                               Non-redefinable
     |
     |--PRO_E_TURN_OPTION	     Non-redefinable
     |				     For turning: outside, inside and face
     |
     |--PRO_E_OPERATION
     |
     |--PRO_E_FIXTURE                 Optional element
     |
     |--PRO_E_FEAT_NAME               Optional element
     |
     |--PRO_E_COMMENTS                Optional element
     |
     |--PRO_E_TOOL
     |
     |--PRO_E_CUSTOM_CYCLE
     |
     |--PRO_E_MFG_PARAMS
     |    |
     |    |--PRO_E_MFG_PARAM
     |         |
     |         |--PRO_E_MFG_PARAM_NAME
     |         |
     |         |--PRO_E_MFG_PARAMVAL
     |
     |--PRO_E_CSYS
     |
     |--PRO_E_RETRACT
     |
     |--PRO_E_RETRACT_SURFACE
     |    |
     |    |-- PRO_E_RETRACT_SURFACE_TYPE
     |    |
     |	  |-- PRO_E_RETRACT_SURFACE_REF
     |	  |
     |	  |-- PRO_E_RETRACT_SURFACE_ORIENT
     |	  |
     |	  |-- PRO_E_RETRACT_SURFACE_VALUE
     |
     |
     |--PRO_E_VOLUME                  Required for volume milling sequences
     |
     |--PRO_E_SURFACES                Required for surface milling sequences
     |
     |--PRO_E_HOLESETS                Required for holemaking sequences
     |    |                             (see note 6 for further description)
     |    |--PRO_E_HOLESET
     |         |    
     |         |--PRO_E_HOLESET_ID
     |         |
     |         |--PRO_E_HOLESET_TYPE
     |         |
     |         |--PRO_E_HOLESET_START
     |         |    |
     |         |    |--PRO_E_HOLESET_START_TYPE
     |         |    |
     |         |    |--PRO_E_HOLESET_START_SURFACE
     |         |
     |         |--PRO_E_HOLESET_END
     |         |    |
     |         |    |--PRO_E_HOLESET_END_TYPE
     |         |    |
     |         |    |--PRO_E_HOLESET_END_MEASURE_BY
     |         |    |
     |         |    |--PRO_E_HOLESET_END_SURFACE
     |         |    |
     |         |    |--PRO_E_HOLESET_DEPTH_VALUE
     |         |    |
     |         |    |--PRO_E_HOLESET_CSINK_DIAM
     |         |    |
     |         |    |--PRO_E_HOLESET_USE_BRKOUT_DIST
     |         |
     |         |--PRO_E_HOLESET_DEPTH
     |         |    |
     |         |    |--PRO_E_HOLESET_DEPTH_TYPE
     |         |    |
     |         |    |--PRO_E_HOLESET_DEPTH_BY_TYPE
     |         |    |
     |         |    |--PRO_E_HOLESET_DEPTH_PLATES
     |         |    |    |
     |         |    |    |--PRO_E_HOLESET_DEPTH_PLATE
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_PLATE_START
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_PLATE_END
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_PLATE_DEPTH
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_PLATE_CDIAM
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_PLATE_BRKOUT
     |         |    |
     |         |    |--PRO_E_HOLESET_EDGE_BREAK
     |         | 
     |         |--PRO_E_HOLESET_CUSTOM_CYCLE_PLATES
     |         |    |
     |         |    |--PRO_E_HOLESET_CUSTOM_CYCLE_REFERENCES
     |         |    |    |
     |         |    |    |--PRO_E_HOLESET_CUSTOM_CYCLE_REF
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_CUSTOM_CYCLE_PLATE_NAME
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_CUSTOM_CYCLE_REF_OPT
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_CUSTOM_CYCLE_REF_SEL
     |         |    |         |
     |         |    |         |--PRO_E_HOLESET_CUSTOM_CYCLE_REF_Z_OFFSET
     |         |    |
     |         |    |--PRO_E_HOLESET_CUSTOM_CYCLE_VARIABLES
     |         |         |
     |         |         |--PRO_E_HOLESET_CUSTOM_CYCLE_VAR
     |         |              |
     |         |              |--PRO_E_HOLESET_CUSTOM_CYCLE_PLATE_NAME
     |         |              |
     |         |              |--PRO_E_HOLESET_CUSTOM_CYCLE_VAR_VALUE
     |         |
     |         |--PRO_E_DRILL_PART_DATA
     |         |    |
     |         |    |--PRO_E_DRILL_PARTS
     |         |    |
     |         |    |--PRO_E_AUTO_SEL_DRILL_PARTS
     |         |
     |         |--PRO_E_HOLESET_SELECTION_RULES
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_BY_TABLE
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_PNTS_ON_SURFACES
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_INDIV_PNTS
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_PNTS_BY_FEATURE
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_PROJECT_SURFACES
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_MAX_PROJECT_DIST
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_UNSEL_PNTS
     |         |    |
     |	       |    |--PRO_E_HOLESET_SEL_BY_TABLE
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_AUTO_CHAMFER
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_INDIV_AXES
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_UNSEL_AXES
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_AXIS_PATTS
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_DRILL_GROUPS
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_BY_DIAMETERS
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_BY_SURFACES
     |         |    |
     |         |    |--PRO_E_HOLESET_SEL_BY_PARAMS
     |         |         |
     |         |         |--PRO_E_HOLESET_SEL_BY_PARAM
     |         |              |
     |         |              |--PRO_E_HOLESET_SEL_PARAM_NAME
     |         |              |
     |         |              |--PRO_E_HOLESET_SEL_PARAM_VAL
     |         |              |
     |         |              |--PRO_E_HOLESET_SEL_PARAM_REL
     |         |          
     |         |--PRO_E_HOLESET_TIP_CTRL_PNT
     |         |
     |         |--PRO_E_HOLESET_START_HOLE
     |         |
     |         |--PRO_E_HOLESET_UNFLIPPED_AXES
     |         |
     |         |--PRO_E_HOLESET_FLIPPED_AXES
     |
     |--PRO_E_REF_NCSEQ
     |
     |--PRO_E_NCL_COMMANDS
     |     |
     |     |--PRO_E_NCL_COMMAND
     |
     |--PRO_E_STOCK_BOUND_COMP
     |     |
     |     |--PRO_E_STOCK_BOUND_SKETCH
     |     |
     |     |--PRO_E_STOCK_BOUND_WP_SEL
     |
     |--PRO_E_TURN_PROF_COMP
     |     |
     |     |--PRO_E_TURN_PROF_CRV
     |     |
     |     |--PRO_E_TURN_PROF_ST_EXT
     |     |
     |     |--PRO_E_TURN_PROF_EN_EXT
     |
     |--PRO_E_START
     |
     |--PRO_E_END

NC Sequence Elements Table
--------------------------------------------------------------------------------
Element Id             Element Name     Data Type             Valid Values
                                        (PRO_VALUE_TYPE)
--------------------------------------------------------------------------------
PRO_E_FEAT_TYPE       Feature type          INT           PRO_FEAT_MILL
                                                          PRO_FEAT_DRILL

PRO_E_NCSEQ_TYPE      NC Sequence Type      INT           ProNcseqType

PRO_E_HOLEMAKING_TYPE Holemaking type       INT           ProHolemakingType

PRO_E_HOLE_CYCLE_TYPE Holemaking cycle      INT           ProHolemakingCycleType
                      type

PRO_E_PECK_TYPE       Peck type             INT           ProHolemakingPeckType

PRO_E_DRILL_MODE      Drill Mode            INT           ProHolemakingMode

PRO_E_NUM_AXES        Number of axes        INT           See note 1

PRO_E_MACH_HEAD       Machine head          INT           ProMachHead

PRO_E_TURN_OPTION     turn option type	    INT		  ProTurnOptionType

PRO_E_OPERATION       Mfg operation         INT           Operation feature id

PRO_E_FIXTURE         Fixture setup         INT           Fixture setup feature
                                                          id
PRO_E_FEAT_NAME       Feature Name          WSTRING       Feature name

PRO_E_COMMENTS        Comments              WSTRING ARRAY Paragraph of text

PRO_E_TOOL            Tool                  WSTRING       Tool ID

PRO_E_CUSTOM_CYCLE    Cycle Type	    WSTRING       Customized cycle Name

PRO_E_MFG_PARAMS      Sequence params       ARRAY

PRO_E_MFG_PARAM       Mfg param             COMPOUND

PRO_E_MFG_PARAM_NAME  Mfg param name        STRING        User-visible
                                                          mfg param names
PRO_E_MFG_PARAMVAL    Mfg param value  INT/DOUBLE/WSTRING See note 2

PRO_E_CSYS            Sequence Csys         SELECTION     NC Seq Csys selection

PRO_E_RETRACT         Retraction Plane      INT           Retraction plane id

PRO_E_RETRACT_SURFACE Retraction Surface    COMPOUND      See note 9

PRO_E_RETRACT_SURFACE_TYPE                  INT           ProRetractSurfaceType

PRO_E_RETRACT_SURFACE_REF                   SELECTION     See note 9

PRO_E_RETRACT_SURFACE_ORIENT                INT           ProRetractSurfaceOrient

PRO_E_RETRACT_SURFACE_VALUE                 DOUBLE        See note 9

PRO_E_VOLUME          Volume                INT           Volume base feature id

PRO_E_SURFACES        Surfaces              POINTER       Pointer using API

PRO_E_START           Sequence start point  SELECTION     See note 3

PRO_E_END             Sequence end point    SELECTION     See note 3

PRO_E_HOLESETS        Hole Sets             ARRAY         See notes 4 and 6

PRO_E_HOLESET                               COMPOUND

PRO_E_HOLESET_ID                            INT

PRO_E_HOLESET_TYPE                          INT           ProHolesetType

PRO_E_HOLESET_START                         COMPOUND

PRO_E_HOLESET_START_TYPE		    INT		  ProDrillStartType

PRO_E_HOLESET_START_SURFACE                 SELECTION     surfaces/quilts

PRO_E_HOLESET_END                           COMPOUND

PRO_E_HOLESET_END_TYPE			    INT		  ProDrillEndType

PRO_E_HOLESET_END_MEASURE_BY                INT           ProDrillDepthByType

PRO_E_HOLESET_END_SURFACE                   SELECTION     surfaces/quilts

PRO_E_HOLESET_DEPTH_VALUE                   DOUBLE        positive numbers

PRO_E_HOLESET_CSINK_DIAM                    DOUBLE        positive numbers

PRO_E_HOLESET_USE_BRKOUT_DIST		    BOOLEAN

PRO_E_HOLESET_DEPTH                         COMPOUND

PRO_E_HOLESET_DEPTH_BY_TYPE                 INT           ProDrillDepthByType

PRO_E_HOLESET_DEPTH_TYPE                    INT           ProDrillDepthType

PRO_E_HOLESET_DEPTH_PLATES                  ARRAY

PRO_E_HOLESET_DEPTH_PLATE                   COMPOUND

PRO_E_HOLESET_PLATE_START                   SELECTION     surfaces/quilts

PRO_E_HOLESET_PLATE_END                     SELECTION     surfaces/quilts

PRO_E_HOLESET_PLATE_DEPTH                   DOUBLE        positive numbers

PRO_E_HOLESET_PLATE_CDIAM                   DOUBLE        positive numbers

PRO_E_HOLESET_PLATE_BRKOUT                  BOOLEAN

PRO_E_DRILL_PART_DATA                       COMPOUND

PRO_E_HOLESET_EDGE_BREAK                    DOUBLE        positive numbers

PRO_E_DRILL_PARTS                           SELECTION ARRAY       solids

PRO_E_AUTO_SEL_DRILL_PARTS                  BOOLEAN

PRO_E_HOLESET_SELECTION_RULES               COMPOUND

PRO_E_HOLESET_SEL_PNTS_ON_SURFACES	    SELECTION ARRAY       surfaces

PRO_E_HOLESET_SEL_INDIV_PNTS                SELECTION ARRAY       points

PRO_E_HOLESET_SEL_UNSEL_PNTS                SELECTION ARRAY       points

PRO_E_HOLESET_SEL_PNTS_BY_FEATURE	    SELECTION ARRAY    datum point featuress

PRO_E_HOLESET_SEL_PROJECT_SURFACES	    SELECTION ARRAY       surfaces

PRO_E_HOLESET_SEL_MAX_PROJECT_DIST	    DOUBLE        positive numbers

PRO_E_HOLESET_SEL_AUTO_CHAMFER              BOOLEAN

PRO_E_HOLESET_SEL_INDIV_AXES                SELECTION ARRAY       axes

PRO_E_HOLESET_SEL_UNSEL_AXES                SELECTION ARRAY       axes

PRO_E_HOLESET_SEL_AXIS_PATTS                SELECTION ARRAY       axes

PRO_E_HOLESET_SEL_DRILL_GROUPS              INT ARRAY   drill group feature ids

PRO_E_HOLESET_SEL_BY_DIAMETERS              DOUBLE ARRAY  positive numbers

PRO_E_HOLESET_SEL_BY_TABLE		    COMPOUND

PRO_E_HOLESET_SEL_BY_SURFACES               SELECTION ARRAY       surfaces

PRO_E_HOLESET_SEL_BY_PARAMS                 ARRAY

PRO_E_HOLESET_SEL_BY_PARAM                  COMPOUND

PRO_E_HOLESET_SEL_PARAM_NAME                WSTRING

PRO_E_HOLESET_SEL_PARAM_VAL                 INT/BOOL/DOUBLE/WSTRING

PRO_E_HOLESET_SEL_PARAM_REL                 INT           ProHolesetParamRels

PRO_E_HOLESET_TIP_CTRL_PNT		    INT

PRO_E_HOLESET_START_HOLE                    SELECTION

PRO_E_HOLESET_UNFLIPPED_AXES                SELECTION ARRAY   axes   See note 7.

PRO_E_HOLESET_FLIPPED_AXES                  SELECTION ARRAY   axes   See note 7.

PRO_E_HOLESET_CUSTOM_PLATES                 ARRAY

PRO_E_HOLESET_CUSTOM_PLATE                  COMPOUND

PRO_E_HOLESET_CUSTOM_REFERENCE              BOOLEAN

PRO_E_HOLESET_CUSTOM_SURFACE                SELECTION     surfaces

PRO_E_HOLESET_CUSTOM_REF_ID		    INT

PRO_E_HOLESET_CUSTOM_Z_OFFSET               DOUBLE        positive numbers

PRO_E_HOLESET_CUSTOM_VALUE                  DOUBLE 

PRO_E_HOLESET_CUSTOM_CYCLE_PLATES           COMPOUND

PRO_E_HOLESET_CUSTOM_CYCLE_REFERENCES       ARRAY

PRO_E_HOLESET_CUSTOM_CYCLE_REF              COMPOUND

PRO_E_HOLESET_CUSTOM_CYCLE_PLATE_NAME	    WSTRING

PRO_E_HOLESET_CUSTOM_CYCLE_REF_OPT	    INT		  ProCustomRefOption

PRO_E_HOLESET_CUSTOM_CYCLE_REF_SEL	    SELECTION     surfaces/quilts

PRO_E_HOLESET_CUSTOM_CYCLE_REF_Z_OFFSET     DOUBLE        positive numbers

PRO_E_HOLESET_CUSTOM_CYCLE_VARIABLES        ARRAY

PRO_E_HOLESET_CUSTOM_CYCLE_VAR		    COMPOUND

PRO_E_HOLESET_CUSTOM_CYCLE_PLATE_NAME	    WSTRING

PRO_E_HOLESET_CUSTOM_CYCLE_VAR_VALUE	    DOUBLE        positive numbers

PRO_E_HOLES           Holes                 POINTER       See note 5.

PRO_E_NCL_COMMANDS                          ARRAY          

PRO_E_REF_NCSEQ                             INT

PRO_E_STOCK_BOUND			    COMPOUND

PRO_E_STOCK_BOUND_SKETCH		    POINTER	Sketch section

PRO_E_STOCK_BOUND_WP_SEL		    SELECTION 	workpiece selection

PRO_E_TURN_PROF				    COMPOUND	

PRO_E_TURN_PROF_CRV			    int		turn profile feature id

PRO_E_TURN_PROF_ST_EXT			    int		turn profile start 
							extension direction
PRO_E_TURN_PROF_EN_EXT			    int		turn profile end 
							extension direction
				( Both have values of type ProTurnProfExtType )	    
--------------------------------------------------------------------------------

NOTES:

1. The range of valid num axes is dependent on the sequence's workcell.
   Please refer to the manufacturing user's guide for valid settings in
   the user interface.

2. This type of element can have an integer value, a double value or a
   wide string value. Please refer to manufacturing user's guide for
   appropriate values.
------------------------------------------------
   User Interface        Programmatic Value
------------------------------------------------
     2 axis                     2
     3 axis                     3
     4 axis                     4
     5 axis                     5

3. Selection should be initialized to the datum point's identifier
   (NOT the feature identifier!).

4. PRO_E_HOLESETS gives much more powerful control than PRO_E_HOLES, but its
   support of drill points sets is still limited.  Through PRO_E_HOLESETS it
   is possible to determine which drill point sets exist in a feature, delete
   them, or overwrite them with drill axes sets.

5. PRO_E_HOLES is provided solely for compatibility with old code.  Such code
   should be updated to the more complete and easier to use PRO_E_HOLESETS
   element.

6. Adequate descriptions for the PRO_E_HOLESETS sub-elements could not be
   fit into the element tree above and are therefore given here.  Note that
   basic element type information is still found in the table above.

     PRO_E_HOLESETS                 contains data for all sequence holesets
     PRO_E_HOLESET                  data for a single holeset
     PRO_E_HOLESET_ID               id of a holeset
     PRO_E_HOLESET_TYPE             type of a holeset
     PRO_E_HOLESET_DEPTH            depth data for a holeset of a web drilling
     PRO_E_HOLESET_DEPTH_BY_TYPE    whether depth is calculated by the tool's
                                    tip or its shoulder
     PRO_E_HOLESET_DEPTH_TYPE       depth algorithm to use
     PRO_E_HOLESET_DEPTH_PLATES     set of PRO_E_HOLESET_DEPTH_PLATE elements
                                      - not used for auto or thru-all depth
                                        types
                                      - contains only one pair if not web
                                        drilling
     PRO_E_HOLESET_DEPTH_PLATE      start and end feed height data; contains
                                    PRO_E_HOLESET_PLATE_START and one of the
                                    following:
                                      PRO_E_HOLESET_PLATE_END
                                      PRO_E_HOLESET_PLATE_DEPTH
                                      PRO_E_HOLESET_PLATE_CDIAM
                                    may also optionally contain
                                      PRO_E_HOLESET_PLATE_BRKOUT
     PRO_E_HOLESET_PLATE_START      starting surface or quilt
     PRO_E_HOLESET_PLATE_END        ending surface of quilt
     PRO_E_HOLESET_PLATE_DEPTH      depth to drill from start
     PRO_E_HOLESET_PLATE_CDIAM      countersink diameter (applicable to
                                    countersink sequences only)
     PRO_E_HOLESET_PLATE_BRKOUT     whether to drill an additional
                                    BREAKOUT_DISTANCE [a manufacturing sequence
                                    parameter] deeper (not applicable to
                                    countersink sequences)
     PRO_E_HOLESET_EDGE_BREAK       amount by which to break edges for a by
                                    edge-break holeset (applicable to
                                    countersink sequences only)


     PRO_E_HOLESET_START	    drilling start data for a holeset
     PRO_E_HOLESET_START_TYPE	    start surface algorithm to use
     PRO_E_HOLESET_START_SURFACE    starting surface or quilt
     PRO_E_HOLESET_END		    depth data for a holeset
     PRO_E_HOLESET_END_TYPE	    depth algorithm to use
     PRO_E_HOLESET_END_MEASURE_BY   whether depth is calculated by the tool's
                                    tip or its shoulder
     PRO_E_HOLESET_END_SURFACE	    ending surface of quilt
     PRO_E_HOLESET_DEPTH_VALUE	    depth to drill from start
     PRO_E_HOLESET_CSINK_DIAM	    countersink diameter (applicable to
                                    countersink sequences only)
     PRO_E_HOLESET_USE_BRKOUT_DIST  whether to drill an additional
                                    BREAKOUT_DISTANCE [a manufacturing sequence
                                    parameter] deeper (not applicable to
                                    countersink sequences)
     PRO_E_DRILL_PART_DATA          which parts to consider for auto and
                                    thru-all depth calculations
     PRO_E_DRILL_PARTS              a list of individual parts
     PRO_E_AUTO_SEL_DRILL_PARTS     whether to select all appropriate parts
                                    automatically; if true PRO_E_DRILL_PARTS is
                                    ignored
     PRO_E_HOLESET_SELECTION_RULES  rules by which to select axes/points;
				    point and axes rules should not be mixed.
				    whether you can use point or axes will
				    be decided by PRO_E_HOLESET_TYPE.
				    except as noted below, axes must satisfy
				    all specified rules in order to be selected
     PRO_E_HOLESET_SEL_PNTS_ON_SURFACES select points which lie on selected
					surfaces
     PRO_E_HOLESET_SEL_INDIV_PNTS   individual point selections
     PRO_E_HOLESET_SEL_PNTS_BY_FEATURE individual datum point feature selections
     PRO_E_HOLESET_SEL_PROJECT_SURFACES required only for five-axis, and if
				        we have some individual point selection.
					point will be allowed only if it lie 
					on the surface, and surface normal will
					be user for drilling direction.
     PRO_E_HOLESET_SEL_MAX_PROJECT_DIST accuracy used to determine whether a 
					point lie on a surface.
     PRO_E_HOLESET_SEL_UNSEL_PNTS   individual points to exclude; reject even
				    if selected by feature/surface rule.
     PRO_E_HOLESET_SEL_AUTO_CHAMFER select axes with chamfers matching the
                                    sequence's tool (countersink sequences only)
     PRO_E_HOLESET_SEL_INDIV_AXES   individual axis selections; axes selected
                                    this way do not have to meet other selection
                                    criteria
     PRO_E_HOLESET_SEL_UNSEL_AXES   individual axes to exclude; reject even if
                                    selected by another rule
     PRO_E_HOLESET_SEL_AXIS_PATTS   axis pattern selections; axes selected this
                                    way do not have to meet other selection
                                    criteria
     PRO_E_HOLESET_SEL_DRILL_GROUPS select axes contained in drill groups
     PRO_E_HOLESET_SEL_BY_DIAMETERS select axes for surfaces of given diameters
     PRO_E_HOLESET_SEL_BY_TABLE     whether hole selection is by auto hole table
     PRO_E_HOLESET_SEL_BY_SURFACES  select axes of holes on given surfaces
     PRO_E_HOLESET_SEL_BY_PARAMS    select axes of features which match one of
                                    the specified parameter criteria
     PRO_E_HOLESET_SEL_BY_PARAM     a parameter criteria
     PRO_E_HOLESET_SEL_PARAM_NAME   parameter name
     PRO_E_HOLESET_SEL_PARAM_VAL    parameter value
     PRO_E_HOLESET_SEL_PARAM_REL    criteria relation
     PRO_E_HOLESET_START_HOLE       hole to drill first
     PRO_E_HOLESET_UNFLIPPED_AXES   list of axes that should be drilled as per
                                    orientation of the axis entities; see note 7
     PRO_E_HOLESET_FLIPPED_AXES     list of axes that should be drilled opposite
                                    of the orientation of the axis entities;
                                    see note 7

7. The elements PRO_E_HOLESET_FLIPPED_AXES and PRO_E_HOLESET_UNFLIPPED_AXES
   only apply to 5-axis drilling.  In 5-axis drilling, the system will attempt
   (usually successfully) to determine the appropriate machining approach
   directions for all selected axes whose approach direction is not specified
   by these elements.  These elements therefore usually do not need to be
   specified.  NOTE: Axes listed by these elements are only drilled if they
   meet the critera specified by PRO_E_HOLESET_SELECTION_RULES.

8. The PRO_NCSEQ_TRAJ_MILL NC Sequence type is not fully supported in 
   Creo Parametric TOOLKIT yet.
   
9. PRO_E_RETRACT_SURFACE can be used instead of PRO_E_RETRACT.

   --------------------------------------------------------
    PRO_E_RETRACT_SURFACE_TYPE  | PRO_E_RETRACT_SURFACE_REF
   --------------------------------------------------------
   PRO_RETRACT_SURFACE_PLANE    |  csys,face(plane)
   PRO_RETRACT_SURFACE_CYLINDER |     axis,csys
   PRO_RETRACT_SURFACE_SPHERE   |     point,csys
   
   PRO_E_RETRACT_SURFACE_ORIENT is applicable to 
   PRO_RETRACT_SURFACE_CYLINDER only.

   PRO_E_RETRACT_SURFACE_VALUE is an offset for PRO_E_RETRACT_SURFACE_PLANE and
                               a radius for PRO_RETRACT_SURFACE_CYLINDER or
                                            PRO_RETRACT_SURFACE_SPHERE
\******************************************************************************/


PRO_BEGIN_C_DECLS


typedef                struct pro_model_item  ProNcseq;

typedef enum  Pro_HolemakingCycleType  {
  PRO_HOLE_MK_CYCLE_STD        = 4,
  PRO_HOLE_MK_CYCLE_DEEP       = 5,
  PRO_HOLE_MK_CYCLE_FIXED      = 7,
  PRO_HOLE_MK_CYCLE_FLOATING   = 11,
  PRO_HOLE_MK_CYCLE_BREAK_CHIP = 12,
  PRO_HOLE_MK_CYCLE_WEB        = 15,
  PRO_HOLE_MK_CYCLE_BACK       = 17
}  ProHolemakingCycleType;
 
typedef enum  Pro_HolemakingPeckType  {
  PRO_HOLE_MK_PECK_DEFAULT  = -1,
  PRO_HOLE_MK_PECK_CONSTANT = 0,
  PRO_HOLE_MK_PECK_VARIABLE = 14
}  ProHolemakingPeckType;

typedef enum Pro_HolesetParamRels  {
  PRO_HOLESET_PARAM_REL_EQUAL     = 1,
  PRO_HOLESET_PARAM_REL_NOT_EQUAL = 2,
  PRO_HOLESET_PARAM_REL_LARGER    = 3,
  PRO_HOLESET_PARAM_REL_SMALLER   = 4
}  ProHolesetParamRels;

typedef enum Pro_TurnProfExtType  {
  PRO_E_TURN_PROF_EXT_NONE        = 0,
  PRO_E_TURN_PROF_EXT_PARALLEL    = 1,
  PRO_E_TURN_PROF_EXT_PERPEND     = 2
}  ProTurnProfExtType;

typedef enum Pro_TurnProfMaterialSide  {
  PRO_E_TURN_PROF_MAT_ON_RIGHT = 0,
  PRO_E_TURN_PROF_MAT_ON_LEFT  = 1
}  ProTurnProfMaterialSide;

typedef enum Pro_RetractSurfaceType  {
  PRO_RETRACT_SURFACE_UNDEF_TYPE = -1,
  PRO_RETRACT_SURFACE_PLANE      =  0,
  PRO_RETRACT_SURFACE_CYLINDER   =  1,
  PRO_RETRACT_SURFACE_SPHERE     =  2,
  PRO_RETRACT_SURFACE_REVOLVED   =  3
}  ProRetractSurfaceType;

typedef enum Pro_RetractSurfaceOrient {
   PRO_RETRACT_SURFACE_UNDEF_DIR = -1,
   PRO_RETRACT_SURFACE_X_DIR     =  0,
   PRO_RETRACT_SURFACE_Y_DIR     =  1,
   PRO_RETRACT_SURFACE_Z_DIR     =  2	       
} ProRetractSurfaceOrient;
    
/*  PRO_HOLE_MK_ON_MILL = 0 represent drilling on mill for 5-axis_mil_turn &
    PRO_HOLE_MK_ON_TURN = 1 represent drilling on turn for 5-axis_mil_turn*/

typedef enum Pro_HolemakingMode {
   PRO_HOLE_MK_ON_MILL =  0,
   PRO_HOLE_MK_ON_TURN =  1
} ProHolemakingMode;

extern ProError  ProFeatureIsNcseq (PRO_CONST_ARG  ProFeature  *feat,
                                                     ProBoolean  *p_is_ncseq);
/*
    Purpose: Determines whether a feature is an NC sequence.

    Input Arguments:
        feat - The handle to a feature.

    Output Arguments:
        p_is_ncseq - This is PRO_B_TRUE if the feature is an NC sequence. 
                     Otherwise, this is PRO_B_FALSE.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The input argument is invalid.
        PRO_TK_INVALID_TYPE - The specified handle is not a feature.

*/

extern ProError  ProNcseqTypeGet ( PRO_CONST_ARG ProNcseq         *seq,  
                                            ProLine           r_type_name);
/*
    Purpose: Retrieves the type name of the specified NC sequence.

    Input Arguments:
        seq - The handle to an NC sequence feature

    Output Arguments:
        r_type_name - The type name of the NC sequence

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

    See Also:
        ProFeatureIsNcseq()
*/


extern ProError  ProNcseqNumGet  ( PRO_CONST_ARG ProNcseq  *seq,
                                               int       *r_seq_num);
/*
    Purpose: Retrieves the number of the specified NC sequence.

    Input Arguments:
        seq - The handle to an NC sequence feature

    Output Arguments:
        r_seq_num - The number of the NC sequence

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

    See Also:
        ProFeatureIsNcseq()
*/

extern ProError  ProNcseqCutTimeGet   ( PRO_CONST_ARG ProNcseq  *seq,
                                                       double    *r_time);
/*
    Purpose: Retrieves the cutting time for the specified NC sequence feature.

    Input Arguments:
        seq - The handle to an NC sequence feature

    Output Arguments:
        r_time - The cutting time

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_E_NOT_FOUND - The cutting time information was not present.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

    See Also:
        ProFeatureIsNcseq()
*/


extern ProError  ProNcseqRemovedVolGet  (PRO_CONST_ARG ProNcseq   *seq,
                                                          double      *r_vol);
/*
    Purpose: Retrieves the volume of material removed by the specified NC 
             sequence feature.

    Input Arguments:
        seq - The handle to an NC sequence feature

    Output Arguments:
        r_vol - The volume of material removed

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_E_NOT_FOUND - The data for the volume of material removed was 
                             not present.
        PRO_TK_BAD_INPUTS - The input argument is invalid.

    See Also:
        ProFeatureIsNcseq()
*/


extern ProError  ProNcseqToolpathDisplay  ( PRO_CONST_ARG ProNcseq *seq);
/*
    Purpose: Displays the toolpath of the specified NC sequence on the screen.

    Input Arguments:
        seq - The handle to an NC sequence feature

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_GENERAL_ERROR - The toolpath display failed.
        PRO_TK_BAD_INPUTS - The argument is invalid.

    See Also:
        ProFeatureIsNcseq()
*/

PRO_END_C_DECLS


#endif /* PRONCSEQ_H */