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

📄 project_part_parameter.c

📁 基于UG的压块参数化设计
💻 C
字号:
/*****************************************************************************
**
**  Project_Part_parameter.c
**
**  Description:
**     Contains Unigraphics entry points for the application.
**
*****************************************************************************/

/*  Include files */
#include <stdio.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_mb.h>
#include <uf_part.h>
#include <stdlib.h> 
#include "Project_Part_parameter.h"
#include "workpart_para_edit_dialog.h"
/*****************************************************************************
**  Activation Methods
*****************************************************************************/

/*  Unigraphics Startup
**      This entry point activates the application at Unigraphics startup */
extern DllExport void ufsta( char *param, int *returnCode, int rlen )
{
   UF_MB_cb_status_t Project_Part_DISPLAY_PART_edit_fun( UF_MB_widget_t,UF_MB_data_t,UF_MB_activated_button_p_t );
	static UF_MB_action_t actionTable[]=
	{
			{"ASSEMBLY_PART_PARA_EDIT",Project_Part_DISPLAY_PART_edit_fun,NULL},
			{NULL,NULL,NULL}
	};
    int errorCode = UF_initialize();

    if ( 0 == errorCode )
    {

        /* TODO: Add your application code here */
		UF_MB_add_actions(actionTable);
        /* Terminate the API environment */
        errorCode = UF_terminate();
    }
    /* Print out any error messages */
    PrintErrorMessage( errorCode );
}
void Project_PartParameterFree(DB_part_para_struct *p_part_para)
{
	DB_part_para_struct  * p_para,*p_para_next;
	int             i,num=0;

	if(p_part_para==NULL)
		return;
	p_para=p_part_para;
	while(p_para!=NULL)
	{
		num++;
		p_para=p_para->next;
	}
	p_para=p_part_para;
	p_para_next=p_part_para;
	for(i=0;i<num;i++)
	{
		p_para_next=p_para_next->next;
		free(p_para);
		p_para=p_para_next;
	}
}

static UF_MB_cb_status_t Project_Part_DISPLAY_PART_edit_fun(UF_MB_widget_t widget
			,UF_MB_data_t client_data
			,UF_MB_activated_button_p_t call_button)
{
	tag_t                 disp_part;
	Project_workpart_edit m_part_para;
	int					  response;

	/*
    遍历装配体,根据系列值、部件实例名从数据库中获取各个部件的参数表达式
	获取显示部件的标识,通过与装配模型中各个部件的标识比较获取当前显示部件的参数表达式
	结构体DB_part_para_struct *p_para的指针,将其赋值给m_part_para.p_para。如以下代码所示:

    VA_component            *p_comp=NULL,*p_goal_comp=NULL;
    DB_part_para_struct      *p_backup_para=NULL,*p_first,*p_second,*p_next;

	displaypart_tag=UF_PART_ask_display_part( );
	p_comp=gbl_asm->head_comp; //gbl_asm->head_comp为VA_component装配模型的根节点

    Project_SearchForDisplayPart(displaypart_tag,p_comp,&p_goal_comp);//该函数用于从VA_component装配模型查找当前显示部件的节点
    if(p_goal_comp==NULL)
	{
		uc1601("没有找到该显示零部件",1);
		return UF_MB_CB_CONTINUE ;
	}
	p_next=p_goal_comp->part_parameter;
	while(p_next!=NULL)
	{
	   	num++;
	    p_next=p_next->next;
	}
	p_next=p_goal_comp->part_parameter;
	for(i=0;i<num;i++)
	{
	    p_first=(DB_part_para_struct *)malloc(sizeof(DB_part_para_struct));
	   	p_first->series_num=p_next->series_num;
	   	strcpy(p_first->dim_name,p_next->dim_name);
		strcpy(p_first->dim_value,p_next->dim_value);
		strcpy(p_first->dim_desc,p_next->dim_desc);
		strcpy(p_first->part_name,p_next->part_name);
	    p_first->next=NULL;
		if(i==0)
		{
			p_backup_para=p_first;
			p_second=p_first;
		}
		else
		{
			p_second->next=p_first;
			p_second=p_first;
		} 
		p_next=p_next->next;
	}
    m_part_para.num=num;
	m_part_para.p_para=p_backup_para;
	m_part_para.for_work_or_display=UG_FOR_DISPLAY_PART;
	*/
	m_part_para.for_work_or_display=0;
	m_part_para.num=0;
	m_part_para.p_para=NULL;

    UF_initialize();
	disp_part=UF_PART_ask_display_part();
	if(disp_part==NULL_TAG)
	{
		uc1601("当前没有显示部件",1);
		return UF_MB_CB_CONTINUE;
	}
	LaunchWorkPartParameterEditDialog(&response,&m_part_para);
	/*
	if(response==UF_UI_CANCEL)
	     Project_PartParameter_Free(m_part_para.p_para);释放内存
	else //用户确定保存到数据库,调用操作数据库函数,更新数据库
	{
	     DB_DimToDBAndCheck(series_num,instance_name,m_part_para.p_para);
		                      系列值      实例名         尺寸参数信息
	}
    */
	Project_PartParameterFree(m_part_para.p_para);
    return UF_MB_CB_CONTINUE;
	

}

/*****************************************************************************
**  Utilities
*****************************************************************************/

/* Unload Handler
**     This function specifies when to unload your application from Unigraphics.
**     If your application registers a callback (from a MenuScript item or a
**     User Defined Object for example), this function MUST return
**     "UF_UNLOAD_UG_TERMINATE". */
extern int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_UG_TERMINATE );
}

/* PrintErrorMessage
**
**     Prints error messages to standard error and the Unigraphics status
**     line. */
static void PrintErrorMessage( int errorCode )
{
    if ( 0 != errorCode )
    {
        /* Retrieve the associated error message */
        char message[133];
        UF_get_fail_message( errorCode, message );

        /* Print out the message */
        UF_UI_set_status( message );

        fprintf( stderr, "%s\n", message );
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -