/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*====================================================================*\ FILE : PTMechExCopy.c PURPOSE : Test Pro/TOOLKIT functions for Mechanica \*====================================================================*/ /*--------------------------------------------------------------------*\ Pro/Toolkit includes -- include this first \*--------------------------------------------------------------------*/ #include <ProMechLoad.h> #include <ProUtil.h> #include <ProMessage.h> #include <ProMechValue.h> #include <PTMechExamples.h> /*================================================================*\ FUNCTION: PTMechExLoadPostfilter PURPOSE: Selection filter to ensure that only pressure and force loads are selected \*================================================================*/ static ProError PTMechExLoadPostfilter (ProSelection selection, ProAppData app_data) { ProModelitem mech_item; ProMechLoadType load_type; status = ProSelectionModelitemGet (selection, (ProModelitem*)&mech_item); PT_TEST_LOG_SUCC ("ProSelectionModelitemGet()"); if (mech_item.type != PRO_SIMULATION_LOAD) return (PRO_TK_CONTINUE); status =ProMechloadTypeGet (&mech_item,&load_type); PT_TEST_LOG_SUCC("=ProMechloadTypeGet"); if (((load_type != PRO_MECH_LOAD_FORCE) && (load_type != PRO_MECH_LOAD_PRESSURE)) || (status != PRO_TK_NO_ERROR)) return (PRO_TK_CONTINUE); return (PRO_TK_NO_ERROR); } /*=============================================================*\ FUNCTION: PTMechExMagChange PURPOSE: Increases the magnitude of force/pressure \*=============================================================*/ ProError PTMechExMagChange () { ProSelection* sels; ProSelFunctions sel_funcs; ProMechItem mech_item; int n_sels, i=0; ProMdl constraint_part; ProMechLoadType load_type; ProMechVectoredValue force_vect_value; ProMechValue force_value_mag; ProMechForceData force_data; ProMechStatus mech_status; ProMechPressureData press_data; ProMechValue press_mech_val; double mag; ProLine val,val_5times; char curr_mag1[PRO_LINE_SIZE]; char curr_mag2[PRO_LINE_SIZE]; status = ProMdlCurrentGet(&constraint_part); PT_TEST_LOG_SUCC ("ProMdlCurrentGet"); sel_funcs.pre_filter = NULL; sel_funcs.post_filter = PTMechExLoadPostfilter; sel_funcs.post_selact = NULL; sel_funcs.app_data = NULL; while (1) { status = ProMessageDisplay(msgfile, "PTMechEx Select the load", msgbuf); PT_TEST_LOG_SUCC("ProMessageDisplay()"); status =ProSelect ("sim_load", 1, NULL, &sel_funcs, NULL, NULL, &sels, &n_sels); PT_TEST_LOG_SUCC ("ProSelect()"); if( status != PRO_TK_NO_ERROR || n_sels <= 0 ) break; status = ProSelectionModelitemGet (sels[i], (ProModelitem*)&mech_item); PT_TEST_LOG_SUCC ("ProSelectionModelitemGet()"); status =ProMechloadTypeGet (&mech_item,&load_type); PT_TEST_LOG_SUCC("=ProMechloadTypeGet"); /*--------------------------------------------------------------------*\ Get the force data \*--------------------------------------------------------------------*/ if (load_type == PRO_MECH_LOAD_FORCE) { status = ProMechloadForcedataGet (&mech_item, &force_data); PT_TEST_LOG_SUCC ("ProMechloadForcedataGet"); status = ProMechforcedataForceGet (force_data,&force_vect_value); PT_TEST_LOG_SUCC("ProMechforcedataForceGet"); status = ProMechvectoredvalueMagnitudeGet (force_vect_value,&force_value_mag); PT_TEST_LOG_SUCC("ProMechvectoredvalueMagnitudeGet"); /*--------------------------------------------------------------------*\ Check if the magnitude is required field \*--------------------------------------------------------------------*/ if (status == PRO_TK_E_NOT_FOUND) { status = ProMessageDisplay(msgfile, "PTMechEx Magnitude is not used for this load."); PT_TEST_LOG_SUCC("ProMessageDisplay()"); continue; } /*--------------------------------------------------------------------*\ Get the magnitude value \*--------------------------------------------------------------------*/ status = ProMechvalueValueGet (force_value_mag,val); PT_TEST_LOG_SUCC("ProMechvalueValueGet"); /*--------------------------------------------------------------------*\ Increase the magnitude \*--------------------------------------------------------------------*/ if ( status == PRO_TK_NO_ERROR) { ProWstringToString(curr_mag1,val); PTMechExMagValueIncrease(val,val_5times); /*--------------------------------------------------------------------*\ Set the magnitude value \*--------------------------------------------------------------------*/ status = ProMechvalueValueSet (force_value_mag,val_5times); PT_TEST_LOG_SUCC ("ProMechvalueValueSet"); status = ProMechvectoredvalueMagnitudeSet (force_vect_value, force_value_mag); PT_TEST_LOG_SUCC ("ProMechvectoredvalueMagnitudeSet"); status = ProMechforcedataForceSet (force_data, force_vect_value); PT_TEST_LOG_SUCC ("ProMechforcedataForceSet"); } /*--------------------------------------------------------------------*\ Set the force data \*--------------------------------------------------------------------*/ status = ProMechloadForcedataSet (&mech_item,force_data); PT_TEST_LOG_SUCC("ProMechloadForcedataSet"); /*--------------------------------------------------------------------*\ Confirm the changed value \*--------------------------------------------------------------------*/ status = ProMechloadForcedataGet (&mech_item, &force_data); PT_TEST_LOG_SUCC ("ProMechloadForcedataGet"); status = ProMechforcedataForceGet (force_data,&force_vect_value); PT_TEST_LOG_SUCC("ProMechforcedataForceGet"); status = ProMechvectoredvalueMagnitudeGet (force_vect_value,&force_value_mag); PT_TEST_LOG_SUCC("ProMechvectoredvalueMagnitudeGet"); status = ProMechvalueValueGet (force_value_mag,val); PT_TEST_LOG_SUCC("ProMechvalueValueGet"); ProWstringToString(curr_mag2,val); } if (load_type == PRO_MECH_LOAD_PRESSURE) /*--------------------------------------------------------------------*\ Get the pressure data \*--------------------------------------------------------------------*/ { status = ProMechloadPressuredataGet (&mech_item,&press_data); PT_TEST_LOG_SUCC("ProMechloadPressuredataGet"); status = ProMechpressuredataValueGet (press_data,&press_mech_val); PT_TEST_LOG_SUCC("ProMechpressuredataValueGet"); /*--------------------------------------------------------------------*\ Get the value \*--------------------------------------------------------------------*/ status = ProMechvalueValueGet (press_mech_val,val); PT_TEST_LOG_SUCC("ProMechvalueValueGet"); /*--------------------------------------------------------------------*\ Increase the magnitude \*--------------------------------------------------------------------*/ if ( status == PRO_TK_NO_ERROR) { ProWstringToString(curr_mag1,val); PTMechExMagValueIncrease(val,val_5times); status = ProMechvalueValueSet (press_mech_val,val_5times); PT_TEST_LOG_SUCC ("ProMechvalueValueSet"); status = ProMechpressuredataValueSet (press_data,press_mech_val); PT_TEST_LOG_SUCC("ProMechpressuredataValueSet"); } /*--------------------------------------------------------------------*\ Set the pressure data \*--------------------------------------------------------------------*/ status = ProMechloadPressuredataSet (&mech_item,press_data); PT_TEST_LOG_SUCC("ProMechloadPressuredataSet"); /*--------------------------------------------------------------------*\ Confirm the changed value \*--------------------------------------------------------------------*/ status = ProMechloadPressuredataGet (&mech_item,&press_data); PT_TEST_LOG_SUCC("ProMechloadPressuredataGet"); status = ProMechpressuredataValueGet (press_data,&press_mech_val); PT_TEST_LOG_SUCC("ProMechpressuredataValueGet"); status = ProMechvalueValueGet (press_mech_val,val); PT_TEST_LOG_SUCC("ProMechvalueValueGet"); ProWstringToString(curr_mag2,val); } status = ProMechitemUpdateComplete (&mech_item); PT_TEST_LOG_SUCC ("ProMechitemUpdateComplete"); status = ProMechitemStatusGet (&mech_item, &mech_status); PT_TEST_LOG_SUCC ("ProMechitemStatusGet"); /*--------------------------------------------------------------------*\ Print Message from the result \*--------------------------------------------------------------------*/ if (mech_status == PRO_MECH_ACTIVE) { status = ProMessageDisplay(msgfile, "PTMechEx Magnitude changed successfuly",curr_mag1,curr_mag2); PT_TEST_LOG_SUCC("ProMessageDisplay()"); } else { status = ProMessageDisplay(msgfile, "PTMechEx Magnitude modification failed", msgbuf); PT_TEST_LOG_SUCC("ProMessageDisplay()"); } } return PRO_TK_NO_ERROR; }