#ifndef STYLE_PICKER_H
#define STYLE_PICKER_H
//#include "timage.h"
#include "tcommon.h"
#include "tpalette.h"
class TStroke;
#undef DVAPI
#undef DVVAR
#ifdef TNZTOOLS_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
class DVAPI StylePicker
{
TImageP m_image;
TPaletteP m_palette;
public:
StylePicker() {}
// usa come palette la palette dell'immagine
StylePicker(const TImageP &image);
// palette esterna (ad es. se image e' di tipo raster)
StylePicker(const TImageP &image, const TPaletteP &palette);
// pickStyleId(point, radius)
//
// point e' espresso in inches (eventualmente utilizzando il dpi dell'immagine)
// point == (0,0) indica il centro dell'immagine
//
// immagini tzp:
// ritorna l'indice del colore che si trova nel pixel individuato da point
// (radius viene ignorato)
// se tone<maxtone/2 ritorna l'inchiostro altrimenti il paint
//
// immagini pli
// ritorna l'indice del colorstyle dello stroke che si trova
// piu' vicini a point (ma non oltre radius) o dell'area fillata che
// comprende point
//
// immagine fullcolor
// ritorna l'indice del colorstyle della palette fornita nel costruttore
// il cui maincolor e' piu' vicino al colore del pixel individuato da point
// (radius viene ignorato)
//
// Nota: se non trova niente ritorna -1
/*-- (StylePickerTool内で)LineとAreaを切り替えてPickできる。mode: 0=Area, 1=Line, 2=Line&Areas(default) --*/
int pickStyleId(const TPointD &point, double radius2 = 1, int mode = 2) const;
/*--- Toonz Raster LevelのToneを拾う。 ---*/
int pickTone(const TPointD &pos);
// per pli come sopra, ma ritorna il maincolor
// per tzp e fullcolor ritorna il colore effettivo del pixel
TPixel32 pickColor(const TPointD &point, double radius2 = 1) const;
// ritorna il colore medio presente nell'area della finestra corrente openGL
TPixel32 pickColor(const TRectD &area) const;
// ritorna il colore medio presente nell'area interna all stroke della finestra corrente openGL
TPixel32 pickColor(TStroke *stroke) const;
// helper function. conversione di coordinate:
// p e' nel sist. di rif. descritto sopra
// il valore di ritorno si riferisce all'eventuale raster: (0,0)==leftbottom
TPoint getRasterPoint(const TPointD &p) const;
};
#endif