Proe Creo 二次開發之UDF特徵

	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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章