/*====================================================================*\ FILE : TestMfgFixt.c PURPOSE : Test functions for mfg fixturing HISTORY.. DATE BUILD AUTHOR MODIFICATIONS 12-Nov-96 H-01-16 mgs $$1 Created 13-Nov-96 H-01-16 mgs $$2 Fixed compile errors on sgi 19-Nov-96 H-01-17 Bojan $$3 Added more tests. 22-Nov-96 H-01-18 mgs $$4 Added argument to ProUtilElementtreePrint() 20-Jan-97 H-01-24 Igor $$5 added TEST_CALL_REPORT macros for some fncts 27-Jan-97 H-01-25 Igor $$6 Added fixture activation 28-Jan-97 H-01-25 Igor $$7 Bug fixed 15-Sep-97 H-03-22 Pavel $$8 Replace Pro/D on Pro/E 06-Oct-97 H-03-25 Pavel $$9 More includes \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/Toolkit includes \*--------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*--------------------------------------------------------------------*\ Application macros \*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*\ Application data types \*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*\ Application global/external data \*--------------------------------------------------------------------*/ #define TK_FIXT_CREATE 1 << 15 #define TK_FIXT_MODIFY 1 << 16 #define TK_FIXT_DELETE 1 << 17 #define TK_FIXT_ACTIVATE 1 << 18 ProError test_func(ProAppData, ProAppData, int); /*====================================================================*\ FUNCTION : ProTestFixtureCreate PURPOSE : Create Fixture feature \*====================================================================*/ ProError ProTestFixtureCreate(MfgMenuChoice *obj_action) { ProElement fixt_elem_tree = (ProElement)NULL; /* Entire tree */ ProElement fixt_elem = (ProElement)NULL; /* One element */ ProError status = PRO_TK_NO_ERROR; int feat_type = PRO_FEAT_FIXSETUP; static char* menu[] = {"TkFixtSet","TkMfgDQ",""}; int menu_id, n_menus; /*--------------------------------------------------------------------*\ Allocate space for workcell element tree \*--------------------------------------------------------------------*/ if (status == PRO_TK_NO_ERROR) { status = ProElementAlloc ( PRO_E_FEATURE_TREE, &fixt_elem_tree ); TEST_CALL_REPORT("ProElementAlloc()", "ProTestFixtureCreate()", status, (status != PRO_TK_NO_ERROR)); /*--------------------------------------------------------------------*\ Set feature type \*--------------------------------------------------------------------*/ if (status == PRO_TK_NO_ERROR) { status = ProElementAlloc ( PRO_E_FEATURE_TYPE, &fixt_elem ); TEST_CALL_REPORT("ProElementAlloc()", "ProTestFixtureCreate()", status, (status != PRO_TK_NO_ERROR)); if (status == PRO_TK_NO_ERROR) status = ProUtilElementBuild ( PRO_VALUE_TYPE_INT, &feat_type, &fixt_elem); if (status == PRO_TK_NO_ERROR) status = ProElemtreeElementAdd(fixt_elem_tree, NULL, fixt_elem); TEST_CALL_REPORT("ProElemtreeElementAdd()","ProTestFixtureCreate()", status, (status != PRO_TK_NO_ERROR)); } } /*--------------------------------------------------------------------*\ Create the setup menu \*--------------------------------------------------------------------*/ ProMenuFileRegister("TkFixtSet","tkfixtset.mnu",&menu_id); ProMenubuttonActionSet("TkFixtSet","TkFixtSet", (ProMenubuttonAction)ProUtilMenuKill, NULL,2); ProMenubuttonActionSet("TkFixtSet","-Name", ProTestFixtAction, (ProAppData)&fixt_elem_tree,PRO_E_FEAT_NAME ); ProMenubuttonActionSet("TkFixtSet","-Component", ProTestFixtAction, (ProAppData)&fixt_elem_tree, PRO_E_COMPONENTS ); ProMenubuttonActionSet("TkFixtSet","-Setup time", ProTestFixtAction, (ProAppData)&fixt_elem_tree, PRO_E_SETUP_TIME ); ProMenuFileRegister("TkMfgDQ","tkmfgdq.mnu", &menu_id ); ProMenubuttonActionSet("TkMfgDQ","TkMfgDQ", (ProMenubuttonAction) ProMenuDelete, NULL, 0); ProMenubuttonActionSet("TkMfgDQ","Done", ProTestFixtCreate, (ProAppData) &fixt_elem_tree, 0 ); ProMenubuttonActionSet("TkMfgDQ","Quit",(ProMenubuttonAction) ProUtilMenuKill, NULL, 2 ); ProCompoundmenuCreate(menu, &n_menus); return (1); } /*====================================================================*\ FUNCTION : ProTestFixtCreate PURPOSE : Create the fixture from the element tree \*====================================================================*/ int ProTestFixtCreate ( ProAppData element_tree, int dummy ) { ProSelection selection; ProFeature fixture; ProErrorlist errors; ProMfg mfg_model; ProSolid mfg_solid; ProAssembly mfg_asm; ProAsmcomppath comp_path; ProModelitem model_item; ProError status; int id; if ( element_tree == NULL) return PRO_TK_BAD_INPUTS; (void) ProUtilElementtreePrint(*((ProElement*)element_tree), PRO_TEST_INFO_WINDOW, NULL); status = ProTestGetModels( &mfg_model, &mfg_solid, &comp_path); if (status == PRO_TK_NO_ERROR) { status = ProMfgAssemGet( mfg_model, &mfg_asm ); TEST_CALL_REPORT("ProMfgAssemGet()", "ProTestFixtCreate()", status, (status != PRO_TK_NO_ERROR)); } if (status == PRO_TK_NO_ERROR) { status = ProMdlIdGet((ProMdl) mfg_asm, &id ); TEST_CALL_REPORT("ProMfgAssemGet()", "ProTestFixtCreate()", status, (status != PRO_TK_NO_ERROR)); } if (status == PRO_TK_NO_ERROR) { status = ProModelitemInit( mfg_asm, id, PRO_ASSEMBLY, &model_item ); TEST_CALL_REPORT("ProModelitemInit()","ProTestFixtCreate()", status, (status != PRO_TK_NO_ERROR)); } if ( status == PRO_TK_NO_ERROR) { status = ProSelectionAlloc(NULL, &model_item, &selection); TEST_CALL_REPORT("ProSelectionAlloc()", "ProTestFixtCreate()", status, (status != PRO_TK_NO_ERROR)); } if (status == PRO_TK_NO_ERROR) { status = ProFeatureCreate( selection, *((ProElement*)element_tree), NULL, 0, &fixture, &errors); TEST_CALL_REPORT("ProFeatureCreate()", "ProTestFixtCreate()", status, (status != PRO_TK_NO_ERROR)); } /* status = ProElementFree(*((ProElement*)element_tree); TEST_CALL_REPORT("ProElementFree()", "ProTestCreateWkcell()", status, (status != PRO_TK_NO_ERROR)); */ ProMenuDelete(); return(status); } /*====================================================================*\ FUNCTION : ProTestFixtAction PURPOSE : Prompt user for a specified element and add it to tree. \*====================================================================*/ int ProTestFixtAction ( ProAppData element, int element_id ) { wchar_t wstr[PRO_LINE_SIZE]; char str[PRO_LINE_SIZE]; void *entry; ProError status = PRO_TK_NO_ERROR; ProElement elem = (ProElement)NULL; int value_type, comp_id, c_range[2] = {0,9999}; double d_val, d_range[2] = {0.0, 9999.9}; status = ProElementAlloc( element_id, &elem ); if (status == PRO_TK_NO_ERROR) { switch ( element_id ) { case PRO_E_FEAT_NAME: sprintf(str,"Enter fixture name : "); ProUtilMsgPrint("gen", "TEST %0s", str); if (!ProUtilStringGet(wstr, NULL, PRO_LINE_SIZE)) { status = PRO_TK_USER_ABORT; } else { value_type = PRO_VALUE_TYPE_WSTRING; entry = wstr; } break; case PRO_E_COMPONENTS: sprintf(str,"Enter fixture component id : "); ProUtilMsgPrint("gen", "TEST %0s", str); if (!ProUtilIntGet(c_range, NULL, &comp_id)) { status = PRO_TK_USER_ABORT; } else { value_type = PRO_VALUE_TYPE_INT; entry = &comp_id; } break; case PRO_E_SETUP_TIME: sprintf(str,"Enter fixture setup time : "); ProUtilMsgPrint("gen", "TEST %0s", str); if (!ProUtilDoubleGet(d_range, NULL, &d_val)) { status = PRO_TK_USER_ABORT; } else { value_type = PRO_VALUE_TYPE_DOUBLE; entry = &d_val; } break; default: status = PRO_TK_BAD_INPUTS; } if (status == PRO_TK_NO_ERROR) { status = ProUtilElementBuild(value_type, entry, &elem); if (status == PRO_TK_NO_ERROR) { status = ProElemtreeElementAdd(*(ProElement*)element, NULL, elem); TEST_CALL_REPORT("ProElemtreeElementAdd()", "ProTestFixtAction()", status, (status != PRO_TK_NO_ERROR)); } } } return ((int)status); } ProError test_func(ProAppData p_fixt, ProAppData app_data, int ts) { fprintf(stderr, "In test_func()\n"); fprintf(stderr, "Fixture id = %d\n", ((ProFixture*)p_fixt)->id ); fprintf(stderr, "Test double = %f\n", *((double*)app_data)); fprintf(stderr, "Test int = %d\n", ts ); return PRO_TK_NO_ERROR; } /*====================================================================*\ FUNCTION : ProTestFixtList PURPOSE : \*====================================================================*/ int ProTestFixtList( MfgMenuChoice *obj_action ) { ProError status; double dval = 678.323; int ival = 123; status = ProUtilMfgobjAction ( obj_action, MFGOBJ_FIXTURE, obj_action->mfgobj_list->n_fixture, test_func, &dval, ival ); return 0; } /*====================================================================*\ FUNCTION : ProTestFixtureDisp PURPOSE : \*====================================================================*/ ProError ProTestFixtureDisp( MfgMenuChoice *obj_action) { int menu_id, action; /*--------------------------------------------------------------------*\ Create the fixture menu \*--------------------------------------------------------------------*/ ProMenuFileRegister("TkFixt", "tkfixt.mnu", &menu_id); ProMenubuttonActionSet("TkFixt", "Activate", (int (*)(void *, int))ProTestFixtureActivate, (ProAppData)obj_action, 0); ProMenubuttonActionSet("TkFixt", "Deactivate All", (ProMenubuttonAction)ProTestFixtDeactivate, NULL, 0); ProMenubuttonActionSet("TkFixt", "Done", (ProMenubuttonAction)ProMenuDelete, NULL, 0); ProMenubuttonActionSet("TkFixt", "TkFixt", (ProMenubuttonAction)ProMenuDelete, NULL, 0); ProMenuCreate (PROMENUTYPE_MAIN, "TkFixt", &menu_id); ProMenuProcess ("", &action); return PRO_TK_NO_ERROR; } /*====================================================================*\ FUNCTION : ProTestFixtDeactivate PURPOSE : Deactivate all fixtures \*====================================================================*/ ProError ProTestFixtDeactivate() { ProError status = PRO_TK_NO_ERROR; ProMfg mfg_model; ProSolid mfg_solid; ProAsmcomppath comp_path; status = ProTestGetModels ( &mfg_model, &mfg_solid, &comp_path ); status = ProMfgFixtActivate ( mfg_model, NULL); TEST_CALL_REPORT("ProMfgFixtActivate()", "ProTestFixtDeactivate", status, status != PRO_TK_NO_ERROR ); return status; } /*====================================================================*\ FUNCTION : ProTestFixtureActivate PURPOSE : general function to activate a fixture \*====================================================================*/ ProError ProTestFixtureActivate ( MfgMenuChoice *obj_action) { ProError status; double dval = 0; int ival = 0; status = ProUtilMfgobjAction ( obj_action, MFGOBJ_FIXTURE, 1, ProTestFixtActivate, &dval, ival ); return status; } /*====================================================================*\ FUNCTION : ProTestFixtActivate PURPOSE : Activate selected fixture \*====================================================================*/ ProError ProTestFixtActivate ( ProAppData p_fixt, ProAppData app_data, int dummy) { ProError status = PRO_TK_NO_ERROR; ProMfg mfg_model; ProSolid mfg_solid; ProAsmcomppath comp_path; status = ProTestGetModels ( &mfg_model, &mfg_solid, &comp_path ); status = ProMfgFixtActivate( mfg_model, (ProFixture *) p_fixt); TEST_CALL_REPORT("ProMfgFixtActivate", "ProTestFixtActivate", status, status != PRO_TK_NO_ERROR); return status; } /*====================================================================*\ FUNCTION : ProTestFixtureDelete PURPOSE : general function to delete fixtures \*====================================================================*/ ProError ProTestFixtureDelete( MfgMenuChoice *obj_action ) { ProError status; double dval = 0; int ival = 0; status = ProUtilMfgobjAction(obj_action, MFGOBJ_FIXTURE, obj_action->mfgobj_list->n_fixture, ProTestFixtDelete, &dval, ival ); return status; } /*====================================================================*\ FUNCTION : ProTestFixtDelete PURPOSE : Delete selected fixture from the mfg model \*====================================================================*/ ProError ProTestFixtDelete ( ProAppData p_fixt, ProAppData app_data, int dummy) { ProError status = PRO_TK_NO_ERROR; ProMfg mfg_model; ProSolid mfg_solid; ProAsmcomppath comp_path; status = ProTestGetModels ( &mfg_model, &mfg_solid, &comp_path ); status = ProFeatureDelete ( mfg_solid, &(((ProFixture *)p_fixt)->id), 1, NULL, 0); TEST_CALL_REPORT("ProFeatureDelete()", "ProTestFixturesDelete()", status, status != PRO_TK_NO_ERROR ); return status; }