#ifndef PRO_PROCSTEP_H
#define PRO_PROCSTEP_H



#include <ProObjects.h>
#include <ProRule.h>

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

1. Feature element tree

   PRO_E_FEATURE_TREE
     |   
     |--PRO_E_FEATURE_TYPE
     |   
     |--PRO_E_PROCESS_STEP_TYPE   
     |   
     |--PRO_E_COMPONENTS
     |
     |--PRO_E_DESCRIPTION
     |
     |--PRO_E_POSITION
     |
     |--PRO_E_SIMPLFD_REP
     |
     |--PRO_E_EXPLODE_STATE
     |
     |--PRO_E_GEN_STEP_TYPE
     |
     |--PRO_E_GEN_STEP_REFS
     |   
     |--PRO_E_TIME_ESTIMATE   
     |
     |--PRO_E_COST_ESTIMATE   


2. Feature elements table

--------------------------------------------------------------------------------------------
Element Id                Element Name    Data Type                 Valid Values
--------------------------------------------------------------------------------------------
PRO_E_FEATURE_TYPE        Feature Type    PRO_VALUE_TYPE_INT        PRO_FEAT_PROCESS_STEP
PRO_E_PROCESS_STEP_TYPE   Step Type       PRO_VALUE_TYPE_INT        See ProProcStepType 
PRO_E_COMPONENTS          Components      PRO_VALUE_TYPE_SELECTION  Component
PRO_E_DESCRIPTION         Description     PRO_VALUE_TYPE_WSTRING    any value
PRO_E_POSITION            Position        PRO_VALUE_TYPE_TRANSFORM  any value
PRO_E_GEN_STEP_TYPE       Type            PRO_VALUE_TYPE_WSTRING    any value
PRO_E_GEN_STEP_REFS       References      PRO_VALUE_TYPE_SELECTION  See Note 1
PRO_E_SIMPLFD_REP         Simplfd Rep     PRO_VALUE_TYPE_INT        Id for rep
PRO_E_EXPLODE_STATE       Explode State   PRO_VALUE_TYPE_INT        Id for state
PRO_E_TIME_ESTIMATE       Time Estimate   PRO_VALUE_TYPE_DOUBLE     > 0.0
PRO_E_COST_ESTIMATE       Cost Estimate   PRO_VALUE_TYPE_DOUBLE     any value
--------------------------------------------------------------------------------------------

   Note 1.   Step References types:

   Step Reference          Valid Reference Valus
   -----------------------------------------------------------------------
   PRO_E_GEN_STEP_REFS     PRO_PART, PRO_FEATURE, PRO_SURFACE, PRO_EDGE,
                           PRO_CURVE, PRO_AXIS, PRO_CSYS, PRO_POINT

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

/*  PRO_E_PROCESS_STEP_TYPE */

typedef enum pro_proc_step_type
{
   PRO_PROCSTEP_ASSEMBLE = 0,
   PRO_PROCSTEP_DISASSEMBLE,
   PRO_PROCSTEP_REASSEMBLE,
   PRO_PROCSTEP_REPOSITION,
   PRO_PROCSTEP_GENERAL,
   PRO_PROCSTEP_SURFACE,
   PRO_PROCSTEP_VOLUME,
   PRO_PROCSTEP_MFG_MODEL
} ProProcStepType;


PRO_BEGIN_C_DECLS

/* Creo Parametric TOOLKIT declarations for ProProcStep related actions */

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

extern ProError ProProcstepActiveSet  (ProSolid     p_solid, 
                                       ProProcstep *p_proc_step);
/*
    Purpose: Activates the process step.

    Input Arguments:
        p_solid - The solid that corresponds to the process step
        p_proc_step - The process step

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully activated the process step.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.
        PRO_TK_E_NOT_FOUND - The specified process step was not found in the 
                             model.

*/

extern ProError ProProcstepActiveGet (ProSolid      solid, 
                                      ProProcstep  *p_proc_step);
/*
    Purpose: Returns the current active process step.

    Input Arguments:
        solid - The solid that contains the current process step

    Output Arguments:
        p_proc_step - The current active process step

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

*/

extern ProError ProProcstepInit  (ProSolid     p_solid,
                                  int          step_number,
                                  int          step_id,
                                  ProProcstep *p_proc_step);
/*
    Purpose: Returns the handle to the specified process step.

    Input Arguments:
        p_solid - The solid that contains the process step.
        step_number - The number of the process step in the active step list. 
                      If you specify this argument, the function ignores 
                      <i>step_id</i>.
        step_id - The identifier of the process step, if you did not specify 
                  the number (you specified PRO_VALUE_UNUSED).

    Output Arguments:
        p_proc_step - The handle to the process step, if found.

    Return Values:
        PRO_TK_E_FOUND - The function found the process step in the solid.
        PRO_TK_E_NOT_FOUND - The function did not find the process step in the 
                             solid.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.

*/

extern ProError ProProcstepNumberGet ( ProSolid        p_solid,
	  			       ProProcstep    *p_proc_step,
                                       int            *r_step_number );
/*
    Purpose: Retrieves the process step number from the specified solid.

    Input Arguments:
        p_solid - The solid that corresponds to the process step.
        p_proc_step - The process step handle.

    Output Arguments:
        r_step_number - The step number in the active step list. If there is an 
                        error, this is initialized to PRO_VALUE_UNUSED.

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - One or more of the input arguments are invalid.
        PRO_TK_NOT_VALID - The specified <i>p_proc_step</i> is invalid.

*/

extern ProError ProProcstepVisit  (ProSolid     p_solid,
                                   ProGeomitemAction  action,
                                   ProGeomitemFilter filter,
                                   ProAppData   app_data);
/*
    Purpose: Visits all the process steps in the specified solid.

    Input Arguments:
        p_solid - The solid.
        action - The visiting function. If it returns anything other than 
                 PRO_TK_NO_ERROR, visiting stops.
        filter - The filter function. If NULL, all process steps are visited 
                 using the action function.
        app_data - The application data passed to the filter and visiting 
                   functions.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully visited all the process 
                          steps.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.
        PRO_TK_E_NOT_FOUND - No process steps were found.
        Other - Any other value is the value returned by the action function 
                (visiting stopped).

*/

PRO_END_C_DECLS

#endif /* PRO_PROCSTEP_H */