/// Base variation classes. Individual variations will be grouped into files of roughly 50
/// to avoid a single file becoming too unweildy.
/// </summary>
namespaceEmberNs
{
/// <summary>
/// Xform and Variation need each other, but each can't include the other.
/// So Xform includes this file, and use a forward declaration here.
/// </summary>
template<typenameT>classXform;
/// <summary>
/// The type of variation: regular, pre or post.
/// </summary>
enumeVariationType
{
VARTYPE_REG,
VARTYPE_PRE,
VARTYPE_POST,
};
/// <summary>
/// How to handle the results of the variation when it's a pre or post.
/// If the calculation involved the input points, then it should be directly assigned
/// to the output. However, if they did not involve the input points, they should be added
/// to the output.
/// </summary>
enumeVariationAssignType
{
ASSIGNTYPE_SET,
ASSIGNTYPE_SUM
};
/// <summary>
/// Complete list of every variation class ID.
/// </summary>
enumeVariationId
{
VAR_ARCH,
VAR_AUGER,
VAR_BARYCENTROID,
VAR_BCIRCLE,
VAR_BCOLLIDE,
VAR_BENT,
VAR_BENT2,
VAR_BIPOLAR,
VAR_BISPLIT,
VAR_BLADE,
VAR_BLADE3D,
VAR_BLOB,
VAR_BLOB2,
VAR_BLOB3D,
VAR_BLOCKY,
VAR_BLUR,
VAR_BLUR_CIRCLE,
VAR_BLUR_HEART,
VAR_BLUR_LINEAR,
VAR_BLUR_PIXELIZE,
VAR_BLUR_SQUARE,
VAR_BLUR_ZOOM,
VAR_BLUR3D,
VAR_BMOD,
VAR_BOARDERS,
VAR_BOARDERS2,
VAR_BSWIRL,
VAR_BTRANSFORM,
VAR_BUBBLE,
VAR_BUBBLE2,
VAR_BUTTERFLY,
VAR_BWRAPS,
VAR_CARDIOID,
VAR_CELL,
VAR_CHECKS,
VAR_CIRCLEBLUR,
VAR_CIRCLECROP,
VAR_CIRCLELINEAR,
VAR_CIRCLERAND,
VAR_CIRCLETRANS1,
VAR_CIRCLIZE,
VAR_CIRCLIZE2,
VAR_CIRCUS,
VAR_COLLIDEOSCOPE,
VAR_CONIC,
VAR_COS,
VAR_COS_WRAP,
VAR_COSH,
VAR_COSHQ,
VAR_COSINE,
VAR_COSQ,
VAR_COT,
VAR_COTH,
VAR_COTHQ,
VAR_COTQ,
VAR_CPOW,
VAR_CPOW2,
VAR_CRESCENTS,
VAR_CROP,
VAR_CROPN,
VAR_CROSS,
VAR_CSC,
VAR_CSCH,
VAR_CSCHQ,
VAR_CSCQ,
VAR_CUBIC3D,
VAR_CUBIC_LATTICE3D,
VAR_CURL,
VAR_CURL3D,
VAR_CURL_SP,
VAR_CURVATURE,
VAR_CURVE,
VAR_CYLINDER,
VAR_DELTA_A,
VAR_DEPTH,
VAR_DIAMOND,
VAR_DISC,
VAR_DISC2,
VAR_DISC3D,
VAR_ECLIPSE,
VAR_ECOLLIDE,
VAR_EDISC,
VAR_EJULIA,
VAR_ELLIPTIC,
VAR_EMOD,
VAR_EMOTION,
VAR_ENNEPERS,
VAR_EPISPIRAL,
VAR_EPUSH,
VAR_EROTATE,
VAR_ESCALE,
VAR_ESCHER,
VAR_ESTIQ,
VAR_ESWIRL,
VAR_EX,
VAR_EXP,
VAR_EXPO,
VAR_EXPONENTIAL,
VAR_EXTRUDE,
VAR_EYEFISH,
VAR_FALLOFF,
VAR_FALLOFF2,
VAR_FALLOFF3,
VAR_FAN,
VAR_FAN2,
VAR_FARBLUR,
VAR_FDISC,
VAR_FIBONACCI,
VAR_FIBONACCI2,
VAR_FISHEYE,
VAR_FLATTEN,
VAR_FLIP_CIRCLE,
VAR_FLIP_Y,
VAR_FLOWER,
VAR_FLUX,
VAR_FOCI,
VAR_FOCI3D,
VAR_FOURTH,
VAR_FUNNEL,
VAR_GAUSSIAN_BLUR,
VAR_GDOFFS,
VAR_GLYNNIA,
VAR_GLYNNSIM1,
VAR_GLYNNSIM2,
VAR_GLYNNSIM3,
VAR_GRIDOUT,
VAR_HANDKERCHIEF,
VAR_HEART,
VAR_HEAT,
VAR_HEMISPHERE,
VAR_HO,
VAR_HOLE,
VAR_HORSESHOE,
VAR_HYPERBOLIC,
VAR_HYPERTILE,
VAR_HYPERTILE1,
VAR_HYPERTILE2,
VAR_HYPERTILE3D,
VAR_HYPERTILE3D1,
VAR_HYPERTILE3D2,
VAR_IDISC,
VAR_INTERFERENCE2,
VAR_JULIA,
VAR_JULIA3D,
VAR_JULIA3DQ,
VAR_JULIA3DZ,
VAR_JULIAC,
VAR_JULIAN,
VAR_JULIAN2,
VAR_JULIAN3DX,
VAR_JULIANAB,
VAR_JULIAQ,
VAR_JULIASCOPE,
VAR_KALEIDOSCOPE,
VAR_LAZY_TRAVIS,
VAR_LAZYSUSAN,
VAR_LINE,
VAR_LINEAR,
VAR_LINEAR_T,
VAR_LINEAR_T3D,
//VAR_LINEAR_XZ ,
//VAR_LINEAR_YZ ,
VAR_LINEAR3D,
VAR_LISSAJOUS,
VAR_LOG,
VAR_LOQ,
VAR_LOONIE,
VAR_LOONIE3D,
VAR_MASK,
VAR_MCARPET,
VAR_MIRROR_X,
VAR_MIRROR_Y,
VAR_MIRROR_Z,
VAR_MOBIQ,
VAR_MOBIUS,
VAR_MOBIUS_STRIP,
VAR_MOBIUSN,
VAR_MODULUS,
VAR_MURL,
VAR_MURL2,
VAR_NGON,
VAR_NOISE,
VAR_NPOLAR,
VAR_OCTAGON,
VAR_ORTHO,
VAR_OSCILLOSCOPE,
VAR_OVOID,
VAR_OVOID3D,
VAR_PARABOLA,
VAR_PDJ,
VAR_PERSPECTIVE,
VAR_PETAL,
VAR_PHOENIX_JULIA,
VAR_PIE,
VAR_PIE3D,
VAR_POINCARE,
VAR_POINCARE3D,
VAR_POLAR,
VAR_POLAR2,
VAR_POLYNOMIAL,
VAR_POPCORN,
VAR_POPCORN2,
VAR_POPCORN23D,
VAR_POW_BLOCK,
VAR_POWER,
VAR_PSPHERE,
VAR_Q_ODE,
VAR_RADIAL_BLUR,
VAR_RATIONAL3,
VAR_RAYS,
VAR_RBLUR,
VAR_RECTANGLES,
VAR_RINGS,
VAR_RINGS2,
VAR_RIPPLE,
VAR_RIPPLED,
VAR_ROTATE_X,
VAR_ROTATE_Y,
VAR_ROTATE_Z,
VAR_ROUNDSPHER,
VAR_ROUNDSPHER3D,
VAR_SCRY,
VAR_SCRY3D,
VAR_SEC,
VAR_SECANT2,
VAR_SECH,
VAR_SECHQ,
VAR_SECQ,
VAR_SEPARATION,
VAR_SHRED_RAD,
VAR_SHRED_LIN,
VAR_SIGMOID,
VAR_SIN,
VAR_SINEBLUR,
VAR_SINH,
VAR_SINHQ,
VAR_SINQ,
VAR_SINTRANGE,
VAR_SINUS_GRID,
VAR_SINUSOIDAL,
VAR_SINUSOIDAL3D,
VAR_SPHERICAL,
VAR_SPHERICAL3D,
VAR_SPHERICALN,
VAR_SPHERIVOID,
VAR_SPHYP3D,
VAR_SPIRAL,
VAR_SPIRAL_WING,
VAR_SPIROGRAPH,
VAR_SPLIT,
VAR_SPLIT_BRDR,
VAR_SPLITS,
VAR_SQUARE,
VAR_SQUARE3D,
VAR_SQUARIZE,
VAR_SQUIRREL,
VAR_SQUISH,
VAR_SSCHECKS,
VAR_STARBLUR,
VAR_STRIPES,
VAR_STWIN,
VAR_SUPER_SHAPE,
VAR_SUPER_SHAPE3D,
VAR_SVF,
VAR_SWIRL,
VAR_TAN,
VAR_TANCOS,
VAR_TANGENT,
VAR_TANH,
VAR_TANHQ,
VAR_TANQ,
VAR_TARGET,
VAR_TAURUS,
VAR_TRADE,
VAR_TRUCHET,
VAR_TWINTRIAN,
VAR_TWO_FACE,
VAR_UNPOLAR,
VAR_VORON,
VAR_WAFFLE,
VAR_WAVES,
VAR_WAVES2,
VAR_WAVES23D,
VAR_WAVESN,
VAR_WDISC,
VAR_WEDGE,
VAR_WEDGE_JULIA,
VAR_WEDGE_SPH,
VAR_WHORL,
VAR_XHEART,
VAR_XTRB,
VAR_ZBLUR,
VAR_ZCONE,
VAR_ZSCALE,
VAR_ZTRANSLATE,
VAR_PRE_ARCH,
VAR_PRE_AUGER,
VAR_PRE_BARYCENTROID,
VAR_PRE_BCIRCLE,
VAR_PRE_BCOLLIDE,
VAR_PRE_BENT,
VAR_PRE_BENT2,
VAR_PRE_BIPOLAR,
VAR_PRE_BISPLIT,
VAR_PRE_BLADE,
VAR_PRE_BLADE3D,
VAR_PRE_BLOB,
VAR_PRE_BLOB2,
VAR_PRE_BLOB3D,
VAR_PRE_BLOCKY,
VAR_PRE_BLUR,
VAR_PRE_BLUR_CIRCLE,
VAR_PRE_BLUR_HEART,
VAR_PRE_BLUR_LINEAR,
VAR_PRE_BLUR_PIXELIZE,
VAR_PRE_BLUR_SQUARE,
VAR_PRE_BLUR_ZOOM,
VAR_PRE_BLUR3D,
VAR_PRE_BMOD,
VAR_PRE_BOARDERS,
VAR_PRE_BOARDERS2,
VAR_PRE_BSWIRL,
VAR_PRE_BTRANSFORM,
VAR_PRE_BUBBLE,
VAR_PRE_BUBBLE2,
VAR_PRE_BUTTERFLY,
VAR_PRE_BWRAPS,
VAR_PRE_CARDIOID,
VAR_PRE_CELL,
VAR_PRE_CHECKS,
VAR_PRE_CIRCLEBLUR,
VAR_PRE_CIRCLECROP,
VAR_PRE_CIRCLELINEAR,
VAR_PRE_CIRCLERAND,
VAR_PRE_CIRCLETRANS1,
VAR_PRE_CIRCLIZE,
VAR_PRE_CIRCLIZE2,
VAR_PRE_CIRCUS,
VAR_PRE_COLLIDEOSCOPE,
VAR_PRE_CONIC,
VAR_PRE_COS,
VAR_PRE_COS_WRAP,
VAR_PRE_COSH,
VAR_PRE_COSHQ,
VAR_PRE_COSINE,
VAR_PRE_COSQ,
VAR_PRE_COT,
VAR_PRE_COTH,
VAR_PRE_COTHQ,
VAR_PRE_COTQ,
VAR_PRE_CPOW,
VAR_PRE_CPOW2,
VAR_PRE_CRESCENTS,
VAR_PRE_CROP,
VAR_PRE_CROPN,
VAR_PRE_CROSS,
VAR_PRE_CSC,
VAR_PRE_CSCH,
VAR_PRE_CSCHQ,
VAR_PRE_CSCQ,
VAR_PRE_CUBIC3D,
VAR_PRE_CUBIC_LATTICE3D,
VAR_PRE_CURL,
VAR_PRE_CURL3D,
VAR_PRE_CURL_SP,
VAR_PRE_CURVATURE,
VAR_PRE_CURVE,
VAR_PRE_CYLINDER,
VAR_PRE_DELTA_A,
VAR_PRE_DEPTH,
VAR_PRE_DIAMOND,
VAR_PRE_DISC,
VAR_PRE_DISC2,
VAR_PRE_DISC3D,
VAR_PRE_ECLIPSE,
VAR_PRE_ECOLLIDE,
VAR_PRE_EDISC,
VAR_PRE_EJULIA,
VAR_PRE_ELLIPTIC,
VAR_PRE_EMOD,
VAR_PRE_EMOTION,
VAR_PRE_ENNEPERS,
VAR_PRE_EPISPIRAL,
VAR_PRE_EPUSH,
VAR_PRE_EROTATE,
VAR_PRE_ESCALE,
VAR_PRE_ESCHER,
VAR_PRE_ESTIQ,
VAR_PRE_ESWIRL,
VAR_PRE_EX,
VAR_PRE_EXP,
VAR_PRE_EXPO,
VAR_PRE_EXPONENTIAL,
VAR_PRE_EXTRUDE,
VAR_PRE_EYEFISH,
VAR_PRE_FALLOFF,
VAR_PRE_FALLOFF2,
VAR_PRE_FALLOFF3,
VAR_PRE_FAN,
VAR_PRE_FAN2,
VAR_PRE_FARBLUR,
VAR_PRE_FDISC,
VAR_PRE_FIBONACCI,
VAR_PRE_FIBONACCI2,
VAR_PRE_FISHEYE,
VAR_PRE_FLATTEN,
VAR_PRE_FLIP_CIRCLE,
VAR_PRE_FLIP_Y,
VAR_PRE_FLOWER,
VAR_PRE_FLUX,
VAR_PRE_FOCI,
VAR_PRE_FOCI3D,
VAR_PRE_FOURTH,
VAR_PRE_FUNNEL,
VAR_PRE_GAUSSIAN_BLUR,
VAR_PRE_GDOFFS,
VAR_PRE_GLYNNIA,
VAR_PRE_GLYNNSIM1,
VAR_PRE_GLYNNSIM2,
VAR_PRE_GLYNNSIM3,
VAR_PRE_GRIDOUT,
VAR_PRE_HANDKERCHIEF,
VAR_PRE_HEART,
VAR_PRE_HEAT,
VAR_PRE_HEMISPHERE,
VAR_PRE_HO,
VAR_PRE_HOLE,
VAR_PRE_HORSESHOE,
VAR_PRE_HYPERBOLIC,
VAR_PRE_HYPERTILE,
VAR_PRE_HYPERTILE1,
VAR_PRE_HYPERTILE2,
VAR_PRE_HYPERTILE3D,
VAR_PRE_HYPERTILE3D1,
VAR_PRE_HYPERTILE3D2,
VAR_PRE_IDISC,
VAR_PRE_INTERFERENCE2,
VAR_PRE_JULIA,
VAR_PRE_JULIA3D,
VAR_PRE_JULIA3DQ,
VAR_PRE_JULIA3DZ,
VAR_PRE_JULIAC,
VAR_PRE_JULIAN,
VAR_PRE_JULIAN2,
VAR_PRE_JULIAN3DX,
VAR_PRE_JULIANAB,
VAR_PRE_JULIAQ,
VAR_PRE_JULIASCOPE,
VAR_PRE_KALEIDOSCOPE,
VAR_PRE_LAZY_TRAVIS,
VAR_PRE_LAZYSUSAN,
VAR_PRE_LINE,
VAR_PRE_LINEAR,
VAR_PRE_LINEAR_T,
VAR_PRE_LINEAR_T3D,
//VAR_PRE_LINEAR_XZ,
//VAR_PRE_LINEAR_YZ,
VAR_PRE_LINEAR3D,
VAR_PRE_LISSAJOUS,
VAR_PRE_LOG,
VAR_PRE_LOQ,
VAR_PRE_LOONIE,
VAR_PRE_LOONIE3D,
VAR_PRE_MASK,
VAR_PRE_MCARPET,
VAR_PRE_MIRROR_X,
VAR_PRE_MIRROR_Y,
VAR_PRE_MIRROR_Z,
VAR_PRE_MOBIQ,
VAR_PRE_MOBIUS,
VAR_PRE_MOBIUS_STRIP,
VAR_PRE_MOBIUSN,
VAR_PRE_MODULUS,
VAR_PRE_MURL,
VAR_PRE_MURL2,
VAR_PRE_NGON,
VAR_PRE_NOISE,
VAR_PRE_NPOLAR,
VAR_PRE_OCTAGON,
VAR_PRE_ORTHO,
VAR_PRE_OSCILLOSCOPE,
VAR_PRE_OVOID,
VAR_PRE_OVOID3D,
VAR_PRE_PARABOLA,
VAR_PRE_PDJ,
VAR_PRE_PERSPECTIVE,
VAR_PRE_PETAL,
VAR_PRE_PHOENIX_JULIA,
VAR_PRE_PIE,
VAR_PRE_PIE3D,
VAR_PRE_POINCARE,
VAR_PRE_POINCARE3D,
VAR_PRE_POLAR,
VAR_PRE_POLAR2,
VAR_PRE_POLYNOMIAL,
VAR_PRE_POPCORN,
VAR_PRE_POPCORN2,
VAR_PRE_POPCORN23D,
VAR_PRE_POW_BLOCK,
VAR_PRE_POWER,
VAR_PRE_PSPHERE,
VAR_PRE_Q_ODE,
VAR_PRE_RADIAL_BLUR,
VAR_PRE_RATIONAL3,
VAR_PRE_RAYS,
VAR_PRE_RBLUR,
VAR_PRE_RECTANGLES,
VAR_PRE_RINGS,
VAR_PRE_RINGS2,
VAR_PRE_RIPPLE,
VAR_PRE_RIPPLED,
VAR_PRE_ROTATE_X,
VAR_PRE_ROTATE_Y,
VAR_PRE_ROTATE_Z,
VAR_PRE_ROUNDSPHER,
VAR_PRE_ROUNDSPHER3D,
VAR_PRE_SCRY,
VAR_PRE_SCRY3D,
VAR_PRE_SEC,
VAR_PRE_SECANT2,
VAR_PRE_SECH,
VAR_PRE_SECHQ,
VAR_PRE_SECQ,
VAR_PRE_SEPARATION,
VAR_PRE_SHRED_RAD,
VAR_PRE_SHRED_LIN,
VAR_PRE_SIGMOID,
VAR_PRE_SIN,
VAR_PRE_SINEBLUR,
VAR_PRE_SINH,
VAR_PRE_SINHQ,
VAR_PRE_SINQ,
VAR_PRE_SINTRANGE,
VAR_PRE_SINUS_GRID,
VAR_PRE_SINUSOIDAL,
VAR_PRE_SINUSOIDAL3D,
VAR_PRE_SPHERICAL,
VAR_PRE_SPHERICAL3D,
VAR_PRE_SPHERICALN,
VAR_PRE_SPHERIVOID,
VAR_PRE_SPHYP3D,
VAR_PRE_SPIRAL,
VAR_PRE_SPIRAL_WING,
VAR_PRE_SPIROGRAPH,
VAR_PRE_SPLIT,
VAR_PRE_SPLIT_BRDR,
VAR_PRE_SPLITS,
VAR_PRE_SQUARE,
VAR_PRE_SQUARE3D,
VAR_PRE_SQUARIZE,
VAR_PRE_SQUIRREL,
VAR_PRE_SQUISH,
VAR_PRE_SSCHECKS,
VAR_PRE_STARBLUR,
VAR_PRE_STRIPES,
VAR_PRE_STWIN,
VAR_PRE_SUPER_SHAPE,
VAR_PRE_SUPER_SHAPE3D,
VAR_PRE_SVF,
VAR_PRE_SWIRL,
VAR_PRE_TAN,
VAR_PRE_TANCOS,
VAR_PRE_TANGENT,
VAR_PRE_TANH,
VAR_PRE_TANHQ,
VAR_PRE_TANQ,
VAR_PRE_TARGET,
VAR_PRE_TAURUS,
VAR_PRE_TRADE,
VAR_PRE_TRUCHET,
VAR_PRE_TWINTRIAN,
VAR_PRE_TWO_FACE,
VAR_PRE_UNPOLAR,
VAR_PRE_VORON,
VAR_PRE_WAFFLE,
VAR_PRE_WAVES,
VAR_PRE_WAVES2,
VAR_PRE_WAVES23D,
VAR_PRE_WAVESN,
VAR_PRE_WDISC,
VAR_PRE_WEDGE,
VAR_PRE_WEDGE_JULIA,
VAR_PRE_WEDGE_SPH,
VAR_PRE_WHORL,
VAR_PRE_XHEART,
VAR_PRE_XTRB,
VAR_PRE_ZBLUR,
VAR_PRE_ZCONE,
VAR_PRE_ZSCALE,
VAR_PRE_ZTRANSLATE,
VAR_POST_ARCH,
VAR_POST_AUGER,
VAR_POST_BARYCENTROID,
VAR_POST_BCIRCLE,
VAR_POST_BCOLLIDE,
VAR_POST_BENT,
VAR_POST_BENT2,
VAR_POST_BIPOLAR,
VAR_POST_BISPLIT,
VAR_POST_BLADE,
VAR_POST_BLADE3D,
VAR_POST_BLOB,
VAR_POST_BLOB2,
VAR_POST_BLOB3D,
VAR_POST_BLOCKY,
VAR_POST_BLUR,
VAR_POST_BLUR_CIRCLE,
VAR_POST_BLUR_HEART,
VAR_POST_BLUR_LINEAR,
VAR_POST_BLUR_PIXELIZE,
VAR_POST_BLUR_SQUARE,
VAR_POST_BLUR_ZOOM,
VAR_POST_BLUR3D,
VAR_POST_BMOD,
VAR_POST_BOARDERS,
VAR_POST_BOARDERS2,
VAR_POST_BSWIRL,
VAR_POST_BTRANSFORM,
VAR_POST_BUBBLE,
VAR_POST_BUBBLE2,
VAR_POST_BUTTERFLY,
VAR_POST_BWRAPS,
VAR_POST_CARDIOID,
VAR_POST_CELL,
VAR_POST_CHECKS,
VAR_POST_CIRCLEBLUR,
VAR_POST_CIRCLECROP,
VAR_POST_CIRCLELINEAR,
VAR_POST_CIRCLERAND,
VAR_POST_CIRCLETRANS1,
VAR_POST_CIRCLIZE,
VAR_POST_CIRCLIZE2,
VAR_POST_CIRCUS,
VAR_POST_COLLIDEOSCOPE,
VAR_POST_CONIC,
VAR_POST_COS,
VAR_POST_COS_WRAP,
VAR_POST_COSH,
VAR_POST_COSHQ,
VAR_POST_COSINE,
VAR_POST_COSQ,
VAR_POST_COT,
VAR_POST_COTH,
VAR_POST_COTHQ,
VAR_POST_COTQ,
VAR_POST_CPOW,
VAR_POST_CPOW2,
VAR_POST_CRESCENTS,
VAR_POST_CROP,
VAR_POST_CROPN,
VAR_POST_CROSS,
VAR_POST_CSC,
VAR_POST_CSCH,
VAR_POST_CSCHQ,
VAR_POST_CSCQ,
VAR_POST_CUBIC3D,
VAR_POST_CUBIC_LATTICE3D,
VAR_POST_CURL,
VAR_POST_CURL3D,
VAR_POST_CURL_SP,
VAR_POST_CURVATURE,
VAR_POST_CURVE,
VAR_POST_CYLINDER,
VAR_POST_DELTA_A,
VAR_POST_DEPTH,
VAR_POST_DIAMOND,
VAR_POST_DISC,
VAR_POST_DISC2,
VAR_POST_DISC3D,
VAR_POST_ECLIPSE,
VAR_POST_ECOLLIDE,
VAR_POST_EDISC,
VAR_POST_EJULIA,
VAR_POST_ELLIPTIC,
VAR_POST_EMOD,
VAR_POST_EMOTION,
VAR_POST_ENNEPERS,
VAR_POST_EPISPIRAL,
VAR_POST_EPUSH,
VAR_POST_EROTATE,
VAR_POST_ESCALE,
VAR_POST_ESCHER,
VAR_POST_ESTIQ,
VAR_POST_ESWIRL,
VAR_POST_EX,
VAR_POST_EXP,
VAR_POST_EXPO,
VAR_POST_EXPONENTIAL,
VAR_POST_EXTRUDE,
VAR_POST_EYEFISH,
VAR_POST_FALLOFF,
VAR_POST_FALLOFF2,
VAR_POST_FALLOFF3,
VAR_POST_FAN,
VAR_POST_FAN2,
VAR_POST_FARBLUR,
VAR_POST_FDISC,
VAR_POST_FIBONACCI,
VAR_POST_FIBONACCI2,
VAR_POST_FISHEYE,
VAR_POST_FLATTEN,
VAR_POST_FLIP_CIRCLE,
VAR_POST_FLIP_Y,
VAR_POST_FLOWER,
VAR_POST_FLUX,
VAR_POST_FOCI,
VAR_POST_FOCI3D,
VAR_POST_FOURTH,
VAR_POST_FUNNEL,
VAR_POST_GAUSSIAN_BLUR,
VAR_POST_GDOFFS,
VAR_POST_GLYNNIA,
VAR_POST_GLYNNSIM1,
VAR_POST_GLYNNSIM2,
VAR_POST_GLYNNSIM3,
VAR_POST_GRIDOUT,
VAR_POST_HANDKERCHIEF,
VAR_POST_HEART,
VAR_POST_HEAT,
VAR_POST_HEMISPHERE,
VAR_POST_HO,
VAR_POST_HOLE,
VAR_POST_HORSESHOE,
VAR_POST_HYPERBOLIC,
VAR_POST_HYPERTILE,
VAR_POST_HYPERTILE1,
VAR_POST_HYPERTILE2,
VAR_POST_HYPERTILE3D,
VAR_POST_HYPERTILE3D1,
VAR_POST_HYPERTILE3D2,
VAR_POST_IDISC,
VAR_POST_INTERFERENCE2,
VAR_POST_JULIA,
VAR_POST_JULIA3D,
VAR_POST_JULIA3DQ,
VAR_POST_JULIA3DZ,
VAR_POST_JULIAC,
VAR_POST_JULIAN,
VAR_POST_JULIAN2,
VAR_POST_JULIAN3DX,
VAR_POST_JULIANAB,
VAR_POST_JULIAQ,
VAR_POST_JULIASCOPE,
VAR_POST_KALEIDOSCOPE,
VAR_POST_LAZY_TRAVIS,
VAR_POST_LAZYSUSAN,
VAR_POST_LINE,
VAR_POST_LINEAR,
VAR_POST_LINEAR_T,
VAR_POST_LINEAR_T3D,
//VAR_POST_LINEAR_XZ,
//VAR_POST_LINEAR_YZ,
VAR_POST_LINEAR3D,
VAR_POST_LISSAJOUS,
VAR_POST_LOG,
VAR_POST_LOQ,
VAR_POST_LOONIE,
VAR_POST_LOONIE3D,
VAR_POST_MASK,
VAR_POST_MCARPET,
VAR_POST_MIRROR_X,
VAR_POST_MIRROR_Y,
VAR_POST_MIRROR_Z,
VAR_POST_MOBIQ,
VAR_POST_MOBIUS,
VAR_POST_MOBIUS_STRIP,
VAR_POST_MOBIUSN,
VAR_POST_MODULUS,
VAR_POST_MURL,
VAR_POST_MURL2,
VAR_POST_NGON,
VAR_POST_NOISE,
VAR_POST_NPOLAR,
VAR_POST_OCTAGON,
VAR_POST_ORTHO,
VAR_POST_OSCILLOSCOPE,
VAR_POST_OVOID,
VAR_POST_OVOID3D,
VAR_POST_PARABOLA,
VAR_POST_PDJ,
VAR_POST_PERSPECTIVE,
VAR_POST_PETAL,
VAR_POST_PHOENIX_JULIA,
VAR_POST_PIE,
VAR_POST_PIE3D,
VAR_POST_POINCARE,
VAR_POST_POINCARE3D,
VAR_POST_POLAR,
VAR_POST_POLAR2,
VAR_POST_POLYNOMIAL,
VAR_POST_POPCORN,
VAR_POST_POPCORN2,
VAR_POST_POPCORN23D,
VAR_POST_POW_BLOCK,
VAR_POST_POWER,
VAR_POST_PSPHERE,
VAR_POST_Q_ODE,
VAR_POST_RADIAL_BLUR,
VAR_POST_RATIONAL3,
VAR_POST_RAYS,
VAR_POST_RBLUR,
VAR_POST_RECTANGLES,
VAR_POST_RINGS,
VAR_POST_RINGS2,
VAR_POST_RIPPLE,
VAR_POST_RIPPLED,
VAR_POST_ROTATE_X,
VAR_POST_ROTATE_Y,
VAR_POST_ROTATE_Z,
VAR_POST_ROUNDSPHER,
VAR_POST_ROUNDSPHER3D,
VAR_POST_SCRY,
VAR_POST_SCRY3D,
VAR_POST_SEC,
VAR_POST_SECANT2,
VAR_POST_SECH,
VAR_POST_SECHQ,
VAR_POST_SECQ,
VAR_POST_SEPARATION,
VAR_POST_SHRED_RAD,
VAR_POST_SHRED_LIN,
VAR_POST_SIGMOID,
VAR_POST_SIN,
VAR_POST_SINEBLUR,
VAR_POST_SINH,
VAR_POST_SINHQ,
VAR_POST_SINQ,
VAR_POST_SINTRANGE,
VAR_POST_SINUS_GRID,
VAR_POST_SINUSOIDAL,
VAR_POST_SINUSOIDAL3D,
VAR_POST_SPHERICAL,
VAR_POST_SPHERICAL3D,
VAR_POST_SPHERICALN,
VAR_POST_SPHERIVOID,
VAR_POST_SPHYP3D,
VAR_POST_SPIRAL,
VAR_POST_SPIRAL_WING,
VAR_POST_SPIROGRAPH,
VAR_POST_SPLIT,
VAR_POST_SPLIT_BRDR,
VAR_POST_SPLITS,
VAR_POST_SQUARE,
VAR_POST_SQUARE3D,
VAR_POST_SQUARIZE,
VAR_POST_SQUIRREL,
VAR_POST_SQUISH,
VAR_POST_SSCHECKS,
VAR_POST_STARBLUR,
VAR_POST_STRIPES,
VAR_POST_STWIN,
VAR_POST_SUPER_SHAPE,
VAR_POST_SUPER_SHAPE3D,
VAR_POST_SVF,
VAR_POST_SWIRL,
VAR_POST_TAN,
VAR_POST_TANCOS,
VAR_POST_TANGENT,
VAR_POST_TANH,
VAR_POST_TANHQ,
VAR_POST_TANQ,
VAR_POST_TARGET,
VAR_POST_TAURUS,
VAR_POST_TRADE,
VAR_POST_TRUCHET,
VAR_POST_TWINTRIAN,
VAR_POST_TWO_FACE,
VAR_POST_UNPOLAR,
VAR_POST_VORON,
VAR_POST_WAFFLE,
VAR_POST_WAVES,
VAR_POST_WAVES2,
VAR_POST_WAVES23D,
VAR_POST_WAVESN,
VAR_POST_WDISC,
VAR_POST_WEDGE,
VAR_POST_WEDGE_JULIA,
VAR_POST_WEDGE_SPH,
VAR_POST_WHORL,
VAR_POST_XHEART,
VAR_POST_XTRB,
VAR_POST_ZBLUR,
VAR_POST_ZCONE,
VAR_POST_ZSCALE,
VAR_POST_ZTRANSLATE,
//Direct color are special and only some have pre/post counterparts.
VAR_DC_BUBBLE,
VAR_DC_CARPET,
VAR_DC_CUBE,
VAR_DC_CYLINDER,
VAR_DC_GRIDOUT,
VAR_DC_LINEAR,
VAR_DC_TRIANGLE,
VAR_DC_ZTRANSL,
VAR_PRE_DC_CARPET,
VAR_PRE_DC_CUBE,
VAR_PRE_DC_GRIDOUT,
VAR_PRE_DC_TRIANGLE,
VAR_PRE_DC_ZTRANSL,
VAR_POST_DC_CARPET,
VAR_POST_DC_CUBE,
VAR_POST_DC_GRIDOUT,
VAR_POST_DC_TRIANGLE,
VAR_POST_DC_ZTRANSL,
LAST_VAR=VAR_POST_DC_ZTRANSL+1
};
/// <summary>
/// Translated and precalculated values that get passed to each variation's virtual function.
/// Note that this must be passed in and not a member because multiple threads will be calling
/// the variation functions simultaneously. Each thread will get its own IteratorHelper object.
/// Template argument expected to be float or double.
/// </summary>
template<typenameT>
classEMBER_APIIteratorHelper
{
public:
v2Tm_Color;
Tm_TransX,m_TransY,m_TransZ;//Translated point gotten by applying the affine transform to the input point gotten from the output of the previous iteration (excluding final).
Tm_PrecalcSumSquares;//Precalculated value of the sum of the squares of the translated point.
Tm_PrecalcSqrtSumSquares;//Precalculated value of the square root of m_PrecalcSumSquares.
Tm_PrecalcSina;//Precalculated value of m_TransX / m_PrecalcSqrtSumSquares.
Tm_PrecalcCosa;//Precalculated value of m_TransY / m_PrecalcSqrtSumSquares.
Tm_PrecalcAtanxy;//Precalculated value of atan2(m_TransX, m_TransY).
Tm_PrecalcAtanyx;//Precalculated value of atan2(m_TransY, m_TransX).
v4TIn,Out;
};
/// <summary>
/// The base variation class from which all variations will derive.
/// Each has a unique ID, name and weight, as well as a virtual function Func() which
/// does the actual calculations.
/// Each also has boolean values that specify whether precalculations are needed.
/// These precalc flags are used by the parent Xform to determine which values to
/// precalculate in each iteration.
/// Template argument expected to be float or double.
/// </summary>
template<classT>
classEMBER_APIVariation
{
public:
/// <summary>
/// Constructor which takes parameters.
/// </summary>
/// <param name="name">The unique name of the variation</param>
/// <param name="id">The unique ID of the variation</param>