📄 mon.cpp
字号:
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( ¤t_model );
status = ProMdlNameGet( current_model, w_current_name );
status = ProArrayFree((ProArray *)&famtable_instance);
status = ProMdlCopy(zbmdl, w_current_name, ¤t_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, ¶m);
value.type = PRO_PARAM_DOUBLE;
value.value.d_val=length;
status = ProParameterValueSet(¶m, &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, ¶m);
value.type = PRO_PARAM_DOUBLE;
value.value.d_val=length;
status = ProParameterValueSet(¶m, &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 + -