⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fam_test_fun.c

📁 UG程序源代码
💻 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 + -