tahoma2d/toonz/sources/colorfx/regionstyles.h
Toshihiro Shimizu 890dddabbd first commit
2016-03-19 02:57:51 +09:00

914 lines
28 KiB
C++

#ifndef TDERIVEDREGIONSTYLES_H
#define TDERIVEDREGIONSTYLES_H
// TnzCore includes
#include "tvectorimage.h"
#include "tregionoutline.h"
#include "tsimplecolorstyles.h"
#undef DVAPI
#undef DVVAR
#ifdef COLORFX_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
//======================================================
// Forward declarations
class TRandom;
//======================================================
//============================================================
class MovingModifier : public TOutlineStyle::RegionOutlineModifier
{
TPointD m_move;
public:
MovingModifier(const TPointD &point)
: m_move(point) {}
TOutlineStyle::RegionOutlineModifier *clone() const;
TPointD getMovePoint() const { return m_move; }
void modify(TRegionOutline &outline) const;
public:
void loadData(TInputStreamInterface &is)
{
is >> m_move.x >> m_move.y;
}
void saveData(TOutputStreamInterface &os) const
{
os << m_move.x << m_move.y;
}
};
//============================================================
class MovingSolidColor : public TSolidColorStyle
{
public:
MovingSolidColor(const TPixel32 &color, const TPointD &move);
TColorStyle *clone() const;
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
int getTagId() const { return 1125; };
QString getDescription() const { return QCoreApplication::translate("MovingSolidColor", "Offset"); }
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
};
//============================================================
class DVAPI ShadowStyle : public TSolidColorStyle
{
TPointD m_shadowDirection;
TPixel32 m_shadowColor;
double m_density;
double m_len;
public:
ShadowStyle(
const TPixel32 &bgColor,
const TPixel32 &shadowColor,
const TPointD &shadowDirection = TPointD(-1, -1),
double len = 30.0,
double density = 0.4);
TColorStyle *clone() const;
void makeIcon(const TDimension &d);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
//TPixel32 getMainColor() const {return m_shadowColor; }
//void setMainColor(const TPixel32 &color){ m_shadowColor=color; }
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
int getTagId() const { return 1127; };
QString getDescription() const { return QCoreApplication::translate("ShadowStyle", "Hatched Shading"); }
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
//it is too slow and if the region is too complex, some flash readers (IExplorer) crash.
// So it's better drawing it as a normal solid color
//void drawRegion( TFlash& flash, const TRegion* r) const;
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
void drawPolyline(const TColorFunction *cf, vector<T3DPointD> &polyline, TPointD shadowDirection) const;
};
//============================================================
class DVAPI ShadowStyle2 : public TSolidColorStyle
{
TPointD m_shadowDirection;
TPixel32 m_shadowColor;
double m_shadowLength;
public:
ShadowStyle2(
const TPixel32 &bgColor,
const TPixel32 &shadowColor,
const TPointD &shadowDirection = TPointD(-1, -1),
double shadowLength = 70.0);
TColorStyle *clone() const;
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
//TPixel32 getMainColor() const {return m_shadowColor; }
//void setMainColor(const TPixel32 &color){ m_shadowColor=color; }
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
int getTagId() const { return 1135; };
QString getDescription() const { return QCoreApplication::translate("ShadowStyle2", "Plain Shadow"); }
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
void drawPolyline(const TColorFunction *cf, const vector<T3DPointD> &polyline, TPointD shadowDirection) const;
int drawPolyline(TFlash &flash, vector<T3DPointD> &polyline,
TPointD shadowDirection, const bool isDraw = true) const;
};
//============================================================
class RubberModifier : public TOutlineStyle::RegionOutlineModifier
{
double m_deform;
public:
RubberModifier(double deform)
: m_deform(deform) {}
void loadData(TInputStreamInterface &is)
{
is >> m_deform;
}
void saveData(TOutputStreamInterface &os) const
{
os << m_deform;
}
double getDeform() { return m_deform; }
void setDeform(const double deform) { m_deform = deform; }
void modify(TRegionOutline &outline) const;
TOutlineStyle::RegionOutlineModifier *clone() const;
};
//============================================================
class DVAPI TRubberFillStyle : public TSolidColorStyle
{
typedef vector<TQuadratic> QuadraticVector;
typedef vector<TQuadratic *> QuadraticPVector;
public:
TRubberFillStyle(const TPixel32 &color, double deform);
TColorStyle *clone() const;
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void makeIcon(const TDimension &d);
int getTagId() const { return 1128; };
QString getDescription() const { return QCoreApplication::translate("TRubberFillStyle", "Blob"); }
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
void transformPolylines();
};
//============================================================
class DVAPI TPointShadowFillStyle : public TSolidColorStyle
{
TPointD m_shadowDirection;
TPixel32 m_shadowColor;
double m_shadowSize;
double m_density;
double m_pointSize;
public:
TPointShadowFillStyle(const TPixel32 &bgColor,
const TPixel32 &shadowColor,
const TPointD &shadowDirection = TPointD(-1, -1),
double density = 0.1,
double shadowSize = 30.0,
double pointSize = 5.0);
TColorStyle *clone() const;
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
/*
TPixel32 getMainColor() const {return m_shadowColor; }
void setMainColor(const TPixel32 &color){ m_shadowColor=color; }
*/
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
int getTagId() const { return 1129; };
QString getDescription() const { return QCoreApplication::translate("TPointShadowFillStyle", "Sponge Shading"); }
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
double triangleArea(const TPointD &a, const TPointD &b, const TPointD &c) const;
void shadowOnEdge_parallel(const TPointD &p0, const TPointD &p1,
const TPointD &p2, TRandom &rnd) const;
int shadowOnEdge_parallel(TFlash &flash,
const TPointD &p0, const TPointD &p1,
const TPointD &p2, TRandom &rnd,
const double radius,
const bool isDraw) const;
void deleteSameVerts(TRegionOutline::Boundary::iterator &rit,
vector<T3DPointD> &pv) const;
};
//============================================================
class DVAPI TDottedFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor;
double m_dotSize;
double m_dotDist;
bool m_isShifted;
public:
TDottedFillStyle(const TPixel32 &bgColor,
const TPixel32 &pointColor,
const double dotSize,
const double dotDist,
const bool isShifted);
TDottedFillStyle(const TPixel32 &color);
TColorStyle *clone() const;
/*
TPixel32 getMainColor() const {return m_pointColor; }
void setMainColor(const TPixel32 &color){ m_pointColor=color; }
*/
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1130; };
QString getDescription() const { return QCoreApplication::translate("TDottedFillStyle", "Polka Dots"); }
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
int nbClip(const double LDotDist, const bool LIsShifted,
const TRectD &bbox) const;
};
//============================================================
class DVAPI TCheckedFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor;
double m_HDist, m_HAngle;
double m_VDist, m_VAngle, m_Thickness;
public:
TCheckedFillStyle(const TPixel32 &bgColor, const TPixel32 &pointColor,
const double HDist, const double HAngle,
const double VDist, const double VAngle, const double Thickness);
TCheckedFillStyle(const TPixel32 &color);
TColorStyle *clone() const;
/*
TPixel32 getMainColor() const {return m_pointColor; }
void setMainColor(const TPixel32 &color){ m_pointColor=color; }
*/
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1131; };
QString getDescription() const { return QCoreApplication::translate("TCheckedFillStyle", "Square"); }
private:
void getHThickline(const TPointD &lc, const double lx,
TPointD &p0, TPointD &p1,
TPointD &p2, TPointD &p3) const;
void getVThickline(const TPointD &lc, const double ly,
TPointD &p0, TPointD &p1,
TPointD &p2, TPointD &p3) const;
int nbClip(const TRectD &bbox) const;
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
};
//============================================================
class ArtisticModifier : public TOutlineStyle::RegionOutlineModifier
{
TPointD m_move;
double m_period;
public:
ArtisticModifier(const TPointD &point, double period)
: m_move(point), m_period(period) {}
TOutlineStyle::RegionOutlineModifier *clone() const;
void loadData(TInputStreamInterface &is)
{
is >> m_move.x >> m_move.y >> m_period;
}
void saveData(TOutputStreamInterface &os) const
{
os << m_move.x << m_move.y << m_period;
}
TPointD getMovePoint() const { return m_move; }
double getPeriod() const { return m_period; }
void modify(TRegionOutline &outline) const;
};
//============================================================
class ArtisticSolidColor : public TSolidColorStyle
{
public:
ArtisticSolidColor(const TPixel32 &color, const TPointD &move, double period);
TColorStyle *clone() const;
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
int getTagId() const { return 1132; };
QString getDescription() const { return QCoreApplication::translate("ArtisticSolidColor", "Irregular"); }
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
};
//============================================================
class DVAPI TChalkFillStyle : public TSolidColorStyle
{
TPixel32 m_color0;
double m_density, m_size;
public:
TChalkFillStyle(const TPixel32 &color0, const TPixel32 &color1,
const double density, const double size);
TChalkFillStyle(const TPixel32 &color0, const TPixel32 &color1);
TColorStyle *clone() const;
/*
TPixel32 getMainColor() const {return m_color0; }
void setMainColor(const TPixel32 &color){ m_color0=color; }
*/
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
QString getDescription() const { return QCoreApplication::translate("TChalkFillStyle", "Chalk"); }
void loadData(int oldId, TInputStreamInterface &);
void getObsoleteTagIds(vector<int> &ids) const { ids.push_back(1133); }
int getTagId() const { return 1143; };
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
};
//============================================================
class DVAPI TChessFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor;
double m_HDist, m_VDist, m_Angle;
public:
TChessFillStyle(const TPixel32 &bgColor, const TPixel32 &pointColor,
const double HDist, const double VDist, const double Angle);
TChessFillStyle(const TPixel32 &color);
TColorStyle *clone() const;
/*
TPixel32 getMainColor() const {return m_pointColor; }
void setMainColor(const TPixel32 &color){ m_pointColor=color; }
*/
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1136; };
QString getDescription() const { return QCoreApplication::translate("TChessFillStyle", "Chessboard"); }
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
void makeGrid(TRectD &bbox, TRotation &rotM,
vector<TPointD> &grid, int &nbClip) const;
};
//============================================================
class DVAPI TStripeFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor;
double m_Dist, m_Angle, m_Thickness;
public:
TStripeFillStyle(const TPixel32 &bgColor, const TPixel32 &pointColor,
const double Dist, const double Angle, const double Thickness);
TStripeFillStyle(const TPixel32 &color);
TColorStyle *clone() const;
/*
TPixel32 getMainColor() const {return m_pointColor; }
void setMainColor(const TPixel32 &color){ m_pointColor=color; }
*/
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1137; };
QString getDescription() const { return QCoreApplication::translate("TStripeFillStyle", "Banded"); }
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
void makeIcon(const TDimension &d);
private:
void getThickline(const TPointD &lc, const double ly,
TPointD &p0, TPointD &p1,
TPointD &p2, TPointD &p3) const;
int nbClip(const TRectD &bbox) const;
};
//============================================================
class DVAPI TLinGradFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor;
double m_Angle;
double m_XPos, m_YPos, m_Size;
public:
TLinGradFillStyle(const TPixel32 &bgColor, const TPixel32 &pointColor,
const double Angle, const double XPos, const double YPos,
const double Size);
TLinGradFillStyle(const TPixel32 &color);
TColorStyle *clone() const;
/*
TPixel32 getMainColor() const {return m_pointColor; }
void setMainColor(const TPixel32 &color){ m_pointColor=color; }
*/
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1138; };
QString getDescription() const { return QCoreApplication::translate("TLinGradFillStyle", "Linear Gradient"); }
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
void getRects(const TRectD &bbox, vector<TPointD> &r0,
vector<TPointD> &r1, vector<TPointD> &r2) const;
void getRect(const TRectD &bbox, vector<TPointD> &r) const;
};
//============================================================
class DVAPI TRadGradFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor;
double m_Radius;
double m_XPos, m_YPos;
double m_Smooth;
public:
TRadGradFillStyle(const TPixel32 &bgColor, const TPixel32 &pointColor,
const double XPos, const double YPos,
const double Radius, const double Smooth);
TRadGradFillStyle(const TPixel32 &color);
TColorStyle *clone() const;
// TPixel32 getMainColor() const {return m_pointColor; }
// void setMainColor(const TPixel32 &color){ m_pointColor=color; }
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1139; };
QString getDescription() const { return QCoreApplication::translate("TRadGradFillStyle", "Radial Gradient"); }
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
};
//============================================================
class DVAPI TCircleStripeFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor;
double m_XPos, m_YPos;
double m_Dist, m_Thickness;
public:
TCircleStripeFillStyle(const TPixel32 &bgColor, const TPixel32 &pointColor,
const double XPos, const double YPos,
const double Dist, const double Thickness);
TCircleStripeFillStyle(const TPixel32 &color);
TColorStyle *clone() const;
/*
TPixel32 getMainColor() const {return m_pointColor; }
void setMainColor(const TPixel32 &color){ m_pointColor=color; }
*/
int getColorParamCount() const { return 2; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1140; };
QString getDescription() const { return QCoreApplication::translate("TCircleStripeFillStyle", "Concentric"); }
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
void getCircleStripeQuads(const TPointD &center,
const double r1, const double r2,
vector<TPointD> &pv) const;
void drawCircleStripe(const TPointD &center,
const double r1, const double r2,
const TPixel32 &col) const;
};
//============================================================
class DVAPI TMosaicFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor[4];
double m_size;
double m_deform;
double m_minThickness;
double m_maxThickness;
public:
TMosaicFillStyle(const TPixel32 &bgColor,
const TPixel32 pointColor[4],
const double size,
const double deform,
const double minThickness,
const double maxThickness);
TMosaicFillStyle(const TPixel32 bgColor);
TColorStyle *clone() const;
/*
TPixel32 getMainColor() const {return m_pointColor[0]; }
void setMainColor(const TPixel32 &color){ m_pointColor[0]=color; }
*/
int getColorParamCount() const { return 5; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1141; };
QString getDescription() const { return QCoreApplication::translate("TMosaicFillStyle", "Stained Glass"); }
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
private:
void preaprePos(const TRectD &box, vector<TPointD> &v,
int &lX, int &lY, TRandom &rand) const;
bool getQuad(const int ix, const int iy,
const int lX, const int lY,
vector<TPointD> &v, TPointD *pquad, TRandom &rand) const;
};
//============================================================
class DVAPI TPatchFillStyle : public TSolidColorStyle
{
TPixel32 m_pointColor[6];
double m_size;
double m_deform;
double m_thickness;
public:
TPatchFillStyle(const TPixel32 &bgColor,
const TPixel32 pointColor[6],
const double size,
const double deform,
const double thickness);
TPatchFillStyle(const TPixel32 &bgColor);
TColorStyle *clone() const;
int getColorParamCount() const { return 7; }
TPixel32 getColorParamValue(int index) const;
void setColorParamValue(int index, const TPixel32 &color);
bool isRegionStyle() const { return true; }
bool isStrokeStyle() const { return false; }
int getParamCount() const;
TColorStyle::ParamType getParamType(int index) const;
QString getParamNames(int index) const;
void getParamRange(int index, double &min, double &max) const;
double getParamValue(TColorStyle::double_tag, int index) const;
void setParamValue(int index, double value);
void drawRegion(const TColorFunction *cf, const bool antiAliasing, TRegionOutline &boundary) const;
void drawRegion(TFlash &flash, const TRegion *r) const;
int getTagId() const { return 1142; };
QString getDescription() const { return QCoreApplication::translate("TPatchFillStyle", "Beehive"); }
private:
void preaprePos(const TRectD &box, vector<TPointD> &v,
int &lX, int &lY, TRandom &rand) const;
bool getQuadLine(const TPointD &a, const TPointD &b,
const double thickn, TPointD *quad) const;
void drawGLQuad(const TPointD *quad) const;
int nbClip(const int lX, const int lY, const vector<TPointD> &v) const;
void drawFlashQuad(TFlash &flash, const TPointD *quad) const;
void drawFlashTriangle(TFlash &flash, const TPointD &p1,
const TPointD &p2, const TPointD &p3) const;
protected:
void loadData(TInputStreamInterface &is);
void saveData(TOutputStreamInterface &os) const;
};
#endif // TDERIVEDREGIONSTYLES_H