#pragma once
#ifndef TTZPIMAGEFX_H
#define TTZPIMAGEFX_H
// TnzCore includes
#include "tpalette.h"
#include "trastercm.h"
// TnzBase includes
#include "trasterfxrenderdata.h"
// TnzExt includes
#include "ext/plasticskeletondeformation.h"
// STD includes
#include <vector>
#include <set>
#include <string>
#undef DVAPI
#undef DVVAR
#ifdef TFX_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
//**********************************************************************************************
// ExternalPaletteFxRenderData declaration
//**********************************************************************************************
class DVAPI ExternalPaletteFxRenderData : public TRasterFxRenderData
{
public:
TPaletteP m_palette;
std::string m_name;
public:
ExternalPaletteFxRenderData(TPaletteP palette, const std::string &name);
float typeIndex() const { return 0.0f; }
bool operator==(const TRasterFxRenderData &data) const;
std::string toString() const;
};
//**********************************************************************************************
// PaletteFilterFxRenderData declaration
//**********************************************************************************************
enum FilterType { eApplyToInksAndPaints = 0,
eApplyToInksKeepingAllPaints,
eApplyToPaintsKeepingAllInks,
eApplyToInksAndPaints_NoGap,
eApplyToInksDeletingAllPaints,
eApplyToPaintsDeletingAllInks };
//------------------------------------------------------------------------------
class DVAPI PaletteFilterFxRenderData : public TRasterFxRenderData
{
public:
bool m_keep;
FilterType m_type;
std::set<int> m_colors;
public:
PaletteFilterFxRenderData();
float typeIndex() const { return (m_type == eApplyToInksAndPaints) ? 0.5f : 1.0f; }
bool operator==(const TRasterFxRenderData &data) const;
std::string toString() const;
};
//------------------------------------------------------------------------------
void DVAPI insertIndexes(std::vector<std::string> items, PaletteFilterFxRenderData *t);
void DVAPI parseIndexes(std::string indexes, std::vector<std::string> &items);
//**********************************************************************************************
// SandorFxRenderData (possible) parameters
//**********************************************************************************************
enum Type { BlendTz,
Calligraphic,
ArtAtContour,
OutBorder };
//------------------------------------------------------------------------------
class DVAPI BlendTzParams
{
public:
std::wstring m_colorIndex;
bool m_noBlending;
double m_amount;
double m_smoothness;
int m_superSampling;
public:
BlendTzParams()
: m_colorIndex(L""), m_noBlending(false), m_amount(0.0), m_smoothness(0.0), m_superSampling(0) {}
};
//------------------------------------------------------------------------------
class DVAPI CalligraphicParams
{
public:
std::wstring m_colorIndex;
double m_thickness;
double m_horizontal;
double m_vertical;
double m_upWDiagonal;
double m_doWDiagonal;
double m_accuracy;
double m_noise;
public:
CalligraphicParams()
: m_thickness(0.0), m_horizontal(0.0), m_vertical(0.0), m_upWDiagonal(0.0), m_doWDiagonal(0.0), m_accuracy(0.0), m_noise(0.0), m_colorIndex(L"") {}
};
//------------------------------------------------------------------------------
class DVAPI ArtAtContourParams
{
public:
double m_maxSize;
double m_minSize;
double m_maxOrientation;
double m_minOrientation;
bool m_randomness;
double m_maxDistance;
double m_minDistance;
double m_density;
bool m_keepLine;
bool m_keepColor;
bool m_includeAlpha;
std::wstring m_colorIndex;
public:
ArtAtContourParams()
: m_maxSize(0.0), m_minSize(0.0), m_maxOrientation(0.0), m_minOrientation(0.0), m_randomness(false), m_maxDistance(0.0), m_minDistance(0.0), m_density(0.0), m_keepLine(false), m_keepColor(false), m_includeAlpha(true), m_colorIndex(L"") {}
};
//**********************************************************************************************
// SandorFxRenderData declaration
//**********************************************************************************************
class DVAPI SandorFxRenderData : public TRasterFxRenderData
{
public:
Type m_type;
BlendTzParams m_blendParams;
CalligraphicParams m_callParams;
ArtAtContourParams m_contourParams;
int m_border, m_shrink;
int m_argc;
const char *m_argv[12];
TRectD m_controllerBBox;
TRasterP m_controller;
std::string m_controllerAlias;
public:
SandorFxRenderData(Type type, int argc, const char *argv[], int border, int shrink,
const TRectD &controllerBBox = TRectD(), const TRasterP &controller = TRasterP());
float typeIndex() const { return (m_type == BlendTz) ? 2.0f : 3.0f; }
bool operator==(const TRasterFxRenderData &data) const;
std::string toString() const;
TRectD getBBoxEnlargement(const TRectD &bbox);
};
#endif