78 lines (64 with data), 3.2 kB
#ifndef MOCAP_FILTER_JOINT_ANGLES
#define MOCAP_FILTER_JOINT_ANGLES OFF
#endif
#ifndef _MOCAP_FULL_TARRAY
#define _MOCAP_FULL_TARRAY Main.Studies.MarkerTracking.tArray
#endif
#ifndef _MOCAP_MAIN_STUDY_REF
#define _MOCAP_MAIN_STUDY_REF Main.Studies.InverseDynamicStudy
#endif
AnyFunInterpol InterpolatedData =
{
Type ??= iffun(gtfun(.FileReader.Length0, 1), Bspline, ConstantValue);
BsplineOrder ??= min({4,.FileReader.Length0});
T = .FileReader.T;
#if MOCAP_FILTER_JOINT_ANGLES == ON
Data = Main.ModelSetup.JointAngleFilter.FilterFun(.FileReader.Data);
#else
Data ??= .FileReader.Data;
#endif
};
AnyInputFile FileReader = {
// Check if the start time is with the range of data in the file.
/// Number of data elements in the file
AnyInt nFile = NumElemOf(.FileReader.TFile);
AnyFloat TFileMin = arrcat(TFile, {0.0})[0];
AnyFloat TFileMax = arrcat(TFile, {0.0})[ max({ min({TFileNumRead,Length0})-1,0})];
AnyInt ValidStartTime = andfun( gtfun(_MOCAP_MAIN_STUDY_REF.tArray[0],TFileMin-1e-13),
ltfun(_MOCAP_MAIN_STUDY_REF.tArray[0], TFileMax+1e-13));
AnyInt ValidData = andfun(ValidStartTime, bool(TFileIsMonotoneIncreasing));
// If there is problems with the file data, force the use of default data.
AlwaysUseData0 ??= not(ValidData);
// FileName: This is set externally to this include file.
FileErrorContinueOnOff = On;
ReloadOnOff = On;
SuppressWarningsOnOff = On;
AnyInt Length0 = NumElemOf(_MOCAP_FULL_TARRAY);
T0 = _MOCAP_FULL_TARRAY;
};
#ifndef _ANYMOCAP_JOINT_ANGLE_WARNING_MSG_
#define _ANYMOCAP_JOINT_ANGLE_WARNING_MSG_
AnyMessage AnyMoCap_msg1=
{
AnyInt LastTimeIdx = max({0,.FileReader.TFileNumRead-1});
AnyVar LastTimeInFile = .FileReader.T[min({LastTimeIdx, NumElemOf(.FileReader.T)-1})];
TriggerRuntime = andfun(.FileReader.ValidData,
andfun(_MOCAP_MAIN_STUDY_REF.iStep, gtfun(_MOCAP_MAIN_STUDY_REF.t, LastTimeInFile )));
Type = MSG_ErrorFatal;
Message = DesignVar(strformat("\n"+
"----------------------------------------------------------------------------------------------------------\n"+
" No kinematic joint angle data available after t = "+strval(LastTimeInFile, "%.3g") + "s.\n "+
" Please re-run the entire Marker Tracking first (or Main.RunAnalysis)\n"+
"----------------------------------------------------------------------------------------------------------\n"));
};
AnyMessage AnyMoCap_msg2=
{
TriggerRuntime = andfun(eqfun(_MOCAP_MAIN_STUDY_REF.iStep,1), not(.FileReader.ValidData));
Type = MSG_ErrorFatal;
Message = DesignVar(strformat("\n"+
"----------------------------------------------------------------------------------------------------------\n"+
" No valid kinematic joint angle data available.\n"+
" Please run the Marker Tracking analysis first (or Main.RunAnalysis)\n"+
"----------------------------------------------------------------------------------------------------------\n"));
};
#endif