|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "stdfx.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tfxparam.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "ttzpimagefx.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class PaletteFilterFx final : public TStandardRasterFx {
|
|
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");
|