/*====================================================================*\ FILE : TestPartMaterial.c PURPOSE : HISTORY: DATE BUILD AUTHOR MODIFICATIONS 19 Jan 97 H-01-21 Alexey $$1 First version. 22-May-97 H-03-12 Pavel $$2 Added ProMaterail functions 03-Jun-97 H-03-13 Pavel $$3 Fixed some bugs 06-Oct-97 H-03-25 Pavel $$4 More includes 31-May-99 I-03-11 mka $$5 Remove unused variable \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/TOOLKIT includes \*--------------------------------------------------------------------*/ #include #include #include #include #include #include #include /*--------------------------------------------------------------------*\ Application includes \*--------------------------------------------------------------------*/ #include "TestError.h" #include "UtilMessage.h" #include "UtilString.h" /*--------------------------------------------------------------------*\ Macros \*--------------------------------------------------------------------*/ #define USER_ADD 0 #define USER_DELETE 1 #define USER_ASSIGN 2 #define USER_DENSITY 3 #define USER_READ 4 #define USER_WRITE 5 /*--------------------------------------------------------------------*\ Application global/external data \*--------------------------------------------------------------------*/ static struct pro_material_props def_props = { 29e6, /*yonug_modulus*/ 0.27, /*poisson_ratio*/ 11e6, 0.00879, /*mass_density*/ 6.78, 32.0, /*tharm_exp_ref_temp*/ 0.01, 36000.0, /*stress_lim_tension*/ 36000.0, 36000.0, /*stress_lim_shear*/ 0.0, 1.0, /*emisisivity*/ 1.0, 1.0, /*hardness*/ {0}, 0.0, /*init_bend_y_factor*/ {0} }; /*=============================================================*\ Function: ProTestPartMaterial() Purpose: Get/Set the part material name \*=============================================================*/ int ProTestPartMaterial( ProMdl* part) { int ProTestMaterialAction(); int menu_id, action; ProMenuFileRegister("TkMaterial","tkmaterial.mnu", NULL); ProMenubuttonActionSet("TkMaterial","TkMaterial", (ProMenubuttonAction)ProMenuDelete, NULL, 0); ProMenubuttonActionSet("TkMaterial","-Done/Return", (ProMenubuttonAction)ProMenuDelete, NULL, 0); ProMenubuttonActionSet("TkMaterial","-Add", (ProMenubuttonAction)ProTestMaterialAction, part, USER_ADD); ProMenubuttonActionSet("TkMaterial","-Delete", (ProMenubuttonAction)ProTestMaterialAction, part, USER_DELETE); ProMenubuttonActionSet("TkMaterial","-Assign", (ProMenubuttonAction)ProTestMaterialAction, part, USER_ASSIGN); ProMenubuttonActionSet("TkMaterial","-Density", (ProMenubuttonAction)ProTestMaterialAction, part, USER_DENSITY); ProMenubuttonActionSet("TkMaterial","-Read", (ProMenubuttonAction)ProTestMaterialAction, part, USER_READ); ProMenubuttonActionSet("TkMaterial","-Write", (ProMenubuttonAction)ProTestMaterialAction, part, USER_WRITE); ProMenuCreate(PROMENUTYPE_MAIN, "TkMaterial", &menu_id); ProMenuProcess("TkMaterial", &action); return 0; } /*=============================================================*\ Function: ProUtilSelectMaterial() Purpose: select one material from part \*=============================================================*/ ProError ProUtilSelectMaterial(ProSolid *part, ProMaterial *material) { ProError status, st; ProName * p_name, w_name; wchar_t empty = 0, **w_sel; ProWstring *w_array, p_empty; int i, n_lines, n_sel; status = ProArrayAlloc(0, sizeof(ProName), 1, (ProArray*) &p_name); TEST_CALL_REPORT("ProArrayAlloc()", "ProUtilSelectMaterial()", status,status != PRO_TK_NO_ERROR); status = ProPartMaterialsGet(*part, &p_name); TEST_CALL_REPORT("ProPartMaterialsGet()", "ProUtilSelectMaterial()", status,status != PRO_TK_NO_ERROR); if (status != PRO_TK_NO_ERROR) { ProUtilMsgPrint("gen", "TEST %0s", "Unable select material"); } else { status = ProArrayAlloc(0, sizeof(ProWstring), 1, (ProArray*)&w_array); TEST_CALL_REPORT("ProArrayAlloc()", "ProUtilSelectMaterial()", status,status != PRO_TK_NO_ERROR); status = ProArraySizeGet((ProArray)p_name, &n_lines); TEST_CALL_REPORT("ProArraySizeGet()", "ProUtilSelectMaterial()", status,status != PRO_TK_NO_ERROR); for (i=0; imatl_name, w_sel[0]); material->part = *part; } status = st; } st = ProArrayFree((ProArray*)&p_name); TEST_CALL_REPORT("ProArrayFree()", "ProUtilSelectMaterial()", status, status != PRO_TK_NO_ERROR); return (status); } /*=============================================================*\ Function: ProTestMaterialAction() Purpose: all material actions \*=============================================================*/ int ProTestMaterialAction(ProSolid *part, int action) { static int current_get, data_get, current_set; ProMaterial material; ProName w_name; ProError status; ProMaterialdata mat_data; ProCharLine line; double drange[2] = {1e-3, 1e10}, dens; char name[PRO_NAME_SIZE]; switch (action) { case USER_ADD: ProUtilMsgPrint("gen", "TEST %0s", "Enter new material name:"); status = ProMessageStringRead(PRO_NAME_SIZE, w_name); if (status == PRO_TK_NO_ERROR) { status = ProMaterialCreate(*part, w_name, &def_props, &material); TEST_CALL_REPORT("ProMaterialCreate()", "ProTestMaterialAction()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) ProUtilMsgPrint("gen", "TEST %0s", "Material created successfully"); } break; case USER_DELETE: status = ProUtilSelectMaterial(part, &material); if (status == PRO_TK_NO_ERROR) { status = ProMaterialDelete(&material); TEST_CALL_REPORT("ProMaterialDelete()", "ProTestMaterialAction()", status, status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) ProUtilMsgPrint("gen", "TEST %0s", "Material removed successfully"); } break; case USER_ASSIGN: status = ProUtilSelectMaterial(part, &material); if (status == PRO_TK_NO_ERROR) { if ((current_set++) & 1) { status = ProMaterialCurrentSet(&material); TEST_CALL_REPORT("ProMaterialCurrentSet()", "ProTestMaterialAction()",status,status != PRO_TK_NO_ERROR); } else { status = ProPartMaterialSet( *part, material.matl_name); TEST_CALL_REPORT( "ProPartMaterialSet()", "ProTestPartMaterial()",status, status != PRO_TK_NO_ERROR); } if (status == PRO_TK_NO_ERROR) { if (status == PRO_TK_NO_ERROR) ProUtilMsgPrint("gen", "TEST %0s", "Material assigned successfully"); } } break; case USER_DENSITY: if ((current_get++) & 1) { status = ProMaterialCurrentGet(*part, &material); TEST_CALL_REPORT("ProMaterialCurrentGet()", "ProTestMaterialAction()",status,status != PRO_TK_NO_ERROR); } else { status = ProPartMaterialNameGet( *part, material.matl_name); TEST_CALL_REPORT( "ProPartMaterialNameGet()", "ProTestMaterialAction()",status, status != PRO_TK_NO_ERROR); material.part = *part; } if (status != PRO_TK_NO_ERROR) break; if ((data_get++) & 1) { status = ProMaterialDataGet(&material, &mat_data); TEST_CALL_REPORT("ProMaterialDataGet()", "ProTestMaterialAction()",status,status != PRO_TK_NO_ERROR); } else { status = ProPartMaterialdataGet( *part, material.matl_name, &mat_data); TEST_CALL_REPORT( "ProPartMaterialdataGet()", "ProTestMaterialAction()", status, status != PRO_TK_NO_ERROR ); } sprintf(line, "Enter new density value [%.3f]:",mat_data.mass_density); ProUtilMsgPrint("gen", "TEST %0s", line); status = ProMessageDoubleRead(drange, &dens); if (status == PRO_TK_NO_ERROR) mat_data.mass_density = dens; status = ProMaterialDataSet(&material, &mat_data); TEST_CALL_REPORT("ProMaterialDataSet()", "ProTestMaterialAction()",status,status != PRO_TK_NO_ERROR); break; case USER_READ: ProUtilMsgPrint("gen", "TEST %0s", "Enter material name:"); status = ProMessageStringRead(PRO_NAME_SIZE, w_name); if (status != PRO_TK_NO_ERROR) break; status = ProMaterialfileRead(*part, w_name); TEST_CALL_REPORT("ProMaterialfileRead()", "ProTestMaterialAction()",status,status != PRO_TK_NO_ERROR); break; case USER_WRITE: status = ProUtilSelectMaterial(part, &material); if (status != PRO_TK_NO_ERROR) break; ProUtilMsgPrint("gen","TEST %0s","Enter file name to store material:"); status = ProMessageStringRead(PRO_NAME_SIZE, w_name); ProWstringToString(name, w_name); if (strchr(name, '.') == NULL) strcat(name, ".mat"); ProStringToWstring(w_name, name); status = ProMaterialfileWrite(&material, w_name); TEST_CALL_REPORT("ProMaterialfileWrite()", "ProTestMaterialAction()",status,status != PRO_TK_NO_ERROR); if (status == PRO_TK_NO_ERROR) ProUtilMsgPrint("gen", "TEST %0s", "Material file stored successfilly"); break; default: ProUtilMsgPrint("gen", "TEST %0s", "Error!!"); break; } return (0); }