/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*====================================================================*\ FILE : PTMechExItemInfo.c PURPOSE : Writes info. for Mechanica items \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/Toolkit includes -- include this first \*--------------------------------------------------------------------*/ #include <ProMenu.h> #include <ProUtil.h> #include <ProMessage.h> #include <PTMechExamples.h> #include <ProMechanica.h> #include <ProMechItem.h> #include <ProMechWeld.h> #include <ProMechLoad.h> int UserWeldInfoWrite(); int UserLoadInfoWrite(); int UserMenuDeleteAndPop(); /*---------------------- Function Prototypes -------------------------*/ ProError PTExMechitemVisitWrite(ProMechItem* item, ProError filter_status, ProAppData app_data); /* Functions for MechItem: Weld */ ProError PTExMechweldWrite_low (ProMechItem* weld); ProError PTExMechweldperimeterWrite_low (ProMechWeldPerimeter data); ProError PTExMechweldedgedataWrite_low (ProMechWeldEdgeData data); ProError PTExMechweldspotWrite_low (ProMechItem* item, ProMechWeldSpot data); ProError PTExMechweldfeatureWrite_low (ProMechWeldFeature welddata); ProError PTExMechweldEndWeldWrite_low ( ProMechWeldEnd EndWeld_data); /* Functions for MechItem: Load */ ProError PTExMechloadWrite_low (ProMechItem* load); ProError PTExMechforcedataWrite_low (ProMechForceData data); ProError PTExMechpressuredataWrite_low (ProMechPressureData data); ProError PTExMechcentrifugaldataWrite_low (ProMechCentrifugalData data); ProError PTExMechgravitydataWrite_low (ProMechGravityData data); ProError PTGMechstructtempdataWrite_low (ProMechStructtempData data); ProError PTExMechmecttempdataWrite_low (ProMechMecttempData data); ProError PTExMechheatdataWrite_low (ProMechHeatData data); ProError PTExMechbearingdataWrite_low (ProMechBearingData data); ProError PTExMechstructtempdataWrite_low (ProMechStructtempData data); /*Generic utilities */ ProError PTExMechvectoredvalueWrite_low (ProMechVectoredValue value); ProError PTExMechvariationWrite_low (ProMechVariation value); ProError PTExMechdirvectorWrite_low (ProMechDirectionVector value); ProError PTExMechinterpolationpntWrite_low (ProMechInterpolationPnt value); ProError PTExMechGeomrefWrite_low (ProMechGeomref Geomref); ProError PTExMechvalueWrite_low (ProMechValue value); ProError PTExMechObjectrefWrite_low (ProMechObjectref Objectref); static ProFileName message_file; char fname[PRO_NAME_SIZE]; FILE *fp; /*=============================================================*\ FUNCTION: PTMechExItemInfo PURPOSE: \*=============================================================*/ ProError PTMechExItemInfo() { int menu_id, action, status; status = ProMenuFileRegister("PTMechItemEx", "pt_mechitem_example.mnu", &menu_id); PT_TEST_LOG_SUCC( "ProMenuFileRegister" ); status = ProMenubuttonActionSet("PTMechItemEx", "-Weld Item Info", (ProMenubuttonAction)UserWeldInfoWrite, NULL, 0); PT_TEST_LOG_SUCC("ProMenubuttonActionSet" ); status = ProMenubuttonActionSet("PTMechItemEx", "-Load Item Info", (ProMenubuttonAction)UserLoadInfoWrite, NULL, 0); PT_TEST_LOG_SUCC( "ProMenubuttonActionSet" ); status = ProMenubuttonActionSet("PTMechItemEx", "-Done/Return", (ProMenubuttonAction)UserMenuDeleteAndPop, NULL, 0); PT_TEST_LOG_SUCC( "ProMenubuttonActionSet"); status = ProMenubuttonActionSet("PTMechItemEx", "UGMechanica", (ProMenubuttonAction)UserMenuDeleteAndPop, NULL, 0); PT_TEST_LOG_SUCC( "ProMenubuttonActionSet" ); status = ProMenuPush(); PT_TEST_LOG_SUCC( "ProMenuPush"); status = ProMenuCreate(PROMENUTYPE_MAIN, "PTMechItemEx", &menu_id); PT_TEST_LOG_SUCC( "ProMenuCreate" ); status = ProMenuProcess("PTMechItemEx", &action); PT_TEST_LOG_SUCC( "ProMenuProcess" ); return (PRO_TK_NO_ERROR); } /* Write Load info */ int UserLoadInfoWrite() { ProMdl model; ProError status; ProMdlType mdl_type; ProBoolean is_active; ProStringToWstring(message_file, "msg_ugfund.txt"); strcpy (fname, "mechanicaLoaddata.txt"); if ((fp = fopen (fname, "w")) == NULL) { ProMessageDisplay(message_file, "USER %0s F", "Cannot open file for write"); return (0); } ProTKFprintf (fp, "\n"); status = ProMdlCurrentGet (&model); PT_TEST_LOG_SUCC("ProMdlCurrentGet" ); if (status == PRO_TK_NO_ERROR) { status = ProMdlTypeGet (model, &mdl_type); if(mdl_type == PRO_MDL_PART || mdl_type ==PRO_MDL_ASSEMBLY) { /* Visiting mechanica item: PRO_SIMULATION_WELD */ status = ProSolidMechitemVisit (model, PRO_SIMULATION_LOAD, PTExMechitemVisitWrite, NULL, NULL); PT_TEST_LOG_SUCC("ProSolidMechitemVisit" ); } } else { ProMessageDisplay (message_file, "USER %0s F", "There is no current model"); return status; } return 0; } /* Write Weld info */ int UserWeldInfoWrite() { ProMdl model; ProError status; ProMdlType mdl_type; ProBoolean is_active; ProStringToWstring(message_file, "pt_mech_examples.txt"); strcpy (fname, "mechanicaWelddata.txt"); if ((fp = fopen (fname, "w")) == NULL) { ProMessageDisplay(message_file, "USER %0s F", "Cannot open file for write"); return (0); } ProTKFprintf (fp, "\n"); status = ProMdlCurrentGet (&model); PT_TEST_LOG_SUCC("ProMdlCurrentGet" ); if (status == PRO_TK_NO_ERROR) { status = ProMdlTypeGet (model, &mdl_type); if(mdl_type == PRO_MDL_PART || mdl_type ==PRO_MDL_ASSEMBLY) { status = ProSolidMechitemVisit (model, PRO_SIMULATION_WELD, PTExMechitemVisitWrite, NULL, NULL); PT_TEST_LOG_SUCC("ProSolidMechitemVisit" ); } } else { ProMessageDisplay (message_file, "USER %0s F", "There is no current model"); return status; } return 0; } /*====================================================================* Function : UserMenuDeleteAndPop() Purpose : Deletes the current menu and pops up its parent \*====================================================================*/ int UserMenuDeleteAndPop() { int status; status = ProMenuDelete(); PT_TEST_LOG_SUCC( "ProMenuDelete"); status = ProMenuPop(); PT_TEST_LOG_SUCC( "ProMenuPop" ); return (PRO_TK_NO_ERROR); } ProError PTExMechitemVisitWrite(ProMechItem* item, ProError filter_status, ProAppData app_data) { ProName item_proname; char item_name [PRO_NAME_SIZE]; ProError status; status = ProMechitemNameGet ( item, item_proname); PT_TEST_LOG_SUCC("ProMechitemNameGet" ); ProWstringToString (item_name, item_proname); ProTKFprintf (fp, " --------------------------- \n"); ProTKFprintf (fp, " - Item name: %s \n", item_name); ProTKFprintf (fp, " --------------------------- \n"); switch (item->type) { case PRO_SIMULATION_WELD: { ProTKFprintf (fp, " - Item type: PRO_SIMULATION_WELD \n"); PTExMechweldWrite_low (item); break; } case PRO_SIMULATION_LOAD: { ProTKFprintf (fp, " - Item type: PRO_SIMULATION_LOAD \n"); PTExMechloadWrite_low (item); break; } default: break; } return PRO_TK_NO_ERROR; } /*======================================================================*\ WELD \*======================================================================*/ ProError PTExMechweldWrite_low (ProMechItem* weld) { ProMechGeomref* refs; int refs_size, i; ProMechWeldType type; ProMechWeldEnd EndWeld_data; ProMechWeldEndType Endtype; ProError status; status = ProMechweldReferencesGet (weld, &refs); PT_TEST_LOG_SUCC("ProMechweldReferencesGet" ); status = ProArraySizeGet (refs, &refs_size); PT_TEST_LOG_SUCC("ProArraySizeGet" ); if (refs_size > 0) { ProTKFprintf (fp, " - Number of references: %d\n", refs_size); } status = ProMechgeomrefProarrayFree (refs); PT_TEST_LOG_SUCC("ProMechgeomrefProarrayFree" ); status = ProMechweldTypeGet (weld, &type); PT_TEST_LOG_SUCC("ProMechweldTypeGet" ); switch (type) { case PRO_MECH_WELD_PERIMETER: { ProMechWeldPerimeter data; ProTKFprintf (fp, " - Weld type: PRO_MECH_WELD_PERIMETER \n"); status = ProMechweldPerimeterdataGet (weld, &data); PT_TEST_LOG_SUCC("ProMechweldPerimeterdataGet" ); PTExMechweldperimeterWrite_low (data); status = ProMechweldperimeterFree (data); PT_TEST_LOG_SUCC("ProMechweldperimeterFree" ); break; } case PRO_MECH_WELD_SPOT: { ProMechWeldSpot data; ProTKFprintf (fp, " - Weld type: PRO_MECH_WELD_SPOT \n"); status = ProMechweldSpotdataGet (weld, &data); PT_TEST_LOG_SUCC("ProMechweldSpotdataGet" ); PTExMechweldspotWrite_low (weld, data); status = ProMechweldspotFree (data); PT_TEST_LOG_SUCC("ProMechweldspotFree" ); break; } case PRO_MECH_WELD_FEAT: { ProMechWeldFeature welddata; ProTKFprintf (fp, " - Weld type: PRO_MECH_WELD_FEAT \n"); status =ProMechweldFeaturedataGet(weld,&welddata); PT_TEST_LOG_SUCC("ProMechweldFeaturedataGet" ); PTExMechweldfeatureWrite_low (welddata); status=ProMechweldfeatureFree(welddata); PT_TEST_LOG_SUCC("ProMechweldfeatureFree" ); break; } case PRO_MECH_WELD_END: { ProMechWeldEnd EndWeld_data; ProTKFprintf (fp, " - Weld type: PRO_MECH_WELD_END \n"); status =ProMechweldEnddataGet(weld,&EndWeld_data); PT_TEST_LOG_SUCC("ProMechweldEnddataGet" ); PTExMechweldEndWeldWrite_low (EndWeld_data); status =ProMechweldendFree(EndWeld_data); PT_TEST_LOG_SUCC("ProMechweldendFree" ); break; } } return PRO_TK_NO_ERROR; } /*======================================================================*\ Info. for mech item: LOAD \*======================================================================*/ ProError PTExMechloadWrite_low (ProMechItem* load) { ProMechGeomref* refs; int i, gr_size; ProMechLoadType type; ProError status; status = ProMechloadReferencesGet (load, &refs); PT_TEST_LOG_SUCC("ProMechloadReferencesGet" ); status = ProArraySizeGet (refs, &gr_size); ProTKFprintf (fp, " - Number of references: %d \n", gr_size); status = ProMechgeomrefProarrayFree (refs); PT_TEST_LOG_SUCC("ProMechgeomrefProarrayFree" ); status = ProMechloadTypeGet (load, &type); PT_TEST_LOG_SUCC("ProMechloadTypeGet" ); ProTKFprintf (fp, " - Load type: %d \n", type); switch (type) { case PRO_MECH_LOAD_FORCE: { ProMechForceData data; ProTKFprintf (fp, " - Force data: \n"); /* Writing force data */ status = ProMechloadForcedataGet (load, &data); PT_TEST_LOG_SUCC("ProMechloadForcedataGet" ); PTExMechforcedataWrite_low (data); status = ProMechforcedataFree (data); PT_TEST_LOG_SUCC("ProMechforcedataFree" ); break; } case PRO_MECH_LOAD_PRESSURE: { ProMechPressureData data; status = ProMechloadPressuredataGet (load, &data); PT_TEST_LOG_SUCC("ProMechloadPressuredataGet" ); /* Writing pressure load data */ PTExMechpressuredataWrite_low (data); status = ProMechpressuredataFree (data); PT_TEST_LOG_SUCC("ProMechpressuredataFree" ); break; } case PRO_MECH_LOAD_BEARING: { ProMechBearingData data; status = ProMechloadBearingdataGet (load, &data); PT_TEST_LOG_SUCC("ProMechloadBearingdataGet" ); /* Writing bearing load data */ PTExMechbearingdataWrite_low (data); status = ProMechbearingdataFree (data); PT_TEST_LOG_SUCC("ProMechbearingdataFree" ); break; } case PRO_MECH_LOAD_CENTRIFUGAL: { ProMechCentrifugalData data; status = ProMechloadCentrifugaldataGet (load, &data); PT_TEST_LOG_SUCC("ProMechloadCentrifugaldataGet" ); /*Writing centrifugal load data */ PTExMechcentrifugaldataWrite_low (data); status = ProMechcentrifugaldataFree (data); PT_TEST_LOG_SUCC("ProMechcentrifugaldataFree" ); break; } case PRO_MECH_LOAD_GRAVITY: { ProMechGravityData data; /* Writing gravity load data */ status = ProMechloadGravitydataGet (load, &data); PT_TEST_LOG_SUCC("ProMechloadGravitydataGet" ); PTExMechgravitydataWrite_low (data); status = ProMechgravitydataFree (data); PT_TEST_LOG_SUCC("ProMechgravitydataFree" ); break; } case PRO_MECH_LOAD_STRUCTURAL_TEMPERATURE: { ProMechStructtempData data; status = ProMechloadStructtempdataGet (load, &data); PT_TEST_LOG_SUCC("ProMechloadStructtempdataGet" ); /* Writing structural temperature data */ PTExMechstructtempdataWrite_low (data); status = ProMechstructtempdataFree (data); PT_TEST_LOG_SUCC("ProMechstructtempdataFree" ); break; } case PRO_MECH_LOAD_MECT_TEMPERATURE: { ProMechMecttempData data; status = ProMechloadMecttempdataGet (load, &data); PT_TEST_LOG_SUCC("ProMechloadMecttempdataGet" ); /* Writing MECT temperature data */ PTExMechmecttempdataWrite_low (data); status = ProMechmecttempdataFree (data); PT_TEST_LOG_SUCC("ProMechmecttempdataFree" ); break; } case PRO_MECH_LOAD_HEAT: { ProMechHeatData data; status = ProMechloadHeatdataGet (load, &data); PT_TEST_LOG_SUCC("ProMechloadHeatdataGet" ); /* Writing heat load data */ PTExMechheatdataWrite_low (data); status = ProMechheatdataFree (data); PT_TEST_LOG_SUCC("ProMechheatdataFree" ); break; } } return PRO_TK_NO_ERROR; } /*======================================================================*\ Info. for perimeter weld \*======================================================================*/ ProError PTExMechweldperimeterWrite_low (ProMechWeldPerimeter data) { ProMechWeldEdgeData* edges; int i, edges_size; ProError status; status = ProMechweldperimeterEdgesGet (data, &edges); PT_TEST_LOG_SUCC("ProMechweldperimeterEdgesGet" ); status = ProArraySizeGet (edges, &edges_size); PT_TEST_LOG_SUCC("ProArraySizeGet" ); ProTKFprintf (fp, " - Number of edges in the perimeter weld: %d \n", edges_size); for (i = 0; i < edges_size; i++) { PTExMechweldedgedataWrite_low (edges[i]); ProTKFprintf (fp, " --------------- \n"); } status = ProMechweldedgeProarrayFree (edges); PT_TEST_LOG_SUCC("ProMechweldedgeProarrayFree" ); return PRO_TK_NO_ERROR; } /*======================================================================*\ Info. for edge weld \*======================================================================*/ ProError PTExMechweldedgedataWrite_low (ProMechWeldEdgeData data) { int edge_id; ProMechExpression thickness; ProCharLine c_thickness; ProName material; ProCharName c_material; ProError status; status = ProMechweldedgeEdgeGet (data, &edge_id); PT_TEST_LOG_SUCC("ProMechweldedgeEdgeGet" ); ProTKFprintf (fp, " - Weld edge id: %d \n", edge_id); status = ProMechweldedgeThicknessGet (data, thickness); PT_TEST_LOG_SUCC("ProMechweldedgeThicknessGet" ); ProWstringToString (c_thickness, thickness); ProTKFprintf (fp, " + Thickness: %s \n", c_thickness); return PRO_TK_NO_ERROR; } /*======================================================================*\ Info. for spot weld \*======================================================================*/ ProError PTExMechweldspotWrite_low (ProMechItem* item, ProMechWeldSpot data) { int i, points_size; ProMechGeomref *points; ProMechExpression dia; ProCharName c_dia, mat_name; int mat_id; ProName mat_pname; ProModelitem material; ProError status; status = ProMechweldspotPointsGet (data, &points); PT_TEST_LOG_SUCC("ProMechweldspotPointsGet" ); status = ProArraySizeGet (points, &points_size); ProTKFprintf (fp, " - Number of weld spot points: %d \n", points_size); status = ProMechgeomrefProarrayFree (points); PT_TEST_LOG_SUCC("ProMechgeomrefProarrayFree" ); status = ProMechweldspotDiameterGet (data, dia); PT_TEST_LOG_SUCC("ProMechweldspotDiameterGet" ); ProWstringToString (c_dia, dia); ProTKFprintf (fp, " + Diameter: %s \n", c_dia); status = ProMechweldspotMaterialIdGet (data, &mat_id); PT_TEST_LOG_SUCC("ProMechweldspotMaterialIdGet" ); if (mat_id != -1) { status = ProModelitemInit ( item->owner, mat_id, PRO_RP_MATERIAL, &material); status = ProModelitemNameGet (&material, mat_pname); ProWstringToString (mat_name, mat_pname); ProTKFprintf (fp, " + Material id: %d, name: %s \n", mat_id, mat_name); } else { ProTKFprintf (fp, " + Material not assigned \n"); } return PRO_TK_NO_ERROR; } /*======================================================================*\ Info. for weld as feature \*======================================================================*/ ProError PTExMechweldfeatureWrite_low (ProMechWeldFeature welddata) { ProCharLine thickval; ProMechExpression thickness1; ProBoolean overrideflag; int matid; ProError status; status = ProMechweldfeatureOverrideflagGet(welddata,&overrideflag); PT_TEST_LOG_SUCC("ProMechweldfeatureOverrideflagGet" ); ProTKFprintf(fp," +Overrideflag = %s \n", (overrideflag == PRO_B_TRUE)?"True":"False"); if (overrideflag == PRO_B_TRUE) { status =ProMechweldfeatureMaterialidGet(welddata,&matid); PT_TEST_LOG_SUCC("ProMechweldfeatureMaterialidGet" ); ProTKFprintf(fp," +Material id= %d \n",matid); status =ProMechweldfeatureThicknessGet(welddata,thickness1); PT_TEST_LOG_SUCC("ProMechweldfeatureThicknessGet" ); ProWstringToString (thickval, thickness1); ProTKFprintf (fp, " +Thickness: %s \n",thickval); } return PRO_TK_NO_ERROR; } /*======================================================================*\ Info. for end weld \*======================================================================*/ ProError PTExMechweldEndWeldWrite_low ( ProMechWeldEnd EndWeld_data) { ProMechWeldEndType endweldtype; ProBool flag; ProError status; status =ProMechweldendTypeGet(EndWeld_data,&endweldtype); PT_TEST_LOG_SUCC("ProMechweldendTypeGet" ); ProTKFprintf (fp, " + End Weld type: %d \n", endweldtype); /*Checking if endweld type not PRO_MECH_WELD_END_SINGLE_TO_MANY, then only ProMechweldendExtendAdjacentSurfacesGet is called and Extend adjacent surfaces flag is printed*/ if (endweldtype != PRO_MECH_WELD_END_SINGLE_TO_MANY) { status =ProMechweldendExtendAdjacentSurfacesGet(EndWeld_data,&flag); PT_TEST_LOG_SUCC("ProMechweldendExtendAdjacentSurfacesGet" ); ProTKFprintf(fp, " + Extend adjacent surfaces flag = %s \n", (flag == PRO_B_TRUE)?"True":"False"); } return PRO_TK_NO_ERROR; } /*======================================================================*\ Info. for force data \*======================================================================*/ ProError PTExMechforcedataWrite_low (ProMechForceData data) { ProMechForceType type; ProMechVectoredValue force; ProMechVectoredValue moment; ProMechGeomref ref_pnt; ProBool ignore_force, ignore_moment; ProError status; status = ProMechforcedataTypeGet (data, &type); PT_TEST_LOG_SUCC("ProMechforcedataTypeGet" ); ProTKFprintf (fp, " + Force type: %d \n", type); status = ProMechforcedataForceGet (data, &force); PT_TEST_LOG_SUCC("ProMechforcedataForceGet" ); ProTKFprintf (fp, " + Force: \n" ); PTExMechvectoredvalueWrite_low (force); /* Free */ status = ProMechvectoredvalueFree (force); PT_TEST_LOG_SUCC("ProMechvectoredvalueFree" ); status = ProMechforcedataMomentGet (data, &moment); PT_TEST_LOG_SUCC("ProMechforcedataMomentGet" ); ProTKFprintf (fp, " + Moment: \n"); PTExMechvectoredvalueWrite_low (moment); /* Free */ status = ProMechvectoredvalueFree (moment); PT_TEST_LOG_SUCC("ProMechvectoredvalueFree" ); if (type == PRO_MECH_FORCE_TOTAL_AT_POINT) { status = ProMechforcedataRefpntGet (data, &ref_pnt); PT_TEST_LOG_SUCC("ProMechforcedataRefpntGet" ); PTExMechGeomrefWrite_low (ref_pnt); /* Free */ status = ProMechgeomrefFree (ref_pnt); PT_TEST_LOG_SUCC("ProMechgeomrefFree" ); } if (type == PRO_MECH_FORCE_TBLAP) { status = ProMechforcedataAxialForceIgnoreflagGet (data, &ignore_force); PT_TEST_LOG_SUCC("ProMechforcedataAxialForceIgnoreflagGet" ); ProTKFprintf (fp, " + Axial force is: %s \n", (ignore_force == PRO_B_TRUE)?"ignored":"not ignored"); status = ProMechforcedataAxialMomentIgnoreflagGet (data, &ignore_moment); PT_TEST_LOG_SUCC("ProMechforcedataAxialMomentIgnoreflagGet" ); ProTKFprintf (fp, " + Axial moment is: %s \n", (ignore_moment == PRO_B_TRUE)?"ignored":"not ignored"); } return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechVectoredValue \*======================================================================*/ ProError PTExMechvectoredvalueWrite_low (ProMechVectoredValue value) { ProMechDirectionType type; ProMechDirectionVector vector; ProMechGeomref* points; ProMechValue magnitude; int i, pnt_size; ProError status; status = ProMechvectoredvalueDirectiontypeGet (value, &type); PT_TEST_LOG_SUCC("ProMechvectoredvalueDirectiontypeGet" ); ProTKFprintf (fp, " = Direction type: %d \n", type); if (type == PRO_MECH_DIRECTION_BY_VECTOR) { status = ProMechvectoredvalueDirectionvectorGet (value, &vector); PT_TEST_LOG_SUCC("ProMechvectoredvalueDirectionvectorGet" ); PTExMechdirvectorWrite_low (vector); /* Free */ status = ProMechdirvectorFree (vector); PT_TEST_LOG_SUCC("ProMechdirvectorFree" ); } else if (type == PRO_MECH_DIRECTION_BY_2_POINTS) { status = ProMechvectoredvaluePointsGet (value, &points); PT_TEST_LOG_SUCC("ProMechvectoredvaluePointsGet" ); status = ProArraySizeGet (points, &pnt_size); for (i = 0; i < pnt_size; i++) { PTExMechGeomrefWrite_low (points [i]); } /* Free */ status = ProMechgeomrefProarrayFree (points); PT_TEST_LOG_SUCC("ProMechgeomrefProarrayFree" ); } status = ProMechvectoredvalueMagnitudeGet (value, &magnitude); PT_TEST_LOG_SUCC("ProMechvectoredvalueMagnitudeGet" ); if (status == PRO_TK_NO_ERROR) { PTExMechvalueWrite_low (magnitude); /* Free */ status = ProMechvalueFree (magnitude); PT_TEST_LOG_SUCC("ProMechvalueFree" ); } else ProTKFprintf (fp, " = No magnitude. \n"); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechDirectionVector \*======================================================================*/ ProError PTExMechdirvectorWrite_low (ProMechDirectionVector value) { ProMechValue* components; int i, cmp_size; ProMechVariation variation; ProMechGeomref csys; ProError status; ProTKFprintf (fp, " = Overall variation: \n"); status = ProMechdirvectorVariationGet (value, &variation); PT_TEST_LOG_SUCC("ProMechdirvectorVariationGet" ); PTExMechvariationWrite_low (variation); ProTKFprintf (fp, " = Vector components: \n"); status = ProMechdirvectorComponentsGet (value, &components); PT_TEST_LOG_SUCC("ProMechdirvectorComponentsGet" ); status = ProArraySizeGet (components, &cmp_size); for (i = 0; i < cmp_size; i++) { PTExMechvalueWrite_low (components [i]); } /* Free */ status = ProMechvalueProarrayFree (components); PT_TEST_LOG_SUCC("ProMechvalueProarrayFree" ); /* Free */ status = ProMechvariationFree (variation); PT_TEST_LOG_SUCC("ProMechvariationFree" ); ProTKFprintf (fp, " = Vector csys: \n"); status = ProMechdirvectorCsysGet (value, &csys); PT_TEST_LOG_SUCC("ProMechdirvectorCsysGet" ); PTExMechGeomrefWrite_low (csys); /* Free */ status = ProMechgeomrefFree (csys); PT_TEST_LOG_SUCC("ProMechgeomrefFree" ); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechVariation \*======================================================================*/ ProError PTExMechvariationWrite_low (ProMechVariation value) { ProMechVariationType type; int function_id; ProMechInterpolationPnt* pnts; int i, pnt_size; ProMechExternalFieldData external_field_data; ProCharPath c_fem_file; ProMechGeomref csys; ProPath data_file; ProError status; status = ProMechvariationTypeGet (value, &type); PT_TEST_LOG_SUCC("ProMechvariationTypeGet" ); ProTKFprintf (fp, " - Variation type: %d \n", type); if (type == PRO_MECH_VARIATION_FUNCTION) { status = ProMechvariationFunctionidGet (value, &function_id); PT_TEST_LOG_SUCC("ProMechvariationFunctionidGet" ); ProTKFprintf (fp, " = Variation function id: %d \n", function_id); } else if (type == PRO_MECH_VARIATION_INTERPOLATION) { status = ProMechvariationInterpolationGet (value, &pnts); PT_TEST_LOG_SUCC("ProMechvariationInterpolationGet" ); status = ProArraySizeGet (pnts, &pnt_size); for (i = 0; i < pnt_size; i++) { PTExMechinterpolationpntWrite_low (pnts[i]); } /* Free */ status = ProMechinterpolationpntProarrayFree (pnts); PT_TEST_LOG_SUCC("ProMechinterpolationpntProarrayFree" ); } else if (type == PRO_MECH_VARIATION_EXTERN_FIELD) { status = ProMechvariationExternalfielddataGet (value, &external_field_data); PT_TEST_LOG_SUCC("ProMechvariationExternalfielddataGet" ); status = ProMechexternalfielddataCsysGet (external_field_data, &csys); PT_TEST_LOG_SUCC("ProMechexternalfielddataCsysGet" ); if (status == PRO_TK_NO_ERROR) { ProTKFprintf (fp, " + Csys: \n"); PTExMechGeomrefWrite_low (csys); } else ProTKFprintf (fp, " + Csys file not set \n"); ProMechexternalfielddataFileGet (external_field_data, data_file); PT_TEST_LOG_SUCC("ProMechexternalfielddataFileGet" ); if (status == PRO_TK_NO_ERROR) { ProWstringToString (c_fem_file, data_file); ProTKFprintf (fp, " + External field data file: %s \n", c_fem_file); } else ProTKFprintf (fp, " + External field data file not set \n"); } return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechInterpolationPnt \*======================================================================*/ ProError PTExMechinterpolationpntWrite_low (ProMechInterpolationPnt value) { ProMechExpression expression; ProCharLine c_expression; ProMechGeomref point; ProError status; status = ProMechinterpolationpntMagnitudeGet (value, expression); PT_TEST_LOG_SUCC("ProMechinterpolationpntMagnitudeGet" ); ProWstringToString (c_expression, expression); ProTKFprintf (fp, " = Interpolation pnt magnitude: %s \n", c_expression); status = ProMechinterpolationpntPointGet (value, &point); PT_TEST_LOG_SUCC("ProMechinterpolationpntPointGet" ); PTExMechGeomrefWrite_low (point); /* Free */ status = ProMechgeomrefFree (point); return PRO_TK_NO_ERROR; } ProError PTExMechGeomrefWrite_low (ProMechGeomref Geomref) { ProMechGeomrefType type; ProMechGeomrefSubType sub_type; int id; ProAsmcomppath path; ProError status; ProTKFprintf (fp, " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); /* TYPE */ status = ProMechgeomrefTypeGet (Geomref, &type); PT_TEST_LOG_SUCC("ProMechgeomrefTypeGet" ); ProTKFprintf (fp, " ~ Geomref type: %d \n", type); /* SUBTYPE */ status = ProMechgeomrefSubtypeGet (Geomref, &sub_type); PT_TEST_LOG_SUCC("ProMechgeomrefSubtypeGet" ); ProTKFprintf (fp, " ~ Geomref sub type: %d \n", type); /* ID */ status = ProMechgeomrefIdGet (Geomref, &id); PT_TEST_LOG_SUCC("ProMechgeomrefIdGet" ); ProTKFprintf (fp, " ~ Geomref id: %d \n", id); /* PATH */ status = ProMechgeomrefPathGet (Geomref, &path); PT_TEST_LOG_SUCC("ProMechgeomrefPathGet" ); ProTKFprintf (fp, " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechValue \*======================================================================*/ ProError PTExMechvalueWrite_low (ProMechValue value) { ProMechExpression expression; ProMechVariation variation; ProCharLine c_expression; ProError status; status = ProMechvalueValueGet (value, expression); PT_TEST_LOG_SUCC("ProMechvalueValueGet" ); ProWstringToString (c_expression, expression); ProTKFprintf (fp, " - Value expression: %s \n", c_expression); status = ProMechvalueVariationGet (value, &variation); PT_TEST_LOG_SUCC("ProMechvalueVariationGet" ); PTExMechvariationWrite_low (variation); /* Free */ status = ProMechvariationFree (variation); PT_TEST_LOG_SUCC("ProMechvariationFree" ); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechPressureData \*======================================================================*/ ProError PTExMechpressuredataWrite_low (ProMechPressureData data) { ProMechValue value; ProError status; status = ProMechpressuredataValueGet (data, &value); PT_TEST_LOG_SUCC("ProMechpressuredataValueGet" ); PTExMechvalueWrite_low (value); status = ProMechvalueFree (value); PT_TEST_LOG_SUCC("ProMechvalueFree" ); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechCentrifugalData \*======================================================================*/ ProError PTExMechcentrifugaldataWrite_low (ProMechCentrifugalData data) { ProMechVectoredValue velocity, acceleration; ProError status; ProTKFprintf (fp, " + Velocity: \n"); status = ProMechcentrifugaldataVelocityGet (data, &velocity); PT_TEST_LOG_SUCC("ProMechcentrifugaldataVelocityGet" ); PTExMechvectoredvalueWrite_low (velocity); status = ProMechvectoredvalueFree (velocity); PT_TEST_LOG_SUCC("ProMechvectoredvalueFree" ); ProTKFprintf (fp," + Acceleration: \n"); status = ProMechcentrifugaldataAccelerationGet (data, &acceleration); PT_TEST_LOG_SUCC("ProMechcentrifugaldataAccelerationGet" ); PTExMechvectoredvalueWrite_low (acceleration); status = ProMechvectoredvalueFree (acceleration); PT_TEST_LOG_SUCC("ProMechvectoredvalueFree" ); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechGravityData \*======================================================================*/ ProError PTExMechgravitydataWrite_low (ProMechGravityData data) { ProMechVectoredValue value; ProError status; status = ProMechgravitydataValueGet (data, &value); PT_TEST_LOG_SUCC("ProMechgravitydataValueGet" ); PTExMechvectoredvalueWrite_low (value); status = ProMechvectoredvalueFree (value); PT_TEST_LOG_SUCC("ProMechvectoredvalueFree" ); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechMecttempData \*======================================================================*/ ProError PTExMechmecttempdataWrite_low (ProMechMecttempData data) { ProMechObjectref load_set; int analysis_id; ProMechExpression ref_tmp; ProName design_study; ProCharLine c_ref_tmp; ProCharName c_design_stuty; int timestep; ProError status; status = ProMechmecttempdataAnalysisidGet (data, &analysis_id); PT_TEST_LOG_SUCC("ProMechmecttempdataAnalysisidGet" ); ProTKFprintf (fp, " + Analysis id: %d \n", analysis_id); status = ProMechmecttempdataLoadsetGet (data, &load_set); PT_TEST_LOG_SUCC("ProMechmecttempdataLoadsetGet" ); PTExMechObjectrefWrite_low (load_set); status = ProMechmecttempdataReftempGet (data, ref_tmp); PT_TEST_LOG_SUCC("ProMechmecttempdataReftempGet" ); ProWstringToString (c_ref_tmp, ref_tmp); ProTKFprintf (fp, " + Reference temperature: %s \n", c_ref_tmp); status = ProMechmecttempdataTimestepGet (data, ×tep); PT_TEST_LOG_SUCC("ProMechmecttempdataTimestepGet" ); ProTKFprintf (fp, " + Time step: %d \n", timestep); status = ProMechmecttempdataDesignstudyGet (data, design_study); PT_TEST_LOG_SUCC("ProMechmecttempdataDesignstudyGet" ); ProWstringToString (c_design_stuty, design_study); ProTKFprintf (fp, " + Design study: %s \n", design_study); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechObjectref \*======================================================================*/ ProError PTExMechObjectrefWrite_low (ProMechObjectref Objectref) { ProType type; int id; ProAsmcomppath path; ProError status; ProTKFprintf (fp," ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); /* TYPE */ status = ProMechobjectrefTypeGet (Objectref, &type); PT_TEST_LOG_SUCC("ProMechobjectrefTypeGet" ) ProTKFprintf (fp, " ~ Objectref type: %d \n", type); /* ID */ status = ProMechobjectrefIdGet (Objectref, &id); PT_TEST_LOG_SUCC("ProMechobjectrefIdGet" ) ProTKFprintf (fp, " ~ Objectref id: %d \n", id); /* PATH */ status = ProMechobjectrefPathGet (Objectref, &path); PT_TEST_LOG_SUCC("ProMechobjectrefPathGet" ) ProTKFprintf (fp," ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechHeatData \*======================================================================*/ ProError PTExMechheatdataWrite_low (ProMechHeatData data) { ProMechHeatType type; ProMechValue value; int time_func_id; ProError status; status = ProMechheatdataTypeGet (data, &type); PT_TEST_LOG_SUCC("ProMechheatdataTypeGet" ); ProTKFprintf (fp, " + Heat type: %d \n", type); status = ProMechheatdataValueGet (data, &value); PT_TEST_LOG_SUCC("ProMechheatdataValueGet" ); PTExMechvalueWrite_low (value); status = ProMechvalueFree (value); PT_TEST_LOG_SUCC("ProMechvalueFree" ); status = ProMechheatdataTimefunctionidGet (data, &time_func_id); PT_TEST_LOG_SUCC("ProMechheatdataTimefunctionidGet" ); ProTKFprintf (fp, " + Time function id: %d \n", time_func_id); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechStructtempData \*======================================================================*/ ProError PTExMechstructtempdataWrite_low (ProMechStructtempData data) { ProMechValue value; ProMechExpression ref_tmp; ProCharLine c_ref_tmp; ProError status; ProTKFprintf (fp, " + Structural temperature: \n"); ProTKFprintf (fp, " + Value: \n"); status = ProMechstructtempdataValueGet (data, &value); PT_TEST_LOG_SUCC ("ProMechstructtempdataValueGet()"); PTExMechvalueWrite_low (value); status = ProMechvalueFree (value); PT_TEST_LOG_SUCC ("ProMechvalueFree()"); status = ProMechstructtempdataReftempGet (data, ref_tmp); PT_TEST_LOG_SUCC ("ProMechstructtempdataReftempGet()"); ProWstringToString (c_ref_tmp, ref_tmp); ProTKFprintf (fp, " + Reference temperature: %s \n", c_ref_tmp); return PRO_TK_NO_ERROR; } /*======================================================================*\ Utility for ProMechBearingData \*======================================================================*/ ProError PTExMechbearingdataWrite_low (ProMechBearingData data) { ProMechVectoredValue value; ProError status; status = ProMechbearingdataValueGet (data, &value); PTExMechvectoredvalueWrite_low (value); status = ProMechvectoredvalueFree (value); return PRO_TK_NO_ERROR; }