# Implement Universal Transform Motion for MotionFX

Universal transform adds generalized transformations based on interpolation of translation, quaternion and scaling vectors. A 14 column input file is used to provide time dependent vectors as: time trnvecx trnvecy trnvecz rotcntrx rotcntry rotcntrz quat0 quat1 quat2 quat3 scalex scaley scalez Linear interpolation is used to find translation, rotation center and scale vector values for a given time while Slerp method is used for quaternion interpolation.

Transformation steps: 1- interpolate values to current time (t); 2- translate from rotcntrx(t), rotcntry(t), rotcntrz(t) to 0, 0, 0; 3- apply scaling as scalex(y), scaley(t), scalez(y); 4- convert quaternion to axis-angle representation at current time (t) and apply rotation; 5- translate by tnrvecx(y), trnvecy(t), trnvecz(y);

Change in behavior: Since universal transform has no time information (tstart_prescribe/tend_prescribe) in the MotionFX (cfg) file, the values are initialized to tstart_prescribe=0 and tend_prescribe=VTK_DOUBLE_MAX to avoid missing parameter error.

Backport: paraview/release