#ifndef PRORMDT_H
#define PRORMDT_H

#include <ProMfg.h>

PRO_BEGIN_C_DECLS

typedef enum pro_rmdt_mirror
{
   MOLD_LAYOUT_MIRROR_NONE = 0,
   MOLD_LAYOUT_MIRROR_X    = 1,
   MOLD_LAYOUT_MIRROR_Y    = 2
} ProRmdtMirror;
   
typedef enum pro_rmdt_cavity_layout
{
   CAVITY_LAYOUT_DEFAULT   = 0,
   CAVITY_LAYOUT_SINGLE    = 1,
   CAVITY_LAYOUT_MULTIPLE  = 2,
   CAVITY_LAYOUT_RADIAL    = 3,
   CAVITY_LAYOUT_MANUAL    = 4,
   CAVITY_LAYOUT_REFERENCE = 5
} ProRmdtCavityLayout;
   
typedef struct MOLD_ASSEM* ProMoldLayout;

typedef struct
{
   int         cavity_layout_type;
   ProBoolean  is_symmetric;
   int         mirror_type;
   int         num, num_x, num_y;
   double      offset_x, offset_y;
   double      inc_x, inc_y;
   double      r_dist, start_angle, inc_angle;
} ProDlgCavityLayoutData;

typedef struct
{
   ProBoolean IsRect,
              IsSym;
   ProVector  rect_dim,
              rect_offset;
   double     radial_z,
              radial_offset,
	      radial_diam;
   ProVector  allowance[2];
   int        size_ref_by_id;
} ProDlgWorkpieceData;

extern ProError ProMfgMoldLayoutGet ( PRO_CONST_ARG ProMfg mfg_handle, 
                                      ProMoldLayout* p_mold_layout);
/*
    Purpose: Retrieves the mold layout of the specified manufacturing model.

    Input Arguments:
        mfg_handle - The handle to the manufacturing model

    Output Arguments:
        p_mold_layout - The handle to the mold layout

    Return Values:
        PRO_TK_NO_ERROR - The function successfully retrieved the information.
        PRO_TK_BAD_INPUTS - The input argument is invalid.
        PRO_TK_E_NOT_FOUND - The mold layout handle of the specified 
                             manufacturing was not found.

*/


extern ProError ProRmdtRefModelInfoGet ( ProMoldLayout mold_layout, 
                                         int index,
                                         double xyz_plus[3],
                                         double xyz_minus[3],
                                         double xyz_total[3]);
/*
    Purpose: Retrieves the reference model information for the specified mold 
             layout.

    Input Arguments:
        mold_layout - The handle to the mold layout
        index - The index of the reference model

    Output Arguments:
        xyz_plus - The upper boundaries of the reference model
        xyz_minus - The lower boundaries of the reference model
        xyz_total - The outline size of the reference model

    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.

*/


extern ProError ProRmdtWorkpieceInfoGet ( ProMoldLayout mold_layout, 
                                   int index,
                                   double xyz_plus[3],
                                   double xyz_minus[3], 
                                   double xyz_total[3]);
/*
    Purpose: Retrieves the workpiece information for the specified mold layout.

    Input Arguments:
        mold_layout - The handle to the mold layout
        index - The index of the workpiece

    Output Arguments:
        xyz_plus - The upper boundaries of the workpiece
        xyz_minus - The lower boundaries of the workpiece
        xyz_total - The outline size of the workpiece

    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.

*/


extern ProError ProRmdtMoldBaseInfoGet ( ProMoldLayout mold_layout,
                                         char ***p_param_names, 
                                         wchar_t ***p_param_values,
                                         int *p_param_num,
                                         int *p_corner);
/*
    Purpose: Retrieves the mold base information for the specified mold layout. 
             The function reuses memory.

    Input Arguments:
        mold_layout - The handle to the mold layout.

    Output Arguments:
        p_param_names - The array of parameter names of the mold base.
        p_param_values - The array of parameter values of the mold base.
        p_param_num - The number of parameters of the mold base.
        p_corner - The corner of the mold base: <ul> <li>Corner 0 is the 
                   top-left corner. <li>Corner 1 is the top-right corner. 
                   <li>Corner 2 is the bottom-right corner. <li>Corner 3 is the 
                   bottom-left corner. </ul>

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

*/


extern ProError ProRmdtMaterialInfoGet ( ProMoldLayout mold_layout,
                                         char ***p_param_names, 
                                         wchar_t ***p_param_values, 
                                         int *p_param_num);
/*
    Purpose: Retrieves the material information for the specified mold layout. 
             The function reuses memory.

    Input Arguments:
        mold_layout - The handle to the mold layout

    Output Arguments:
        p_param_names - The array of parameter names of the material
        p_param_values - The array of parameter values of the material
        p_param_num - The number of parameters of the material

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

*/


extern ProError ProRmdtImmInfoGet ( ProMoldLayout mold_layout, 
                                    wchar_t      **p_machine_name,
                                    char        ***p_param_names, 
                                    wchar_t     ***p_param_values, 
                                    int           *p_param_num);
/*
    Purpose: Retrieves the injection module machine (IMM) information for the 
             specified mold layout. The function reuses the memory.

    Input Arguments:
        mold_layout - The handle to the mold layout

    Output Arguments:
        p_machine_name - The name of the IMM
        p_param_names - The array of parameter names of the IMM
        p_param_values - The array of parameter values of the IMM
        p_param_num - The number of parameters of the IMM

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

*/


extern ProError ProRmdtDlgMaterialSet ( ProMoldLayout mold_layout,
				        wchar_t      *generic_type,
				        wchar_t      *mfg,
				        wchar_t      *trade_name,
				        wchar_t      *grade);
