Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "stdfx.h"
Toshihiro Shimizu 890ddd
#include "tfxparam.h"
Toshihiro Shimizu 890ddd
#include "tspectrumparam.h"
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
class Test_BoxFx : public TStandardRasterFx {
Shinya Kitaoka 120a6e
  FX_PLUGIN_DECLARATION(Test_BoxFx)
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TRasterFxPort m_input;
Shinya Kitaoka 120a6e
  TDoubleParamP m_h;
Shinya Kitaoka 120a6e
  TDoubleParamP m_v;
Shinya Kitaoka 120a6e
  TPixelParamP m_color;
Shinya Kitaoka 120a6e
  TPointParamP m_point;
Shinya Kitaoka 120a6e
  TSpectrumParamP m_colors;
Shinya Kitaoka 120a6e
  TIntParamP m_int;
Shinya Kitaoka 120a6e
  TIntEnumParamP m_enum;
Shinya Kitaoka 120a6e
  TRangeParamP m_range;
Shinya Kitaoka 120a6e
  TBoolParamP m_bool;
Shinya Kitaoka 120a6e
  TStringParamP m_string;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  Test_BoxFx()
Shinya Kitaoka 120a6e
      : m_h(30.0)
Shinya Kitaoka 120a6e
      , m_v(30.0)
Shinya Kitaoka 120a6e
      , m_color(TPixel32::Blue)
Shinya Kitaoka 120a6e
      , m_range(DoublePair(100., 100.))
Shinya Kitaoka 120a6e
      , m_int(12)
Shinya Kitaoka 120a6e
      , m_enum(new TIntEnumParam(0, "Color"))
Shinya Kitaoka 120a6e
      , m_point(TPointD(0.0, 0.0))
Shinya Kitaoka 120a6e
      , m_bool(true)
Shinya Kitaoka 120a6e
      , m_string(L"urka") {
Shinya Kitaoka 120a6e
    m_h->setValueRange(0, 100);
Shinya Kitaoka 120a6e
    m_enum->addItem(1, "Uno");
Shinya Kitaoka 120a6e
    m_enum->addItem(2, "Due");
Shinya Kitaoka 120a6e
    m_enum->addItem(3, "Tre");
Shinya Kitaoka 120a6e
    bindParam(this, "h", m_h);
Shinya Kitaoka 120a6e
    bindParam(this, "v", m_v);
Shinya Kitaoka 120a6e
    bindParam(this, "color", m_color);
Shinya Kitaoka 120a6e
    bindParam(this, "Point", m_point);
Shinya Kitaoka 120a6e
    bindParam(this, "enum", m_enum);
Shinya Kitaoka 120a6e
    m_enum->addItem(1, "Spectrum");
Shinya Kitaoka 120a6e
    bindParam(this, "int", m_int);
Shinya Kitaoka 120a6e
    bindParam(this, "range", m_range);
Shinya Kitaoka 120a6e
    bindParam(this, "bool", m_bool);
Shinya Kitaoka 120a6e
    TSpectrum::ColorKey colors[] = {TSpectrum::ColorKey(0, TPixel32::White),
Shinya Kitaoka 120a6e
                                    TSpectrum::ColorKey(0.5, TPixel32::Yellow),
Shinya Kitaoka 120a6e
                                    TSpectrum::ColorKey(1, TPixel32::Red)};
Shinya Kitaoka 120a6e
    m_colors = TSpectrumParamP(tArrayCount(colors), colors);
Shinya Kitaoka 120a6e
    bindParam(this, "spectrum", m_colors);
Shinya Kitaoka 120a6e
    bindParam(this, "string", m_string);
Shinya Kitaoka 120a6e
    addInputPort("Source", m_input);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~Test_BoxFx(){};
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool canHandle(const TRenderSettings &info, double frame) { return false; }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  bool doGetBBox(double frame, TRectD &bBox, const TRenderSettings &info) {
Shinya Kitaoka 120a6e
    if (!m_input.isConnected()) {
Shinya Kitaoka 120a6e
      bBox = TRectD();
Shinya Kitaoka 120a6e
      return false;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
    return m_input->doGetBBox(frame, bBox, info);
Shinya Kitaoka 120a6e
  };
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  void doCompute(TTile &tile, double frame, const TRenderSettings &);
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
template <class class="" pix,="" ras=""></class>
Shinya Kitaoka 120a6e
void doTest_Box(RAS ras, double h, double v, TPointD pos, TPixel32 &color32,
Shinya Kitaoka 120a6e
                int my_enum, int my_int, const TSpectrumT<pix> spectrum,</pix>
Shinya Kitaoka 120a6e
                TPointD point, DoublePair range, bool my_bool) {
Shinya Kitaoka 120a6e
  int lx = ras->getLx();
Shinya Kitaoka 120a6e
  int ly = ras->getLy();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  TPointD tmp = pos;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  const PIX color = PixelConverter<ras::pixel>::from(color32);</ras::pixel>
Shinya Kitaoka 120a6e
  int j, i;
Shinya Kitaoka 120a6e
  for (j = 0; j < ly; j++) {
Shinya Kitaoka 120a6e
    PIX *pix = ras->pixels(j);
Shinya Kitaoka 120a6e
    tmp.y++;
Shinya Kitaoka 120a6e
    tmp.x = pos.x;
Shinya Kitaoka 120a6e
    for (i = 0; i < lx; i++) {
Shinya Kitaoka 120a6e
      if (tmp.x > 0 && tmp.x < h && tmp.y > 0 && tmp.y < v) {
Shinya Kitaoka 120a6e
        if (my_enum && my_bool) {
Shinya Kitaoka 120a6e
          if (tmp.x > range.first && tmp.x < range.second)
Shinya Kitaoka 120a6e
            *pix = spectrum.getPremultipliedValue(
Shinya Kitaoka 120a6e
                sqrt((tmp.x - point.x) * (tmp.x - point.x) / (h * h) +
Shinya Kitaoka 120a6e
                     (tmp.y - point.y) * (tmp.y - point.y) / (v * v)));
Shinya Kitaoka 120a6e
          else
Shinya Kitaoka 120a6e
            *pix = color;
Shinya Kitaoka 120a6e
        } else
Shinya Kitaoka 120a6e
          *pix = color;
Shinya Kitaoka 120a6e
      }
Shinya Kitaoka 120a6e
      tmp.x++;
Shinya Kitaoka 120a6e
      pix++;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void Test_BoxFx::doCompute(TTile &tile, double frame,
Shinya Kitaoka 120a6e
                           const TRenderSettings &ri) {
Shinya Kitaoka 120a6e
  if (!m_input.isConnected()) return;
Shinya Kitaoka 120a6e
  wstring text = m_string->getValue();
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  m_input->compute(tile, frame, ri);
Shinya Kitaoka 120a6e
  TPixel32 color = m_color->getValue(frame);
Shinya Kitaoka 120a6e
  double h       = m_h->getValue(frame);
Shinya Kitaoka 120a6e
  double v       = m_v->getValue(frame);
Shinya Kitaoka 120a6e
  int my_enum    = m_enum->getValue();
Shinya Kitaoka 120a6e
  // TSpectrum spectrum = m_colors->getValue(frame);
Shinya Kitaoka 120a6e
  int my_int       = m_int->getValue();
Shinya Kitaoka 120a6e
  TPointD point    = m_point->getValue(frame);
Shinya Kitaoka 120a6e
  DoublePair range = m_range->getValue(frame);
Shinya Kitaoka 120a6e
  bool my_bool     = m_bool->getValue();
Shinya Kitaoka 120a6e
  if (TRaster32P raster32 = tile.getRaster())
Shinya Kitaoka 120a6e
    doTest_Box<tpixel32, traster32p="">(raster32, h, v, tile.m_pos, color, my_enum,</tpixel32,>
Shinya Kitaoka 120a6e
                                     my_int, m_colors->getValue(frame), point,
Shinya Kitaoka 120a6e
                                     range, my_bool);
Shinya Kitaoka 120a6e
  else if (TRaster64P raster64 = tile.getRaster())
Shinya Kitaoka 120a6e
    doTest_Box<tpixel64, traster64p="">(raster64, h, v, tile.m_pos, color, my_enum,</tpixel64,>
Shinya Kitaoka 120a6e
                                     my_int, m_colors->getValue64(frame), point,
Shinya Kitaoka 120a6e
                                     range, my_bool);
Shinya Kitaoka 120a6e
  else
Shinya Kitaoka 120a6e
    throw TException("Test_BoxFx: unsupported Pixel Type");
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef _DEBUG
Toshihiro Shimizu 890ddd
FX_PLUGIN_IDENTIFIER(Test_BoxFx, "test_BoxFx")
Toshihiro Shimizu 890ddd
#endif