|
23 | 23 | /* compare ramps */ |
24 | 24 | bool compareRampSort ( const RAMP &a, const RAMP &b) |
25 | 25 | { |
26 | | - if ( a.min < b.min || a.max < b.max ) return true; |
| 26 | + if ( a.min < b.min || a.max < b.max ) return true; |
27 | 27 |
|
28 | | - return false; |
| 28 | + return false; |
29 | 29 | } |
30 | 30 |
|
31 | 31 | bool compareRampSearch ( const RAMP &a, const RAMP &b) |
32 | 32 | { |
33 | | - if( a.max < b.min ) return true; |
34 | | - return false; |
| 33 | + if( a.max < b.min ) return true; |
| 34 | + return false; |
35 | 35 | } |
36 | 36 |
|
37 | 37 |
|
38 | 38 | QgsColorTable::QgsColorTable ( int interp ) |
39 | 39 | { |
40 | | - QgsDebugMsg("QgsColorTable::QgsColorTable()"); |
41 | | - mInterp = interp; |
| 40 | + QgsDebugMsg("QgsColorTable::QgsColorTable()"); |
| 41 | + mInterp = interp; |
42 | 42 | } |
43 | 43 |
|
44 | 44 | QgsColorTable::~QgsColorTable() |
45 | 45 | { |
46 | 46 | } |
47 | 47 |
|
48 | | -void QgsColorTable::add ( uint index, unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4 ) |
| 48 | +void QgsColorTable::add ( int index, unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4 ) |
49 | 49 | { |
50 | 50 | #ifdef QGISDEBUG |
51 | | - QgsLogger::debug("QgsColorTable::add() index", (int)index, 1, __FILE__, __FUNCTION__, __LINE__); |
| 51 | + QgsLogger::debug("QgsColorTable::add() index", (int)index, 1, __FILE__, __FUNCTION__, __LINE__); |
52 | 52 | #endif |
53 | 53 |
|
54 | | - if ( mDiscrete.size() == 0 ) { |
55 | | - mMin = index; |
56 | | - mMax = index; |
57 | | - } else { |
58 | | - if ( index < mMin ) mMin = index; |
59 | | - if ( index > mMax ) mMax = index; |
60 | | - } |
61 | | - |
62 | | - if ( mDiscrete.size() <= index ) { |
63 | | - mDiscrete.resize ( index + 1 ); |
64 | | - } |
65 | | - |
66 | | - mDiscrete[index].c1 = c1; |
67 | | - mDiscrete[index].c2 = c2; |
68 | | - mDiscrete[index].c3 = c3; |
69 | | - mDiscrete[index].c4 = c4; |
| 54 | + if ( mDiscrete.size() == 0 ) { |
| 55 | + mMin = index; |
| 56 | + mMax = index; |
| 57 | + } else { |
| 58 | + if ( index < mMin ) mMin = index; |
| 59 | + if ( index > mMax ) mMax = index; |
| 60 | + } |
| 61 | + |
| 62 | + if ( mDiscrete.size() <= index ) { |
| 63 | + mDiscrete.resize ( index + 1 ); |
| 64 | + } |
| 65 | + |
| 66 | + mDiscrete[index].c1 = c1; |
| 67 | + mDiscrete[index].c2 = c2; |
| 68 | + mDiscrete[index].c3 = c3; |
| 69 | + mDiscrete[index].c4 = c4; |
70 | 70 | } |
71 | 71 |
|
72 | 72 | void QgsColorTable::clear() |
73 | 73 | { |
74 | | - QgsDebugMsg("QgsColorTable::clear() called "); |
75 | | - mDiscrete.clear(); |
76 | | - mRamp.clear(); |
77 | | - mMax=0; |
78 | | - mMin=0; |
| 74 | + QgsDebugMsg("QgsColorTable::clear() called "); |
| 75 | + mDiscrete.clear(); |
| 76 | + mRamp.clear(); |
| 77 | + mMax=0; |
| 78 | + mMin=0; |
79 | 79 | } |
80 | 80 |
|
81 | 81 |
|
82 | 82 | void QgsColorTable::add ( double min, double max, |
83 | | - unsigned char min_c1, unsigned char min_c2, unsigned char min_c3, unsigned char min_c4, |
| 83 | + unsigned char min_c1, unsigned char min_c2, unsigned char min_c3, unsigned char min_c4, |
84 | 84 | unsigned char max_c1, unsigned char max_c2, unsigned char max_c3, unsigned char max_c4 ) |
85 | 85 | { |
86 | | - RAMP ramp; |
| 86 | + RAMP ramp; |
87 | 87 | #ifdef QGISDEBUG |
88 | | - QgsLogger::debug("QgsColorTable::add() min", min, 1, __FILE__, __FUNCTION__, __LINE__); |
89 | | - QgsLogger::debug("QgsColorTable::add() max", max, 1, __FILE__, __FUNCTION__, __LINE__); |
| 88 | + QgsLogger::debug("QgsColorTable::add() min", min, 1, __FILE__, __FUNCTION__, __LINE__); |
| 89 | + QgsLogger::debug("QgsColorTable::add() max", max, 1, __FILE__, __FUNCTION__, __LINE__); |
90 | 90 | #endif |
91 | 91 |
|
92 | | - if ( mRamp.size() == 0 ) { |
93 | | - mMin = min; |
94 | | - mMax = max; |
95 | | - } else { |
96 | | - if ( min < mMin ) mMin = min; |
97 | | - if ( max > mMax ) mMax = max; |
98 | | - } |
99 | | - |
100 | | - ramp.min = min; |
101 | | - ramp.max = max; |
102 | | - ramp.min_c1 = min_c1; |
103 | | - ramp.min_c2 = min_c2; |
104 | | - ramp.min_c3 = min_c3; |
105 | | - ramp.min_c4 = min_c4; |
106 | | - ramp.max_c1 = max_c1; |
107 | | - ramp.max_c2 = max_c2; |
108 | | - ramp.max_c3 = max_c3; |
109 | | - ramp.max_c4 = max_c4; |
110 | | - |
111 | | - mRamp.push_back ( ramp ); |
| 92 | + if ( mRamp.size() == 0 ) { |
| 93 | + mMin = min; |
| 94 | + mMax = max; |
| 95 | + } else { |
| 96 | + if ( min < mMin ) mMin = min; |
| 97 | + if ( max > mMax ) mMax = max; |
| 98 | + } |
| 99 | + |
| 100 | + ramp.min = min; |
| 101 | + ramp.max = max; |
| 102 | + ramp.min_c1 = min_c1; |
| 103 | + ramp.min_c2 = min_c2; |
| 104 | + ramp.min_c3 = min_c3; |
| 105 | + ramp.min_c4 = min_c4; |
| 106 | + ramp.max_c1 = max_c1; |
| 107 | + ramp.max_c2 = max_c2; |
| 108 | + ramp.max_c3 = max_c3; |
| 109 | + ramp.max_c4 = max_c4; |
| 110 | + |
| 111 | + mRamp.push_back ( ramp ); |
112 | 112 | } |
113 | 113 |
|
114 | 114 | bool QgsColorTable::color ( double value, int *c1, int *c2, int *c3 ) |
115 | 115 | { |
116 | | - if ( mRamp.size() > 0 ) { |
117 | | - std::vector<RAMP>::iterator it; |
118 | | - |
119 | | - RAMP ramp; |
120 | | - ramp.min = ramp.max = value; |
121 | | - |
122 | | - it = std::lower_bound ( mRamp.begin(), mRamp.end(), ramp, compareRampSearch ); |
123 | | - |
124 | | - if ( it != mRamp.end() ) { // Found |
125 | | - double k, d; |
126 | | - d = it->max - it->min; |
127 | | - |
128 | | - if ( d <= 0 ) { |
129 | | - k = 0; |
130 | | - } else { |
131 | | - k = (value - it->min)/d; |
132 | | - } |
133 | | - |
134 | | - *c1 = (int) (it->min_c1 + k * (it->max_c1 - it->min_c1)); |
135 | | - *c2 = (int) (it->min_c2 + k * (it->max_c2 - it->min_c2)); |
136 | | - *c3 = (int) (it->min_c3 + k * (it->max_c3 - it->min_c3)); |
137 | | - |
138 | | - return true; |
139 | | - } |
140 | | - } else if ( mDiscrete.size() > 0 ) { |
141 | | - uint index = (uint) value; |
142 | | - if ( index < mDiscrete.size() ) { |
143 | | - *c1 = mDiscrete[index].c1; |
144 | | - *c2 = mDiscrete[index].c2; |
145 | | - *c3 = mDiscrete[index].c3; |
146 | | - return true; |
147 | | - } |
| 116 | + if ( mRamp.size() > 0 ) { |
| 117 | + QVector<RAMP>::iterator it; |
| 118 | + |
| 119 | + RAMP ramp; |
| 120 | + ramp.min = ramp.max = value; |
| 121 | + |
| 122 | + it = qLowerBound ( mRamp.begin(), mRamp.end(), ramp, compareRampSearch ); |
| 123 | + |
| 124 | + if ( it != mRamp.end() ) { // Found |
| 125 | + double k, d; |
| 126 | + d = it->max - it->min; |
| 127 | + |
| 128 | + if ( d <= 0 ) { |
| 129 | + k = 0; |
| 130 | + } else { |
| 131 | + k = (value - it->min)/d; |
| 132 | + } |
| 133 | + |
| 134 | + *c1 = (int) (it->min_c1 + k * (it->max_c1 - it->min_c1)); |
| 135 | + *c2 = (int) (it->min_c2 + k * (it->max_c2 - it->min_c2)); |
| 136 | + *c3 = (int) (it->min_c3 + k * (it->max_c3 - it->min_c3)); |
| 137 | + |
| 138 | + return true; |
148 | 139 | } |
| 140 | + } else if ( mDiscrete.size() > 0 ) { |
| 141 | + int index = (uint) value; |
| 142 | + if ( index < mDiscrete.size() ) { |
| 143 | + *c1 = mDiscrete[index].c1; |
| 144 | + *c2 = mDiscrete[index].c2; |
| 145 | + *c3 = mDiscrete[index].c3; |
| 146 | + return true; |
| 147 | + } |
| 148 | + } |
149 | 149 |
|
150 | | - *c1 = 0; *c2 = 0; *c3 = 0; |
151 | | - return false; |
| 150 | + *c1 = 0; *c2 = 0; *c3 = 0; |
| 151 | + return false; |
152 | 152 | } |
153 | 153 |
|
154 | 154 | void QgsColorTable::sort ( void ) |
155 | 155 | { |
156 | | - std::sort ( mRamp.begin(), mRamp.end(), compareRampSort ); |
| 156 | + qSort ( mRamp.begin(), mRamp.end(), compareRampSort ); |
157 | 157 | } |
158 | 158 |
|
159 | 159 | bool QgsColorTable::defined ( void ) |
160 | 160 | { |
161 | | - if ( mDiscrete.size() > 0 || mRamp.size() > 0 ) { |
162 | | - return true; |
163 | | - } |
164 | | - return false; |
| 161 | + if ( mDiscrete.size() > 0 || mRamp.size() > 0 ) { |
| 162 | + return true; |
| 163 | + } |
| 164 | + return false; |
165 | 165 | } |
166 | 166 |
|
167 | 167 | int QgsColorTable::interpretation ( void ) |
168 | 168 | { |
169 | | - return mInterp; |
| 169 | + return mInterp; |
170 | 170 | } |
171 | 171 |
|
172 | 172 | double QgsColorTable::rmin ( void ) |
173 | 173 | { |
174 | | - return mMin; |
| 174 | + return mMin; |
175 | 175 | } |
176 | 176 |
|
177 | 177 | double QgsColorTable::rmax ( void ) |
178 | 178 | { |
179 | | - return mMax; |
| 179 | + return mMax; |
180 | 180 | } |
181 | 181 |
|
182 | 182 |
|
183 | 183 | void QgsColorTable::print ( void ) |
184 | 184 | { |
185 | 185 | #ifdef QGISDEBUG |
186 | | - QgsLogger::debug("******** Color table ********", 1, __FILE__, __FUNCTION__, __LINE__); |
187 | | - QgsLogger::debug("Discrete table size", (int)mDiscrete.size(), 1, __FILE__, __FUNCTION__, __LINE__); |
188 | | - |
189 | | - for ( uint i = 0; i < mDiscrete.size(); i++ ) { |
190 | | - QgsLogger::debug("i", (int)i, 2, __FILE__, __FUNCTION__, __LINE__); |
191 | | - QgsLogger::debug("c1", (int) mDiscrete[i].c1, 2, __FILE__, __FUNCTION__, __LINE__); |
192 | | - QgsLogger::debug("c2", (int) mDiscrete[i].c2, 2, __FILE__, __FUNCTION__, __LINE__); |
193 | | - QgsLogger::debug("c3", (int) mDiscrete[i].c3, 2, __FILE__, __FUNCTION__, __LINE__); |
194 | | - } |
195 | | - |
196 | | - QgsLogger::debug("Ramp table size", (int)mRamp.size(), 1, __FILE__, __FUNCTION__, __LINE__); |
197 | | - for ( uint i = 0; i < mRamp.size(); i++ ) { |
198 | | - std::cerr << " min = " << mRamp[i].min << " max = " << mRamp[i].max |
199 | | - << " min_c1 = " << (int)mRamp[i].min_c1 << " min_c2 = " << (int)mRamp[i].min_c2 |
200 | | - << " min_c3 = " << (int)mRamp[i].min_c3 << " max_c1 = " << (int)mRamp[i].max_c1 |
201 | | - << " max_c2 = " << (int)mRamp[i].max_c2 << " max_c3 = " << (int)mRamp[i].max_c3 |
202 | | - << std::endl; |
203 | | - QgsLogger::debug("min", mRamp[i].min, 2, __FILE__, __FUNCTION__, __LINE__); |
204 | | - QgsLogger::debug("min_c1", (int)mRamp[i].min_c1, 2, __FILE__, __FUNCTION__, __LINE__); |
205 | | - QgsLogger::debug("min_c2", (int)mRamp[i].min_c2, 2, __FILE__, __FUNCTION__, __LINE__); |
206 | | - QgsLogger::debug("min_c3", (int)mRamp[i].min_c3, 2, __FILE__, __FUNCTION__, __LINE__); |
207 | | - QgsLogger::debug("max_c1", (int)mRamp[i].max_c1, 2, __FILE__, __FUNCTION__, __LINE__); |
208 | | - QgsLogger::debug("max_c2", (int)mRamp[i].max_c2, 2, __FILE__, __FUNCTION__, __LINE__); |
209 | | - QgsLogger::debug("max_c3", (int)mRamp[i].max_c3, 2, __FILE__, __FUNCTION__, __LINE__); |
210 | | - } |
| 186 | + QgsLogger::debug("******** Color table ********", 1, __FILE__, __FUNCTION__, __LINE__); |
| 187 | + QgsLogger::debug("Discrete table size", (int)mDiscrete.size(), 1, __FILE__, __FUNCTION__, __LINE__); |
| 188 | + |
| 189 | + for ( int i = 0; i < mDiscrete.size(); i++ ) { |
| 190 | + QgsLogger::debug("i", (int)i, 2, __FILE__, __FUNCTION__, __LINE__); |
| 191 | + QgsLogger::debug("c1", (int) mDiscrete[i].c1, 2, __FILE__, __FUNCTION__, __LINE__); |
| 192 | + QgsLogger::debug("c2", (int) mDiscrete[i].c2, 2, __FILE__, __FUNCTION__, __LINE__); |
| 193 | + QgsLogger::debug("c3", (int) mDiscrete[i].c3, 2, __FILE__, __FUNCTION__, __LINE__); |
| 194 | + } |
| 195 | + |
| 196 | + QgsLogger::debug("Ramp table size", (int)mRamp.size(), 1, __FILE__, __FUNCTION__, __LINE__); |
| 197 | + for ( int i = 0; i < mRamp.size(); i++ ) { |
| 198 | + std::cerr << " min = " << mRamp[i].min << " max = " << mRamp[i].max |
| 199 | + << " min_c1 = " << (int)mRamp[i].min_c1 << " min_c2 = " << (int)mRamp[i].min_c2 |
| 200 | + << " min_c3 = " << (int)mRamp[i].min_c3 << " max_c1 = " << (int)mRamp[i].max_c1 |
| 201 | + << " max_c2 = " << (int)mRamp[i].max_c2 << " max_c3 = " << (int)mRamp[i].max_c3 |
| 202 | + << std::endl; |
| 203 | + QgsLogger::debug("min", mRamp[i].min, 2, __FILE__, __FUNCTION__, __LINE__); |
| 204 | + QgsLogger::debug("min_c1", (int)mRamp[i].min_c1, 2, __FILE__, __FUNCTION__, __LINE__); |
| 205 | + QgsLogger::debug("min_c2", (int)mRamp[i].min_c2, 2, __FILE__, __FUNCTION__, __LINE__); |
| 206 | + QgsLogger::debug("min_c3", (int)mRamp[i].min_c3, 2, __FILE__, __FUNCTION__, __LINE__); |
| 207 | + QgsLogger::debug("max_c1", (int)mRamp[i].max_c1, 2, __FILE__, __FUNCTION__, __LINE__); |
| 208 | + QgsLogger::debug("max_c2", (int)mRamp[i].max_c2, 2, __FILE__, __FUNCTION__, __LINE__); |
| 209 | + QgsLogger::debug("max_c3", (int)mRamp[i].max_c3, 2, __FILE__, __FUNCTION__, __LINE__); |
| 210 | + } |
211 | 211 | #endif |
212 | 212 | } |
213 | | - |
0 commit comments