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

📄 mon.cpp

📁 monlibs
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		Func_asm9_11(dummy,action);
		break;


		case RETVAL_ASM10_1:  //电气
		Func_asm10_1(dummy,action);
		break;

		case RETVAL_ASM11_1:  //电机
		Func_asm11_1(dummy,action);
		break;

		case RETVAL_ASM12_1:  //其它
		Func_asm12_1(dummy,action);
		break;


		case DONE:
		ProMenuDelete();
		break;

		default:
		ProMenuDelete();
		break;
	}
	return(0);
}


ProError UsrActivateCurrentWindow()
 {
	int window_id;
	ProError status;
	status=ProWindowCurrentGet(&window_id);
	status=ProWindowActivate(window_id);
	return status;

 }

ProError UsrRepaintWindow()
{
	int window_id;
	ProError status;
	status=ProWindowCurrentGet(&window_id);
	status=ProWindowRefresh(window_id);
	return status;
}

void CString2Wstring(CString *str1,wchar_t *str2)
{
	ProStringToWstring(str2, (char*)LPCTSTR(*str1));
}



//将元件插入当前的PART中
void  UsrPartComponentFn(CString path,CString zb)
{
 	ProPath			name;
	ProName			zbname,w_current_name ;
	ProMdl			mdl;
	ProMdl          zbmdl;
	ProMdl			current_model;
	ProError		status;
	ProFamtable  	famtable;
	ProFaminstance *famtable_instance;

	//转换path 由CString为ProPath name
	CString2Wstring(&path,name);
	//把模型导入内存中
	status=ProMdlLoad(name,PRO_MDL_UNUSED,PRO_B_FALSE,&mdl); 

	if(zb!=""){
		//转换zb 由CString为ProName zbname
		CString2Wstring(&zb,zbname);
		//获得当前的族表实例模型
		int j=0;
		int k=0;
		status = ProFamtableInit( mdl, &famtable );	
		status=ProUtilCollectFamtableInstance(&famtable,&famtable_instance);
		ProArraySizeGet((ProArray*)famtable_instance,&j);
		for(k=0;k<j;k++)  //寻找LISTCTRL控件中选中的族表项的实例
		{
			if(wcscmp(famtable_instance[k].name,zbname)==0)
			{
				break;
			}
		}
		status = ProFaminstanceCreate( &(famtable_instance[k]), &zbmdl ); //创建一个新的族表实例
	}

	if(zb!=""){
		status = ProMdlCurrentGet( &current_model );
		status = ProMdlNameGet( current_model, w_current_name );
 		status = ProArrayFree((ProArray *)&famtable_instance);
		status = ProMdlCopy(zbmdl, w_current_name, &current_model);
		status = ProMdlDisplay(current_model);
	}else{
		
	}

}

//装配型材的工作函数
void  UsrAssemblyComponentFn_xc(CString path,CString zb,double length)
{
 	ProPath			name;
	ProName			zbname;
	ProMdl			mdl;
	ProMdl          zbmdl;
 	ProSolid        asm_solid;
	ProError		status;
	ProFamtable  	famtable;
	ProFaminstance *famtable_instance;

	ProParameter param;
	ProName paraname;
	ProParamvalue value;
	ProModelitem modelitem;

	//转换path 由CString为ProPath name
	CString2Wstring(&path,name);
	//把模型导入内存中
	status=ProMdlLoad(name,PRO_MDL_UNUSED,PRO_B_FALSE,&mdl); 

	if(zb!=""){
		//转换zb 由CString为ProName zbname
		CString2Wstring(&zb,zbname);
		//获得当前的族表实例模型
		int j=0;
		int k=0;
		status = ProFamtableInit( mdl, &famtable );	
		status=ProUtilCollectFamtableInstance(&famtable,&famtable_instance);
		ProArraySizeGet((ProArray*)famtable_instance,&j);
		for(k=0;k<j;k++)  //寻找LISTCTRL控件中选中的族表项的实例
		{
			if(wcscmp(famtable_instance[k].name,zbname)==0)
			{
				break;
			}
		}
		status = ProFaminstanceCreate( &(famtable_instance[k]), &zbmdl ); //创建一个新的族表实例

	}


	//把刚刚读入的模型装配到当前的装配件模型中
	ProMdlCurrentGet((ProMdl*)&asm_solid);
	if(zb!=""){
		//更改参数LENGTH的值
		status = ProMdlToModelitem (zbmdl, &modelitem);
		ProStringToWstring(paraname,"LENGTH");
		status = ProParameterInit(&modelitem, paraname, &param);
		value.type = PRO_PARAM_DOUBLE;
		value.value.d_val=length;
		status = ProParameterValueSet(&param, &value);
		status=ProSolidRegenerate((ProSolid)zbmdl, PRO_REGEN_NO_FLAGS);

		AssemblyComp(asm_solid,(ProSolid)zbmdl);   
		status=ProArrayFree((ProArray *)&famtable_instance);
	}else{
		//更改参数LENGTH的值
		status = ProMdlToModelitem (mdl, &modelitem);
		ProStringToWstring(paraname,"LENGTH");
		status = ProParameterInit(&modelitem, paraname, &param);
		value.type = PRO_PARAM_DOUBLE;
		value.value.d_val=length;
		status = ProParameterValueSet(&param, &value);
		status=ProSolidRegenerate((ProSolid)zbmdl, PRO_REGEN_NO_FLAGS);

		AssemblyComp(asm_solid,(ProSolid)mdl);
	}

}

