Changeset 5610
- Timestamp:
- Nov 27, 2005, 4:14:38 PM (21 years ago)
- Location:
- trunk/Ohana/src/kapa
- Files:
-
- 10 added
- 7 edited
-
Makefile (modified) (2 diffs)
-
graph/DrawFrame.c (modified) (2 diffs)
-
graph/DrawRotString.c (modified) (2 diffs)
-
graph/PNGit.c (modified) (3 diffs)
-
graph/PNGit2.c (added)
-
graph/PSFrame.c (modified) (3 diffs)
-
graph/PSRotFont.c (added)
-
graph/RotFont.c (added)
-
graph/bDrawFrame.c (added)
-
graph/bDrawFuncs.c (added)
-
graph/bDrawIt.c (added)
-
graph/bDrawLabels.c (added)
-
graph/bDrawObjects.c (added)
-
graph/bDrawRotFont.c (added)
-
include/alphabet.h (modified) (2 diffs)
-
include/bDraw.h (added)
-
setup/MakeColormap.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/kapa/Makefile
r4769 r5610 52 52 $(GDIR)/LoadPtext.$(ARCH).o $(GDIR)/DrawPtext.$(ARCH).o \ 53 53 $(GDIR)/PSLabels.$(ARCH).o $(GDIR)/PSPtext.$(ARCH).o \ 54 $(GDIR)/DrawRotString.$(ARCH).o $(GDIR)/PNGit.$(ARCH).o \ 55 $(GDIR)/PPMit.$(ARCH).o 54 $(GDIR)/PNGit.$(ARCH).o $(GDIR)/PPMit.$(ARCH).o \ 55 $(GDIR)/DrawRotString.$(ARCH).o $(GDIR)/RotFont.$(ARCH).o \ 56 $(GDIR)/PSRotFont.$(ARCH).o 57 58 BDRAW = \ 59 $(GDIR)/bDrawIt.$(ARCH).o $(GDIR)/bDrawFuncs.$(ARCH).o \ 60 $(GDIR)/bDrawFrame.$(ARCH).o $(GDIR)/bDrawLabels.$(ARCH).o \ 61 $(GDIR)/bDrawObjects.$(ARCH).o $(GDIR)/bDrawRotFont.$(ARCH).o \ 62 $(GDIR)/PNGit2.$(ARCH).o \ 63 64 $(BDRAW): $(INC)/bDraw.h 56 65 57 66 SOBJ = \ … … 69 78 $(SDIR)/MakeCursor.$(ARCH).o 70 79 71 OBJ = $(EOBJ) $(GOBJ) $(MOBJ) $(SOBJ) 80 OBJ = $(EOBJ) $(GOBJ) $(MOBJ) $(SOBJ) $(BDRAW) 72 81 73 82 # dependancy rules for include files ######################## -
trunk/Ohana/src/kapa/graph/DrawFrame.c
r5386 r5610 65 65 y = fy + (value-min)*dfy/(max - min); 66 66 67 dir = 1; 68 if ((naxis == 0) || (naxis == 1)) dir = -1; 69 67 dir = +1; 68 if ((naxis == 0) || (naxis == 1)) dir *= -1; 70 69 dx = dir*size*dfy*n; 71 70 dy = dir*size*dfx*n; … … 84 83 85 84 /* temporarily assume rectilinear axes */ 86 if (naxis == 0) { dx = 0; dy = +(0.8*fontsize + 1); pos = 1; }87 if (naxis == 2) { dx = 0; dy = - (0.8*fontsize + 1); pos = 7; }85 if (naxis == 0) { dx = 0; dy = -dir*(0.8*fontsize + 1); pos = 1; } 86 if (naxis == 2) { dx = 0; dy = -dir*(0.8*fontsize + 1); pos = 7; } 88 87 89 88 if (naxis == 1) { dy = 0; dx = -(0.8*fontsize + 1); pos = 3; } -
trunk/Ohana/src/kapa/graph/DrawRotString.c
r5482 r5610 2 2 # include "alphabet.h" 3 3 4 # define NROT 2565 4 # define XPROC(x,y) (scale*(cs*((x) - x0) - sn*((y) - y0)) + X0) 6 5 # define YPROC(x,y) (scale*(cs*((y) - y0) + sn*((x) - x0)) + Y0) … … 213 212 return (TRUE); 214 213 } 215 216 void InitRotFonts () {217 218 int i, Nhardwired;219 220 Nhardwired = sizeof (HardwiredFonts) / sizeof (FontSet);221 222 Nallfonts = Nhardwired;223 ALLOCATE (AllFonts, FontSet, Nallfonts);224 225 for (i = 0; i < Nhardwired; i++) {226 AllFonts[i] = HardwiredFonts[i];227 }228 229 activefont = AllFonts[DEFFONT].font;230 activescale = 1.0;231 strcpy (currentname, AllFonts[DEFFONT].name);232 currentsize = AllFonts[DEFFONT].size;233 }234 235 int SetRotFont (char *name, int size) {236 237 int i, nsize, msize, bsize, bigger, dsize, match, good;238 239 bigger = good = match = -1;240 dsize = 10000;241 bsize = 10000;242 for (i = 0; i < Nallfonts; i++) {243 if (!strcasecmp (AllFonts[i].name, name)) {244 good = i;245 nsize = abs (AllFonts[i].size - size);246 if (nsize < dsize) {247 match = i;248 dsize = nsize;249 }250 msize = AllFonts[i].size - size;251 if ((msize < bsize) && (msize >= 0)) {252 bigger = i;253 bsize = msize;254 }255 }256 }257 258 if ((match == -1) && (good != -1)) match = good;259 if (bigger != -1) match = bigger;260 if (match != -1) {261 activefont = AllFonts[match].font;262 activescale = (double) size / AllFonts[match].size;263 currentsize = size;264 strcpy (currentname, name);265 return (TRUE);266 } else {267 fprintf (stderr, "no matching font\n");268 return (FALSE);269 }270 271 }272 273 char *GetRotFont (int *size) {274 275 *size = currentsize;276 return (currentname);277 278 }279 280 int RotStrlen (char *c) {281 282 int i, N, dX, code;283 double scale;284 285 scale = activescale;286 287 /* find string length */288 dX = 0;289 290 code = FALSE;291 for (i = 0; i < strlen (c); i++) {292 N = (int)(c[i]);293 /* skip non-printing characters */294 if ((N < 0) || (N >= NROT)) continue;295 296 /* check for special characters */297 if (!code) {298 if (N == 94) { /* super-script */299 scale *= 0.8;300 continue;301 }302 if (N == 95) { /* sub-script */303 scale *= 0.8;304 continue;305 }306 if (N == 124) { /* normal-script */307 scale = activescale;308 continue;309 }310 if (N == 92) { /* backslash */311 code = TRUE;312 continue;313 }314 if (N == 38) { /* font-code */315 i++;316 continue;317 }318 }319 code = FALSE;320 dX += scale*activefont[N].dx + 1;321 }322 return (dX);323 }324 325 /* writes commands to print string at location and angle using326 currently set font and size */327 void PSRotText (FILE *f, int x, int y, char *string, int pos, double angle) {328 329 char *c, *segment, basefont[64];330 int i, N, code;331 int dX, dY, Xoff, Yoff, X, Y, Nseg, NSEG, YoffBase;332 double cs, sn, fscale;333 int basesize;334 335 /* strip off leading whitespace */336 for (c = string; (*c == ' ') || (*c == '\t'); c++);337 if (*c == 0) return;338 339 /* compute string length */340 /* PS fonts are somewhat different scales from bitmap font equivalents */341 fscale = 1.0;342 if (!strcmp (currentname, "times")) fscale = 1.07;343 if (!strcmp (currentname, "courier")) fscale = 1.5;344 if (!strcmp (currentname, "helvetica")) fscale = 0.9;345 if (!strcmp (currentname, "symbol")) fscale = 1.2;346 dX = fscale*RotStrlen (c);347 dY = activefont[65].ascent;348 349 /* apply appropriate offset */350 Xoff = Yoff = 0;351 switch (pos) {352 case 0: Xoff = -dX; Yoff = -dY; break;353 case 1: Xoff = -0.5*dX; Yoff = -dY; break;354 case 2: Xoff = 0; Yoff = -dY; break;355 case 3: Xoff = -dX; Yoff = -0.5*dY; break;356 case 4: Xoff = -0.5*dX; Yoff = -0.5*dY; break;357 case 5: Xoff = 0; Yoff = -0.5*dY; break;358 case 6: Xoff = -dX; Yoff = 0; break;359 case 7: Xoff = -0.5*dX; Yoff = 0; break;360 case 8: Xoff = 0; Yoff = 0; break;361 }362 cs = cos(angle*RAD_DEG);363 sn = sin(angle*RAD_DEG);364 X = x + Xoff*cs + Yoff*sn;365 Y = y - Xoff*sn + Yoff*cs;366 367 basesize = currentsize;368 strcpy (basefont, currentname);369 370 PSSetFont (f, currentsize);371 fprintf (f, "gsave\n");372 fprintf (f, " %d %d moveto %f rotate\n", X, Y, -angle);373 374 Nseg = 0;375 NSEG = strlen(c) + 2;376 ALLOCATE (segment, char, NSEG);377 bzero (segment, NSEG);378 379 code = FALSE;380 YoffBase = 0;381 /* accumulate string segments with common state */382 for (i = 0; i < strlen (c); i++) {383 N = (int)(c[i]);384 if ((N < 0) || (N >= NROT)) continue;385 386 /* check for special characters */387 if (!code) {388 /* superscript character (^) */389 if (N == 94) {390 PSDumpRotSegment (f, segment, &Nseg);391 SetRotFont (currentname, (int)(0.8*currentsize));392 Yoff = 0.75*activescale*dY;393 fprintf (f, "0 %d rmoveto\n", Yoff);394 YoffBase += Yoff;395 PSSetFont (f, currentsize);396 continue;397 }398 /* subscript character (_) */399 if (N == 95) {400 PSDumpRotSegment (f, segment, &Nseg);401 SetRotFont (currentname, (int)(0.8*currentsize));402 Yoff = -0.5*activescale*dY;403 fprintf (f, "0 %d rmoveto\n", Yoff);404 YoffBase += Yoff;405 PSSetFont (f, currentsize);406 continue;407 }408 /* end super/sub script (|) */409 if (N == 124) {410 PSDumpRotSegment (f, segment, &Nseg);411 SetRotFont (currentname, basesize);412 fprintf (f, "0 %d rmoveto\n", -YoffBase);413 YoffBase = 0;414 PSSetFont (f, currentsize);415 continue;416 }417 /* escape char (\) */418 if (N == 92) {419 code = TRUE;420 continue;421 }422 /* begin paren (insert \) */423 if (N == 40) {424 code = FALSE;425 segment[Nseg] = 92;426 Nseg ++;427 CHECK_REALLOCATE (segment, char, NSEG, Nseg, 64);428 }429 /* end paren (insert \) */430 if (N == 41) {431 code = FALSE;432 segment[Nseg] = 92;433 Nseg ++;434 CHECK_REALLOCATE (segment, char, NSEG, Nseg, 64);435 }436 /* font change character (&) */437 if (N == 38) {438 PSDumpRotSegment (f, segment, &Nseg);439 if (c[i+1] == 'h') {440 SetRotFont ("helvetica", currentsize);441 PSSetFont (f, currentsize);442 }443 if (c[i+1] == 't') {444 SetRotFont ("times", currentsize);445 PSSetFont (f, currentsize);446 }447 if (c[i+1] == 'c') {448 SetRotFont ("courier", currentsize);449 PSSetFont (f, currentsize);450 }451 if (c[i+1] == 's') {452 SetRotFont ("symbol", currentsize);453 PSSetFont (f, currentsize);454 }455 i++;456 continue;457 }458 }459 code = FALSE;460 segment[Nseg] = N;461 Nseg ++;462 CHECK_REALLOCATE (segment, char, NSEG, Nseg, 64);463 }464 PSDumpRotSegment (f, segment, &Nseg);465 fprintf (f, "stroke grestore\n");466 free (segment);467 SetRotFont (basefont, basesize);468 }469 470 void PSDumpRotSegment (FILE *f, char *segment, int *Nseg) {471 segment[*Nseg] = 0;472 fprintf (f, "(%s) show\n", segment);473 bzero (segment, *Nseg);474 *Nseg = 0;475 }476 477 void PSSetFont (FILE *f, int size) {478 if (!strcmp (currentname, "times"))479 fprintf (f, "/Times-Roman findfont %d scalefont setfont\n", size);480 if (!strcmp (currentname, "helvetica"))481 fprintf (f, "/Helvetica findfont %d scalefont setfont\n", size);482 if (!strcmp (currentname, "courier"))483 fprintf (f, "/Courier findfont %d scalefont setfont\n", size);484 if (!strcmp (currentname, "symbol"))485 fprintf (f, "/Symbol findfont %d scalefont setfont\n", size);486 }487 488 489 490 /* test cross hair491 fprintf (f, "%d %d %d %d L\n", x-10, y, x+10, y);492 fprintf (f, "%d %d %d %d L\n", x, y-10, x, y+10);493 */ -
trunk/Ohana/src/kapa/graph/PNGit.c
r4769 r5610 2 2 # include <png.h> 3 3 4 int PNGit () {4 int PNGit_old () { 5 5 6 6 FILE *f; … … 35 35 ALLOCATE (rows, png_byte *, dy); 36 36 for (i = 0; i < dy; i++) { 37 ALLOCATE (rows[i], png_byte, 3*dx);37 ALLOCATE (rows[i], png_byte, dx); 38 38 } 39 39 … … 120 120 found = TRUE; 121 121 rows[j][i] = k; 122 /*123 rows[j][3*i+0] = palette[k].red;124 rows[j][3*i+1] = palette[k].green;125 rows[j][3*i+2] = palette[k].blue;126 */127 122 } 128 123 } -
trunk/Ohana/src/kapa/graph/PSFrame.c
r5386 r5610 22 22 if (layout[0].axis[i].areticks) { 23 23 range = layout[0].axis[i].max - layout[0].axis[i].min; 24 25 24 AxisTickScale (&layout[0].axis[i], &major, &minor); 26 25 … … 65 64 66 65 dir = -1; 67 if ((naxis == 0) || (naxis == 1)) dir =1;66 if ((naxis == 0) || (naxis == 1)) dir *= -1; 68 67 dx = dir*size*dfy*n; 69 68 dy = dir*size*dfx*n; … … 75 74 76 75 /* temporarily assume rectilinear axes */ 77 if (naxis == 0) { dx = 0; dy = - (0.8*fontsize + 1); pos = 1; }78 if (naxis == 2) { dx = 0; dy = +(0.8*fontsize + 1); pos = 7; }76 if (naxis == 0) { dx = 0; dy = -dir*(0.8*fontsize + 1); pos = 1; } 77 if (naxis == 2) { dx = 0; dy = -dir*(0.8*fontsize + 1); pos = 7; } 79 78 80 79 if (naxis == 1) { dy = 0; dx = -(0.8*fontsize + 1); pos = 3; } -
trunk/Ohana/src/kapa/include/alphabet.h
r2473 r5610 61 61 }; 62 62 63 /* put these as static in RotFont.c with accessor functions */ 63 64 int Nallfonts; 64 65 FontSet *AllFonts; … … 68 69 char currentname[64]; 69 70 int currentsize; 71 # define NROT 256 -
trunk/Ohana/src/kapa/setup/MakeColormap.c
r4769 r5610 1 1 # include "Ximage.h" 2 # include "bDraw.h" 2 3 3 4 /* this list must match the one in mana/include/package.h, and equiv … … 42 43 } 43 44 45 png_color *MakePNGPalette (int *Npalette) { 46 47 int i; 48 float red, green, blue; 49 png_color *palette; 50 51 ALLOCATE (palette, png_color, NGRAPHCOLORS); 52 53 /* define the palette */ 54 for (i = 0; i < NGRAPHCOLORS; i++) { 55 sscanf (GRAPHCOLORS[i][1], "%f %f %f", &red, &green, &blue); 56 palette[i].red = (0xff * red); 57 palette[i].green = (0xff * green); 58 palette[i].blue = (0xff * blue); 59 } 60 *Npalette = NGRAPHCOLORS; 61 return (palette); 62 } 63 44 64 void MakeColormap (int argc, char **argv) { 45 65 … … 54 74 } 55 75 } 76 77 /* default to black */ 78 bDrawColor GetColorByName (char *name) { 79 80 bDrawColor i; 81 82 for (i = 0; i < NGRAPHCOLORS; i++) { 83 if (!strcasecmp (name, GRAPHCOLORS[i][0])) return (i); 84 } 85 return (0); 86 } 87 88 /* 89 90 kapa objects, bDraw, and png all use the same pallete sequence, defined by 91 GRAPHCOLORS above. the color correspond to a color sequence. 92 93 */
Note:
See TracChangeset
for help on using the changeset viewer.
