|
shun-iwasawa |
13c4cf |
#pragma once
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
#ifndef IWA_PAINTBRUSHFX_H
|
|
shun-iwasawa |
13c4cf |
#define IWA_PAINTBRUSHFX_H
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
#include "stdfx.h"
|
|
shun-iwasawa |
13c4cf |
#include "tfxparam.h"
|
|
shun-iwasawa |
13c4cf |
#include "tparamset.h"
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
#include <QVector>
|
|
shun-iwasawa |
13c4cf |
#include <QMap>
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
struct double2 {
|
|
shun-iwasawa |
13c4cf |
double x, y;
|
|
shun-iwasawa |
13c4cf |
};
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
struct colorRGBA {
|
|
shun-iwasawa |
13c4cf |
double r, g, b, a;
|
|
shun-iwasawa |
13c4cf |
};
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
struct BrushStroke {
|
|
shun-iwasawa |
13c4cf |
QVector<TPointD> centerPos;
|
|
shun-iwasawa |
13c4cf |
TPointD originPos;
|
|
shun-iwasawa |
13c4cf |
colorRGBA color;
|
|
shun-iwasawa |
13c4cf |
double length;
|
|
shun-iwasawa |
13c4cf |
double widthHalf;
|
|
shun-iwasawa |
13c4cf |
double angle;
|
|
shun-iwasawa |
13c4cf |
int textureId;
|
|
shun-iwasawa |
13c4cf |
bool invert;
|
|
shun-iwasawa |
13c4cf |
double randomVal;
|
|
shun-iwasawa |
13c4cf |
double stack; // 整列用の値
|
|
shun-iwasawa |
13c4cf |
};
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
struct BrushVertex {
|
|
shun-iwasawa |
13c4cf |
double pos[2];
|
|
shun-iwasawa |
13c4cf |
double texCoord[2];
|
|
shun-iwasawa |
13c4cf |
BrushVertex(const TPointD _pos, double u, double v) {
|
|
shun-iwasawa |
13c4cf |
pos[0] = _pos.x;
|
|
shun-iwasawa |
13c4cf |
pos[1] = _pos.y;
|
|
shun-iwasawa |
13c4cf |
texCoord[0] = u;
|
|
shun-iwasawa |
13c4cf |
texCoord[1] = v;
|
|
shun-iwasawa |
13c4cf |
}
|
|
shun-iwasawa |
13c4cf |
BrushVertex() : BrushVertex(TPointD(), 0, 0) {}
|
|
shun-iwasawa |
13c4cf |
};
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
struct FlowPaintBrushFxParam {
|
|
shun-iwasawa |
13c4cf |
TDimensionI dim;
|
|
shun-iwasawa |
13c4cf |
TPointD origin_pos;
|
|
shun-iwasawa |
13c4cf |
TPointD horiz_pos;
|
|
shun-iwasawa |
13c4cf |
TPointD vert_pos;
|
|
shun-iwasawa |
13c4cf |
TRectD bbox;
|
|
shun-iwasawa |
13c4cf |
int fill_gap_size;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
double h_density;
|
|
shun-iwasawa |
13c4cf |
double v_density;
|
|
shun-iwasawa |
13c4cf |
double pos_randomness;
|
|
shun-iwasawa |
13c4cf |
double pos_wobble;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
int random_seed;
|
|
shun-iwasawa |
13c4cf |
DoublePair tipLength;
|
|
shun-iwasawa |
13c4cf |
DoublePair tipWidth;
|
|
shun-iwasawa |
13c4cf |
DoublePair tipAlpha;
|
|
shun-iwasawa |
13c4cf |
double width_random;
|
|
shun-iwasawa |
13c4cf |
double length_random;
|
|
shun-iwasawa |
13c4cf |
double angle_random;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
int reso;
|
|
shun-iwasawa |
13c4cf |
bool anti_jaggy;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
TPointD hVec;
|
|
shun-iwasawa |
13c4cf |
TPointD vVec;
|
|
shun-iwasawa |
13c4cf |
double2 vVec_unit;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
TAffine brushAff;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
int lastFrame;
|
|
shun-iwasawa |
13c4cf |
};
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
class Iwa_FlowPaintBrushFx final : public TStandardRasterFx {
|
|
shun-iwasawa |
13c4cf |
FX_PLUGIN_DECLARATION(Iwa_FlowPaintBrushFx)
|
|
shun-iwasawa |
13c4cf |
public:
|
|
shun-iwasawa |
13c4cf |
enum StackMode {
|
|
shun-iwasawa |
13c4cf |
NoSort = 0,
|
|
shun-iwasawa |
13c4cf |
Smaller,
|
|
shun-iwasawa |
13c4cf |
Larger,
|
|
shun-iwasawa |
13c4cf |
Darker,
|
|
shun-iwasawa |
13c4cf |
Brighter,
|
|
shun-iwasawa |
13c4cf |
Random
|
|
shun-iwasawa |
13c4cf |
//,TestModeArea
|
|
shun-iwasawa |
13c4cf |
};
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
private:
|
|
shun-iwasawa |
13c4cf |
TRasterFxPort m_brush;
|
|
shun-iwasawa |
13c4cf |
TRasterFxPort m_flow;
|
|
shun-iwasawa |
13c4cf |
TRasterFxPort m_area;
|
|
shun-iwasawa |
13c4cf |
TRasterFxPort m_color;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
// 密度
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_h_density;
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_v_density;
|
|
shun-iwasawa |
13c4cf |
// 位置のランダムさ(0:格子状 1:一様にランダム <1: ばらつき増加)
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_pos_randomness;
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_pos_wobble;
|
|
shun-iwasawa |
13c4cf |
// タッチのサイズ(Areaの値によって変化)
|
|
shun-iwasawa |
13c4cf |
TRangeParamP m_tip_width;
|
|
shun-iwasawa |
13c4cf |
TRangeParamP m_tip_length;
|
|
shun-iwasawa |
13c4cf |
// タッチの不透明度
|
|
shun-iwasawa |
13c4cf |
TRangeParamP m_tip_alpha;
|
|
shun-iwasawa |
13c4cf |
TIntParamP m_tip_joints;
|
|
shun-iwasawa |
13c4cf |
TBoolParamP m_bidirectional;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
// ばらつき
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_width_randomness;
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_length_randomness;
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_angle_randomness; // degreeで
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_sustain_width_to_skew;
|
|
shun-iwasawa |
13c4cf |
TBoolParamP m_anti_jaggy;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
// 生成範囲
|
|
shun-iwasawa |
13c4cf |
TPointParamP m_origin_pos;
|
|
shun-iwasawa |
13c4cf |
TPointParamP m_horizontal_pos;
|
|
shun-iwasawa |
13c4cf |
TPointParamP m_vertical_pos;
|
|
shun-iwasawa |
13c4cf |
TPointParamP m_curve_point;
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_fill_gap_size;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
// 基準フレーム
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_reference_frame;
|
|
shun-iwasawa |
13c4cf |
// 基準フレームを使って生成するタッチの割合
|
|
shun-iwasawa |
13c4cf |
TDoubleParamP m_reference_prevalence;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
// ランダムシード
|
|
shun-iwasawa |
13c4cf |
TIntParamP m_random_seed;
|
|
shun-iwasawa |
13c4cf |
// 並べ替え
|
|
shun-iwasawa |
13c4cf |
TIntEnumParamP m_sortBy;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
// ブラシタッチのラスターデータを取得
|
|
shun-iwasawa |
13c4cf |
void getBrushRasters(std::vector<TRasterP> &brushRasters, TDimension &b_size,
|
|
shun-iwasawa |
13c4cf |
int &lastFrame, TTile &tile, const TRenderSettings &ri);
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
template <typename RASTER, typename PIXEL>
|
|
shun-iwasawa |
13c4cf |
void setFlowTileToBuffer(const RASTER flowRas, double2 *buf);
|
|
shun-iwasawa |
13c4cf |
template <typename RASTER, typename PIXEL>
|
|
shun-iwasawa |
13c4cf |
void setAreaTileToBuffer(const RASTER areaRas, double *buf);
|
|
shun-iwasawa |
13c4cf |
template <typename RASTER, typename PIXEL>
|
|
shun-iwasawa |
13c4cf |
void setColorTileToBuffer(const RASTER colorRas, colorRGBA *buf);
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
// ためしに
|
|
shun-iwasawa |
13c4cf |
template <typename RASTER, typename PIXEL>
|
|
shun-iwasawa |
13c4cf |
void setOutRaster(const RASTER outRas, double *buf);
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
void fillGapByDilateAndErode(double *buf, const TDimension &dim,
|
|
shun-iwasawa |
13c4cf |
const int fill_gap_size);
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
void computeBrushVertices(QVector<BrushVertex> &brushVertices,
|
|
shun-iwasawa |
13c4cf |
QList<BrushStroke> &brushStrokes,
|
|
shun-iwasawa |
13c4cf |
FlowPaintBrushFxParam &p, TTile &tile, double frame,
|
|
shun-iwasawa |
13c4cf |
const TRenderSettings &ri);
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
double getSizePixelAmount(const double val, const TAffine affine);
|
|
shun-iwasawa |
13c4cf |
FlowPaintBrushFxParam getParam(TTile &tile, double frame,
|
|
shun-iwasawa |
13c4cf |
const TRenderSettings &ri);
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
public:
|
|
shun-iwasawa |
13c4cf |
Iwa_FlowPaintBrushFx();
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
bool canHandle(const TRenderSettings &info, double frame) override {
|
|
shun-iwasawa |
13c4cf |
return true;
|
|
shun-iwasawa |
13c4cf |
}
|
|
shun-iwasawa |
13c4cf |
bool doGetBBox(double frame, TRectD &bBox,
|
|
shun-iwasawa |
13c4cf |
const TRenderSettings &info) override;
|
|
shun-iwasawa |
13c4cf |
void doCompute(TTile &tile, double frame, const TRenderSettings &ri) override;
|
|
shun-iwasawa |
13c4cf |
void getParamUIs(TParamUIConcept *&concepts, int &length) override;
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
std::string getAlias(double frame,
|
|
shun-iwasawa |
13c4cf |
const TRenderSettings &info) const override;
|
|
shun-iwasawa |
13c4cf |
};
|
|
shun-iwasawa |
13c4cf |
|
|
shun-iwasawa |
13c4cf |
#endif
|