//装配元件的工作函数
void  UsrAssemblyComponentFn(CString path,CString zb)
{
 	ProPath			name;
	ProName			zbname;
	ProMdl			mdl;
	ProMdl          zbmdl;
 	ProSolid        asm_solid;
	ProError		status;
	ProFamtable  	famtable;
	ProFaminstance *famtable_instance;

	//转换path 由CString为ProPath name
	CString2Wstring(&path,name);
	//把模型导入内存中
	status=ProMdlLoad(name,PRO_MDL_UNUSED,PRO_B_FALSE,&mdl); 

	if(zb!=""){
		//转换zb 由CString为ProName zbname
		CString2Wstring(&zb,zbname);
		//获得当前的族表实例模型
		int j=0;
		int k=0;
		status = ProFamtableInit( mdl, &famtable );	
		status=ProUtilCollectFamtableInstance(&famtable,&famtable_instance);
		ProArraySizeGet((ProArray*)famtable_instance,&j);
		for(k=0;k<j;k++)  //寻找LISTCTRL控件中选中的族表项的实例
		{
			if(wcscmp(famtable_instance[k].name,zbname)==0)
			{
				break;
			}
		}
		status = ProFaminstanceCreate( &(famtable_instance[k]), &zbmdl ); //创建一个新的族表实例
		//status = ProFaminstanceMdlGet( &(famtable_instance[k]), &zbmdl ); //得到内存中存在的
	}


	//把刚刚读入的模型装配到当前的装配件模型中
	ProMdlCurrentGet((ProMdl*)&asm_solid);
	if(zb!=""){
		AssemblyComp(asm_solid,(ProSolid)zbmdl);   
		status=ProArrayFree((ProArray *)&famtable_instance);
	}else{
		AssemblyComp(asm_solid,(ProSolid)mdl);
	}

}



//把一个模型装配到装配件模型中                                     
BOOL AssemblyComp(ProSolid asm_solid,ProSolid comp)
{
	ProMdlType      type;
	ProMatrix		init_pos= {{ 1.0, 0.0, 0.0, 0.0 }, 
	{0.0, 1.0, 0.0, 0.0}, 
	{0.0, 0.0, 1.0, 0.0}, 
	{0.0, 0.0, 0.0, 1.0}};
	ProAsmcomp		feature; 
	ProError		status;
	int             feat_ids[1];
	ProBoolean      p_comp_is_underconstrained;
	status=ProMdlTypeGet((ProMdl)asm_solid,&type);
	if (type!=PRO_MDL_ASSEMBLY)
	{
//		ProMessageDisplay(UserMsg, "CURRENT MODLE IS NOT ASM");
//		AfxMessageBox("当前模型不是组件!");
		return FALSE;
	}   
	//1.装配
	status=ProAsmcompAssemble(asm_solid,comp,init_pos,&feature);
	status=ProAsmcompIsUnderconstrained(&feature,&p_comp_is_underconstrained);
	if (p_comp_is_underconstrained==PRO_B_TRUE)
	{
		status=ProAsmcompConstrRemove(&feature,-1);
	}	
	status=ProAsmcompConstrRedefUI(&feature);
	//取消装配和装配不成功
	if(status==PRO_TK_USER_ABORT || status==PRO_TK_BAD_INPUTS)
	{
		feat_ids[0]=feature.id;
		ProFeatureDelete(asm_solid,feat_ids,1,NULL,0);
		return FALSE;
	}
	return TRUE;
}
/*=========================================================================*\
    Function:	ProUtilCollectFamtableItem()
    Purpose:	Return a list of items in famtable
    Returns:	PRO_TK_NO_ERROR - success;
		PRO_TK_BAD_INPUTS - invalid parameters
\*=========================================================================*/
ProError ProUtilCollectFamtableItem( 
    ProFamtable     *p_famtable,     /* In:  The famtable */
    ProFamtableItem **famtable_item /* Out: ProArray with famtable items.
					    The function allocates 
					    memory for this argument, but 
					    you must free it. To free 
					    the memory, call the function 
					    ProArrayFree() */
)
{
    ProError	    status;

    if( famtable_item != NULL )
    {
	status=ProArrayAlloc(0,sizeof(ProFamtableItem),1,(ProArray*)famtable_item);
//	TEST_CALL_REPORT("ProArrayAlloc()", "ProUtilCollectFamtableItem()", status, status != PRO_TK_NO_ERROR);
	if( status == PRO_TK_NO_ERROR )
	{
//	    ACTION_TYPE( "ProFamtableItemAction", "ProFamtableItemFilter" );
	    status = ProFamtableItemVisit( p_famtable, 
                (ProFamtableItemAction)ProUtilCollect3ParamDBVisitAction,
		(ProFamtableItemFilter)ProUtilDefaultFilter,
                (ProAppData)&famtable_item );
//	    TEST_CALL_REPORT("ProFamtableItemVisit()", "ProUtilCollectFamtableItem()", status,status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND);
	    if( status != PRO_TK_NO_ERROR )
	    {
		ProArrayFree( (ProArray*)famtable_item );
		*famtable_item = NULL;
	    }
	}
    }
    else
	status = PRO_TK_BAD_INPUTS;

    return (status);

}
/*=========================================================================*\
    Function:	ProUtilCollect2ParamDBVisitAction()
    Purpose:	Add any object given by pointer to the Collection
    Returns:	PRO_TK_NO_ERROR - success;
\*=========================================================================*/
ProError ProUtilCollect2ParamDBVisitAction(
    void	    *p_object,	/* In:	The pointer to the object 
					being visited */
    ProAppData	    app_data)	/* In:	In fact it's ProArray** */
{
    ProError status; 
    ProArray *p_array;
    
    p_array = (ProArray*)((void**)app_data)[0];

//	TEST_CALL_REPORT( p_visit_action_type, "ProUtilCollect2ParamDBVisitAction",	PRO_TK_NO_ERROR, 0 );

    status = ProArrayObjectAdd(p_array, PRO_VALUE_UNUSED, 1, p_object );
    return (status);
}

