/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*----------------------------------------------------------------------------*\ Pro/TOOLKIT includes \*----------------------------------------------------------------------------*/ #include <ProToolkit.h> #include <ProSelection.h> #include <ProCavitylayout.h> #include <ProMenu.h> #include <ProUtil.h> #include <ProArray.h> #include <ProAsmcomp.h> #include <ProMfg.h> #include <ProCsys.h> #include <ProModelitem.h> #include <ProMessage.h> #include <ProFamtable.h> #include <ProFaminstance.h> /*----------------------------------------------------------------------------*\ C System includes \*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*\ Application includes \*----------------------------------------------------------------------------*/ #include "TestError.h" #include "UtilMessage.h" #include "UtilString.h" #include "UtilMenu.h" #include "UtilFiles.h" #include "UtilCollect.h" #include "PTApplsUnicodeUtils.h" /*----------------------------------------------------------------------------*\ Application macros \*----------------------------------------------------------------------------*/ #define RULE_FILE_READ 5 /*----------------------------------------------------------------------------*\ Application prototypes \*----------------------------------------------------------------------------*/ ProError ProTestCavityLayoutModelNamesSet (ProCavityLayout *cvlayout_ptr); char* ProTestCavityLayoutTypeToStr (ProCvLayoutType type); ProError ProTestCavityLayoutSetup(ProCavityLayout *cvlayout); ProError ProTestCavlayruleSet(ProCvLayoutRule *rule); ProError ProUtilSelectCsys(ProCsys *csys, ProAsmcomppath *comppath); ProError ProTestCavlayruleOrientSet(ProCvLayoutOrient *orient); /*----------------------------------------------------------------------------*\ Application global/external data \*----------------------------------------------------------------------------*/ /*============================================================================*\ FUNCTION : ProTestCavityLayoutMenu PURPOSE : Setup menu for testing \*============================================================================*/ ProError ProTestCavityLayoutMenu() { ProError status; ProMdl mdl; int menu_id, action; ProMdlType type; ProAssembly assy_obj; ProError ProTestCavityLayoutInfo(); ProError ProTestCavityLayoutRedefine(); ProError ProTestCavityLayoutCreate(); status = ProMdlCurrentGet(&mdl); if (status != PRO_TK_NO_ERROR) { ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"NO current object"); return(PRO_TK_NO_ERROR); } status = ProMdlTypeGet(mdl, &type); if(type == PRO_MDL_MFG) { status = ProMfgAssemGet((ProMfg)mdl, &assy_obj); mdl = assy_obj; } status = ProMenuFileRegister((char*)"TkCavityLayout",(char*)"tkcavitylayout.mnu", &menu_id); status = ProMenubuttonActionSet((char*)"TkCavityLayout", (char*)"TkCavityLayout", (ProMenubuttonAction)ProMenuDelete, NULL, 0); status = ProMenubuttonActionSet((char*)"TkCavityLayout", (char*)"Info", (ProMenubuttonAction)ProTestCavityLayoutInfo, &mdl, 0); status = ProMenubuttonActionSet((char*)"TkCavityLayout", (char*)"Create", (ProMenubuttonAction)ProTestCavityLayoutCreate, &mdl, 0); status = ProMenubuttonActionSet((char*)"TkCavityLayout", (char*)"Redefine", (ProMenubuttonAction)ProTestCavityLayoutRedefine, &mdl, 0); status = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"TkCavityLayout", NULL); status= ProMenuProcess((char*)"", &action); return ((ProError)0); } /*============================================================================*\ FUNCTION : ProTestCavityLayoutInfo PURPOSE : Test Cavity Layout info functions \*============================================================================*/ ProError ProTestCavityLayoutInfo(ProMdl *mdl) { ProError status; ProCavityLayout cvlayout; ProAsmcomppath csys_comp_path, leader_comp; ProCsys csys; int count, i, j, csys_id; double min_x, min_y, min_z, max_x, max_y, max_z; ProMdl mdl_leader; ProModelitem item_lider; ProPath w_path; ProSelection sel; char fname[PRO_FILE_NAME_SIZE] = "cavity_layout.inf"; char leader_name[PRO_MDLNAME_SIZE]; FILE *fp; ProCvLayoutRule rule; ProCvLayoutType type, basic_type; int cavity_num, cavity_num_x, cavity_num_y; double *increment1_arr, *increment2_arr, *increment3_arr; ProCvLayoutOrient orient; ProMdlName *model_names; ProMdlName mdl_name; fp = PTApplsUnicodeFopen(fname, "w"); if(fp == NULL) return(PRO_TK_GENERAL_ERROR); status = ProCavitylayoutCountGet(*mdl, &count); TEST_CALL_REPORT("ProCavitylayoutCountGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); if(count == 0) { ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Cavity Layout not found"); return(PRO_TK_E_NOT_FOUND); } for (i = 0; i<count;i++) { status = ProCavitylayoutGetByNumber(*mdl, i, &cvlayout); TEST_CALL_REPORT("ProCavitylayoutGetByNumber()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProCavitylayoutLeaderGet(cvlayout, &mdl_leader); TEST_CALL_REPORT("ProCavitylayoutLeaderGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProMdlToModelitem(mdl_leader, &item_lider); TEST_CALL_REPORT("ProMdlToModelitem()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProMdlMdlnameGet(*mdl, mdl_name); TEST_CALL_REPORT("ProMdlMdlnameGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProWstringToString(leader_name, mdl_name); ProTKFprintf(fp, (char*)"\n Cavity Layout nuber %d",i+1); ProTKFprintf(fp,(char*)"\n Leader name : %s", leader_name); status = ProCavitylayoutOutlineGet(cvlayout, &min_x, &min_y, &min_z, &max_x, &max_y, &max_z); TEST_CALL_REPORT("ProCavitylayoutOutlineGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, (char*)"\n Outline:"); ProTKFprintf(fp, (char*)"\n min_x = %.2f\t min_y = %.2f\t min_z = %.2f\n" " max_x = %.2f\t max_y = %.2f\t max_z = %.2f", min_x, min_y, min_z, max_x, max_y, max_z); status = ProCavitylayoutLeaderCompGet (cvlayout, &leader_comp); TEST_CALL_REPORT("ProCavitylayoutLeaderCompGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProSelectionAlloc(&leader_comp, &item_lider, &sel); TEST_CALL_REPORT("ProSelectionAlloc()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProSelectionHighlight(sel, PRO_COLOR_HIGHLITE); TEST_CALL_REPORT("ProSelectionHighlight()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProCavitylayoutLeaderCsysGet (cvlayout, &csys_comp_path, &csys); TEST_CALL_REPORT("ProCavitylayoutLeaderCsysGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProCsysIdGet(csys, &csys_id); TEST_CALL_REPORT("ProCsysIdGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, (char*)"\n csys_leader_id = %d", csys_id); status = ProCavitylayoutOriginGet(cvlayout, &csys_comp_path, &csys); TEST_CALL_REPORT("ProCavitylayoutOriginGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProCsysIdGet(csys, &csys_id); TEST_CALL_REPORT("ProCsysIdGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp, (char*)"\n csys_origin_id = %d", csys_id); status = ProCavitylayoutRuleGet(cvlayout, &rule); TEST_CALL_REPORT("ProCavitylayoutRuleGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); status = ProCavlayruleTypeGet(rule, &type, &basic_type); TEST_CALL_REPORT("ProCavlayruleTypeGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp,(char*)"\n type : %s \t basic_type : %s \n", ProTestCavityLayoutTypeToStr(type), ProTestCavityLayoutTypeToStr(basic_type)); switch (type) { case PRO_CVLAYOUT_CIRCULAR : status = ProCavlayruleCircDataGet(rule, &orient, &cavity_num, &min_x, &min_y, &min_z); TEST_CALL_REPORT("ProCavlayruleCircDataGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp,(char*)" Orientation type : %d \n number of Components : %d \n" " Angular displacement : %.2f \n Angle for the first component : " "%.2f \n Raduis of the layout : %.2f", orient, cavity_num, min_x, min_y, min_z); break; case PRO_CVLAYOUT_RECTANG : status = ProCavlayruleRectDataGet(rule, &orient, &cavity_num_x, &cavity_num_y, &min_x, &min_y); TEST_CALL_REPORT("ProCavlayruleRectDataGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp,(char*)" Orientation type : %d \n Number of columns : %d \n" " Number of rows : %d \n Displacement step in x direction : %.2f \n" " Displacement step in y direction : %.2f \n", orient, cavity_num_x, cavity_num_y, min_x, min_y); break; case PRO_CVLAYOUT_VARIABLE : status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment1_arr); status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment2_arr); status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment3_arr); status = ProCavlayruleVarDataGet(rule, &cavity_num, &increment1_arr, &increment2_arr, &increment3_arr); TEST_CALL_REPORT("ProCavlayruleVarDataGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp,(char*)" Number of rows : %d \n", cavity_num); ProTKFprintf(fp,(char*)" Table dimension :\n first second third\n"); for (j = 0; j < cavity_num; j++) { ProTKFprintf(fp,(char*)" %.2f %.2f %.2f \n", increment1_arr[j], increment2_arr[j], increment3_arr[j]); } ProArrayFree((ProArray*)&increment1_arr); ProArrayFree((ProArray*)&increment2_arr); ProArrayFree((ProArray*)&increment3_arr); status = ProCavitylayoutModelMdlnamesGet (cvlayout, &model_names); TEST_CALL_REPORT("ProCavitylayoutModelMdlnamesGet()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); ProTKFprintf(fp,(char*)" Model names:\n"); for (j = 0; j < cavity_num; j++) { ProTKFprintf(fp,(char*)" Name[%d]: %s\n", j, ProWstringToString (leader_name, model_names[j])); } ProArrayFree((ProArray*)&model_names); break; default :; } ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Enter name of file to store rule"); status = ProMessageStringRead (PRO_NAME_SIZE, w_path); status = ProCavlayruleFileWrite(rule, w_path); TEST_CALL_REPORT("ProCavlayruleFileWrite()", "ProTestCavityLayoutInfo()", status, status != PRO_TK_NO_ERROR); } fclose(fp); ProStringToWstring(w_path, fname); ProInfoWindowDisplay(w_path, NULL, NULL); return(PRO_TK_NO_ERROR); } /*============================================================================*\ FUNCTION : ProTestCavityLayoutRedefine PURPOSE : Recreates an existing Cavity Layout \*============================================================================*/ ProError ProTestCavityLayoutRedefine( ProMdl *mdl) { ProError status; ProCavityLayout cvlayout; ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Select cavity layout."); status = ProCavitylayoutSelect(*mdl, &cvlayout); TEST_CALL_REPORT("ProCavitylayoutSelect()", "ProTestCavityLayoutRedefine()", status, status != PRO_TK_NO_ERROR); status = ProTestCavityLayoutSetup(&cvlayout); if(status != PRO_TK_NO_ERROR) return(status); status = ProCavitylayoutRedefine(cvlayout); TEST_CALL_REPORT("ProCavitylayoutRedefine()", "ProTestCavityLayoutRedefine()", status, status != PRO_TK_NO_ERROR); return(status); } /*============================================================================*\ FUNCTION : ProTestCavityLayoutCreate PURPOSE : Create new Cavity Layout \*============================================================================*/ ProError ProTestCavityLayoutCreate( ProMdl *mdl) { ProError status; ProCavityLayout cvlayout; int opt = 0, n_sel = 0; ProMdlName name_leader; ProMdl out_leader; ProModelitem item_leader; ProSelection *p_sel; static ProUtilMenuButtons create_opt[] = { {"TkCLCreate", 0, TEST_CALL_PRO_MENU_DELETE}, {"New", 0, 0}, {"AddComp", 1, 0}, {"SetMdlNames", 2, 0}, {"", 0, 0} }; status = ProUtilMenuIntValueSelect(create_opt, &opt); switch(opt) { case 0: status = ProCavitylayoutAlloc(*mdl, &cvlayout); TEST_CALL_REPORT("ProCavitylayoutAlloc()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Select leader model"); status = ProSelect((char*)"prt_or_asm", 1, NULL, NULL, NULL, NULL, &p_sel, &n_sel); TEST_CALL_REPORT("ProSelect()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR ); if (status != PRO_TK_NO_ERROR) return (status); ProUtilMsgPrint ((char*)"gen", (char*)"TEST %0s", "Enter name for the reference model"); status = ProMessageStringRead (PRO_NAME_SIZE, name_leader); status = ProSelectionModelitemGet(p_sel[0], &item_leader); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestCavityLayoutCreate()",status, status != PRO_TK_NO_ERROR ); status = ProCavitylayoutLeaderMdlnameSet(cvlayout, item_leader.owner, name_leader, &out_leader); TEST_CALL_REPORT("ProCavitylayoutLeaderMdlnameSet()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR); status = ProTestCavityLayoutSetup(&cvlayout); if(status != PRO_TK_NO_ERROR) break; status = ProCavitylayoutCreate(cvlayout); TEST_CALL_REPORT("ProCavitylayoutCreate()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR); break; case 1: status = ProCavitylayoutSelect (*mdl, &cvlayout); TEST_CALL_REPORT("ProCavitylayoutSelect()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR); status = ProTestCavityLayoutSetup(&cvlayout); if(status != PRO_TK_NO_ERROR) break; status = ProCavitylayoutCreate(cvlayout); TEST_CALL_REPORT("ProCavitylayoutCreate()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR); break; case 2: status = ProCavitylayoutSelect (*mdl, &cvlayout); TEST_CALL_REPORT("ProCavitylayoutSelect()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR); status = ProTestCavityLayoutModelNamesSet (&cvlayout); status = ProCavitylayoutCreate(cvlayout); TEST_CALL_REPORT("ProCavitylayoutCreate()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR); break; } status = ProCavitylayoutFree ((ProCavityLayout*)cvlayout); TEST_CALL_REPORT("ProCavitylayoutFree()", "ProTestCavityLayoutCreate()", status, status != PRO_TK_NO_ERROR); return(status); } /*============================================================================*\ FUNCTION : ProTestCavityLayoutSetup PURPOSE : Initialize Cavity Layout handle \*============================================================================*/ ProError ProTestCavityLayoutSetup(ProCavityLayout *cvlayout) { ProError status; ProAsmcomppath leader_abs_path, leader_path, origin_path; ProCvLayoutRule rule; ProCsys leader_csys, origin_csys; /* Set leader csys */ ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", (char*)"Select leader csys:"); status = ProUtilSelectCsys(&leader_csys, &leader_abs_path); if(status != PRO_TK_NO_ERROR) return(status); /* The function ProCavitylayoutLeaderCsysSet takes leader_path with respect to leader model. So it is necessary to shorten leader_path */ status = ProAsmcomppathInit( leader_abs_path.owner, &(leader_abs_path.comp_id_table[1]), leader_abs_path.table_num-1, &leader_path ); TEST_CALL_REPORT( "ProAsmcomppathInit", "ProTestCavityLayoutSetup()", status, status != PRO_TK_NO_ERROR ); if( status != PRO_TK_NO_ERROR ) return (status); status = ProCavitylayoutLeaderCsysSet(*cvlayout, &leader_path, leader_csys); TEST_CALL_REPORT("ProCavitylayoutLeaderCsysSet()", "ProCavitylayoutLeaderCsysSet()", status, status != PRO_TK_NO_ERROR); if(status != PRO_TK_NO_ERROR) return(status); /* Set origin */ ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", (char*)"Select origin csys;"); status = ProUtilSelectCsys(&origin_csys, &origin_path); if(status != PRO_TK_NO_ERROR) return(status); status = ProCavitylayoutOriginSet(*cvlayout, &origin_path, origin_csys); TEST_CALL_REPORT("ProCavitylayoutOriginSet()", "ProTestCavityLayoutSetup()", status, status != PRO_TK_NO_ERROR); /* Set rule */ status = ProCavlayruleAlloc(&rule); TEST_CALL_REPORT("ProCavlayruleAlloc()", "ProTestCavityLayoutSetup()", status, status != PRO_TK_NO_ERROR); status = ProTestCavlayruleSet(&rule); status = ProCavitylayoutRuleSet(*cvlayout, rule); TEST_CALL_REPORT("ProCavitylayoutRuleSet()", "ProTestCavityLayoutSetup()", status, status != PRO_TK_NO_ERROR); status = ProCavlayruleFree (rule); TEST_CALL_REPORT("ProCavlayruleFree()", "ProTestCavityLayoutSetup()", status, status != PRO_TK_NO_ERROR); return(status); } /*============================================================================*\ FUNCTION : ProTestCavlayruleSet PURPOSE : Setup Cuvity Layout rule \*============================================================================*/ ProError ProTestCavlayruleSet(ProCvLayoutRule *rule) { char sel_path[PRO_PATH_SIZE]; int i, type; int cavity_num_x = 2, cavity_num_y = 2, cavity_num; int range_int[2] = {0, 200}, def_int = 1; double range[2] = {0, 200}, def = 1; double cavity_step_x = 1, cavity_step_y = 1; double cavity_step, start_angle, radius; double param; double *increment1_arr, *increment2_arr, *increment3_arr; ProError status; ProPath w_curr_path, w_new_path, w_file_name, w_sel_path; ProMdlName w_mdlname; ProMdlExtension w_file_ext; ProCvLayoutOrient orient; static ProUtilMenuButtons rule_type[] = { {"TkRuleSet", 0, TEST_CALL_PRO_MENU_DELETE}, {"Single", PRO_CVLAYOUT_SINGLE, 0}, {"Rectang", PRO_CVLAYOUT_RECTANG, 0}, {"Circular", PRO_CVLAYOUT_CIRCULAR, 0}, {"Variable", PRO_CVLAYOUT_VARIABLE, 0}, {"ReadFile", RULE_FILE_READ, 0}, {"", 0, 0}}; status = ProUtilMenuIntValueSelect(rule_type, &type); switch(type) { case PRO_CVLAYOUT_SINGLE: status = ProCavlayruleSingleSet(*rule); TEST_CALL_REPORT("ProCavlayruleSingleSet()", "ProTestCavlayruleSet()", status, status != PRO_TK_NO_ERROR); break; case PRO_CVLAYOUT_RECTANG : status = ProTestCavlayruleOrientSet (&orient); if (status != PRO_TK_NO_ERROR) return(status); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter number of columns in the layout"); ProUtilIntGet(range_int, &def_int, &cavity_num_x); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter number of rows in the layout"); ProUtilIntGet(range_int, &def_int, &cavity_num_y); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter displacement step in x direction"); ProUtilDoubleGet(range, &def, &cavity_step_x); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter displacement step in y direction"); ProUtilDoubleGet(range, &def, &cavity_step_y); status = ProCavlayruleRectSet(*rule, orient, cavity_num_x, cavity_num_y, cavity_step_x, cavity_step_y); TEST_CALL_REPORT("ProCavlayruleRectSet()", "ProTestCavlayruleSet()", status, status != PRO_TK_NO_ERROR); break; case PRO_CVLAYOUT_CIRCULAR : status = ProTestCavlayruleOrientSet(&orient); if (status != PRO_TK_NO_ERROR) return(status); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter number of components in the layout"); ProUtilIntGet(range_int, &def_int, &cavity_num); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter angular displacement"); ProUtilDoubleGet(range, &def, &cavity_step); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter angle for the first component"); ProUtilDoubleGet(range, &def, &start_angle); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter raduis of the layout"); ProUtilDoubleGet(range, &def, &radius); status = ProCavlayruleCircSet(*rule, orient, cavity_num, cavity_step, start_angle, radius); TEST_CALL_REPORT("ProCavlayruleCircSet()", "ProTestCavlayruleSet()", status, status != PRO_TK_NO_ERROR); break; case PRO_CVLAYOUT_VARIABLE : status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment1_arr); status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment2_arr); status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment3_arr); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter number of rows in Variable Layout Table"); ProUtilIntGet(range_int, &def_int, &cavity_num); for(i=0; i < cavity_num; i++) { ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter increments for the first table dimension"); status = (ProError)ProUtilDoubleGet(range, &def, ¶m); status = ProArrayObjectAdd((ProArray*)&increment1_arr, PRO_VALUE_UNUSED, 1, ¶m); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter increments for the second table dimension"); status = (ProError)ProUtilDoubleGet(range, &def, ¶m); status = ProArrayObjectAdd((ProArray*)&increment2_arr, PRO_VALUE_UNUSED, 1, ¶m); ProUtilMsgPrint( (char*)"gen", (char*)"TEST %0s", "Enter increments for the third table dimension"); status = (ProError)ProUtilDoubleGet(range, &def, ¶m); status = ProArrayObjectAdd((ProArray*)&increment3_arr, PRO_VALUE_UNUSED, 1, ¶m); } status = ProCavlayruleVarSet(*rule, cavity_num, increment1_arr, increment2_arr, increment3_arr); TEST_CALL_REPORT("ProCavlayruleVarSet()", "ProTestCavlayruleSet()", status, status != PRO_TK_NO_ERROR); ProArrayFree((ProArray*)&increment1_arr); ProArrayFree((ProArray*)&increment2_arr); ProArrayFree((ProArray*)&increment3_arr); break; case RULE_FILE_READ: status = ProDirectoryCurrentGet (w_curr_path); /* Bring up the file selecton dialog */ status = ProUtilFileOpen( (char*)"*.*", sel_path ); if( status != PRO_TK_NO_ERROR ) return status; ProStringToWstring (w_sel_path, sel_path); status = ProFileMdlnameParse (w_sel_path, w_new_path, w_mdlname, w_file_ext, NULL); ProUtilWstrcpy (w_file_name, w_mdlname); ProUtilWstrStrcatToWstr (w_file_name, (char*)"."); ProUtilWstrcat (w_file_name, w_file_ext); /* Read the selected file */ status = ProDirectoryChange (w_new_path); status = ProCavlayruleFileRead( *rule, w_file_name); TEST_CALL_REPORT( "ProCavlayruleFileRead()", "ProTestCavlayruleSet()", status, status != PRO_TK_NO_ERROR); ProDirectoryChange (w_curr_path); break; default: break; } return (status); } /*============================================================================*\ FUNCTION : ProTestCavlayruleOrientSet PURPOSE : Get orient type \*============================================================================*/ ProError ProTestCavlayruleOrientSet(ProCvLayoutOrient *orient) { ProError status; int type; static ProUtilMenuButtons orient_type[] = { {"OrientSet", 0, TEST_CALL_PRO_MENU_DELETE}, {"Constant", PRO_CVLAYOUT_CONSTANT, 0}, {"Xsymmetric", PRO_CVLAYOUT_XSYMMETRIC, 0}, {"Ysymmetric", PRO_CVLAYOUT_YSYMMETRIC, 0}, {"Radial", PRO_CVLAYOUT_RADIAL, 0}, {"", 0, 0} }; status = ProUtilMenuIntValueSelect(orient_type, &type); *orient = (ProCvLayoutOrient)type; return(status); } /*============================================================================*\ FUNCTION : ProUtilSelectCsys PURPOSE : Select Csys and get path \*============================================================================*/ ProError ProUtilSelectCsys(ProCsys *csys, ProAsmcomppath *comppath) { ProError status; ProSelection *p_sel; int n_sel; ProAsmcomppath comp_path; ProModelitem item_csys; status = ProSelect((char*)"csys", 1, NULL, NULL, NULL, NULL, &p_sel, &n_sel); TEST_CALL_REPORT("ProSelect()", "ProUtilSelectCsys()", status, status != PRO_TK_NO_ERROR ); if (status != PRO_TK_NO_ERROR) return (status); status = ProSelectionModelitemGet(p_sel[0], &item_csys); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProUtilSelectCsys()", status, status != PRO_TK_NO_ERROR); status = ProSelectionAsmcomppathGet(p_sel[0], &comp_path); TEST_CALL_REPORT("ProSelectionAsmcomppathGet()", "ProUtilSelectCsys()", 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()", "ProUtilSelectCsys()", status, status != PRO_TK_NO_ERROR); status = ProCsysInit((ProSolid)item_csys.owner, item_csys.id, csys); TEST_CALL_REPORT("ProCsysInit()", "ProUtilSelectCsys()", status, status != PRO_TK_NO_ERROR); return(status); } /*============================================================================*\ FUNCTION : ProTestCavityLayoutTypeToStr PURPOSE : Retrieve name of layout's type. \*============================================================================*/ char* ProTestCavityLayoutTypeToStr (ProCvLayoutType type) { switch (type) { case PRO_CVLAYOUT_VARIABLE: return ((char*)"VARIABLE"); case PRO_CVLAYOUT_CIRCULAR: return ((char*)"CIRCULAR"); case PRO_CVLAYOUT_RECTANG: return ((char*)"RECTANG"); case PRO_CVLAYOUT_SINGLE: return ((char*)"SINGLE"); } return ((char*)""); } ProError ProTestCavityLayoutModelNamesSet ( ProCavityLayout *cvlayout_ptr) { int i, cavity_num, opt, butn_num = 0; double *increment1_arr = NULL, *increment2_arr = NULL, *increment3_arr = NULL; char c_line[PRO_PATH_SIZE], c_name[PRO_MDLNAME_SIZE]; ProError status; ProCvLayoutRule rule; ProCvLayoutType type, basic_type; ProMdlName *old_model_names = NULL; ProMdlName *new_model_names = NULL; ProFamtable famtable; ProFaminstance *famtable_items = NULL; ProMdl mdl; ProMdlName w_name; ProUtilMenuButtons *itm_btns = NULL; ProSolid solid; status = ProCavitylayoutLeaderGet (*cvlayout_ptr, &mdl); TEST_CALL_REPORT("ProCavitylayoutLeaderGet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND); if (status != PRO_TK_NO_ERROR) { ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", "The cavity layout corresponding to the handle does not exists."); return status; } status = ProFaminstanceGenericGet (mdl, PRO_B_TRUE, (ProMdl*)&solid); TEST_CALL_REPORT("ProFaminstanceGenericGet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND); if (status != PRO_TK_NO_ERROR) { ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", "The specified model is not an instance - it has no generic model."); return status; } status = ProFamtableInit ((ProMdl)solid, &famtable); TEST_CALL_REPORT("ProFamtableInit()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR); status = ProUtilCollectFamtableInstance(&famtable, &famtable_items); if (status == PRO_TK_NO_ERROR) { status = ProArraySizeGet ((ProArray)famtable_items, &cavity_num); status = ProArrayAlloc (cavity_num+2, sizeof(ProUtilMenuButtons), 1, (ProArray*)&itm_btns); strcpy (itm_btns[butn_num].button, "TkClSetNames"); itm_btns[butn_num].value = 0; itm_btns[butn_num].special_flag = TEST_CALL_PRO_MENU_DELETE; butn_num = 1; for (i=0; i<cavity_num; i++) { status = ProFaminstanceMdlGet (&famtable_items[i], &mdl); TEST_CALL_REPORT("ProFaminstanceMdlGet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_NOT_FOUND); if (status != PRO_TK_NO_ERROR) { status = ProFaminstanceRetrieve (famtable_items+i, &mdl); TEST_CALL_REPORT("ProFaminstanceRetrieve()", "ProTestCavityLayoutModelNamesSet()", status, status!=PRO_TK_NO_ERROR && status!=PRO_TK_E_NOT_FOUND); if (status != PRO_TK_NO_ERROR) continue; } status = ProMdlMdlnameGet (mdl, w_name); TEST_CALL_REPORT("ProMdlMdlnameGet()", "ProTestCavityLayoutModelNamesSet()", status, status!=PRO_TK_NO_ERROR && status!=PRO_TK_E_NOT_FOUND); ProWstringToString (itm_btns[butn_num].button, w_name); itm_btns[butn_num].value = butn_num; itm_btns[butn_num].special_flag= 0; butn_num++; } strcpy (itm_btns[butn_num].button, ""); itm_btns[butn_num].value = 0; itm_btns[butn_num].special_flag = 0; butn_num++; } ProArrayFree ((ProArray*)&famtable_items); status = ProCavitylayoutRuleGet (*cvlayout_ptr, &rule); TEST_CALL_REPORT("ProCavitylayoutRuleGet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR); status = ProCavlayruleTypeGet (rule, &type, &basic_type); TEST_CALL_REPORT("ProCavlayruleTypeGet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR); ProTKPrintf((char*)"Rule type : %s \t basic_type : %s \n", ProTestCavityLayoutTypeToStr(type), ProTestCavityLayoutTypeToStr(basic_type)); if (type != PRO_CVLAYOUT_VARIABLE) { ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", (char*)"Its not variable cavity layout."); return PRO_TK_E_NOT_FOUND; } status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment1_arr); status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment2_arr); status = ProArrayAlloc(0, sizeof(double), 1, (ProArray*)&increment3_arr); status = ProCavlayruleVarDataGet (rule, &cavity_num, &increment1_arr, &increment2_arr, &increment3_arr); TEST_CALL_REPORT("ProCavlayruleVarDataGet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR); ProArrayFree((ProArray*)&increment1_arr); ProArrayFree((ProArray*)&increment2_arr); ProArrayFree((ProArray*)&increment3_arr); ProTKSprintf (c_line, (char*)" Number of rows: %d", cavity_num); ProUtilMsgPrint ((char*)"gen", (char*)"TEST %0s", c_line); status = ProCavitylayoutModelMdlnamesGet (*cvlayout_ptr, &old_model_names); TEST_CALL_REPORT("ProCavitylayoutModelMdlnamesGet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR); ProTKPrintf ((char*)"Old names:\n"); for (i=0; i<cavity_num; i++) { ProTKPrintf ((char*)"\t%s.\n", ProWstringToString (c_name, old_model_names[i])); } ProTKPrintf ((char*)"We can set %d ProMdlName types in ProArray.\n", i); status = ProArrayAlloc (cavity_num, sizeof(ProMdlName), 1, (ProArray*)&new_model_names); for (i=0; i<cavity_num; i++) { ProTKSprintf (c_line, (char*)"Select name of pattern model %s [%d].", ProWstringToString (c_name, old_model_names[i]), i); ProUtilMsgPrint((char*)"gen", (char*)"TEST %0s", c_line); status = ProUtilMenuIntValueSelect (itm_btns, &opt); ProStringToWstring (new_model_names[i], itm_btns[opt].button); } ProArrayFree((ProArray*)&itm_btns); status = ProCavitylayoutModelMdlnamesSet (*cvlayout_ptr, new_model_names); TEST_CALL_REPORT("ProCavitylayoutModelMdlnamesSet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR); ProArrayFree((ProArray*)&old_model_names); status = ProCavitylayoutModelMdlnamesGet (*cvlayout_ptr, &old_model_names); TEST_CALL_REPORT("ProCavitylayoutModelMdlnamesGet()", "ProTestCavityLayoutModelNamesSet()", status, status != PRO_TK_NO_ERROR); ProTKPrintf ((char*)"New names:\n"); for (i=0; i<cavity_num; i++) { ProTKPrintf ((char*)"\t%s.\n", ProWstringToString (c_name, old_model_names[i])); } ProArrayFree((ProArray*)&old_model_names); ProArrayFree((ProArray*)&new_model_names); return PRO_TK_NO_ERROR; }