Changeset 38986 for trunk/Ohana/src/kapa2
- Timestamp:
- Oct 27, 2015, 4:49:06 PM (11 years ago)
- Location:
- trunk/Ohana
- Files:
-
- 9 edited
-
. (modified) (1 prop)
-
src/kapa2/include/prototypes.h (modified) (1 diff)
-
src/kapa2/include/structures.h (modified) (1 diff)
-
src/kapa2/src/DrawFrame.c (modified) (11 diffs)
-
src/kapa2/src/Graphs.c (modified) (2 diffs)
-
src/kapa2/src/LoadFrame.c (modified) (2 diffs)
-
src/kapa2/src/PSFrame.c (modified) (1 diff)
-
src/kapa2/src/SetGraphData.c (modified) (1 diff)
-
src/kapa2/src/bDrawFrame.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana
-
Property svn:mergeinfo
set to
/branches/eam_branches/ipp-20150625/Ohana merged eligible
-
Property svn:mergeinfo
set to
-
trunk/Ohana/src/kapa2/include/prototypes.h
r38465 r38986 40 40 void DrawYErrors PROTO((KapaGraphWidget *graph, Gobjects *objects)); 41 41 void DrawTick PROTO((Graphic *graphic, Axis *axis, int P, TickMarkData *tick, int naxis)); 42 void AxisTickScale PROTO((Axis *axis, double * major, double *minor, int *nsignif));42 void AxisTickScale PROTO((Axis *axis, double *range, double *major, double *minor, int *nsignif)); 43 43 TickMarkData *CreateAxisTicks PROTO((Axis *axis, int *nticks)); 44 44 int PrintTick PROTO((char *string, double value, double min, double max, int nsignif)); -
trunk/Ohana/src/kapa2/include/structures.h
r38465 r38986 143 143 double fx, dfx, fy, dfy; /* axis location on graphic */ 144 144 double lweight; 145 double fLabelRange; 146 double fMinor; 145 147 int color; 146 148 } Axis; -
trunk/Ohana/src/kapa2/src/DrawFrame.c
r34088 r38986 116 116 117 117 if ((naxis == 0) || (naxis == 2)) { 118 x = MAX(x, fx); 119 } 120 // y = MAX(y, fy); 121 // } 118 x = MIN(MAX(x, fx),fx+dfx); 119 } 120 if ((naxis == 1) || (naxis == 3)) { 121 y = MAX(MIN(y, fy),fy+dfy); 122 } 122 123 123 124 dir = ((naxis == 0) || (naxis == 1)) ? -1 : +1; … … 137 138 138 139 /* temporarily assume rectilinear axes */ 139 if (naxis == 0) { dx = 0; dy = +1.0*pad; pos = 7; } 140 if (naxis == 2) { dx = 0; dy = -1.0*pad; pos = 1; } 141 142 if (naxis == 1) { dy = 0; dx = -0.5*pad; pos = 3; } 143 if (naxis == 3) { dy = 0; dx = +0.5*pad; pos = 5; } 140 if (naxis == 0) { dx = 0; dy = +1.0*pad; pos = 7; } // center, down justified 141 if (naxis == 2) { dx = 0; dy = -1.0*pad; pos = 1; } // center, up justified 142 143 if (naxis == 1) { dy = 0; dx = -0.5*pad; pos = 3; } // left, center justified 144 if (naxis == 3) { dy = 0; dx = +0.5*pad; pos = 5; } // right, center justified 144 145 145 146 xt = fx + (value-min)*dfx/(max - min) + dx; … … 154 155 # define MIN_RANGE 1e-30 155 156 156 void AxisTickScale (Axis *axis, double *major, double *minor, int *nsignif) { 157 158 double range, lrange, factor, mantis, fmantis, power; 159 160 range = axis[0].max - axis[0].min; 161 if (fabs(range) < MIN_RANGE) { 162 range = (range < 0) ? -MIN_RANGE : +MIN_RANGE; 163 } 164 165 lrange = log10(MAX(fabs(range), MIN_RANGE)); 157 void AxisTickScale (Axis *axis, double *range, double *major, double *minor, int *nsignif) { 158 159 double lrange, factor, mantis, fmantis, power; 160 161 *range = axis->fLabelRange*(axis[0].max - axis[0].min); 162 if (fabs(*range) < MIN_RANGE) { 163 *range = (*range < 0) ? -MIN_RANGE : +MIN_RANGE; 164 } 165 166 lrange = log10(MAX(fabs(*range), MIN_RANGE)); 167 double truncRange = ((int) ((lrange + 0.005) * 1000)) / 1000.0; 168 lrange = truncRange; 169 166 170 mantis = modf (lrange, &factor); 167 171 if (mantis < 0.0) { … … 179 183 if ((fmantis >= 1.0) && (fmantis < 1.999)) { 180 184 *major = 0.5 * power; 181 *minor = 0.1 * power;182 185 *nsignif = factor - 1; 183 186 if (axis[0].areticks == 1) { 184 187 *major = 0.25 * power; 185 *minor = 0.05 * power;186 188 *nsignif = factor - 2; 189 } 190 if (axis[0].areticks == 3) { 191 *major = 1.0 * power; 192 *nsignif = factor - 1; 187 193 } 188 194 } 189 195 if ((fmantis >= 1.999) && (fmantis < 3.999)) { 190 196 *major = 1.0 * power; 191 *minor = 0.2 * power;192 197 *nsignif = factor; 193 198 if (axis[0].areticks == 1) { 194 199 *major = 0.5 * power; 195 *minor = 0.1 * power;196 200 *nsignif = factor - 1; 201 } 202 if (axis[0].areticks == 3) { 203 *major = 2.0 * power; 204 *nsignif = factor; 197 205 } 198 206 } 199 207 if ((fmantis >= 3.999) && (fmantis < 5.999)) { 200 208 *major = 1.0 * power; 201 *minor = 0.5 * power;202 209 *nsignif = factor; 203 210 if (axis[0].areticks == 1) { 204 211 *major = 1.0 * power; 205 *minor = 0.2 * power; 212 *nsignif = factor; 213 } 214 if (axis[0].areticks == 3) { 215 *major = 2.0 * power; 206 216 *nsignif = factor; 207 217 } … … 209 219 if ((fmantis >= 5.999) && (fmantis < 7.999)) { 210 220 *major = 2.0 * power; 211 *minor = 0.5 * power;212 221 *nsignif = factor; 213 222 if (axis[0].areticks == 1) { 214 223 *major = 1.0 * power; 215 *minor = 0.5 * power; 224 *nsignif = factor; 225 } 226 if (axis[0].areticks == 3) { 227 *major = 4.0 * power; 216 228 *nsignif = factor; 217 229 } … … 219 231 if ((fmantis >= 7.999) && (fmantis < 10.000)) { 220 232 *major = 2.5 * power; 221 *minor = 0.5 * power; 222 *nsignif = factor - 1; 233 *nsignif = factor - 1; 223 234 if (axis[0].areticks == 1) { 224 235 *major = 2.0 * power; 225 *minor = 0.5 * power; 226 *nsignif = factor; 227 } 228 } 236 *nsignif = factor; 237 } 238 if (axis[0].areticks == 3) { 239 *major = 4.0 * power; 240 *nsignif = factor; 241 } 242 } 243 *minor = *major / axis->fMinor; 229 244 } 230 245 … … 233 248 TickMarkData *ticks; 234 249 double range, major, minor, first, value; 235 int i, NTICKS, done, ifirst,nsignif;250 int i, NTICKS, done, nsignif; 236 251 237 252 *nticks = 0; … … 240 255 if (isnan(axis->max) || isinf(axis->max)) return NULL; 241 256 242 range = axis->max - axis->min;243 244 // not sure why I skip out here instead of using the MIN_RANGE value245 if (fabs(range) < MIN_RANGE) return NULL;246 247 if (fabs(range) < MIN_RANGE) {248 range = (range < 0) ? -MIN_RANGE : +MIN_RANGE;249 }250 251 257 // length of the axis in pixels 252 258 // int nPixels = hypot(axis->dfx, axis->dfy); 253 259 // double dPixels = nPixels / range; // axis pixel-scale 254 260 255 AxisTickScale (axis, & major, &minor, &nsignif);261 AxisTickScale (axis, &range, &major, &minor, &nsignif); 256 262 257 263 // be a little generous … … 259 265 ALLOCATE (ticks, TickMarkData, NTICKS); 260 266 261 // value of the tick mark 262 ifirst = (axis->min < 0.0) ? (axis->min/minor - 0.05) : (axis->min/minor + 0.05); 267 // value of the first tick mark (near axis->min) 268 double minValue = axis->min / minor; 269 int ifirst = (int) minValue; 270 271 if ((axis->min > 0.0) && (minValue - ifirst > +0.1)) { 272 ifirst ++; 273 } 274 if ((axis->min < 0.0) && (minValue - ifirst < -0.1)) { 275 ifirst --; 276 } 263 277 first = minor*ifirst; 264 278 265 // allow undershoot by 1 pixel 266 // double overshoot = (axis->min - first) * dPixels; 267 // if (overshoot > 0.5) { 268 // if (range > 0) { 269 // first += minor; 270 // } else { 271 // first -= minor; 272 // } 273 // } 274 275 // XXX need to fix first and last value for printing label: currently prints first label 276 // too early & fails to do last label if too close 279 // only write the labels for the inner fRange of the axies 280 double minLabelValue = 0.5*(1.0 - 1.001*axis->fLabelRange)*(axis->max - axis->min) + axis->min; 281 double maxLabelValue = 0.5*(1.0 + 1.001*axis->fLabelRange)*(axis->max - axis->min) + axis->min; 277 282 278 283 // loop to find the ticks … … 284 289 ticks[i].IsMajor |= (fabs((int)((value + 0.5*minor)/major) - (value/major)) < 0.5*(minor/major)); 285 290 ticks[i].IsMajor |= (fabs((int)((value - 0.5*minor)/major) - (value/major)) < 0.5*(minor/major)); 286 ticks[i].IsLabel = (ticks[i].IsMajor && axis->islabel); 291 int inLabelRange = (range > 0) ? (value >= minLabelValue) && (value <= maxLabelValue) : (value <= minLabelValue) && (value >= maxLabelValue); 292 ticks[i].IsLabel = inLabelRange && ticks[i].IsMajor && axis->islabel; 287 293 ticks[i].value = value; 288 294 ticks[i].nsignif = nsignif; … … 292 298 value -= minor; 293 299 294 done |= (range > 0) && (value > axis->max); 295 done |= (range < 0) && (value < axis->max); 300 done |= (range > 0) && (value > axis->max + 0.1*minor); 301 done |= (range < 0) && (value < axis->max - 0.1*minor); 302 // fprintf (stderr, "%d : %f %f %f %f\n", done, range, value, axis->max, 0.1*minor); 296 303 } 297 304 -
trunk/Ohana/src/kapa2/src/Graphs.c
r37807 r38986 23 23 graph[0].axis[i].labelPad = NAN; 24 24 graph[0].axis[i].pad = NAN; 25 graph[0].axis[i].fLabelRange = 1.0; 26 graph[0].axis[i].fMinor = 5.0; 25 27 } 26 28 graph[0].data.ticktextPad = NAN; … … 35 37 graph[0].data.padYm = NAN; 36 38 graph[0].data.padYp = NAN; 39 40 graph[0].data.fLabelRangeXm = 1.0; 41 graph[0].data.fLabelRangeXp = 1.0; 42 graph[0].data.fLabelRangeYm = 1.0; 43 graph[0].data.fLabelRangeYp = 1.0; 44 45 graph[0].data.fMinorXm = 5.0; 46 graph[0].data.fMinorXp = 5.0; 47 graph[0].data.fMinorYm = 5.0; 48 graph[0].data.fMinorYp = 5.0; 37 49 38 50 for (i = 0; i < 8; i++) { -
trunk/Ohana/src/kapa2/src/LoadFrame.c
r29539 r38986 37 37 graph[0].axis[3].labelPad = graph[0].data.labelPadYp; 38 38 39 graph[0].axis[0].fLabelRange = graph[0].data.fLabelRangeXm; 40 graph[0].axis[1].fLabelRange = graph[0].data.fLabelRangeYm; 41 graph[0].axis[2].fLabelRange = graph[0].data.fLabelRangeXp; 42 graph[0].axis[3].fLabelRange = graph[0].data.fLabelRangeYp; 43 44 graph[0].axis[0].fMinor = graph[0].data.fMinorXm; 45 graph[0].axis[1].fMinor = graph[0].data.fMinorYm; 46 graph[0].axis[2].fMinor = graph[0].data.fMinorXp; 47 graph[0].axis[3].fMinor = graph[0].data.fMinorYp; 48 39 49 for (i = 0; i < 4; i++) { 40 50 graph[0].axis[i].lweight = graph[0].data.lweight; … … 63 73 case '2': 64 74 graph[0].axis[i].areticks = 2; 75 break; 76 case '3': 77 graph[0].axis[i].areticks = 3; 65 78 break; 66 79 } -
trunk/Ohana/src/kapa2/src/PSFrame.c
r34088 r38986 81 81 y = fy + (value-min)*dfy/(max - min); 82 82 83 if ((naxis == 0) || (naxis == 2)) { 84 x = MIN(MAX(x, fx),fx+dfx); 85 } 86 if ((naxis == 1) || (naxis == 3)) { 87 y = MIN(MAX(y, fy),fy+dfy); 88 } 89 83 90 dir = ((naxis == 0) || (naxis == 1)) ? +1 : -1; 84 91 dx = dir*size*dfy*n; -
trunk/Ohana/src/kapa2/src/SetGraphData.c
r27790 r38986 27 27 graph[0].axis[2].labelPad = graph[0].data.labelPadXp; 28 28 graph[0].axis[3].labelPad = graph[0].data.labelPadYp; 29 30 graph[0].axis[0].fLabelRange = graph[0].data.fLabelRangeXm; 31 graph[0].axis[1].fLabelRange = graph[0].data.fLabelRangeYm; 32 graph[0].axis[2].fLabelRange = graph[0].data.fLabelRangeXp; 33 graph[0].axis[3].fLabelRange = graph[0].data.fLabelRangeYp; 34 35 graph[0].axis[0].fMinor = graph[0].data.fMinorXm; 36 graph[0].axis[1].fMinor = graph[0].data.fMinorYm; 37 graph[0].axis[2].fMinor = graph[0].data.fMinorXp; 38 graph[0].axis[3].fMinor = graph[0].data.fMinorYp; 29 39 30 40 graph[0].axis[0].pad = graph[0].data.padXm; -
trunk/Ohana/src/kapa2/src/bDrawFrame.c
r34088 r38986 84 84 y = fy + (value-min)*dfy/(max - min); 85 85 86 if ((naxis == 0) || (naxis == 2)) { 87 x = MIN(MAX(x, fx),fx+dfx); 88 } 89 if ((naxis == 1) || (naxis == 3)) { 90 y = MAX(MIN(y, fy),fy+dfy); 91 } 92 86 93 dir = ((naxis == 0) || (naxis == 1)) ? -1 : +1; 87 94 dx = dir*size*dfy*n;
Note:
See TracChangeset
for help on using the changeset viewer.