/*=========================================================================*\
    Function:	ProUtilCollect3ParamDBVisitAction()
    Purpose:	Add any object given by pointer to the Collection
    Returns:	PRO_TK_NO_ERROR - success;
\*=========================================================================*/
ProError ProUtilCollect3ParamDBVisitAction(
    void	    *p_object,	/* In:	The pointer to the object 
					being visited */
    ProError	    status,	/* In:  The status returned by filter func */
    ProAppData	    app_data)	/* In:	In fact it's ProArray** */
{
    return (ProUtilCollect2ParamDBVisitAction(p_object, app_data));
}

ProError ProUtilDefaultFilter()
{
//	TEST_CALL_REPORT( p_filter_action_type, "ProUtilDefaultFilter", PRO_TK_NO_ERROR, 0 );

    return (PRO_TK_NO_ERROR);
}
/*=========================================================================*\
    Function:	ProUtilCollectFamtableInstance()
    Purpose:	Return a list of instance in famtable
    Returns:	PRO_TK_NO_ERROR - success;
		PRO_TK_BAD_INPUTS - invalid parameters
\*=========================================================================*/
ProError ProUtilCollectFamtableInstance( 
    ProFamtable     *p_famtable,     /* In:  The famtable */
    ProFaminstance **famtable_instance /* Out: ProArray with famtable items.
					    The function allocates 
					    memory for this argument, but 
					    you must free it. To free 
					    the memory, call the function 
					    ProArrayFree() */
)
{
    ProError	    status;

    if( famtable_instance != NULL )
    {
	status=ProArrayAlloc(0,sizeof(ProFaminstance),1,(ProArray*)famtable_instance);
//	TEST_CALL_REPORT("ProArrayAlloc()", "ProUtilCollectFamtableInstance()",status, status != PRO_TK_NO_ERROR);
	if( status == PRO_TK_NO_ERROR )
	{
//	    ACTION_TYPE( "ProFamtableInstanceAction", "ProFamtableInstanceFilter" )
	    status = ProFamtableInstanceVisit( p_famtable, 
                (ProFamtableInstanceAction)ProUtilCollect3ParamDBVisitAction,
		(ProFamtableInstanceFilter)ProUtilDefaultFilter,
                (ProAppData)&famtable_instance );
//	    TEST_CALL_REPORT("ProFamtableInstanceVisit()", "ProUtilCollectFamtableInstance()", status,status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND);
	    if( status != PRO_TK_NO_ERROR )
	    {
		ProArrayFree( (ProArray*)famtable_instance );
		*famtable_instance = NULL;
	    }
	}
    }
    else
	status = PRO_TK_BAD_INPUTS;

    return (status);
}


BOOL IfFileExist(CString folder,CString menufile){
	CString filename=libpath+folder+menufile;
	CFile file;
	if(file.Open(filename,CFile::modeRead)==0)
	{
		AfxMessageBox(CString(_T("MENU文件不存在或文件名不正确!")));
		return FALSE;
	}
	file.Close();
	return TRUE;
}
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////

/////////////////////////////////////////////////
/*
	各个菜单的消息响应函数
*/
/////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////
//连接件与紧固件
int Func_asm1_1(char *RetChar , int Whatever)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

⌨️ 快捷键说明

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