/*============================================================================*\ FILE : TestFemmesh.c PURPOSE : A test of mesh functionality HISTORY.. DATE BUILD AUTHOR MODIFICATIONS 10-Sep-98 I-01-19 Agsh $$1 Created 04-Nov-98 I-01-26 Agsh $$2 Replaced sone assign functions by ProUtilAssignMesh 15-Nov-98 I-01-26 Alexey $$3 User ProError values instead of integers in ProTestExportFemMesh 01-Jun-99 I-03-12 mka $$4 Delete unused variable \*============================================================================*/ /*----------------------------------------------------------------------------*\ Pro/TOOLKIT includes \*----------------------------------------------------------------------------*/ #include #include #include #include #include /*----------------------------------------------------------------------------*\ Application includes \*----------------------------------------------------------------------------*/ #include "TestError.h" #include "UtilMenu.h" /*============================================================================*\ FUNCTION : ProTestInitMesh() PURPOSE : Default initialize mesh data structure \*============================================================================*/ int ProTestInitMesh(ProFemmeshData *mesh) { mesh->mesh_type = PRO_FEM_SOLID_MESH; mesh->shell_type = PRO_FEM_SHELL_MESH_TRIANGLE; mesh->num_quilts = 0; mesh->analysis = PRO_FEM_ANALYSIS_STRUCTURAL; mesh->elem_shape = PRO_FEM_MIDPNT_LINEAR; mesh->solver = PRO_FEM_FEAS_COSMOS; mesh->num_aux_csys = 0; mesh->pro_quilt_ref_arr = NULL; mesh->aux_csys_ref_arr = NULL; mesh->csys_ref.id = PRO_VALUE_UNUSED; return(0); } /*============================================================================*\ FUNCTION : ProTestFemMeshMenu() PURPOSE : Create menu for test options for mesh functionality \*============================================================================*/ ProError ProTestFemMeshMenu() { ProError status; int menu_id; ProFemmeshData mesh; ProSolid solid; static char *menu[]={"TkMeshOpt","ShellType","Analisis","Shape","Solver","OutFile",""}; ProError ProTestExportFemMesh(); int ProUtilAssignMesh(); status = ProMdlCurrentGet((ProMdl*)&solid); ProTestInitMesh(&mesh); /* Setup menu for chose fem mesh options */ status = ProMenuFileRegister("TkMeshOpt", "tk_mesh_opt.mnu", &menu_id); status = ProMenubuttonActionSet("TkMeshOpt", "TkMeshOpt", (ProMenubuttonAction)ProMenuDelete, NULL, 0); status = ProMenubuttonActionSet("TkMeshOpt", "Solid", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.mesh_type), PRO_FEM_SOLID_MESH ); status = ProMenubuttonActionSet("TkMeshOpt", "Shell", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.mesh_type), PRO_FEM_SHELL_MESH ); status = ProMenubuttonActionSet("TkMeshOpt", "Mixed", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.mesh_type), PRO_FEM_MIXED_MESH ); status = ProMenubuttonActionSet("TkMeshOpt", "Quilt", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.mesh_type), PRO_FEM_QUILT_MESH ); status = ProMenubuttonActionSet("TkMeshOpt", "Boundary", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.mesh_type), PRO_FEM_BOUNDARY_MESH ); status = ProMenubuttonActionSet("TkMeshOpt", "Bar", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.mesh_type), PRO_FEM_BAR_MESH ); status = ProMenuFileRegister("ShellType", "tk_shell.mnu", &menu_id); status = ProMenubuttonActionSet("ShellType", "ShellType", (ProMenubuttonAction)ProMenuDelete, NULL, 0); status = ProMenubuttonActionSet("ShellType", "Triangle", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.shell_type), PRO_FEM_SHELL_MESH_TRIANGLE); status = ProMenubuttonActionSet("ShellType", "Qadrangle", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.shell_type), PRO_FEM_SHELL_MESH_QUADRANGLE ); status = ProMenuFileRegister("Analisis", "tk_analisis.mnu", &menu_id); status = ProMenubuttonActionSet("Analisis", "Analisis", (ProMenubuttonAction) ProMenuDelete, NULL, 0); status = ProMenubuttonActionSet("Analisis", "Structural", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.analysis), PRO_FEM_ANALYSIS_STRUCTURAL ); status = ProMenubuttonActionSet("Analisis", "Modal", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.analysis), PRO_FEM_ANALYSIS_MODAL); status = ProMenubuttonActionSet("Analisis", "Termal", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.analysis), PRO_FEM_ANALYSIS_THERMAL); status = ProMenubuttonActionSet("Analisis", "Flow", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.analysis), PRO_FEM_ANALYSIS_FLOW ); status = ProMenuFileRegister("Shape", "tk_shape.mnu", &menu_id); status = ProMenubuttonActionSet("Shape", "Shape", (ProMenubuttonAction)ProMenuDelete,NULL, 0); status = ProMenubuttonActionSet("Shape", "Linear", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.elem_shape), PRO_FEM_MIDPNT_LINEAR ); status = ProMenubuttonActionSet("Shape", "Parabolic", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.elem_shape), PRO_FEM_MIDPNT_PARABOLIC ); status = ProMenubuttonActionSet("Shape", "ParabolicFix", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.elem_shape), PRO_FEM_MIDPNT_PARABOLIC_FIXED ); status = ProMenuFileRegister("Solver", "tk_solver.mnu", &menu_id); status = ProMenubuttonActionSet("Solver", "Solver", (ProMenubuttonAction)ProMenuDelete,NULL, 0); status = ProMenubuttonActionSet("Solver", "None", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.solver), PRO_FEM_FEAS_NONE ); status = ProMenubuttonActionSet("Solver", "Neutral", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.solver), PRO_FEM_FEAS_NEUTRAL ); status = ProMenubuttonActionSet("Solver", "Ansys", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.solver), PRO_FEM_FEAS_ANSYS ); status = ProMenubuttonActionSet("Solver", "Cosmos", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.solver), PRO_FEM_FEAS_COSMOS ); status = ProMenubuttonActionSet("Solver", "Nastran", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.solver), PRO_FEM_FEAS_NASTRAN); status = ProMenubuttonActionSet("Solver", "Partran", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.solver), PRO_FEM_FEAS_PATRAN ); status = ProMenubuttonActionSet("Solver", "Supertab", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.solver), PRO_FEM_FEAS_SUPERTAB ); status = ProMenubuttonActionSet("Solver", "Mold", (ProMenubuttonAction)ProUtilAssignMesh, &(mesh.solver), PRO_FEM_FEAS_C_MOLD ); status = ProMenuFileRegister("OutFile", "tk_out_file.mnu", &menu_id); status = ProMenubuttonActionSet("OutFile", "OutFile", (ProMenubuttonAction)ProMenuDelete,NULL, 0); status = ProMenubuttonGenactionSet("OutFile", "OutMesh", (ProMenubuttonGenaction)ProTestExportFemMesh, solid, &mesh, NULL, NULL, NULL, NULL); status = ProCompoundmenuCreate(menu, &menu_id); /* Highlight default settings */ status = ProMenubuttonHighlight("TkMeshOpt", "Solid"); status = ProMenubuttonHighlight("ShellType", "Triangle"); status = ProMenubuttonHighlight("Analisis", "Structural"); status = ProMenubuttonHighlight("Shape", "Linear"); status = ProMenubuttonHighlight("Solver", "Cosmos"); status = ProMenuProcess(menu[0], &menu_id); return(status); } /*============================================================================*\ FUNCTION : ProTestExportFemMesh PURPOSE : export fem mesh \*============================================================================*/ int ProUtilAssignMesh(ProAppData p_member, int option) { *((int *)p_member) = option; return (0); } /*============================================================================*\ FUNCTION : ProTestExportFemMesh PURPOSE : export fem mesh \*============================================================================*/ ProError ProTestExportFemMesh(ProSolid solid , ProFemmeshData *mesh) { ProError status; ProName name; ProName MSGFIL; status = ProMenuDelete(); status = ProMenuDelete(); status = ProMenuDelete(); status = ProMenuDelete(); status = ProMenuDelete(); status = ProMenuDelete(); ProStringToWstring( MSGFIL, "usermsg.txt"); if ( solid == NULL ) { status = ProMessageDisplay(MSGFIL, "USER %0s", "No object found"); return(PRO_TK_BAD_INPUTS); } /* Write output file */ else { status = ProMessageDisplay (MSGFIL, "USER %0s", "Enter output file name :"); status = ProMessageStringRead (PRO_NAME_SIZE, name); if(status != PRO_TK_NO_ERROR) return(PRO_TK_NO_ERROR); status = ProFemmeshExport(solid, mesh, name); TEST_CALL_REPORT("ProFemmeshExport()", "ProTestExportFemMesh()", status, status != PRO_TK_NO_ERROR); } return(status); }