📄 fam_test_fun.c
字号:
#include <stdio.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_part.h>
#include <uf_fam.h>
#include <uf_modl.h>
#include <uf_mtx.h>
#include <uf_assem.h>
#include "fam_test_fun.h"
int FAM_TEST_ask_member_index(tag_t family_tag, char *attribute_name,char *attribute_value,int *member_index)
{
UF_FAM_family_data_t family_data;
UF_FAM_attribute_data_t attribute_data;
UF_FAM_member_data_t member_data;
int i,m_att_count,row_count,column_index;
UF_FAM_ask_family_data (family_tag,&family_data);
m_att_count=family_data.attribute_count;
for(i=0;i<m_att_count;i++)
{
UF_FAM_ask_attribute_data(family_data.attributes[i],&attribute_data);
if(strcmp(attribute_data.name,attribute_name)==0)
{
column_index=i;
UF_FAM_free_attribute_data(&attribute_data);
break;
}
UF_FAM_free_attribute_data(&attribute_data);
}
if(i==m_att_count)
{
UF_FAM_free_family_data(&family_data);
uc1601("没找到选定的属性OS_PART_NAME",1);
return 1;
}
UF_FAM_free_family_data(&family_data);
UF_FAM_ask_member_column_data(family_tag,column_index,&member_data);
row_count=member_data.value_count;
for(i=0;i<row_count;i++)
{
if(strcmp(member_data.values[i],attribute_value)==0)
{
*member_index=i;
break;
}
}
UF_FAM_free_member_data(&member_data);
if(i==row_count)
{
uc1601("在选定的属性中没找到对应的属性值",1);
return 1;
}
else return 0;
}
int FAM_TEST_open_in_part(FAM_TEST_data_struct *p_target_data)
{
char *ptr,part_name[MAX_FSPEC_SIZE+1];
tag_t part_tag,family_tag;
UF_PART_load_status_t error_status;
tag_t *fam_tags;
int family_count,err,row_index;
UF_translate_variable("UGII_STANDARD_PATH",&ptr);
if(ptr==NULL)
{
uc1601("环境变量UGII_STANDARD_PATH不存在",1);
return 1;
}
strcpy(part_name,ptr);
strcat(part_name,p_target_data->part_name);
err=UF_PART_open(part_name,&part_tag,&error_status);//_quiet
UF_PART_free_load_status(&error_status);
if(err!=0)
{
uc1601("打开零件失败,请检查该标准件是否已经打开",1);
return 1;
}
UF_PART_ask_families (part_tag,&family_count,&fam_tags);
if(family_count==0){uc1601("部件中没有族表",1); return 1;}
family_tag=fam_tags[0];UF_free(fam_tags);
err=FAM_TEST_ask_member_index(family_tag,"OS_PART_NAME",p_target_data->part_spec,&row_index);
if(err==1) return 1;
UF_PART_apply_family_instance (family_tag,row_index);
UF_MODL_edit_exp(p_target_data->part_lengthen);
err=UF_MODL_update();
return err;
}
int FAM_TEST_insert_in_assembly(FAM_TEST_data_struct *p_target_data)
{
char *ptr,part_name[MAX_FSPEC_SIZE+1];
int ia2=1,i,err,m_att_count;
int response, family_count;
double CSYS[9],Origin[3];
double x_vec[3],y_vec[3],csys_matrix[6];
tag_t work_part,fam_inst_tag,fam_part_tag,family_tag;
tag_t work_part_occ,fam_part_occ;
tag_t *fam_tags,attributes[1];
UF_PART_load_status_t load_status;
UF_FAM_attribute_data_t attribute_data;
UF_FAM_family_data_t family_data;
UF_ASSEM_instance_intent_t assem_intent_data;
UF_FAM_intent_data_t fam_intent_data;
char *p_match_criteria[1];
logical apply_result=TRUE;
UF_ASSEM_instance_status_t instance_status;
int row_index;
UF_FAM_member_data_t member_data;
char *pdest,leng_value[20];int len;
UF_translate_variable("UGII_STANDARD_PATH",&ptr);
if(ptr==NULL)
{
uc1601("环境变量UGII_STANDARD_PATH不存在",1);
return 1;
}
strcpy(part_name,ptr);
strcat(part_name,p_target_data->part_name);
response=uc1630 ("确定标准件位置的坐标系",&ia2,CSYS,Origin);
if(response!=3) return 1;
UF_MTX3_x_vec(CSYS,x_vec);UF_MTX3_y_vec(CSYS,y_vec);
for(i=0;i<3;i++)
{
csys_matrix[i]=x_vec[i];
csys_matrix[i+3]=y_vec[i];
}
work_part=UF_ASSEM_ask_work_part();
work_part_occ=UF_ASSEM_ask_work_occurrence();
err=UF_ASSEM_add_part_to_assembly(work_part,part_name,NULL,p_target_data->part_spec,
Origin,csys_matrix,0,&fam_inst_tag,&load_status );
UF_PART_free_load_status(&load_status);
if(err!=0) return err;
fam_part_occ=UF_ASSEM_ask_part_occ_of_inst(work_part_occ,fam_inst_tag);
fam_part_tag=UF_ASSEM_ask_prototype_of_occ(fam_part_occ);
UF_PART_ask_families(fam_part_tag,&family_count,&fam_tags);
if(family_count==0)
{
uc1601("部件中没有族表",1);
return 1;
}
family_tag=fam_tags[0];UF_free(fam_tags);
UF_FAM_ask_family_data(family_tag,&family_data);
m_att_count=family_data.attribute_count;
for(i=0;i<family_data.attribute_count;i++)
{
UF_FAM_ask_attribute_data(family_data.attributes[i],&attribute_data);
if(strcmp(attribute_data.name,"OS_PART_NAME")==0)
{
attributes[0]=family_data.attributes[i];
UF_FAM_free_attribute_data(&attribute_data);
break;
}
UF_FAM_free_attribute_data(&attribute_data);
}
if(i==m_att_count)
{
uc1601("没有找到属性OS_PART_NAME",1);
UF_FAM_free_family_data(&family_data);
return 1;
}
UF_FAM_free_family_data(&family_data);
FAM_TEST_ask_member_index(family_tag,"OS_PART_NAME",p_target_data->part_spec,&row_index);
UF_FAM_ask_member_row_data (family_tag,row_index,&member_data);
//以下5行代码用于获取lengthen的长度值,如lengthen=45,只取45
for(i=0;i<20;i++)
leng_value[i]='\0';
pdest=strrchr(p_target_data->part_lengthen,'=');
len=strlen(pdest);
strncpy(leng_value,pdest+1,len-1);
member_data.values[member_data.value_count-1]=leng_value;
err=UF_FAM_edit_member(family_tag,row_index,&member_data);
UF_FAM_free_member_data(&member_data);
UF_MODL_update();
fam_intent_data.family=family_tag;
fam_intent_data.attribute_count=1;
fam_intent_data.attributes=attributes;
p_match_criteria[0]=p_target_data->part_spec;
fam_intent_data.match_criteria=p_match_criteria;
fam_intent_data.name="test";
assem_intent_data.fam_intent=&fam_intent_data;
err=UF_ASSEM_set_instance_intent(fam_inst_tag,&assem_intent_data);
if(err!=0) return err;
err=UF_ASSEM_eval_instance_intent (&fam_inst_tag,apply_result,&instance_status);
if(err!=0) return err;
return err;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -