1 #pragma once
2 
3 #ifndef CLEANUPPARAMETERS_INCLUDED
4 #define CLEANUPPARAMETERS_INCLUDED
5 
6 // Qt includes
7 #include <QString>
8 
9 // Toonz includes
10 #include "tfilepath.h"
11 #include "toonz/targetcolors.h"
12 #include "tcamera.h"
13 #include "tpalette.h"
14 
15 #undef DVAPI
16 #undef DVVAR
17 #ifdef TOONZLIB_EXPORTS
18 #define DVAPI DV_EXPORT_API
19 #define DVVAR DV_EXPORT_VAR
20 #else
21 #define DVAPI DV_IMPORT_API
22 #define DVVAR DV_IMPORT_VAR
23 #endif
24 
25 //---------------------------------------------------------------
26 
27 //  Forward declarations
28 
29 class TIStream;
30 class TOStream;
31 class ToonzScene;
32 
33 //---------------------------------------------------------------
34 
35 //*******************************************************************************
36 //    CleanupTypes namespace
37 //*******************************************************************************
38 
39 namespace CleanupTypes {
40 
41 // #define LINESHAPE_ENABLED
42 
43 enum PEGS_SIDE {
44   PEGS_NONE,
45 
46   PEGS_BOTTOM,
47   PEGS_TOP,
48   PEGS_LEFT,
49   PEGS_RIGHT,
50 
51   PEGS_SIDE_HOW_MANY
52 };
53 
54 enum AUTO_ADJ_MODE {
55   AUTO_ADJ_NONE,
56 
57   AUTO_ADJ_BLACK_EQ,
58   AUTO_ADJ_HISTOGRAM,
59   AUTO_ADJ_HISTO_L,
60 
61 #ifdef LINESHAPE_ENABLED
62   AUTO_ADJ_LINESHAPE,
63 #endif
64 
65   AUTO_ADJ_HOW_MANY
66 
67 };
68 
69 enum OVERLAP_ALGO { OVER_NO_BLEND, OVER_BLEND, OVER_MERGE, OVER_HOW_MANY };
70 
71 enum AUTOCENTER_TYPE {
72   AUTOCENTER_NONE,
73   AUTOCENTER_FDG,
74   AUTOCENTER_CTR,
75   /* c'era una volta AUTOALIGN */
76 
77   AUTOCENTER_HOW_MANY
78 };
79 
80 struct DOT {
81   float x, y; /* baricentro del dot */
82   int x1, y1, x2,
83       y2;     /* estremi, in pixel, del rettangolo che contiene il dot */
84   int area;   /* espressa in numero di pixel */
85   int lx, ly; /* espresse in pixel */
86 };
87 
88 class FDG_INFO {
89 public:
90   std::string m_name;
91   int ctr_type;
92   /* ctr_type == TRUE:  */
93   double ctr_x, ctr_y; /* in mm */
94   double ctr_angle;    /* in deg */
95   double ctr_skew;     /* in deg */
96   /* ctr_type == FALSE: */
97   std::vector<DOT> dots;
98 
99   double dist_ctr_to_ctr_hole;  /* Distanza centro fg centro foro centrale */
100   double dist_ctr_hole_to_edge; /* in mm */
101 
FDG_INFO()102   FDG_INFO()
103       : ctr_type(0)
104       , ctr_x(0)
105       , ctr_y(0)
106       , ctr_angle(0)
107       , ctr_skew(0)
108       , dist_ctr_to_ctr_hole(0)
109       , dist_ctr_hole_to_edge(0) {}
110 
111   bool operator==(const FDG_INFO &rhs) const {
112     return (ctr_type == rhs.ctr_type && ctr_x == rhs.ctr_x &&
113             ctr_y == rhs.ctr_y && ctr_angle == rhs.ctr_angle &&
114             ctr_skew == rhs.ctr_skew &&
115             dist_ctr_to_ctr_hole == rhs.dist_ctr_to_ctr_hole &&
116             dist_ctr_hole_to_edge == rhs.dist_ctr_hole_to_edge);
117   }
118 };
119 
120 }  // namespace CleanupTypes
121 
122 //*******************************************************************************
123 //    CleanupParameters declaration
124 //*******************************************************************************
125 
126 enum { lpNone = 0, lpGrey, lpColor };
127 
128 class DVAPI CleanupParameters {
129   CleanupTypes::FDG_INFO m_fdgInfo;
130   bool m_dirtyFlag;
131 
132 public:
133   static CleanupParameters GlobalParameters;
134   static CleanupParameters LastSavedParameters;
135 
136 public:
137   CleanupTypes::AUTOCENTER_TYPE m_autocenterType;
138   CleanupTypes::PEGS_SIDE m_pegSide;
139 
140   TCamera m_camera;
141   int m_rotate;
142   bool m_flipx;
143   bool m_flipy;
144   double m_offx, m_offy;
145 
146   int m_lineProcessingMode;
147 
148   double m_closestField;
149   CleanupTypes::AUTO_ADJ_MODE m_autoAdjustMode;
150   double m_sharpness;
151   bool m_transparencyCheckEnabled;
152   bool m_noAntialias;
153   bool m_postAntialias;
154   int m_despeckling;
155   int m_aaValue;
156   TargetColors m_colors;
157   TPaletteP m_cleanupPalette;
158   TFilePath m_path;
159 
160   /*--- オフセットを軸ごとにロックする ---*/
161   bool m_offx_lock, m_offy_lock;
162 
163 public:
164   CleanupParameters();
CleanupParameters(const CleanupParameters & p)165   CleanupParameters(const CleanupParameters &p) { assign(&p); }
166 
167   const CleanupParameters &operator=(const CleanupParameters &p) {
168     assign(&p);
169     return *this;
170   }
171 
172   const CleanupTypes::FDG_INFO &getFdgInfo();
173 
getFdgName()174   std::string getFdgName() const { return m_fdgInfo.m_name; }
175   bool setFdgByName(std::string name);
176 
177   // la scena serve per gestire i default:
178   // internamente il path puo' essere vuoto
179   // oppure della forma "+pippo/$savepath"
180   // nota: setPath() accetta un path "espanso"
181   // (es. "+drawings/scene1") e lo trasforma
182   // nella forma compressa (es. "")
183   TFilePath getPath(ToonzScene *scene) const;
184   void setPath(ToonzScene *scene, TFilePath fp);
185 
186   static void getFdgNames(std::vector<std::string> &names);
187 
188   void getOutputImageInfo(TDimension &resolution, double &dpix,
189                           double &dpiy) const;
190 
191   void assign(const CleanupParameters *params, bool clonePalette = true);
192 
getDirtyFlag()193   bool getDirtyFlag() { return m_dirtyFlag; }
setDirtyFlag(bool value)194   void setDirtyFlag(bool value) { m_dirtyFlag = value; }
195 
196   void saveData(TOStream &os) const;
197   void loadData(TIStream &is, bool globalParams);
198 };
199 
200 #endif
201