Prepare Pipe LineStock Parameter
Hello, I'm not able to set LineStock Parameter with multiple values. If I use the following code, the BEND_ANGLE values are NOT set, and after this call, it is not longer possible to modify the line stock values in Creo manually. Technical Support seems not capable to give an answer. Here my Code, tk_linestockparam_Single_Debug() is an helper, code not here but the debug output.
For testing have an assembly open, including one linestock, the code uses the name MYLINESTOCK.
If somebody has an idea 🤗
/*
Here the struct info
typedef struct _pro_lnstk_param_memb_
{
ProName name;
ProParamvalue value;
} ProLnstkParamMemb;
typedef enum
{
PROLNSTKPRM_SINGLE,
PROLNSTKPRM_MULTIPLE
} ProLnstkParamType;
typedef struct _pro_lnstk_param_
{
ProName name;
ProLnstkParamType param_type;
union {
ProParamvalue value;
ProLnstkParamMemb *members;
} lnstk_param_value;
} ProLnstkParam;
*/
ProError
GetLineStockByName_Test (
ProSolid model,
char* InputName,
ProLnstk *LineStock
)
{
// Creo
ProError tk_status;
char LineStockName[PRO_NAME_SIZE];
ProLnstk *LineStocks;
//Runtime
int rval = PRO_TK_E_NOT_FOUND;
int array_size = 0;
int i = 0;
tk_status = ProAssemblyLnstksCollect( (ProAssembly) model, &LineStocks);
tk_status = ProArraySizeGet (LineStocks, &array_size);
for (i = 0; i < array_size ; i++) {
ProWstringToString(LineStockName,LineStocks[i].name);
if ( strcmp(LineStockName,InputName) ) {
continue;
}
rval= PRO_TK_NO_ERROR;
*LineStock = LineStocks[i];
break;
}
ProArrayFree ((ProArray*)&LineStocks);
return rval;
}
// Static Test Values
static double BendAngleVals[] = { 90.0, 45.0, 60.0, 30.0};
ProError
MyLnstkParametersSet_Test3 ()
{
ProError tk_status;
ProParamvalueType param_value_type;
ProParamvalue param_value;
ProLnstk LineStock;
ProLnstkParam *LnstkParams;
ProLnstkParam LnstkParam;
ProLnstkParamMemb *LnstkParamMembers;
ProLnstkParamMemb LnstkParamMember;
ProMdl model;
ProParamvalue Paramvalue;
int i;
int nValues;
double dVal;
TK_DEBUG00("in MyLnstkParametersSet_Test3");
tk_status = ProMdlCurrentGet (&model);
if (tk_status == PRO_TK_E_NOT_FOUND) {
return tk_status;
}
// MYLINESTOCK or any other name here must be within the active assembly
tk_status = GetLineStockByName_Test (model,"MYLINESTOCK" ,&LineStock);
if (tk_status == PRO_TK_E_NOT_FOUND) {
return tk_status;
}
tk_status = ProArrayAlloc (0, sizeof (ProLnstkParam), 1, (ProArray*)&LnstkParams);
//
// Alloc an Array at LnstkParam.lnstk_param_value.members
//
tk_status = ProArrayAlloc (0, sizeof (ProLnstkParamMemb), 1, (ProArray*)&LnstkParam.lnstk_param_value.members); REPORT_TK_CALL("MyLnstkParametersSet_Test3()","ProArrayAlloc()",tk_status,tk_status != PRO_TK_NO_ERROR);
LnstkParam.name[0] = '\0';
TK_DEBUG01("Configure form Obj LnstkParam Name '%s'","BEND_ANGLE");
ProStringToWstring(LnstkParam.name,"BEND_ANGLE");
LnstkParam.param_type = PROLNSTKPRM_MULTIPLE;
for ( i = 0 ; i < 4 ; i++ ) {
dVal = BendAngleVals[i];
TK_DEBUG01 ("add value %6.3f",dVal);
LnstkParamMember.name[0] = '\0';
TK_DEBUG00("ProParamvalueSet in LnstkParamMember");
tk_status = ProParamvalueSet(&LnstkParamMember.value, (void*)&dVal, PRO_PARAM_DOUBLE);
TK_DEBUG00("ProArrayObjectAdd to LnstkParamMembers");
//
// Now add this member
//
tk_status = ProArrayObjectAdd ((ProArray*)&LnstkParam.lnstk_param_value.members, PRO_VALUE_UNUSED , 1, &LnstkParamMember); REPORT_TK_CALL("MyLnstkParametersSet_Test3()","ProArrayObjectAdd()",tk_status,tk_status != PRO_TK_NO_ERROR);
tk_status = ProArraySizeGet(LnstkParam.lnstk_param_value.members, &nValues);
TK_DEBUG01("ProArraySizeGet LnstkParam.lnstk_param_value.members nValues %d",nValues);
}
// tk_linestockparam_Single_Debug(LnstkParam);
tk_status = ProArrayObjectAdd ((ProArray*)&LnstkParams, PRO_VALUE_UNUSED, 1, &LnstkParam); REPORT_TK_CALL("MyLnstkParametersSet_Test3()","ProArrayObjectAdd()",tk_status,tk_status != PRO_TK_NO_ERROR);
tk_status = ProArraySizeGet(LnstkParams, &nValues);
TK_DEBUG01("ProArraySizeGet LnstkParams nValues %d",nValues);
TK_DEBUG00("Call ProLnstkParametersSet()");
tk_status = ProLnstkParametersSet( &LineStock,LnstkParams); REPORT_TK_CALL("MyLnstkParametersSet_Test3()","ProLnstkParametersSet()",tk_status,tk_status != PRO_TK_NO_ERROR);
TK_DEBUG00("Call ProArrayFree()");
tk_status = ProArrayFree( (ProArray*)&LnstkParam.lnstk_param_value.members ); REPORT_TK_CALL("MyLnstkParametersSet_Test3()","ProArrayFree()",tk_status,tk_status != PRO_TK_NO_ERROR);
tk_status = ProArrayFree( (ProArray*)&LnstkParams ); REPORT_TK_CALL("MyLnstkParametersSet_Test3()","ProArrayFree()",tk_status,tk_status != PRO_TK_NO_ERROR);
return PRO_TK_NO_ERROR;
}
Here the Debug Out
# 11:37:23 in MyLnstkParametersSet_Test3
# 11:37:23 MyLnstkParametersSet_Test3() ProArrayAlloc() 0
# 11:37:23 Configure form Obj LnstkParam Name 'BEND_ANGLE'
# 11:37:23 add value 90.000
# 11:37:23 ProParamvalueSet in LnstkParamMember
# 11:37:23 ProArrayObjectAdd to LnstkParamMembers
# 11:37:23 MyLnstkParametersSet_Test3() ProArrayObjectAdd() 0
# 11:37:23 ProArraySizeGet LnstkParam.lnstk_param_value.members nValues 1
# 11:37:23 add value 45.000
# 11:37:23 ProParamvalueSet in LnstkParamMember
# 11:37:23 ProArrayObjectAdd to LnstkParamMembers
# 11:37:23 MyLnstkParametersSet_Test3() ProArrayObjectAdd() 0
# 11:37:23 ProArraySizeGet LnstkParam.lnstk_param_value.members nValues 2
# 11:37:23 add value 60.000
# 11:37:23 ProParamvalueSet in LnstkParamMember
# 11:37:23 ProArrayObjectAdd to LnstkParamMembers
# 11:37:23 MyLnstkParametersSet_Test3() ProArrayObjectAdd() 0
# 11:37:23 ProArraySizeGet LnstkParam.lnstk_param_value.members nValues 3
# 11:37:23 add value 30.000
# 11:37:23 ProParamvalueSet in LnstkParamMember
# 11:37:23 ProArrayObjectAdd to LnstkParamMembers
# 11:37:23 MyLnstkParametersSet_Test3() ProArrayObjectAdd() 0
# 11:37:23 ProArraySizeGet LnstkParam.lnstk_param_value.members nValues 4
# 11:37:23 +++++++++++++++++++++++
# 11:37:23 ps_linestockparam_Single_Debug
# 11:37:23 +++++++++++++++++++++++
# 11:37:23 PRO_PARAM_DOUBLE is 50
# 11:37:23 PRO_PARAM_STRING is 51
# 11:37:23 PRO_PARAM_INTEGER is 52
# 11:37:23 PRO_PARAM_BOOLEAN is 53
# 11:37:23 PROLNSTKPRM_SINGLE is 0
# 11:37:23 PROLNSTKPRM_SINGLE is 1
# 11:37:23 ParamName is 'BEND_ANGLE'
# 11:37:23 linestockparamtype 1 SINGLE is 0 MULTIPLE is 1
# 11:37:23 LinestockParamType is PROLNSTKPRM_MULTIPLE
# 11:37:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 11:37:23 tk_status 0 nValues in members 4
# 11:37:23 k 0 member Name ''
# 11:37:23 Type Get tk_status 0 for member Name '' paramValueType 50
# 11:37:23 Value is PRO_PARAM_DOUBLE 50
# 11:37:23 param str value[0] '90.000000000'
# 11:37:23 k 1 member Name ''
# 11:37:23 Type Get tk_status 0 for member Name '' paramValueType 50
# 11:37:23 Value is PRO_PARAM_DOUBLE 50
# 11:37:23 param str value[1] '45.000000000'
# 11:37:23 k 2 member Name ''
# 11:37:23 Type Get tk_status 0 for member Name '' paramValueType 50
# 11:37:23 Value is PRO_PARAM_DOUBLE 50
# 11:37:23 param str value[2] '60.000000000'
# 11:37:23 k 3 member Name ''
# 11:37:23 Type Get tk_status 0 for member Name '' paramValueType 50
# 11:37:23 Value is PRO_PARAM_DOUBLE 50
# 11:37:23 param str value[3] '30.000000000'
# 11:37:23 Done ps_linestockparam_Single_Debug()
# 11:37:23 -------------------------------------
# 11:37:23 MyLnstkParametersSet_Test3() ProArrayObjectAdd() 0
# 11:37:23 ProArraySizeGet LnstkParams nValues 1
# 11:37:23 Call ProLnstkParametersSet()
# 11:37:23 MyLnstkParametersSet_Test3() ProLnstkParametersSet() 0
# 11:37:23 Call ProArrayFree()
# 11:37:23 MyLnstkParametersSet_Test3() ProArrayFree() 0
# 11:37:23 MyLnstkParametersSet_Test3() ProArrayFree() 0

