/*====================================================================*\ FILE : TestRelation.c PURPOSE : Test of the Relations functionality. HISTORY: DATE BUILD AUTHOR MODIFICATIONS 16-May-97 H-03-1 Pavel $$1 - Created. 03-Jun-97 H-03-13 Pavel $$2 - fixed some bugs 01-Jul-97 H-03-16 Pavel $$3 - fixed some bugs 22-Sep-97 H-03-23 Pavel $$4 - More includes 17-Oct-97 H-03-27 Pavel $$5 Replaced Visit functions by UtilCollect 10-Dec-98 I-01-28 mka $$6 Correct TEST_CALL_REPORT \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/Toolkit includes -- include this first \*--------------------------------------------------------------------*/ #include "ProToolkit.h" #include "ProMdl.h" #include "ProMenu.h" #include "ProMessage.h" #include "ProRelSet.h" #include "ProModelitem.h" #include "ProSelection.h" /*--------------------------------------------------------------------*\ Pro/Develop includes \*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*\ Application includes \*--------------------------------------------------------------------*/ #include "TestError.h" #include "TestSetup.h" #include "UtilMessage.h" #include "UtilString.h" #include "TestFiletypes.h" #include "UtilTypes.h" #include "UtilCollect.h" /*--------------------------------------------------------------------*\ Application macros \*--------------------------------------------------------------------*/ #define USER_RL_EDIT 0 #define USER_RL_DELETE 1 /*====================================================================*\ FUNCTION : ProTestRelationsMenu PURPOSE : Top level menu for the Relations Menu testing. \*====================================================================*/ int ProTestRelationsMenu(ProMdl *model) { ProMdlType model_type; int action; ProError status; int ProTestModelRelsMenu(); int ProTestModelRelsetInfo(); status = ProMdlTypeGet(*model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestRelationsMnu()", status, status != PRO_TK_NO_ERROR); ProMenuPush(); ProMenuFileRegister("TkModelRel","tkmodelrel.mnu", NULL); ProMenubuttonActionSet("TkModelRel","TkModelRel", (ProMenubuttonAction)ProMenuDelete, NULL, 0); ProMenubuttonActionSet("TkModelRel","-Done", (ProMenubuttonAction)ProMenuDelete, NULL, 0); ProMenubuttonActionSet("TkModelRel","-Assem Rel", (ProMenubuttonAction)ProTestModelRelsMenu, model, PRO_RELOBJ_ASSEMBLY); ProMenubuttonActionSet("TkModelRel","-Part Rel", (ProMenubuttonAction)ProTestModelRelsMenu, model, PRO_RELOBJ_PART); ProMenubuttonActionSet("TkModelRel","-Feat Rel", (ProMenubuttonAction)ProTestModelRelsMenu, model, PRO_RELOBJ_FEATURE); ProMenubuttonActionSet("TkModelRel","-Surface Rel", (ProMenubuttonAction)ProTestModelRelsMenu, model, PRO_RELOBJ_SURFACE); ProMenubuttonActionSet("TkModelRel","-Edge Rel", (ProMenubuttonAction)ProTestModelRelsMenu, model, PRO_RELOBJ_EDGE); ProMenubuttonActionSet("TkModelRel","-Info", (ProMenubuttonAction)ProTestModelRelsetInfo, model, 0); ProMenuCreate(PROMENUTYPE_MAIN, "TkModelRel", NULL); if ( model_type == PRO_ASSEMBLY) ProMenubuttonActivate("TkModelRel","-Assem Rel"); else ProMenubuttonDeactivate("TkModelRel","-Assem Rel"); ProMenuProcess("", &action); ProMenuPop(); return(0); } /*====================================================================*\ FUNCTION : ProTestModelRelsMenu() PURPOSE : General action function for the Note testing. \*====================================================================*/ int ProTestModelRelsMenu( ProMdl *model, int action) { ProError status; ProMdlType model_type; ProModelitem modelitem; int select = 0, n_sel; char *opt = NULL; ProSelection *p_sel; ProCharLine str; ProName w_name; int ProTestAddModelitemRel(); int ProTestEditModelitemRel(); int ProTestRegenerateModelitemRel(); status = ProMdlTypeGet(*model, &model_type); TEST_CALL_REPORT("ProMdlTypeGet()", "ProTestModelRelsMenu()", status, status != PRO_TK_NO_ERROR); if (((action == PRO_RELOBJ_PART) && ( model_type == PRO_PART)) || (action == PRO_RELOBJ_ASSEMBLY)) { status = ProMdlToModelitem(*model, &modelitem); TEST_CALL_REPORT("ProMdlToModelitem()", "ProTestModelRelsMenu()", status, status != PRO_TK_NO_ERROR); select = 1; } else { switch(action) { case PRO_RELOBJ_PART : opt = "part"; break; case PRO_RELOBJ_FEATURE : opt = "feature"; break; case PRO_RELOBJ_SURFACE : opt = "surface"; break; case PRO_RELOBJ_EDGE : opt = "edge"; break; case PRO_RELOBJ_PAT_DIR1 : break; } if (opt != NULL) { sprintf(str, "Select %s", opt); ProUtilMsgPrint("gen", "TEST %0s", str); status = ProSelect(opt, 1, NULL, NULL, NULL, NULL, &p_sel, &n_sel); if (status == PRO_TK_NO_ERROR && n_sel == 1) { status = ProSelectionModelitemGet(p_sel[0], &modelitem); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestModelRelsMenu()", status, status != PRO_TK_NO_ERROR); if (modelitem.type==PRO_EDGE || modelitem.type==PRO_SURFACE) { /*--------------------------------------------------------------------------*\ Only named edges and surfaces can have relations \*--------------------------------------------------------------------------*/ status = ProModelitemNameGet(&modelitem, w_name); TEST_CALL_REPORT("ProModelitemNameGet()", "ProTestModelRelsMenu()", status, status != PRO_TK_NO_ERROR); if (status != PRO_TK_NO_ERROR) { sprintf(str, "Please name selected %s first [-QUIT-]:", opt); ProUtilMsgPrint("gen", "TEST %0s", str); status = ProMessageStringRead(PRO_NAME_SIZE, w_name); TEST_CALL_REPORT("ProMessageStringRead()", "ProTestModelRelsMenu()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) { status = ProModelitemNameSet(&modelitem, w_name); TEST_CALL_REPORT("ProModelitemNameSet()", "ProTestModelRelsMenu()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) select = 1; } } } else select = 1; } } } ProMenuFileRegister("TkRelations","tkrelations.mnu", NULL); ProMenubuttonActionSet("TkRelations","TkRelations", (ProMenubuttonAction)ProMenuDelete, NULL, 0); ProMenubuttonActionSet("TkRelations","-Add Rel", (ProMenubuttonAction)ProTestAddModelitemRel, &modelitem, 0); ProMenubuttonActionSet("TkRelations","-Edit Rel", (ProMenubuttonAction)ProTestEditModelitemRel, &modelitem, USER_RL_EDIT); ProMenubuttonActionSet("TkRelations","-Delete Rel", (ProMenubuttonAction)ProTestEditModelitemRel, &modelitem, USER_RL_DELETE); ProMenubuttonActionSet("TkRelations","-Regenerate", (ProMenubuttonAction)ProTestRegenerateModelitemRel, &modelitem, 0); ProMenubuttonActionSet("TkRelations","-Done/Return", (ProMenubuttonAction)ProMenuDelete, NULL, 0); ProMenuCreate(PROMENUTYPE_MAIN, "TkRelations", NULL); ProMenuProcess("", &action); return(0); } /*====================================================================*\ FUNCTION : ProTestAddModelitemRel() PURPOSE : Add new relation to the modelitem \*====================================================================*/ int ProTestAddModelitemRel( ProModelitem *modelitem) { ProError status; ProLine w_line; ProWstring *w_array; int n_lines, cont=1; ProRelset relset; wchar_t *w_ptr; while (cont) { ProUtilMsgPrint("gen", "TEST %0s", "Enter Relation [QUIT]:"); status = ProMessageStringRead(PRO_LINE_SIZE, w_line); if (status == PRO_TK_NO_ERROR) { status = ProArrayAlloc(0, sizeof(ProWstring), 1, (ProArray*)&w_array); TEST_CALL_REPORT("ProArrayAlloc()", "ProTestAddModelitemRel()", status, status != PRO_TK_NO_ERROR); status = ProModelitemToRelset(modelitem, &relset); TEST_CALL_REPORT("ProModelitemToRelset()", "ProTestAddModelitemRel()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND); if (status == PRO_TK_NO_ERROR) { status = ProRelsetRelationsGet(&relset, &w_array); TEST_CALL_REPORT("ProRelsetRelationsGet()", "ProTestAddModelitemRel()", status, (status != PRO_TK_NO_ERROR)&& (status!=PRO_TK_BAD_INPUTS)); } else { status = ProRelsetCreate(modelitem, &relset); TEST_CALL_REPORT("ProRelsetCreate()", "ProTestAddModelitemRel()", status, status != PRO_TK_NO_ERROR); } w_ptr = w_line; status = ProArrayObjectAdd((ProArray*)&w_array, PRO_VALUE_UNUSED, 1, &w_ptr); TEST_CALL_REPORT("ProArrayObjectAdd()", "ProTestAddModelitemRel()", status, status != PRO_TK_NO_ERROR); status = ProArraySizeGet((ProArray)w_array, &n_lines); TEST_CALL_REPORT("ProArraySizeGet()", "ProTestAddModelitemRel()", status, status != PRO_TK_NO_ERROR); status = ProRelsetRelationsSet(&relset, w_array, n_lines); TEST_CALL_REPORT("ProRelsetRelationsSet()", "ProTestAddModelitemRel()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) ProUtilMsgPrint("gen", "TEST %0s", "Relation added successfully"); status = ProArrayFree((ProArray*)&w_array); TEST_CALL_REPORT("ProArrayFree()", "ProTestAddModelitemRel()", status, status != PRO_TK_NO_ERROR); } else cont = 0; } return (0); } /*====================================================================*\ FUNCTION : ProTestEditModelitemRel() PURPOSE : Edit/Delete existing relations for the modelitem \*====================================================================*/ int ProTestEditModelitemRel( ProModelitem *modelitem, int action) { ProError status; ProLine w_line; ProCharLine str, line; ProWstring *w_array; int i, n_lines; wchar_t w_empty = 0, **w_select, *w_ptr; ProRelset relset; ProName w_name; status = ProModelitemToRelset(modelitem, &relset); TEST_CALL_REPORT("ProModelitemToRelset()", "ProTestEditModelitemRel()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND); if (status != PRO_TK_NO_ERROR) { ProUtilMsgPrint("gen", "TEST %0s", "No relations found"); return (0); } status = ProArrayAlloc(0, sizeof(ProWstring), 1, (ProArray*)&w_array); TEST_CALL_REPORT("ProArrayAlloc()", "ProTestEditModelitemRel()", status, status != PRO_TK_NO_ERROR); status = ProRelsetRelationsGet(&relset, &w_array); TEST_CALL_REPORT("ProRelsetRelationGet()", "ProTestAddModelitemRel()", status, status != PRO_TK_NO_ERROR); w_ptr = &w_empty; status = ProArrayObjectAdd((ProArray*)&w_array, PRO_VALUE_UNUSED, 1, &w_ptr); TEST_CALL_REPORT("ProArrayObjectAdd()", "ProTestEditModelitemRel()", status, status != PRO_TK_NO_ERROR); ProStringToWstring(w_name, "Item Rels"); status = ProMenuStringsSelect(w_name, w_array, 1, w_array, &w_select, &n_lines); if ((status != PRO_TK_NO_ERROR) || (n_lines<1)) return (0); status = ProArraySizeGet((ProArray)w_array, &n_lines); TEST_CALL_REPORT("ProArraySizeGet()", "ProTestEditModelitemRel()", status, status != PRO_TK_NO_ERROR); for (i=0; i