Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "stdfx.h"
Toshihiro Shimizu 890ddd
#include "tfxparam.h"
Toshihiro Shimizu 890ddd
#include "ttzpimagefx.h"
shun-iwasawa 8cac36
#include "globalcontrollablefx.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//===================================================================
Toshihiro Shimizu 890ddd
shun-iwasawa 8cac36
class PaletteFilterFx final : public GlobalControllableFx {
Shinya Kitaoka 120a6e
  FX_PLUGIN_DECLARATION(PaletteFilterFx)
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  TRasterFxPort m_input;
Shinya Kitaoka 120a6e
  TStringParamP m_string;
Shinya Kitaoka 120a6e
  TIntEnumParamP m_keep;
Shinya Kitaoka 120a6e
  TIntEnumParamP m_type;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  PaletteFilterFx()
Shinya Kitaoka 120a6e
      : m_string(L"1,2,3")
Shinya Kitaoka 120a6e
      , m_type(new TIntEnumParam(0, "Lines & Areas"))
Shinya Kitaoka 120a6e
      , m_keep(new TIntEnumParam(0, "Delete"))
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  {
Shinya Kitaoka 120a6e
    addInputPort("Source", m_input);
Shinya Kitaoka 120a6e
    bindParam(this, "indexes", m_string);
Shinya Kitaoka 120a6e
    bindParam(this, "keep", m_keep);
Shinya Kitaoka 120a6e
    bindParam(this, "type", m_type);
Shinya Kitaoka 120a6e
    m_type->addItem(1, "Lines");
Shinya Kitaoka 120a6e
    m_type->addItem(2, "Areas");
Shinya Kitaoka 120a6e
    m_type->addItem(3, "Lines & Areas (No Gap)");
Shinya Kitaoka 120a6e
    m_type->addItem(4, "Lines (Delete All Areas)");
Shinya Kitaoka 120a6e
    m_type->addItem(5, "Areas (Delete All Lines)");
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
    m_keep->addItem(1, "Keep");
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ~PaletteFilterFx(){};
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  bool doGetBBox(double frame, TRectD &bBox,
Shinya Kitaoka 38fd86
                 const TRenderSettings &info) override {
Shinya Kitaoka 120a6e
    if (m_input.isConnected()) {
Shinya Kitaoka 120a6e
      bool ret = m_input->doGetBBox(frame, bBox, info);
Shinya Kitaoka 120a6e
      return ret;
Shinya Kitaoka 120a6e
    } else {
Shinya Kitaoka 120a6e
      bBox = TRectD();
Shinya Kitaoka 120a6e
      return false;
Shinya Kitaoka 120a6e
    }
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  void doDryCompute(TRectD &rect, double frame,
Shinya Kitaoka 38fd86
                    const TRenderSettings &info) override;
Shinya Kitaoka 473e70
  void doCompute(TTile &tile, double frame, const TRenderSettings &ri) override;
Shinya Kitaoka 120a6e
Shinya Kitaoka 38fd86
  bool canHandle(const TRenderSettings &info, double frame) override {
Shinya Kitaoka 38fd86
    return true;
Shinya Kitaoka 38fd86
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 473e70
  bool allowUserCacheOnPort(int port) override { return false; }
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void PaletteFilterFx::doDryCompute(TRectD &rect, double frame,
Shinya Kitaoka 120a6e
                                   const TRenderSettings &info) {
Shinya Kitaoka 120a6e
  if (!m_input.isConnected()) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  std::vector<std::string> items;</std::string>
Shinya Kitaoka 120a6e
  std::string indexes = ::to_string(m_string->getValue());
Shinya Kitaoka 120a6e
  parseIndexes(indexes, items);
Shinya Kitaoka 120a6e
  TRenderSettings ri2(info);
Shinya Kitaoka 120a6e
  PaletteFilterFxRenderData *PaletteFilterData = new PaletteFilterFxRenderData;
Shinya Kitaoka 120a6e
  insertIndexes(items, PaletteFilterData);
Shinya Kitaoka 120a6e
  PaletteFilterData->m_keep = (bool)(m_keep->getValue() == 1);
Shinya Kitaoka 120a6e
  switch (m_type->getValue()) {
Shinya Kitaoka 120a6e
  case 0:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToInksAndPaints;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 1:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToInksKeepingAllPaints;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 2:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToPaintsKeepingAllInks;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 3:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToInksAndPaints_NoGap;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 4:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToInksDeletingAllPaints;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 5:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToPaintsDeletingAllInks;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  default:
Shinya Kitaoka 120a6e
    assert(false);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ri2.m_data.push_back(PaletteFilterData);
Shinya Kitaoka 120a6e
  ri2.m_userCachable = false;
Shinya Kitaoka 120a6e
  m_input->dryCompute(rect, frame, ri2);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
void PaletteFilterFx::doCompute(TTile &tile, double frame,
Shinya Kitaoka 120a6e
                                const TRenderSettings &ri) {
Shinya Kitaoka 120a6e
  if (!m_input.isConnected()) return;
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  std::vector<std::string> items;</std::string>
Shinya Kitaoka 120a6e
  std::string indexes = ::to_string(m_string->getValue());
Shinya Kitaoka 120a6e
  parseIndexes(indexes, items);
Shinya Kitaoka 120a6e
  TRenderSettings ri2(ri);
Shinya Kitaoka 120a6e
  PaletteFilterFxRenderData *PaletteFilterData = new PaletteFilterFxRenderData;
Shinya Kitaoka 120a6e
  insertIndexes(items, PaletteFilterData);
Shinya Kitaoka 120a6e
  PaletteFilterData->m_keep = (bool)(m_keep->getValue() == 1);
Shinya Kitaoka 120a6e
  switch (m_type->getValue()) {
Shinya Kitaoka 120a6e
  case 0:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToInksAndPaints;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 1:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToInksKeepingAllPaints;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 2:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToPaintsKeepingAllInks;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 3:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToInksAndPaints_NoGap;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 4:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToInksDeletingAllPaints;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  case 5:
Shinya Kitaoka 120a6e
    PaletteFilterData->m_type = eApplyToPaintsDeletingAllInks;
Shinya Kitaoka 120a6e
    break;
Shinya Kitaoka 120a6e
  default:
Shinya Kitaoka 120a6e
    assert(false);
Shinya Kitaoka 120a6e
  }
Shinya Kitaoka 120a6e
Shinya Kitaoka 120a6e
  ri2.m_data.push_back(PaletteFilterData);
Shinya Kitaoka 120a6e
  ri2.m_userCachable = false;
Shinya Kitaoka 120a6e
  m_input->compute(tile, frame, ri2);
Toshihiro Shimizu 890ddd
}
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
FX_PLUGIN_IDENTIFIER(PaletteFilterFx, "paletteFilterFx");