shun-iwasawa af8f7a
#pragma once
shun-iwasawa af8f7a
#ifndef IWA_CORRIDORGRADIENTFX_H
shun-iwasawa af8f7a
#define IWA_CORRIDORGRADIENTFX_H
shun-iwasawa af8f7a
shun-iwasawa af8f7a
#include "tfxparam.h"
shun-iwasawa af8f7a
#include "stdfx.h"
shun-iwasawa af8f7a
#include "tparamset.h"
shun-iwasawa af8f7a
shun-iwasawa af8f7a
struct double3 {
shun-iwasawa af8f7a
  double r, g, b;
shun-iwasawa af8f7a
};
shun-iwasawa af8f7a
shun-iwasawa af8f7a
class Iwa_RainbowFx final : public TStandardZeraryFx {
shun-iwasawa af8f7a
  FX_PLUGIN_DECLARATION(Iwa_RainbowFx)
shun-iwasawa af8f7a
shun-iwasawa af8f7a
  TPointParamP m_center;
shun-iwasawa af8f7a
shun-iwasawa af8f7a
  TDoubleParamP m_intensity;
shun-iwasawa af8f7a
  TDoubleParamP m_radius;
shun-iwasawa af8f7a
  TDoubleParamP m_width_scale;
shun-iwasawa af8f7a
  TDoubleParamP m_inside;
shun-iwasawa af8f7a
  TDoubleParamP m_secondary_rainbow;
shun-iwasawa af8f7a
  TBoolParamP m_alpha_rendering;
shun-iwasawa af8f7a
shun-iwasawa af8f7a
  double getSizePixelAmount(const double val, const TAffine affine);
shun-iwasawa 481b59
  void buildRainbowColorMap(double3 *core, double3 *wide, double intensity,
shun-iwasawa 481b59
                            double inside, double secondary, bool doClamp);
shun-iwasawa af8f7a
  inline double3 angleToColor(double angle, double3 *core, double3 *wide);
shun-iwasawa af8f7a
shun-iwasawa af8f7a
  template <typename pixel="" raster,="" typename=""></typename>
shun-iwasawa af8f7a
  void setOutputRaster(const RASTER ras, TDimensionI dim, double3 *outBuf_p);
shun-iwasawa af8f7a
shun-iwasawa af8f7a
public:
shun-iwasawa af8f7a
  Iwa_RainbowFx();
shun-iwasawa af8f7a
shun-iwasawa af8f7a
  bool canHandle(const TRenderSettings &info, double frame) override {
shun-iwasawa af8f7a
    return true;
shun-iwasawa af8f7a
  }
shun-iwasawa af8f7a
  bool doGetBBox(double frame, TRectD &bBox,
shun-iwasawa af8f7a
                 const TRenderSettings &ri) override;
shun-iwasawa af8f7a
  void doCompute(TTile &tile, double frame, const TRenderSettings &ri) override;
shun-iwasawa af8f7a
  void getParamUIs(TParamUIConcept *&concepts, int &length) override;
shun-iwasawa 481b59
shun-iwasawa 481b59
  bool toBeComputedInLinearColorSpace(bool settingsIsLinear,
shun-iwasawa 481b59
                                      bool tileIsLinear) const override;
shun-iwasawa af8f7a
};
shun-iwasawa af8f7a
shun-iwasawa af8f7a
#endif