/*====================================================================*\ FILE : TestAsm.c PURPOSE : Test some ProAsmcomp routines HISTORY.. DATE BUILD AUTHOR MODIFICATIONS 19-Jan-97 H-01-21 Pavel $$1 Created 22-Jan-97 H-01-24 Igor $$2 Changed 'asm' to 'assembly' because SUN treats asm as a keyword. 09-Feb-97 H-01-25 Pavel $$3 Added ProAsmcomp functions 28-Mar-97 H-01-30 Pavel $$4 Added support for PT/Products Toolkit Used UtilCollect.h 10-Jun-97 H-03-14 Alexey $$5 Modified explosion test functions 09-Jul-97 H-03-17 Pavel $$6 Updated ProAsmcompTest 29-Jul-97 H-03-17 Jerry $$7 Fix returns for ProError ProTestAsmcompAct() 08-Sep-97 H-03-21 Pavel $$8 Fix bug (added NULL string in names[]) 08-Sep-97 H-03-21 Akula $$9 Add ProUtil.h for prototype def 05-Oct-97 H-03-25 Pavel $$10 More includes 17-Oct-97 H-03-27 Pavel $$11 Replaced Visit functions by UtilCollect 23-Oct-97 H-03-27 Akula $$12 Fixed bug 21-Feb-98 H-03-40 Pavel $$13 Added Asm comp by Csys assembly and redef 08-APR-98 I-01-03 SHK $$14 Changed ProAsmcompPackageMove to ProAsmcompPackageMoveR20. 18-MAY-98 I-01-06 Akkur $$15 Add test for ProAsmcompPackageMove. Add ProTestMenuDynamicRegister function 01-Jul-98 I-01-13 akh $$16 More support for PT/Products Toolkit 10-Aug-98 I-01-16 akula $$17 Added mechanism submenu for asmcomp 20-Oct-98 I-01-23 Alexey $$18 Added test for ProAccessorywindowCreate 21-Oct-98 I-01-23 Alexey $$19 *sel_ptr=(char*)NULL was wrong in ProTestAsmcompPackageMoveAct() 27-Oct-98 I-01-24 Agsh $$20 Added Create and Replace submenu for asmcomp 03-Nov-98 I-01-25 Akula $$21 Changed menu buttons 04-Nov-98 I-01-26 Alexey $$22 Replaced some ProMenu functions by ProUtilMenu 07-Dec-98 I-01-27 Alexey $$23 Correct ProWindowDelete TEST_CALL_REPORT 01-Jun-99 I-03-11 mka $$24 Delete unused variable 20-Oct-99 I-03-19 akkur $$25 Add test for ProAsmcompIsSubstitute. 07-Dec-00 J-01-23 JCN $$26 Remove (potentially endless) while-loops \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/TOOLKIT includes \*--------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*--------------------------------------------------------------------*\ Application includes \*--------------------------------------------------------------------*/ #include "TestError.h" #include "TestFiletypes.h" #include "UtilFiles.h" #include "UtilMessage.h" #include "UtilString.h" #include "UtilNames.h" #include "UtilCollect.h" #include "UtilTree.h" #include "UtilMenu.h" /*--------------------------------------------------------------------*\ Application macros \*--------------------------------------------------------------------*/ #define TEST_ASM_EXPLODE 1 #define TEST_ASM_UNEXPLODE 2 #define TEST_ASM_EXPLODE_LIST 3 #define TEST_ASM_SET_CURRENT_EXPLODE 4 #define TEST_ASMCOMP_CONSTR_REDEF 10 #define TEST_ASMCOMP_REGENERATE 11 #define TEST_ASMCOMP_INFO 12 #define TEST_ASMCOMP_PACKAGE_MOVE 13 #define TEST_ASMCOMP_CONSTR_REMOVE 14 #define TEST_ASMCOMP_ASSEMBLE 15 #define TEST_ASMCOMP_REDEFINE 16 #define TEST_ASMCOMP_TREE_INFO 17 #define TEST_ASMCOMP_PACKAGE_MOVE20 18 #define TEST_ASMCOMP_MECHANISM 19 #define TEST_ASMCOMP_CREATE 20 #define TEST_ASMCOMP_REPLACE 21 #define TEST_ASMCOMP_MOTION_UNDEF PRO_M_UNDEF #define TEST_ASMCOMP_MOTION_TRANSLATE PRO_M_TRANSLATE #define TEST_ASMCOMP_MOTION_ROTATE PRO_M_ROTATE #define TEST_ASMCOMP_MOTION_ADJUST PRO_M_ADJUST #define TEST_ASMCOMP_SHOWUI_DIALOG PRO_B_TRUE #define TEST_ASMCOMP_SHOWUI_ACTION PRO_B_FALSE #define TEST_ASMCOMP_REF_VIEW_PLANE PRO_M_VIEW_PLANE #define TEST_ASMCOMP_REF_SEL_PLANE PRO_M_SEL_PLANE #define TEST_ASMCOMP_REF_ENTITY_EDGE PRO_M_ENTITY_EDGE #define TEST_ASMCOMP_REF_PLANE_NORMAL PRO_M_PLANE_NORMAL #define TEST_ASMCOMP_REF_2_POINTS PRO_M_2_POINTS #define TEST_ASMCOMP_REF_CSYS_X PRO_M_CSYS_X #define TEST_ASMCOMP_REF_CSYS_Y PRO_M_CSYS_Y #define TEST_ASMCOMP_REF_CSYS_Z PRO_M_CSYS_Z /*--------------------------------------------------------------------*\ Application data types \*--------------------------------------------------------------------*/ typedef struct pro_test_asm_comp_type_str { ProAsmcompType type; char *str; } ProTestAsmcompTypeStr; typedef struct app_data { ProAssembly assembly; FILE *fp; } ProTestAppData; typedef struct tag_menubut { char *button; int action; } ProTestMenuButton; /*--------------------------------------------------------------------*\ Application global/external data \*--------------------------------------------------------------------*/ /*====================================================================*\ Function : ProTestMenuDynamicRegister () Purpose : Dinamically register of menu \*====================================================================*/ int ProTestMenuDynamicRegister ( char* name_menu, ProTestMenuButton buttons[], int n_but) { int i, dummy; ProError status; wchar_t **names; ProUtilMenuStringsAlloc( &names ); for (i=0; itype == PRO_EXPLD_STATE ) return PRO_TK_NO_ERROR; return PRO_TK_CONTINUE; } /*====================================================================*\ Function : ProTestAsmcomppathFunc() Purpose : to test some ProAssembly functions \*====================================================================*/ int ProTestAsmcomppathFunc(ProMdl *mdl) { ProError status; ProAsmcomppath comppath, comp_path; ProAssembly assembly = *(ProAssembly *)mdl; ProMdl model; ProSelection *p_sel; char name[PRO_NAME_SIZE], type[PRO_TYPE_SIZE]; ProCharLine str; int n_sel,i; ProMatrix matrix; ProVector tvec; ProBoolean bool; ProUtilMsgPrint( "gen", "Test %0s", "Select an assembly component"); n_sel = 0; status = ProSelect("prt_or_asm", 1, NULL, NULL, NULL, NULL, &p_sel, &n_sel); TEST_CALL_REPORT("ProSelect()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_USER_ABORT && status != PRO_TK_PICK_ABOVE); if (status != PRO_TK_NO_ERROR && n_sel<1) return (0); status = ProSelectionAsmcomppathGet(p_sel[0], &comp_path); TEST_CALL_REPORT("ProSelectionAsmcomppathGet()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); status = ProAsmcomppathInit(comp_path.owner, comp_path.comp_id_table, comp_path.table_num, &comppath); TEST_CALL_REPORT("ProAsmcomppathInit()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); status = ProAssemblyDynPosGet(assembly, &bool); TEST_CALL_REPORT("ProAssemblyDynPosGet()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); status = ProAssemblyDynPosSet(assembly, PRO_B_TRUE); TEST_CALL_REPORT("ProAssemblyDynPosSet()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); status = ProAsmcomppathMdlGet(&comppath, &model); TEST_CALL_REPORT("ProAsmcomppathMdlGet()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); ProUtilModelnameGet(&model, name, type); sprintf(str, "Now rotate component %s.%s", name, type); ProUtilMsgPrint( "gen", "Test %0s", str); status = ProAsmcomppathTrfGet(&comppath, PRO_B_TRUE, matrix); TEST_CALL_REPORT("ProAsmcomppathTrfGet()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); /*----------------------------------------------------------------*\ now shift the matrix \*----------------------------------------------------------------*/ for(i=0; i<3; i++) tvec[i] = matrix[0][i]; for(i=0; i<3; i++) matrix[0][i] = matrix[1][i]; for(i=0; i<3; i++) matrix[1][i] = matrix[2][i]; for(i=0; i<3; i++) matrix[2][i] = tvec[i]; status = ProAsmcomppathTrfSet(&comppath, PRO_B_TRUE, matrix); TEST_CALL_REPORT("ProAsmcomppathTrfSet()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); status = ProSolidRegenerate((ProSolid)assembly, PRO_B_FALSE); TEST_CALL_REPORT("ProSolidRegenerate()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); #ifndef PT_PRODUCTS_BUILD status = ProSolidDisplay((ProSolid)assembly); TEST_CALL_REPORT("ProSolidDisplay()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); #endif sleep(1); /*----------------------------------------------------------------*\ now shift the matrix \*----------------------------------------------------------------*/ for(i=0; i<3; i++) tvec[i] = matrix[0][i]; for(i=0; i<3; i++) matrix[0][i] = matrix[1][i]; for(i=0; i<3; i++) matrix[1][i] = matrix[2][i]; for(i=0; i<3; i++) matrix[2][i] = tvec[i]; status = ProAsmcomppathTrfSet(&comppath, PRO_B_TRUE, matrix); TEST_CALL_REPORT("ProAsmcomppathTrfSet()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); status = ProSolidRegenerate((ProSolid)assembly, PRO_B_FALSE); TEST_CALL_REPORT("ProSolidRegenerate()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); #ifndef PT_PRODUCTS_BUILD status = ProSolidDisplay((ProSolid)assembly); TEST_CALL_REPORT("ProSolidDisplay()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); #endif sleep(1); /*----------------------------------------------------------------*\ now shift the matrix \*----------------------------------------------------------------*/ for(i=0; i<3; i++) tvec[i] = matrix[0][i]; for(i=0; i<3; i++) matrix[0][i] = matrix[1][i]; for(i=0; i<3; i++) matrix[1][i] = matrix[2][i]; for(i=0; i<3; i++) matrix[2][i] = tvec[i]; status = ProAsmcomppathTrfSet(&comppath, PRO_B_TRUE, matrix); TEST_CALL_REPORT("ProAsmcomppathTrfSet()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); status = ProSolidRegenerate((ProSolid)assembly, PRO_B_FALSE); TEST_CALL_REPORT("ProSolidRegenerate()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); #ifndef PT_PRODUCTS_BUILD status = ProSolidDisplay((ProSolid)assembly); TEST_CALL_REPORT("ProSolidDisplay()", "ProTestAsmcomppathFunc()", status, status != PRO_TK_NO_ERROR); #endif return (0); } /*====================================================================*\ Function : ProUtilAsmcompStr Purpose : return string tyoe for ProAsmcompType \*====================================================================*/ char *ProUtilAsmcompStr(ProAsmcompType type) { static ProTestAsmcompTypeStr tab[] = { {PRO_ASM_COMP_TYPE_NONE, "PRO_ASM_COMP_TYPE_NONE"}, {PRO_ASM_COMP_TYPE_WORKPIECE, "PRO_ASM_COMP_TYPE_WORKPIECE"}, {PRO_ASM_COMP_TYPE_REF_MODEL, "PRO_ASM_COMP_TYPE_REF_MODEL"}, {PRO_ASM_COMP_TYPE_FIXTURE, "PRO_ASM_COMP_TYPE_FIXTURE"}, {PRO_ASM_COMP_TYPE_MOLD_BASE, "PRO_ASM_COMP_TYPE_MOLD_BASE"}, {PRO_ASM_COMP_TYPE_MOLD_ASSEM, "PRO_ASM_COMP_TYPE_MOLD_ASSEM"}, {PRO_ASM_COMP_TYPE_GEN_ASSEM, "PRO_ASM_COMP_TYPE_GEN_ASSEM"}, {PRO_ASM_COMP_TYPE_CAST_ASSEM, "PRO_ASM_COMP_TYPE_CAST_ASSEM"}, {PRO_ASM_COMP_TYPE_DIE_BLOCK, "PRO_ASM_COMP_TYPE_DIE_BLOCK"}, {PRO_ASM_COMP_TYPE_DIE_COMP, "PRO_ASM_COMP_TYPE_DIE_COMP"}, {PRO_ASM_COMP_TYPE_SAND_CORE, "PRO_ASM_COMP_TYPE_SAND_CORE"}, {PRO_ASM_COMP_TYPE_CAST_RESULT, "PRO_ASM_COMP_TYPE_CAST_RESULT"} }; static int tabsize=sizeof(tab)/sizeof(tab[0]); int i; for (i=0; iowner = asmcomppath.owner; p_asmcomp->id = asmcomppath.comp_id_table[0]; p_asmcomp->type = PRO_FEATURE; return (PRO_TK_NO_ERROR); } /*====================================================================*\ FUNCTION : ProTestAsmcompAssembleBycsys () PURPOSE : Assemble a component by coordinate system. \*====================================================================*/ ProError ProTestAsmcompAssembleBycsys ( ProSolid assembly, ProSelection _asm_csys, ProSolid component, ProSelection _comp_csys) { ProError err; ProElement elem_root; ProSelection sel; ProModelitem modelitem; ProErrorlist errors; ProFeature feature; ProFeatureCreateOptions opts[] = {PRO_FEAT_CR_INCOMPLETE_FEAT}; static ElemTreeData tree[] = { {0, PRO_E_FEATURE_TREE, {-1}}, {1, PRO_E_FEATURE_TYPE, {PRO_VALUE_TYPE_INT, {PRO_FEAT_COMPONENT}}}, {1, PRO_E_COMPONENT_MODEL, {PRO_VALUE_TYPE_POINTER}}, {1, PRO_E_COMPONENT_CONSTRAINTS, {-1}}, {2, PRO_E_COMPONENT_CONSTRAINT, {-1}}, {3, PRO_E_COMPONENT_CONSTR_TYPE, {PRO_VALUE_TYPE_INT, {PRO_ASM_CSYS}}}, {3, PRO_E_COMPONENT_COMP_CONSTR_REF, {PRO_VALUE_TYPE_SELECTION}}, {3, PRO_E_COMPONENT_ASSEM_CONSTR_REF, {PRO_VALUE_TYPE_SELECTION}}}; /*--------------------------------------------------------------------*\ Prepare value for the component model element. \*--------------------------------------------------------------------*/ tree[2].data.v.p = (void *)component; /*--------------------------------------------------------------------*\ Prepare value for the component and assembly reference element. \*--------------------------------------------------------------------*/ tree[6].data.v.r=_comp_csys; tree[7].data.v.r=_asm_csys; /*--------------------------------------------------------------------*\ Create element tree \*--------------------------------------------------------------------*/ err = ProUtilElemtreeCreate(tree, sizeof(tree)/sizeof(tree[0]), NULL, &elem_root); /*--------------------------------------------------------------------*\ Set up a selection structure for the feature context. \*--------------------------------------------------------------------*/ err = ProMdlToModelitem (assembly, &modelitem); TEST_CALL_REPORT("ProMdlToModelitem()", "ProTestAsmcompAssembleBycsys()", err, err != PRO_TK_NO_ERROR); err = ProSelectionAlloc (NULL, &modelitem, &sel); TEST_CALL_REPORT("ProSelectionAlloc ()", "ProTestAsmcompAssembleBycsys()", err, err != PRO_TK_NO_ERROR); /*--------------------------------------------------------------------*\ Assemble the component by feature creation. \*--------------------------------------------------------------------*/ err = ProFeatureCreate (sel, elem_root, opts, sizeof(opts)/sizeof(opts[0]), &feature, &errors); TEST_CALL_REPORT("ProFeatureCreate()", "ProTestAsmcompAssembleBycsys()", err, err != PRO_TK_NO_ERROR); if (err != PRO_TK_NO_ERROR) { ProUtilShowTreeInInfo(elem_root); ProUtilFeatErrsPrint (&errors); } /*--------------------------------------------------------------------*\ Free Allocated memory \*--------------------------------------------------------------------*/ err = ProElementFree(&elem_root); TEST_CALL_REPORT("ProElementFree()", "ProTestAsmcompAssembleBycsys()", err, err != PRO_TK_NO_ERROR); err = ProSelectionFree(&sel); TEST_CALL_REPORT("ProSelectionFree()", "ProTestAsmcompAssembleBycsys()", err, err != PRO_TK_NO_ERROR); if (tree[6].data.v.r!=NULL) { err = ProSelectionFree(&tree[6].data.v.r); TEST_CALL_REPORT("ProSelectionFree()", "ProTestAsmcompAssembleBycsys()", err, err != PRO_TK_NO_ERROR); } if (tree[7].data.v.r!=NULL) { err = ProSelectionFree(&tree[7].data.v.r); TEST_CALL_REPORT("ProSelectionFree()", "ProTestAsmcompAssembleBycsys()", err, err != PRO_TK_NO_ERROR); } return (err); } /*====================================================================*\ FUNCTION : ProTestAsmcompReplaceBycsys() PURPOSE : Replace a component whose constraint is by CSYS. \*====================================================================*/ ProError ProTestAsmcompReplaceBycsys( ProSolid parent_asm, /* parent assembly */ ProName w_asm_csys_name, /* new assembly CSYS (can be NULL) */ ProSolid new_comp, /* new (replacement) component */ ProName w_comp_csys_name,/* name of component's CSYS */ ProFeature *p_component) /* As input, this argument is the component to be replaced. As output, it's the new component. */ { ProError err; ProGeomitem asm_csys, comp_csys; ProSelection sel; ProElement elemtree, elem_comp, elem_comp_ref, elem_asm_ref; ProValueData value_data; ProModelitem modelitem; ProAsmcomppath path; ProFeatureCreateOptions opts[] = { PRO_FEAT_CR_FIX_MODEL_ON_FAIL }; ProErrorlist errors; static ProElempathItem comp_mod_path[]= { {PRO_ELEM_PATH_ITEM_TYPE_ID, PRO_E_COMPONENT_MODEL}}; static ProElempathItem comp_ref_path[]= { {PRO_ELEM_PATH_ITEM_TYPE_ID, PRO_E_COMPONENT_CONSTRAINTS}, {PRO_ELEM_PATH_ITEM_TYPE_INDEX, 0}, {PRO_ELEM_PATH_ITEM_TYPE_ID, PRO_E_COMPONENT_COMP_CONSTR_REF}}; static ProElempathItem asm_ref_path[] = { {PRO_ELEM_PATH_ITEM_TYPE_ID, PRO_E_COMPONENT_CONSTRAINTS}, {PRO_ELEM_PATH_ITEM_TYPE_INDEX, 0}, {PRO_ELEM_PATH_ITEM_TYPE_ID, PRO_E_COMPONENT_ASSEM_CONSTR_REF}}; /*--------------------------------------------------------------------*\ Find the named assembly coordinate system. \*--------------------------------------------------------------------*/ if (w_asm_csys_name != NULL) { err = ProUtilFindCsysByName (parent_asm, w_asm_csys_name, &asm_csys); if (err != PRO_TK_NO_ERROR) return (PRO_TK_E_NOT_FOUND); } /*--------------------------------------------------------------------*\ Find the named component coordinate system. \*--------------------------------------------------------------------*/ err = ProUtilFindCsysByName (new_comp, w_comp_csys_name, &comp_csys); if (err != PRO_TK_NO_ERROR) return (PRO_TK_E_NOT_FOUND); /*--------------------------------------------------------------------*\ Get element tree for component to be replaced. \*--------------------------------------------------------------------*/ err = ProFeatureElemtreeCreate(p_component, &elemtree) ; TEST_CALL_REPORT("ProFeatureElemtreeCreate()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); if (err != PRO_TK_NO_ERROR) return (err); /*--------------------------------------------------------------------*\ Modify the tree to reference the new component. Will have to change PRO_E_COMPONENT_MODEL and PRO_E_COMPONENT_COMP_CONSTR_REF \*--------------------------------------------------------------------*/ err = ProUtilElemtreeElementGet(elemtree, comp_mod_path, sizeof(comp_mod_path)/sizeof(comp_mod_path[0]), &elem_comp); if (err == PRO_TK_NO_ERROR) { value_data.type = PRO_VALUE_TYPE_POINTER; value_data.v.p = new_comp; ProUtilElementValueSet(elem_comp, &value_data); err = ProUtilElemtreeElementGet(elemtree, comp_ref_path, sizeof(comp_ref_path)/sizeof(comp_ref_path[0]), &elem_comp_ref); if (err == PRO_TK_NO_ERROR) { value_data.type = PRO_VALUE_TYPE_SELECTION; err = ProSelectionAlloc (NULL, &comp_csys, &sel); TEST_CALL_REPORT("ProSelectionAlloc()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); value_data.v.r = sel; ProUtilElementValueSet(elem_comp_ref, &value_data); err = ProSelectionFree(&sel); TEST_CALL_REPORT("ProSelectionFree()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); } } /*--------------------------------------------------------------------*\ If new assembly csys used, change PRO_E_COMPONENT_ASSEM_CONSTR_REF \*--------------------------------------------------------------------*/ if (err == PRO_TK_NO_ERROR && w_asm_csys_name != NULL) { err = ProUtilElemtreeElementGet(elemtree, asm_ref_path, sizeof(asm_ref_path)/sizeof(asm_ref_path[0]), &elem_asm_ref); if (err == PRO_TK_NO_ERROR) { value_data.type = PRO_VALUE_TYPE_SELECTION; err = ProAsmcomppathInit(parent_asm, NULL, 0, &path); TEST_CALL_REPORT("ProAsmcomppathInit()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); err = ProSelectionAlloc (&path, &asm_csys, &sel); TEST_CALL_REPORT("ProSelectionAlloc()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); value_data.v.r = sel; ProUtilElementValueSet(elem_asm_ref, &value_data); err = ProSelectionFree(&sel); TEST_CALL_REPORT("ProSelectionFree()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); } } /*--------------------------------------------------------------------*\ Call ProFeatureRedefine \*--------------------------------------------------------------------*/ if (err == PRO_TK_NO_ERROR) { err = ProMdlToModelitem (parent_asm, &modelitem); TEST_CALL_REPORT("ProFeatureRedefine()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); err = ProSelectionAlloc (NULL, &modelitem, &sel); TEST_CALL_REPORT("ProFeatureRedefine()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); err = ProFeatureRedefine(NULL, p_component, elemtree, opts, sizeof(opts)/sizeof(opts[0]), &errors); TEST_CALL_REPORT("ProFeatureRedefine()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); } if (err != PRO_TK_NO_ERROR) { ProUtilShowTreeInInfo(elemtree); ProUtilFeatErrsPrint (&errors); } /*--------------------------------------------------------------------*\ Free Allocated memory \*--------------------------------------------------------------------*/ err = ProElementFree(&elemtree); TEST_CALL_REPORT("ProElementFree()", "ProTestAsmcompReplaceBycsys()", err, err != PRO_TK_NO_ERROR); return(err) ; } /*=============================================================*\ FUNCTION: ProTestAsmcompCreateRedefine() PURPOSE: User interface to funcs UsrAsmcompAssembleBycsys, UsrAsmcompReplaceBycsys \*=============================================================*/ int ProTestAsmcompCreateRedefine( ProSolid assembly, ProFeature *component, int action) { ProSolid comp; ProError err, er1; int version, win_id,sel_n, Oldwin_id; ProCharLine line, str; ProLine buff; ProPath *path_arr, sel_path, def_path, cur_path; ProName *path_lab_arr, w_name, w_type; static ProCharName asm_csys = {"ACS0"}, comp_csys = {"CS0"}; ProName w_asm_csys, w_comp_csys, w_sel_name; ProType type; ProSelection *win_sel, sel_C, sel_A; /*------------------------------------------------------------------*\ Choose the component to assembly or redefine \*--------------------------------------------------------------------*/ ProStringToWstring(buff, "*.prt,*.asm"); ProStringToWstring(def_path, "."); sprintf(str, "Choose new component to %s.", action == TEST_ASMCOMP_ASSEMBLE ? "assemble" : "redefine"); ProUtilMsgPrint( "gen", "TEST %0s", str); /* No default dirs */ err = ProArrayAlloc(0, sizeof(ProPath), 1, (ProArray*)&path_arr); TEST_CALL_REPORT("ProArrayAlloc()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProArrayAlloc(0, sizeof(ProPath), 1, (ProArray*)&path_lab_arr); TEST_CALL_REPORT("ProArrayAlloc()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); /* Open file */ err = ProFileOpen(NULL, buff, path_arr, path_lab_arr, def_path, NULL, sel_path); TEST_CALL_REPORT("ProFileOpen()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); if (err == PRO_TK_NO_ERROR) { err = ProFilenameParse(sel_path, def_path, w_name, w_type, &version); TEST_CALL_REPORT("ProFilenameParse()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); ProUtilWstrcpy(sel_path, def_path); err = ProPathCreate(NULL, w_name, w_type, PRO_VALUE_UNUSED, def_path); TEST_CALL_REPORT("ProFilenameParse()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); ProWstringToString(str, def_path); if( ProUtilConfirmNameType(str, line, &type) != PRO_TK_BAD_INPUTS) { err = ProDirectoryCurrentGet(cur_path); TEST_CALL_REPORT("ProDirectoryCurrentGet()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProDirectoryChange(sel_path); TEST_CALL_REPORT("ProDirectoryCurrentGet()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProMdlRetrieve(w_name, (ProMdlType)type, (ProMdl*)&comp); TEST_CALL_REPORT("ProMdlRetrieve()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); er1 = ProDirectoryChange(cur_path); TEST_CALL_REPORT("ProDirectoryCurrentGet()", "ProTestAsmcompCreateRedefine()", er1, er1 != PRO_TK_NO_ERROR); if (err != PRO_TK_NO_ERROR) { sprintf(line , "Failed to retrieve %s", str); ProUtilMsgPrint( "gen", "TEST %0s", line); } } } /*------------------------------------------------------------------*\ Free Allocated memory \*--------------------------------------------------------------------*/ er1 = ProArrayFree((ProArray*)&path_arr); TEST_CALL_REPORT("ProArrayFree()", "ProTestAsmcompCreateRedefine()", er1, er1 != PRO_TK_NO_ERROR); er1 = ProArrayFree((ProArray*)&path_lab_arr); TEST_CALL_REPORT("ProArrayFree()", "ProTestAsmcompCreateRedefine()", er1, er1 != PRO_TK_NO_ERROR); if (err != PRO_TK_NO_ERROR) return (0); if (action == TEST_ASMCOMP_ASSEMBLE) { /*------------------------------------------------------------------*\ Select the assembly \*--------------------------------------------------------------------*/ sel_n=0; err = ProSelect("csys",1,NULL,NULL,NULL,NULL,&win_sel,&sel_n); TEST_CALL_REPORT("ProSelect()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); if (err != PRO_TK_NO_ERROR) return (0); err = ProSelectionCopy(win_sel[0],&sel_A); TEST_CALL_REPORT("ProSelectionCopy()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); /*------------------------------------------------------------------*\ Select the component csys \*--------------------------------------------------------------------*/ err = ProMdlNameGet((ProMdl)comp, w_sel_name); TEST_CALL_REPORT("ProMdlNameGet()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProWindowCurrentGet(&Oldwin_id); TEST_CALL_REPORT("ProWindowCurrentGet()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProAccessorywindowCreate (w_sel_name, type, &win_id); TEST_CALL_REPORT("ProAccessorywindowCreate()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProMdlDisplay((ProMdl)comp); TEST_CALL_REPORT("ProMdlDisplay()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProWindowCurrentSet(win_id); TEST_CALL_REPORT("ProWindowCurrentSet()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); sel_n=0; err = ProSelect("csys",1,NULL,NULL,NULL,NULL,&win_sel,&sel_n); TEST_CALL_REPORT("ProSelect()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); if (err != PRO_TK_NO_ERROR) return (0); err = ProSelectionCopy(win_sel[0],&sel_C); TEST_CALL_REPORT("ProSelectionCopy()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProWindowCurrentSet(Oldwin_id); TEST_CALL_REPORT("ProWindowCurrentSet()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProWindowDelete(win_id); TEST_CALL_REPORT("ProWindowDelete()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); err = ProTestAsmcompAssembleBycsys (assembly,sel_A, comp,sel_C); } else { /*------------------------------------------------------------------*\ Enter the assembly csys name \*--------------------------------------------------------------------*/ ProStringToWstring(w_asm_csys, asm_csys); sprintf(str, "Enter the assembly csys name [%s].", asm_csys); ProUtilMsgPrint( "gen", "TEST %0s", str); if (ProUtilStringGet(w_asm_csys, w_asm_csys, PRO_NAME_SIZE)==0) return (0); ProWstringToString(asm_csys, w_asm_csys); /*------------------------------------------------------------------*\ Enter the component csys name \*--------------------------------------------------------------------*/ ProStringToWstring(w_comp_csys, comp_csys); sprintf(str, "Enter the component csys name [%s].", comp_csys); ProUtilMsgPrint( "gen", "TEST %0s", str); if (ProUtilStringGet(w_comp_csys, w_comp_csys, PRO_NAME_SIZE)==0) return (0); ProWstringToString(comp_csys, w_comp_csys); err = ProTestAsmcompReplaceBycsys (assembly, w_asm_csys, comp, w_comp_csys, component); } if (err != PRO_TK_NO_ERROR) sprintf(str, "Failed to %s component.", action == TEST_ASMCOMP_ASSEMBLE ? "assemble" : "redefine"); else sprintf(str, "Component successfully %s.", action == TEST_ASMCOMP_ASSEMBLE ? "assembled" : "redefined"); ProUtilMsgPrint( "gen", "TEST %0s", str); err = ProTreetoolRefresh(assembly); TEST_CALL_REPORT("ProArrayFree()", "ProTestAsmcompCreateRedefine()", err, err != PRO_TK_NO_ERROR); return (0); } /*====================================================================*\ Function : ProTestAsmcompPackageMoveAct() Purpose : Act to test ProAsmcompPackageMove function \*====================================================================*/ ProError ProTestAsmcompPackageMoveAct (ProAppData data, int action) { char *sel_ptr = NULL; int num_sel; ProError status; ProSelection **sel_array_ptr = (ProSelection**)data; ProCharLine str; /*------------------------------------------------------------------*\ Select reference motions \*--------------------------------------------------------------------*/ if (sel_array_ptr != NULL) { switch (action) { case TEST_ASMCOMP_REF_VIEW_PLANE: sel_ptr = NULL; num_sel = 0; break; case TEST_ASMCOMP_REF_SEL_PLANE: case TEST_ASMCOMP_REF_PLANE_NORMAL: sel_ptr = "datum,surface"; num_sel = 1; break; case TEST_ASMCOMP_REF_ENTITY_EDGE: sel_ptr = "axis,edge,curve"; num_sel = 1; break; case TEST_ASMCOMP_REF_2_POINTS: sel_ptr = "point,edge_end"; num_sel = 2; break; case TEST_ASMCOMP_REF_CSYS_X: case TEST_ASMCOMP_REF_CSYS_Y: case TEST_ASMCOMP_REF_CSYS_Z: sel_ptr = "csys"; num_sel = 1; break; default: sel_ptr = NULL; break; } if ( sel_ptr != NULL ) { sprintf (str,"Select %d %s", num_sel, sel_ptr); ProUtilMsgPrint ( "gen", "TEST %0s", str); status = ProSelect ( sel_ptr, num_sel, NULL, NULL, NULL, NULL, sel_array_ptr, &num_sel); ProMessageClear(); if ( status == PRO_TK_USER_ABORT || status == PRO_TK_PICK_ABOVE) sel_ptr = (char*)NULL; } } /*------------------------------------------------------------------*\ Return action for reusing \*--------------------------------------------------------------------*/ ProMenuDeleteWithStatus ( action ); return (PRO_TK_NO_ERROR); } /*====================================================================*\ Function : ProTestAsmcompPackageMove () Purpose : to test ProAsmcompPackageMove function \*====================================================================*/ ProError ProTestAsmcompPackageMove (ProAsmcomp *asmcomp_ptr) { ProTestMenuButton menubut_motion[] = { {"-Translate", TEST_ASMCOMP_MOTION_TRANSLATE}, {"-Rotate", TEST_ASMCOMP_MOTION_ROTATE}, {"-Adjust", TEST_ASMCOMP_MOTION_ADJUST}, {"Done", -1} }; ProTestMenuButton menubut_showui[] = { {"-Dialog", TEST_ASMCOMP_SHOWUI_DIALOG}, {"-Action", TEST_ASMCOMP_SHOWUI_ACTION}, {"Done", -1} }; ProTestMenuButton menubut_ref[] = { {"-View Plane", TEST_ASMCOMP_REF_VIEW_PLANE}, {"-Sel Plane", TEST_ASMCOMP_REF_SEL_PLANE}, {"-Entity Edge", TEST_ASMCOMP_REF_ENTITY_EDGE}, {"-Plane Normal",TEST_ASMCOMP_REF_PLANE_NORMAL}, {"-2 points", TEST_ASMCOMP_REF_2_POINTS}, {"-Csys X", TEST_ASMCOMP_REF_CSYS_X}, {"-Csys Y", TEST_ASMCOMP_REF_CSYS_Y}, {"-Csys Z", TEST_ASMCOMP_REF_CSYS_Z}, {"Done", -1} }; char menus_names[][14] = { "MotionType", "ShowUI", "Reference" }; int i, n_but_motion, n_but_ref, n_but_showui; static int first=1; ProError status; ProSelection *sel_array = NULL; n_but_motion = sizeof(menubut_motion)/sizeof(menubut_motion[0]); n_but_showui = sizeof(menubut_showui)/sizeof(menubut_showui[0]); n_but_ref = sizeof(menubut_ref)/sizeof(menubut_ref[0]); /*--------------------------------------------------------------------------*\ For a first call register a menu from strings \*--------------------------------------------------------------------------*/ if (first) { ProTestMenuDynamicRegister ( menus_names[0], menubut_motion, n_but_motion); ProTestMenuDynamicRegister ( menus_names[1], menubut_showui, n_but_showui); ProTestMenuDynamicRegister ( menus_names[2], menubut_ref, n_but_ref); first = 0; } /*--------------------------------------------------------------------------*\ Set action for the menu button \*--------------------------------------------------------------------------*/ for (i=0; i