#ifndef PRO_MLDLAY_RULE_H #define PRO_MLDLAY_RULE_H #include <ProToolkit.h> #include <ProObjects.h> #include <ProGeomitem.h> typedef void *ProCvLayoutRule; /* wrapper for Mopr_layout_info - this comment will be removed */ typedef enum { PRO_CVLAYOUT_SINGLE, PRO_CVLAYOUT_RECTANG, PRO_CVLAYOUT_CIRCULAR, PRO_CVLAYOUT_VARIABLE } ProCvLayoutType; typedef enum { PRO_CVLAYOUT_CONSTANT, PRO_CVLAYOUT_XSYMMETRIC, PRO_CVLAYOUT_YSYMMETRIC, PRO_CVLAYOUT_RADIAL } ProCvLayoutOrient; PRO_BEGIN_C_DECLS /* Functions to initiate and manipulate data to the ProCvLayoutRule handle */ extern ProError ProCavlayruleAlloc (ProCvLayoutRule *cvlrule); /* Purpose: Allocates the handle of a new cavity layout rule structure and set it to the PRO_CVLAYOUT_SINGLE type. Input Arguments: none Output Arguments: cvlrule - Pointer to the cavity layout rule handle Return Values: PRO_TK_NO_ERROR - The handle is successfully allocated. PRO_TK_GENERAL_ERROR - Cannot allocate the handle */ extern ProError ProCavlayruleFree (ProCvLayoutRule cvlrule); /* Purpose: Free the memory and handle of a cavity layout rule structure. Input Arguments: cvlrule - Pointer to the cavity layout rule handle Output Arguments: none Return Values: PRO_TK_NO_ERROR - The handle is successfully freed. PRO_TK_GENERAL_ERROR - Cannot free the handle */ extern ProError ProCavlayruleFileWrite (ProCvLayoutRule cvlrule, ProPath file_name); /* Purpose: Save the cavity layout rule to file. This file can be read both from UI and Toolkit to set the rule. Input Arguments: cvlrule - Pointer to the cavity layout rule handle; file_name - name of the file to save. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The rule is successfully saved. PRO_TK_GENERAL_ERROR - Cannot save the rule. */ extern ProError ProCavlayruleFileRead (ProCvLayoutRule cvlrule, ProPath file_name); /* Purpose: Get the cavity layout rule from the previously saved file. Input Arguments: cvlrule - Pointer to the initiated cavity layout rule handle; file_name - name of the file to save. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The handle is successfully retrieved PRO_TK_GENERAL_ERROR - Cannot retrieve the handle */ extern ProError ProCavlayruleSingleSet (ProCvLayoutRule cvlrule); /* Purpose: Reset the information in a cavity layout rule structure to the PRO_CVLAYOUT_SINGLE type. Input Arguments: cvlrule - Cavity layout rule handle. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The handle is successfully reset, PRO_TK_GENERAL_ERROR - Cannot inialize the handle */ extern ProError ProCavlayruleRectSet (ProCvLayoutRule cvlrule, ProCvLayoutOrient orient, int cavity_num_x, int cavity_num_y, double cavity_step_x, double cavity_step_y); /* Purpose: Reset the information in a cavity layout rule structure to the PRO_CVLAYOUT_RECTANG type. Input Arguments: cvlrule - Cavity layout rule handle; orient - Layout orientation type; cavity_num_x - Number of columns in the layout; cavity_num_y - Number of rows in the layout; cavity_step_x - Displacement step in x direction; cavity_step_y - Displacement step in y direction. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The handle is successfully reset. PRO_TK_GENERAL_ERROR - Cannot inialize the handle */ extern ProError ProCavlayruleCircSet (ProCvLayoutRule cvlrule, ProCvLayoutOrient orient, int cavity_num, double cavity_step, double start_angle, double radius); /* Purpose: Reset the information in a cavity layout rule structure to the PRO_CVLAYOUT_CIRCULAR type. Input Arguments: cvlrule - Cavity layout rule handle; orient - Layout orientation type; cavity_num - number of components in the layout; cavity_step - angular displacement; start_angle - angle for the first component; radius - raduis of the layout; Output Arguments: none Return Values: PRO_TK_NO_ERROR - The handle is successfully reset. PRO_TK_GENERAL_ERROR - Cannot inialize the handle */ extern ProError ProCavlayruleVarSet (ProCvLayoutRule cvlrule, int cavity_num, double *increment1_arr, double *increment2_arr, double *increment3_arr); /* Purpose: Reset the information in a cavity layout rule structure to the PRO_CVLAYOUT_VARIABLE type. The function will use the previously set simple type (sinle, rectangular or circular) as a base for variable type. Input Arguments: cvlrule - Cavity layout rule handle; cavity_num - Number of rows in Variable Layout Table; increment1_arr - <i>ProArray</i> of increments for the first table dimension; increment2_arr - <i>ProArray</i> of increments for the second table dimension; increment3_arr - <i>ProArray</i> of increments for the third table dimension; Output Arguments: none Return Values: PRO_TK_NO_ERROR - The handle is successfully reset. PRO_TK_GENERAL_ERROR - Cannot inialize the handle */ extern ProError ProCavlayruleTypeGet (ProCvLayoutRule cvlrule, ProCvLayoutType *type, ProCvLayoutType *basic_type); /* Purpose: Get the information about a cavity layout type from the Cavity Layout Rule structure. Input Arguments: cvlrule - Cavity layout rule handle. Output Arguments: type - pointer to actual rule type; basic_type - pointer to basic rule type if actual rule type type as in first_type. Return Values: PRO_TK_NO_ERROR - The information is successfully retrieved; PRO_TK_GENERAL_ERROR - Cannot inialize the pointers. */ extern ProError ProCavlayruleRectDataGet (ProCvLayoutRule cvlrule, ProCvLayoutOrient *orient, int *cavity_num_x, int *cavity_num_y, double *cavity_step_x, double *cavity_step_y); /* Purpose: Get the information about a rectangular rule from the Cavity Layout Rule structure. Input Arguments: cvlrule - Cavity layout rule handle. It should be of rectangular or Variable built over rectangular type. A good programming style is to call first function ProCavlayruleRuleTypeGet() and make sure that one of the types it returns is Rectangular. Output Arguments: orient - pointer to layout orientation type; cavity_num_x - pointer to number of columns in the layout; cavity_num_y - pointer to number of rows in the layout; cavity_step_x - pointer to displacement step in x direction; cavity_step_y - pointer to displacement step in y direction. Return Values: PRO_TK_NO_ERROR - The information is successfully retrieved; PRO_TK_BAD_INPUTS - The Rule is of uncompatible type. PRO_TK_GENERAL_ERROR - Cannot inialize the pointers. */ extern ProError ProCavlayruleCircDataGet (ProCvLayoutRule cvlrule, ProCvLayoutOrient *orient, int *cavity_num, double *cavity_step, double *start_angle, double *radius); /* Purpose: Get the information about a circular rule from the Cavity Layout Rule structure. Input Arguments: cvlrule - Cavity layout rule handle. It should be of circular or Variable built over circular type. A good programming style is to call first function ProCavlayruleRuleTypeGet() and make sure that one of the types it returns is Circular. Output Arguments: orient - pointer to layout orientation type; cavity_num - pointer to number of components in the layout; cavity_step - pointer to angular displacement; start_angle - pointer to angle for the first component; radius - pointer to the radius of the rule. Return Values: PRO_TK_NO_ERROR - The information is successfully retrieved; PRO_TK_BAD_INPUTS - The Rule is of uncompatible type. PRO_TK_GENERAL_ERROR - Cannot inialize the pointers. */ extern ProError ProCavlayruleVarDataGet (ProCvLayoutRule cvlrule, int *cavity_num, double **increment1_arr, double **increment2_arr, double **increment3_arr); /* Purpose: Get the information about a variable rule from the Cavity Layout Rule structure. A good programming style is to call first ProCavlayruleRuleTypeGet() make sure that the type it returns is variable. Input Arguments: cvlrule - Cavity layout rule handle; Output Arguments: cavity_num - pointer to number of rows in Variable Layout Table; increment1_arr - pointer to <i>ProArray</i> of increments for the first table dimension; increment2_arr - pointer to <i>ProArray</i> of increments for the second table dimension; increment3_arr - pointer to <i>ProArray</i> of increments for the third table dimension; Return Values: PRO_TK_NO_ERROR - The information is successfully retrieved; PRO_TK_BAD_INPUTS - The Rule is of uncompatible type. PRO_TK_GENERAL_ERROR - Cannot inialize the pointers. */ PRO_END_C_DECLS #endif