Changeset 40018
- Timestamp:
- Apr 27, 2017, 2:45:53 AM (9 years ago)
- Location:
- trunk/Ohana/src/kapa2/src
- Files:
-
- 5 edited
-
DrawFrame.c (modified) (5 diffs)
-
DrawObjects.c (modified) (2 diffs)
-
MakeGC.c (modified) (1 diff)
-
PSFrame.c (modified) (2 diffs)
-
bDrawFrame.c (modified) (4 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? -
trunk/Ohana/src/kapa2/src/DrawObjects.c
r39926 r40018 6 6 // # define FillRectangle(X1,Y1,X2,Y2) ; 7 7 # define DrawCircle(X,Y,R) (XDrawArc (graphic->display, graphic->window, graphic->gc, (int)(X-R), (int)(Y-R), abs(2*R), abs(2*R), 0, 23040)) 8 # define FillCircle(X,Y,R) (XFillArc (graphic->display, graphic->window, graphic->gc, (int)(X-R), (int)(Y-R), abs(2*R +1), abs(2*R+1), 0, 23040))8 # define FillCircle(X,Y,R) (XFillArc (graphic->display, graphic->window, graphic->gc, (int)(X-R), (int)(Y-R), abs(2*R), abs(2*R), 0, 23040)) 9 9 10 10 # define XCENTER 0.0 11 11 # define YCENTER 0.0 12 # define CAPSTYLE CapButt 12 /* # define CAPSTYLE CapButt */ 13 # define CAPSTYLE CapNotLast 13 14 # define JOINSTYLE JoinMiter 14 15 … … 637 638 } 638 639 D = scaleSize ? dz*z[i] : ds; 640 DrawCircle (sx, sy, D); 639 641 FillCircle (sx, sy, D); 640 DrawCircle (sx, sy, D);641 642 } 642 643 } -
trunk/Ohana/src/kapa2/src/MakeGC.c
r13320 r40018 8 8 gcvalues.foreground = graphic->fore; 9 9 gcvalues.background = graphic->back; 10 gcvalues.arc_mode = ArcPieSlice; // ArcChord; 11 12 10 13 graphic->gc = XCreateGC (graphic->display, graphic->window, 11 GCForeground | GCBackground , &gcvalues);14 GCForeground | GCBackground | GCArcMode, &gcvalues); 12 15 if (graphic->gc == 0) 13 16 QuitX (graphic->display, "Error in creating a Graphics Context"); -
trunk/Ohana/src/kapa2/src/PSFrame.c
r39926 r40018 54 54 } 55 55 56 void PSTick (Graphic *graphic, Axis *axis, int P, TickMarkData *tick, int naxis, FILE *f) { 57 58 double x, y, dx, dy; 59 int pos, dir, fontsize; 60 double size, pad; 61 char string[64]; 62 63 double fx = axis->fx; 64 double fy = graphic->dy - axis->fy; 65 double dfx = axis->dfx; 66 double dfy = -axis->dfy; 67 68 double min = axis->min; 69 double max = axis->max; 70 71 double value = tick->value; 72 73 pos = size = 0; 74 75 if (tick->IsMajor) { 76 size = MIN (0.50*P, MAX (0.030 * P, 10.0)); 77 } else { 78 size = MIN (0.25*P, MAX (0.015 * P, 5.0)); 79 } 80 dir = ((naxis == 2) || (naxis == 3)) ? -1 : +1; 81 82 x = fx + (value-min)*dfx/(max - min); 83 y = fy + (value-min)*dfy/(max - min); 84 85 if ((naxis == 0) || (naxis == 2)) { 86 dx = 0; 87 dy = dir*size; 88 x = MIN(MAX(x, fx),fx+dfx); 89 } 90 if ((naxis == 1) || (naxis == 3)) { 91 dx = dir*size; 92 dy = 0; 93 y = MIN(MAX(y, fy),fy+dfy); 94 } 95 96 DrawLine (x, y, dx, dy); 97 98 if (tick->IsLabel) { 99 int xt, yt; 100 101 // char *fontname is returned by not needed 102 GetRotFont (&fontsize); 103 104 pad = !isnan(axis->ticktextPad) ? axis->ticktextPad*fontsize : 0.8*fontsize + 1.0; 105 106 /* temporarily assume rectilinear axes */ 107 if (naxis == 0) { dx = 0; dy = -pad; pos = 1; } 108 if (naxis == 2) { dx = 0; dy = +pad; pos = 7; } 109 110 if (naxis == 1) { dy = 0; dx = -pad; pos = 3; } 111 if (naxis == 3) { dy = 0; dx = +pad; pos = 5; } 112 113 xt = fx + (value-min)*dfx/(max - min) + dx; 114 yt = fy + (value-min)*dfy/(max - min) + dy; 115 116 PrintTick (string, value, min, max, tick->nsignif); 117 PSRotText (f, xt, yt, string, pos, 0.0); 118 } 119 } 120 121 /* 122 dx = size*dfy*n; 123 dy = size*dfx*n; 124 DrawLine (x, y, dx, dy); 125 126 dx = -size*dfy*n; 127 dy = -size*dfx*n; 128 DrawLine (x, y, dx, dy); 129 */ 130 131 # if (0) 56 132 void PSTick (Graphic *graphic, Axis *axis, int P, TickMarkData *tick, int naxis, FILE *f) { 57 133 … … 118 194 } 119 195 } 196 # endif 120 197 121 /*122 dx = size*dfy*n;123 dy = size*dfx*n;124 DrawLine (x, y, dx, dy);125 126 dx = -size*dfy*n;127 dy = -size*dfx*n;128 DrawLine (x, y, dx, dy);129 */130 -
trunk/Ohana/src/kapa2/src/bDrawFrame.c
r39926 r40018 4 4 int bDrawFrame (bDrawBuffer *buffer, KapaGraphWidget *graph) { 5 5 6 int i, j, Nticks, P,doffset;6 int i, j, Nticks, doffset; 7 7 double fx, fy, dfx, dfy, lweight, dx = 0, dy = 0; 8 8 // Graphic graphic; is not needed … … 12 12 // don't need graphic, unlink DrawFrame 13 13 14 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)); 14 // 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 int 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)); 16 int 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)); 17 int P = MIN (Px, Py); 15 18 16 19 /* each axis is drawn independently */ … … 58 61 } 59 62 63 void bDrawTick (bDrawBuffer *buffer, Axis *axis, int P, TickMarkData *tick, int naxis) { 64 65 double x, y, dx, dy; 66 int pos, dir, fontsize; 67 double size, pad; 68 char string[64]; 69 70 double fx = axis->fx; 71 double fy = axis->fy; 72 double dfx = axis->dfx; 73 double dfy = axis->dfy; 74 75 double min = axis->min; 76 double max = axis->max; 77 78 double value = tick->value; 79 80 pos = size = 0; 81 82 if (tick->IsMajor) { 83 size = MIN (0.50*P, MAX (0.030 * P, 10.0)); 84 } else { 85 size = MIN (0.25*P, MAX (0.015 * P, 5.0)); 86 } 87 dir = ((naxis == 0) || (naxis == 3)) ? -1 : +1; 88 89 x = fx + (value-min)*dfx/(max - min); 90 y = fy + (value-min)*dfy/(max - min); 91 92 if ((naxis == 0) || (naxis == 2)) { 93 dx = 0; 94 dy = dir*size; 95 x = MIN(MAX(x, fx),fx+dfx); 96 } 97 if ((naxis == 1) || (naxis == 3)) { 98 dx = dir*size; 99 dy = 0; 100 y = MAX(MIN(y, fy),fy+dfy); 101 } 102 103 bDrawLine (buffer, x, y, x+dx, y+dy); 104 105 if (tick->IsLabel) { 106 int xt, yt; 107 108 // char *fontname is returned but ignored 109 GetRotFont (&fontsize); 110 111 pad = !isnan(axis->ticktextPad) ? axis->ticktextPad*fontsize : 0.8*fontsize + 1.0; 112 113 /* temporarily assume rectilinear axes */ 114 if (naxis == 0) { dx = 0; dy = +pad; pos = 1; } 115 if (naxis == 2) { dx = 0; dy = -pad; pos = 7; } 116 117 if (naxis == 1) { dy = 0; dx = -pad; pos = 3; } 118 if (naxis == 3) { dy = 0; dx = +pad; pos = 5; } 119 120 xt = fx + (value-min)*dfx/(max - min) + dx; 121 yt = fy + (value-min)*dfy/(max - min) + dy; 122 123 PrintTick (string, value, min, max, tick->nsignif); 124 bDrawRotText (buffer, xt, yt, string, pos, 0.0); 125 } 126 } 127 128 # if (0) 60 129 void bDrawTick (bDrawBuffer *buffer, Axis *axis, int P, TickMarkData *tick, int naxis) { 61 130 … … 122 191 } 123 192 } 193 194 # endif
Note:
See TracChangeset
for help on using the changeset viewer.
