====== Reserved Names ====== Visual3D Reserved Names ==== Contents ==== * [[#CURRENT_SIGNAL|1 CURRENT_SIGNAL]] * [[#Used_to_allow_multiple_signals_to_be_specified_in_an_expression|1.1 Used to allow multiple signals to be specified in an expression]] * [[#Used_to_Specifying_all_signals_of_a_given_TYPE|1.2 Used to Specifying all signals of a given TYPE]] * [[#APPLY_AS_SUFFIX_TO_SIGNAL_NAME|1.3 APPLY_AS_SUFFIX_TO_SIGNAL_NAME]] * [[#NAN|2 NAN]] * [[#isNAN|3 isNAN]] ==== CURRENT_SIGNAL ==== Used to refer to a specific signal with a simple syntax Compute the length of one signal. The legacy syntax is: **Evaluate_Expression** /EXPRESSION=LENGTH(TARGET::ORIGINAL::RFT1) /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=_LENGTH /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** The legacy syntax can get complicated if [[Visual3D:Documentation:Pipeline:General_Information:Pipeline_Parameters|Pipeline_Parameters]] are used in the signal name because of the order in which equations are parsed. ! Create a pipeline parameter containing the marker name **Set_Pipeline_Parameter** /PARAMETER_NAME=MARKER /PARAMETER_VALUE=RFT1 **;** **Evaluate_Expression** /EXPRESSION=LENGTH(TARGET::ORIGINAL&:&:&::MARKER&) /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=_LENGTH **;** This gets even more complicate if the folder is also a pipeline parameter. An alternative is the following **Evaluate_Expression** /EXPRESSION=LENGTH(CURRENT_SIGNAL) /SIGNAL_TYPES=TARGET /SIGNAL_FOLDER=ORIGINAL /SIGNAL_NAMES=::MARKER /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=_LENGTH /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** \\ == Used to allow multiple signals to be specified in an expression == Compute the length of TARGETS RFT1, RFT2, and RFT3 in the ORIGINAL folder The legacy implementation requires a [[Visual3D:Documentation:Pipeline:Pipeline_Commands:For_Each_and_End_For_Each|For_Each]] statement [[Visual3D:Documentation:Pipeline:Pipeline_Commands:For_Each_and_End_For_Each|For_Each]] /Iteration_Parameter_Name= MARKERS /Items= RFT1+RFT2+RFT3 **;** **Evaluate_Expression** /EXPRESSION=LENGTH(TARGET::ORIGINAL&:&:&::MARKERS&) /SIGNAL_TYPES=TARGET /SIGNAL_FOLDER=ORIGINAL /SIGNAL_NAMES= /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=::MARKERS /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** End_For_Each /Iteration_Parameter_Name=MARKERS **;** Using CURRENT_SIGNAL **Evaluate_Expression** /EXPRESSION=LENGTH(CURRENT_SIGNAL) /SIGNAL_TYPES=TARGET /SIGNAL_FOLDER=ORIGINAL /SIGNAL_NAMES=RFT1+RFT2+RFT3 /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=_LENGTH /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** \\ == Used to Specifying all signals of a given TYPE == Compute the length of all TARGETS in the ORIGINAL folder The legacy implementation requires a [[Visual3D:Documentation:Pipeline:Pipeline_Commands:For_Each_and_End_For_Each|For_Each]] command and a command to get the names of all of the TARGETS [[Visual3D:Documentation:Pipeline:Pipeline_Commands:Set_Pipeline_Parameter_To_List_Of_Signal_Names|Set_Pipeline_Parameter_To_List_Of_Signal_Names]] /PARAMETER_NAME=ALL_TARGETS /SIGNAL_TYPE=TARGET /SIGNAL_FOLDER=ORIGINAL **;** [[Visual3D:Documentation:Pipeline:Pipeline_Commands:For_Each_and_End_For_Each|For_Each]] /Iteration_Parameter_Name= MARKERS /Items= ::ALL_TARGETS **;** **Evaluate_Expression** /EXPRESSION=LENGTH(TARGET::ORIGINAL&:&:&::MARKERS&) /SIGNAL_TYPES=TARGET /SIGNAL_FOLDER=ORIGINAL /SIGNAL_NAMES= /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=::MARKERS /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** End_For_Each /Iteration_Parameter_Name=MARKERS **;** Using CURRENT_SIGNAL **Evaluate_Expression** /EXPRESSION=LENGTH(CURRENT_SIGNAL) /SIGNAL_TYPES=TARGET /SIGNAL_FOLDER=ORIGINAL /SIGNAL_NAMES= /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=_LENGTH /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** \\ == APPLY_AS_SUFFIX_TO_SIGNAL_NAME == If **APPLY_AS_SUFFIX_TO_SIGNAL_NAME** is **true**, OR RESULT_NAMES.size() == SIGNAL_NAMES.size() Compute the length of all TARGETS in the ORIGINAL folder **Evaluate_Expression** /EXPRESSION=LENGTH(CURRENT_SIGNAL) /SIGNAL_TYPES=TARGET /SIGNAL_FOLDER=ORIGINAL /SIGNAL_NAMES= /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=_LENGTH /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** Compute the length of Two TARGETS (RFT1 and RFT2) in the ORIGINAL folder **Evaluate_Expression** /EXPRESSION=LENGTH(CURRENT_SIGNAL) /SIGNAL_TYPES=TARGET /SIGNAL_FOLDER=ORIGINAL /SIGNAL_NAMES=RFT1+RFT2 /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=_LENGTH /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** Compute a Best_Plane_Fit for multiple signals at each frame of data **Evaluate_Expression** /EXPRESSION=Best_Fit_Plane(CURRENT_SIGNAL) /SIGNAL_TYPES=TARGET /SIGNAL_FOLDER=ORIGINAL /SIGNAL_NAMES=LSK_1+LSK_2+LSK_3 /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=LSK_PLANE /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE **;** \\ If **APPLY_AS_SUFFIX_TO_SIGNAL_NAME** is **false**, AND RESULT_NAMES.size() == 1 Compute the length of one TARGET (TARGET::ORIGINAL::RFT1) **Evaluate_Expression** /EXPRESSION=LENGTH(TARGET::ORIGINAL::RFT1) /RESULT_TYPES=DERIVED /RESULT_FOLDERS=PROCESSED /RESULT_NAME=RFT1_LENGTH **;** ==== NAN ==== NAN is a reserved string used to designate "Not a Number". Visual3D commands refer to [[Visual3D:Documentation:C3D_Signal_Types:DATA_NOT_FOUND|NO_DATA or DATA_NOT_FOUND]] as NAN For example, the expression 1/0 results in NAN ==== isNAN ==== isNAN(expression) tests values against NAN - If the number is NAN the result is 1, otherwise the result is 0 [Set_Pipeline_Parameter_From_Expression] /PARAMETER_NAME= NAN_TEST /EXPRESSION=ISNAN(1/0) /AS_INTEGER=TRUE **;** ::NAN_TEST = 1 [Set_Pipeline_Parameter_From_Expression] /PARAMETER_NAME= NAN_TEST /EXPRESSION=ISNAN(-999999.000000) /AS_INTEGER=TRUE **;** ::NAN_TEST = 1 Returns "1" because -999999 is equal to Data Not Found in Visual3D. [Set_Pipeline_Parameter_From_Expression] /PARAMETER_NAME= NAN_TEST /EXPRESSION=ISNAN(15) /AS_INTEGER=TRUE **;** ::NAN_TEST = 0 Example: Set negative values to NO_DATA If the z-component of the LELB signal is below 0 set the frame to NO_DATA **Evaluate_Expression** /EXPRESSION=(TARGET::ORIGINAL::LELB::Z>0)/(TARGET::ORIGINAL::LELB::Z>0)*TARGET::ORIGINAL::LELB /RESULT_NAME=LELB /RESULT_TYPE=TARGET /RESULT_FOLDER=PROCESSED **;**