/*====================================================================*\ FILE : UgMfgParamTreeCreate.c PURPOSE : Pro/TOOLKIT User Guide Example HISTORY.. DATE BUILD AUTHOR MODIFICATIONS 04-dec-97 H-02-02 mgs $$1 Created \*====================================================================*/ #include #include #include #include #include #include /*====================================================================*\ Function : UserMfgParamsSet Purpose : Demonstrate setting a few required NC seq parameters \*====================================================================*/ ProError UserMfgParamsSet( ProElement *mfg_params_elem ) { ProError status = PRO_TK_NO_ERROR; ProElement mfg_param_elem, name_elem, value_elem; typedef struct {char param_name[PRO_NAME_SIZE]; double param_value; } ParameterTable; ParameterTable seq_params[] = {{"CUT_FEED", 16.0 }, {"TOLERANCE", 0.0001 }, {"STEP_OVER", 4.0 }, {"SPINDLE_SPEED", 550.0 }, {"CLEAR_DIST", 1.0 }}; int seq_param_size = sizeof(seq_params)/sizeof(ParameterTable), i; ProError UserElementBuild(); for (i = 0; i < seq_param_size && status == PRO_TK_NO_ERROR; i++) { /*--------------------------------------------------------------------*\ Allocate the parent element \*--------------------------------------------------------------------*/ { status = ProElementAlloc(PRO_E_MFG_PARAM, &mfg_param_elem); ERROR_CHECK("UserParamSetup", "ProElemtreeElementAdd", status ); } /*--------------------------------------------------------------------*\ Add name element to parent \*--------------------------------------------------------------------*/ if (status == PRO_TK_NO_ERROR) { status = ProElementAlloc(PRO_E_MFG_PARAM_NAME, &name_elem); ERROR_CHECK("UserParamSetup", "ProElemtreeElementAdd", status ); } if (status == PRO_TK_NO_ERROR) status = UserElementBuild(PRO_VALUE_TYPE_STRING, seq_params[i].param_name, &name_elem); if (status == PRO_TK_NO_ERROR) { status = ProElemtreeElementAdd(mfg_param_elem, NULL, name_elem); ERROR_CHECK("UserParamSetup", "ProElemtreeElementAdd", status ); } /*--------------------------------------------------------------------*\ Add value element to parent \*--------------------------------------------------------------------*/ if (status == PRO_TK_NO_ERROR) { status = ProElementAlloc(PRO_E_MFG_PARAMVAL, &value_elem); ERROR_CHECK("UserParamSetup", "ProElemtreeElementAdd", status ); } if (status == PRO_TK_NO_ERROR) status = UserElementBuild(PRO_VALUE_TYPE_DOUBLE, &(seq_params[i].param_value), &value_elem); if (status == PRO_TK_NO_ERROR) { status = ProElemtreeElementAdd(mfg_param_elem, NULL, value_elem); ERROR_CHECK("UserParamSetup", "ProElemtreeElementAdd", status ); } /*--------------------------------------------------------------------*\ Add parent to tree \*--------------------------------------------------------------------*/ if (status == PRO_TK_NO_ERROR) { status = ProElemtreeElementAdd(*mfg_params_elem,NULL,mfg_param_elem); ERROR_CHECK("UserParamSetup", "ProElemtreeElementAdd", status ); } } return status; } /*====================================================================*\ Function : UserElementBuild Purpose : Given a value type and a value return the element \*====================================================================*/ ProError UserElementBuild ( ProValueDataType data_type, void *data, ProElement *element) { ProError status = PRO_TK_NO_ERROR; ProValue value; ProValueData value_data; ProSelection *s; int *i; double *d; char *c; wchar_t *w; value_data.type = data_type; /*--------------------------------------------------------------------*\ Based on data type set the correct union member \*--------------------------------------------------------------------*/ switch (data_type) { case PRO_VALUE_TYPE_INT: i = (int*) data; value_data.v.i = *i; break; case PRO_VALUE_TYPE_DOUBLE: d = (double*) data; value_data.v.d = *d; break; case PRO_VALUE_TYPE_STRING: value_data.v.s = (char*) calloc (1, sizeof(ProCharName)); if (value_data.v.s) { c = (char*) data; strcpy(value_data.v.s, c); } else status = PRO_TK_OUT_OF_MEMORY; break; case PRO_VALUE_TYPE_WSTRING: value_data.v.w = (wchar_t*) calloc (1, sizeof(ProLine)); if (value_data.v.w) { w = (wchar_t*) data; ProUtilWstrcpy(value_data.v.w, w); } else status = PRO_TK_OUT_OF_MEMORY; break; case PRO_VALUE_TYPE_SELECTION: status = ProSelectionCopy(*((ProSelection*)data),&(value_data.v.r)); break; default: return PRO_TK_BAD_INPUTS; } /*--------------------------------------------------------------------*\ Allocate and set element value \*--------------------------------------------------------------------*/ if (status == PRO_TK_NO_ERROR) { status = ProValueAlloc ( &value ); ERROR_CHECK("UserElementBuild", "ProValueAlloc", status); } if (status == PRO_TK_NO_ERROR) { status = ProValueDataSet (value, &value_data); ERROR_CHECK("UserElementBuild", "ProValueDataSet", status); } if ( status == PRO_TK_NO_ERROR ) { status = ProElementValueSet ( *element, value ); ERROR_CHECK("UserElementBuild", "ProElementValueSet", status); } return status; }