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