|
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