|
马上注册登录,享用更多网站功能!
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
小弟我做一个UG二次开发的小程序,利用udf自定义的通孔特征对板零件打孔。
首先我做了一个UDF孔特征,这个特征原本只有两个reference(一个起始面,一个中止面),但由于调用UDF孔特征时需要对孔定位(不使用UG本身的定位对话框),所以还需要指定一条孔的轴线(为孔定位一条直线)。所以我在建立通孔自定义特征时添加了一条直线作为特征的第三个reference。
如图:
c:/aa.bmp
我在程序中去调用这个UDF的时候,代码如下:
//放置自定义特征
void putHole(char* filename,tag_t pre_part,char* Diameter)
{
tag_t part;
tag_t feature = NULL_TAG;
UF_PART_load_status_t error_status;
tag_t m_tFeature = NULL_TAG;
tag_t m_tUDF = NULL_TAG;
char *feature_name;//特征的名称
tag_t *parents = NULL;
char **parents_prompt;
int num_parents;
tag_t *expression;
char **expression_prompt;
int num_expression;
int ret;
char **new_exp_rhs;
tag_t prev_work_part;
tag_t *new_parents = NULL;
tag_t new_udf_feature;
int error;
//logical flag;
UF_PART_open_quiet(filename, &part, &error_status);
UF_OBJ_cycle_objs_in_part(part,UF_feature_type,&m_tFeature);
while(m_tFeature!=NULL_TAG)
{
UF_MODL_ask_feat_name(m_tFeature,&feature_name);//得到特征的名称
if(!strcmp(feature_name,"smarthole(2)"))
{
m_tUDF = m_tFeature;
break;
}
UF_OBJ_cycle_objs_in_part(part,UF_feature_type,&m_tFeature);
}
ret = UF_MODL_ask_udf_definition(m_tUDF, &parents, &parents_prompt,
&num_parents, &expression, &expression_prompt, &num_expression);
//查询该UDF的定义
new_exp_rhs = (char **)(UF_allocate_memory(sizeof(char *) * num_expression, &error));
for (int i = 0; i < num_expression; i++)
{
new_exp_rhs = (char *)(UF_allocate_memory(sizeof(char) * 20, &error));
strcpy(new_exp_rhs, Diameter);
}
UF_ASSEM_set_work_part_quietly(pre_part, &prev_work_part);
new_parents = (tag_t *)(UF_allocate_memory(sizeof(tag_t) * num_parents, &error));
new_parents[0] = HoleInstance.FirstFace; //给起始面赋值tag
new_parents[1] = HoleInstance.LastFace; //给中止面赋值tag
new_parents[2] = HoleInstance.Axis; //给轴线赋值tag
//UF_MODL_register_rpo_routine(UF_MODL_udf_rpo_menu);
UF_MODL_create_instantiated_udf(m_tUDF, "smarthole.cgm", parents,
new_parents, num_parents, expression, new_exp_rhs, num_expression,
&new_udf_feature); //创建udf
//UF_CALL(UF_MODL_unregister_rpo_routine());
UF_free(parents);
UF_free(new_parents);
UF_free_string_array(num_parents, parents_prompt);
UF_free(expression);
UF_free_string_array(num_expression, expression_prompt);
UF_free(new_exp_rhs);
}
结果是,如果我不指定轴线则程序可以打孔,我将new_parents[2] = HoleInstance.Axis;后程序则错误,且我不知道为什么错了,请各位论坛元老,大侠指点。感激!! |
|