Changeset 40018 for trunk/Ohana/src/kapa2/src/DrawFrame.c
- Timestamp:
- Apr 27, 2017, 2:45:53 AM (9 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/kapa2/src/DrawFrame.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/kapa2/src/DrawFrame.c
r39926 r40018 5 5 int DrawFrame (KapaGraphWidget *graph) { 6 6 7 int i, j, Nticks, P , doffset;7 int i, j, Nticks, Px, Py, doffset; 8 8 double fx, fy, dfx, dfy, dx = 0, dy = 0, lweight; 9 9 Graphic *graphic; … … 13 13 graphic = GetGraphic(); 14 14 15 P = 0.5 * (1 + 0.25*graph[0].axis[0].lweight) * (hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy) + hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy)); 15 // P = 0.5 * (1 + 0.25*graph[0].axis[0].lweight) * (hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy) + hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy)); 16 // P ~ 1.25*(x-axis length) 17 Px = 0.5 * (1 + 0.25*graph[0].axis[0].lweight) * (hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy) + hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy)); 18 Py = 0.5 * (1 + 0.25*graph[0].axis[1].lweight) * (hypot (graph[0].axis[1].dfx, graph[0].axis[1].dfy) + hypot (graph[0].axis[1].dfx, graph[0].axis[1].dfy)); 19 int P = MIN (Px, Py); 16 20 17 21 /* each axis is drawn independently, but ticks and labels are placed according to perpendicular distance. */ … … 92 96 double x, y, dx, dy; 93 97 int pos, dir, fontsize; 94 double size, n,pad;98 double size, pad; 95 99 char string[64]; 96 100 … … 108 112 109 113 if (tick->IsMajor) { 110 size = M AX (0.02, 7.0 / P);114 size = MIN (0.50*P, MAX (0.030 * P, 10.0)); 111 115 } else { 112 size = M AX (0.01, 4.0 / P);113 } 114 115 n = P / hypot(dfx, dfy); 116 size = MIN (0.25*P, MAX (0.015 * P, 5.0)); 117 } 118 dir = ((naxis == 0) || (naxis == 3)) ? -1 : +1; 119 116 120 x = fx + (value-min)*dfx/(max - min); 117 121 y = fy + (value-min)*dfy/(max - min); 118 122 119 123 if ((naxis == 0) || (naxis == 2)) { 120 x = MIN(MAX(x, fx),fx+dfx); 124 dx = 0; 125 dy = dir*size; 126 x = MIN(MAX(x, fx), fx+dfx); 121 127 } 122 128 if ((naxis == 1) || (naxis == 3)) { 123 y = MAX(MIN(y, fy),fy+dfy); 124 } 125 126 dir = ((naxis == 0) || (naxis == 1)) ? -1 : +1; 127 dx = dir*size*dfy*n; 128 dy = dir*size*dfx*n; 129 129 dx = dir*size; 130 dy = 0; 131 y = MAX(MIN(y, fy), fy+dfy); 132 } 133 130 134 DrawLine (x, y, dx, dy); 131 135 … … 153 157 } 154 158 } 159 160 # if (0) 161 void DrawTick (Graphic *graphic, Axis *axis, int P, TickMarkData *tick, int naxis) { 162 163 double x, y, dx, dy; 164 int pos, dir, fontsize; 165 double size, n, pad; 166 char string[64]; 167 168 double fx = axis->fx; 169 double fy = axis->fy; 170 double dfx = axis->dfx; 171 double dfy = axis->dfy; 172 173 double min = axis->min; 174 double max = axis->max; 175 176 double value = tick->value; 177 178 pos = size = 0; 179 180 // size = 4 / P 181 // n = P / dfx 182 // dy = (4/P)*(P/dfx)*dfx = (0.01 * P) or 4 183 184 // size = 0.01 185 // n = P / dfx 186 // dy - 0.01 * (P / dfx) * dfx = 0.01*P 187 188 // n ~ 1.25 * x-axis / current-axis 189 // n = P / hypot(dfx, dfy); 190 n = P / hypot(dfx, dfy); 191 192 if (tick->IsMajor) { 193 // size = MAX (0.02, 7.0 / P); 194 size = MIN (0.50*P, MAX (0.030 * P, 10.0)); 195 } else { 196 // size = MAX (0.01, 4.0 / P); 197 size = MIN (0.25*P, MAX (0.015 * P, 5.0)); 198 } 199 200 dir = ((naxis == 0) || (naxis == 3)) ? -1 : +1; 201 202 // fdir ~ 1.25 * (4,7) / current-axis 203 204 x = fx + (value-min)*dfx/(max - min); 205 y = fy + (value-min)*dfy/(max - min); 206 207 double xs, xe, ys, ye; 208 if ((naxis == 0) || (naxis == 2)) { 209 dx = 0; 210 dy = dir*size; 211 xs = MIN(MAX(x, fx), fx+dfx); 212 xe = xs; 213 ys = y; 214 ye = y+dy; 215 } 216 if ((naxis == 1) || (naxis == 3)) { 217 dx = dir*size; 218 dy = 0; 219 xs = x; 220 xe = x+dx; 221 ys = MAX(MIN(y, fy), fy+dfy); 222 ye = ys; 223 } 224 225 double dxs = xe - xs; 226 double dys = ye - ys; 227 228 // dx ~ (4,7)*x-axis 229 // dx = dir*size*dfy*n; 230 // dy = dir*size*dfx*n; 231 232 fprintf (stderr, "axis: %d %f : %f %d %f : %f %f : %f %f : %f %f\n", 233 naxis, value, n, P, size, dfx, dfy, dx, dy, dxs, dys); 234 235 DrawLine (xs, ys, dxs, dys); 236 237 if (tick->IsLabel) { 238 int xt, yt; 239 240 // char *fontname is returned by GetRotFont, but not used here 241 GetRotFont (&fontsize); 242 243 pad = !isnan(axis->ticktextPad) ? axis->ticktextPad*fontsize : fontsize + 4.0; 244 // pad = !isnan(axis->ticktextPad) ? axis->ticktextPad*fontsize : 0.8*fontsize + 1.0; 245 246 /* temporarily assume rectilinear axes */ 247 if (naxis == 0) { dx = 0; dy = +1.0*pad; pos = 1; } // center, down justified 248 if (naxis == 2) { dx = 0; dy = -1.0*pad; pos = 7; } // center, up justified 249 250 if (naxis == 1) { dy = 0; dx = -0.5*pad; pos = 3; } // left, center justified 251 if (naxis == 3) { dy = 0; dx = +0.5*pad; pos = 5; } // right, center justified 252 253 xt = fx + (value-min)*dfx/(max - min) + dx; 254 yt = fy + (value-min)*dfy/(max - min) + dy; 255 256 PrintTick (string, value, min, max, tick->nsignif); 257 DrawRotText (xt, yt, string, pos, 0.0); 258 } 259 } 260 # endif 155 261 156 262 // do I really want this? allow an override?
Note:
See TracChangeset
for help on using the changeset viewer.
