ProUdfdata udf_data;
ProUdfreference reference_array[40];
ProUdfvardim vardim_array [40];
ProUdfvarparam varparam_array [40];
ProSolid solid;
ProUdfCreateOption options[] = {PROUDFOPT_EDIT_MENU};
ProGroup udf;
int i, length;
int vardim_array_size = 0;
status = ProMdlCurrentGet ((ProMdl*)&solid);
PT_TEST_LOG_SUCC ("ProMdlCurrentGet()");
ProUdfdataAlloc (&udf_data);
ProWstringLengthGet (db_data->db_udf_data->instance_name, &length);
/*------------------------------------------------------------------------------------------------------*\
Set UDF name (and instance name)
\*------------------------------------------------------------------------------------------------------*/
if (length > 0)
{
ProUdfdataNameSet (udf_data, db_data->db_udf_data->gph_name, db_data->db_udf_data->instance_name);
//status = ProUdfdataInstancenameSet (udf_data, db_data->db_udf_data->instance_name);
}
else
ProUdfdataNameSet (udf_data, db_data->db_udf_data->gph_name, NULL);
/*------------------------------------------------------------------------------------------------------*\
Set some default placement parameters.
\*------------------------------------------------------------------------------------------------------*/
status = ProUdfdataDimdisplaySet (udf_data, PROUDFDIMDISP_NORMAL);
PT_TEST_LOG_SUCC ("ProUdfdataDimdisplaySet()");
status = ProUdfdataScaleSet (udf_data, PROUDFSCALETYPE_SAME_DIMS, 0.0);
PT_TEST_LOG_SUCC ("ProUdfdataScaleSet()");
/*------------------------------------------------------------------------------------------------------*\
Set the UDF references
\*------------------------------------------------------------------------------------------------------*/
for (i = 0; i < db_data->db_udf_data->num_references; i++)
{
status = ProUdfreferenceAlloc (db_data->db_udf_data->reference_array [i].prompt,
db_data->db_udf_data->reference_array [i].sel_ref, PRO_B_FALSE, &reference_array[i]);
PT_TEST_LOG_SUCC ("ProUdfreferenceAlloc()");
status = ProUdfdataReferenceAdd (udf_data, reference_array[i]);
PT_TEST_LOG_SUCC ("ProUdfdataReferenceAdd()");
}
/*------------------------------------------------------------------------------------------------------*\
Set the UDF variable dimensions
\*------------------------------------------------------------------------------------------------------*/
if (db_data->db_udf_data->vardim_array != NULL)
{
for (i = 0; i < db_data->db_udf_data->num_vardims; i++)
{
status = ProUdfvardimAlloc (db_data->db_udf_data->vardim_array[i].dim_symbol,
db_data->db_udf_data->vardim_array[i].value,
db_data->db_udf_data->vardim_array[i].type,
&vardim_array [i]);
PT_TEST_LOG_SUCC ("ProUdfvardimAlloc()");
status = ProUdfdataUdfvardimAdd (udf_data, vardim_array[i]);
PT_TEST_LOG_SUCC ("ProUdfdataUdfvardimAdd()");
}
}
/*------------------------------------------------------------------------------------------------------*\
Set the UDF variable parameters
\*------------------------------------------------------------------------------------------------------*/
if (db_data->db_udf_data->varparam_array != NULL)
{
ProModelitem item;
for (i = 0; i < db_data->db_udf_data->num_varparams; i++)
{
item.owner = NULL;
item.id = db_data->db_udf_data->varparam_array[i].owner_id;
item.type = db_data->db_udf_data->varparam_array[i].owner_type;
status = ProUdfvarparamAlloc (db_data->db_udf_data->varparam_array[i].param_name,
&item,
&varparam_array [i]);
PT_TEST_LOG_SUCC ("ProUdfvarparamAlloc()");
status = ProUdfvarparamValueSet (varparam_array [i], &db_data->db_udf_data->varparam_array[i].value);
PT_TEST_LOG_SUCC ("ProUdfvaparamValueSet()");
status = ProUdfdataVarparamAdd (udf_data, varparam_array[i]);
PT_TEST_LOG_SUCC ("ProUdfdataUdfvarparamAdd()");
}
}
/*------------------------------------------------------------------------------------------------------*\
Create the UDF
\*------------------------------------------------------------------------------------------------------*/
status = ProUdfCreate (solid, udf_data, NULL,
options, 0, &udf);
PT_TEST_LOG_SUCC ("ProUdfCreate()");
/*------------------------------------------------------------------------------------------------------*\
Rename the new UDF group
\*------------------------------------------------------------------------------------------------------*/
if (db_data->db_udf_data->udf_name_set)
{
ProFeature* feats;
status = ProGroupFeaturesCollect (&udf, &feats);
PT_TEST_LOG_SUCC ("ProGroupFeaturesCollect()");
status = ProModelitemNameSet (&feats [0], db_data->db_udf_data->udf_name);
PT_TEST_LOG_SUCC ("ProModelitemNameSet()");
ProTreetoolRefresh (solid);
ProArrayFree ((ProArray*)&feats);
}
/*------------------------------------------------------------------------------------------------------*\
Clean up allocated memory
\*------------------------------------------------------------------------------------------------------*/
for (i = 0; i < db_data->db_udf_data->num_references; i++)
{
ProUdfreferenceFree (reference_array [i]);
}
if (db_data->db_udf_data->vardim_array != NULL)
{
for (i = 0; i < db_data->db_udf_data->num_vardims; i++)
{
ProUdfvardimFree (vardim_array [i]);
}
}
if (db_data->db_udf_data->varparam_array != NULL)
{
for (i = 0; i < db_data->db_udf_data->num_varparams; i++)
{
ProUdfvarparamFree (varparam_array [i]);
}
}
ProUdfdataFree (udf_data);