/*
    Purpose: Sets the default information for the mold layout material dialog.

    Input Arguments:
        mold_layout - The handle to the mold layout
        generic_type - The generic type
        mfg - The manufacturing
        trade_name - The trade name
        grade - The grade

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the information for the 
                          dialog.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.

*/


extern ProError ProRmdtDlgCavityLayoutSet ( ProMoldLayout          mold_layout,
					    ProDlgCavityLayoutData *p_dlg_data);
/*
    Purpose: Sets the default information for the mold cavity layout dialog.

    Input Arguments:
        mold_layout - The handle to the mold layout
        p_dlg_data - The cavity layout dialog data

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the information.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.

*/


extern ProError ProRmdtDlgImmSet ( ProMoldLayout mold_layout,
				   wchar_t      *machine_name);
/*
    Purpose: Sets the default information for the mold layout IMM dialog.

    Input Arguments:
        mold_layout - The handle to the mold layout
        machine_name - The machine name of the IMM dialog

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the information.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.

*/


extern ProError ProRmdtDlgRefModelOrientSet ( ProMoldLayout mold_layout,
				              ProMatrix     orient);
/*
    Purpose: Sets the default information for the dialog for the reference 
             model orientation of the mold layout.

    Input Arguments:
        mold_layout - The handle to the mold layout
        orient - The orientation matrix

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the information.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.

*/


extern ProError ProRmdtDlgMoldBaseSet ( ProMoldLayout mold_layout,
				        wchar_t       *vendor,
				        wchar_t       *series,
				        wchar_t       *length,
				        wchar_t       *width);
/*
    Purpose: Sets the default information for the mold layout dialog for the 
             mold base.

    Input Arguments:
        mold_layout - The handle to the mold layout
        vendor - The vendor
        series - The series
        length - The length
        width - The width

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the information.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.

*/


extern ProError ProRmdtDlgWorkpieceSet ( ProMoldLayout          mold_layout,
					 ProDlgWorkpieceData   *p_dlg_data);
/*
    Purpose: Sets the default information for the mold layout workpiece dialog.

    Input Arguments:
        mold_layout - The handle to the mold layout
        p_dlg_data - The workpiece dialog data

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function successfully set the information.
        PRO_TK_BAD_INPUTS - One or more of the arguments are invalid.

*/


typedef ProError (*ProRmdtCreateImmPreAction) (ProMoldLayout mold_layout);
/*
    Purpose: This is the notification function called before creating injection 
             module machining.
             <p> This function is to be supplied by the user by calling 
             <b>ProNotificationSet()</b> with the the notify type 
             PRO_RMDT_CREATE_IMM_PRE.

    Input Arguments:
        mold_layout - The handle to the mold layout

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Successful exit from this function.
        Other - An error was encountered. IMM creation will be stopped.

    See Also:
        ProNotificationSet()
*/

typedef ProError (*ProRmdtBoundBoxPreAction) (ProMoldLayout mold_layout);
/*
    Purpose: This is the notification function called before the bounding box 
             dialog.
             <p> This function is to be supplied by the user by calling 
             <b>ProNotificationSet()</b> with the notify type 
             PRO_RMDT_BOUND_BOX_PRE.

    Input Arguments:
        mold_layout - The handle to the mold layout

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Successful exit from this function.
        Other - An error was encountered. The bounding box dialog will not be 
                called.

    See Also:
        ProNotificationSet()
*/

typedef ProError (*ProRmdtCavLayoutPreAction) (ProMoldLayout mold_layout);
/*
    Purpose: This is the notification function called before the cavity layout 
             dialog.
             <p> This function is to be supplied by the user by calling 
             <b>ProNotificationSet()</b> with the notify type 
             PRO_RMDT_CAV_LAYOUT_PRE.

    Input Arguments:
        mold_layout - The handle to the mold layout

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Successful exit from this function.
        Other - An error was encountered. The cavity layout dialog will not be 
                called.

    See Also:
        ProNotificationSet()
*/


typedef ProError (*ProRmdtCreateWpPreAction) (ProMoldLayout mold_layout);
/*
    Purpose: This is the notification function called before the create 
             workpiece dialog.
             <p> This function is to be supplied by the user by calling 
             <b>ProNotificationSet()</b> with the notify type 
             PRO_RMDT_CREATE_WP_PRE.

    Input Arguments:
        mold_layout - The handle to the mold layout

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Successful exit from this function.
        Other - An error was encountered. The create workpiece dialog will not 
                be called.

    See Also:
        ProNotificationSet()
*/


typedef ProError (*ProRmdtMaterialPreAction) (ProMoldLayout mold_layout);
/*
    Purpose: This is the notification function called before the material 
             dialog.
             <p> This function is to be supplied by the user by calling 
             <b>ProNotificationSet()</b> with the notify type 
             PRO_RMDT_MATERIAL_PRE.

    Input Arguments:
        mold_layout - The handle to the mold layout

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Successful exit from this function.
        Other - An error was encountered. The material dialog will not be 
                called.

    See Also:
        ProNotificationSet()
*/


typedef ProError (*ProRmdtMBaseSelectPreAction) (ProMoldLayout mold_layout);
/*
    Purpose: This is the notification function called before the mold base 
             selection dialog.
             <p> This function is to be supplied by the user by calling 
             <b>ProNotificationSet()</b> with the notify type 
             PRO_RMDT_MBASE_SELECT_PRE.

    Input Arguments:
        mold_layout - The handle to the mold layout

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - Successful exit from this function.
        Other - An error was encountered. The mold base selection dialog will 
                not be called.

    See Also:
        ProNotificationSet()
*/


PRO_END_C_DECLS

#endif