void plD_init_plm(PLStream *pls) { PLmDev *dev; U_CHAR c = (U_CHAR) INITIALIZE; dbug_enter("plD_init_plm"); pls->color = 1; /* Is a color device */ pls->dev_fill0 = 1; /* Handle solid fills */ pls->dev_fill1 = 1; /* Handle pattern fills */ /* Initialize family file info */ plFamInit(pls); /* Prompt for a file name if not already set */ plOpenFile(pls); pls->pdfs = pdf_finit(pls->OutFile); /* Allocate and initialize device-specific data */ pls->dev = calloc(1, (size_t) sizeof(PLmDev)); if (pls->dev == NULL) plexit("plD_init_plm: Out of memory."); dev = (PLmDev *) pls->dev; dev->xold = PL_UNDEFINED; dev->yold = PL_UNDEFINED; dev->xmin = 0; dev->xmax = PIXELS_X - 1; dev->ymin = 0; dev->ymax = PIXELS_Y - 1; dev->pxlx = (double) PIXELS_X / (double) LPAGE_X; dev->pxly = (double) PIXELS_Y / (double) LPAGE_Y; plP_setpxl(dev->pxlx, dev->pxly); plP_setphy(dev->xmin, dev->xmax, dev->ymin, dev->ymax); /* Write Metafile header. */ WriteFileHeader(pls); /* Write color map state info */ plD_state_plm(pls, PLSTATE_CMAP0); plD_state_plm(pls, PLSTATE_CMAP1); /* Write initialization command. */ DEBUG_PRINT_LOCATION("before init"); plm_wr( pdf_wr_1byte(pls->pdfs, c) ); }
void plD_init_null(PLStream *pls) { int xmin = 0; int xmax = PIXELS_X - 1; int ymin = 0; int ymax = PIXELS_Y - 1; PLFLT pxlx = (double) PIXELS_X / (double) LPAGE_X; PLFLT pxly = (double) PIXELS_Y / (double) LPAGE_Y; /* Set up device parameters */ plP_setpxl(pxlx, pxly); plP_setphy(xmin, xmax, ymin, ymax); }
void plD_init_vga(PLStream *pls) { int driver; pls->termin = 1; /* is an interactive terminal */ pls->icol0 = 1; pls->width = 1; pls->bytecnt = 0; pls->page = 0; pls->graphx = TEXT_MODE; pls->plbuf_write = 1; if (!pls->colorset) pls->color = 1; /* Set up device parameters */ #ifdef TSENG4 driver =installuserdriver ("TSENG4", Tseng4Mode); errorcode = graphresult(); errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ } #endif bgi_graph(pls); dev->xold = UNDEFINED; dev->yold = UNDEFINED; dev->xmin = 0; dev->xmax = getmaxx(); dev->ymin = 0; dev->ymax = getmaxy(); plP_setpxl(2.5, 2.5); /* Pixels/mm. */ plP_setphy((PLINT) 0, (PLINT) dev->xmax, (PLINT) 0, (PLINT) dev->ymax); }
void plD_init_imp(PLStream *pls) { PLDev *dev; /* Initialize family file info */ plFamInit(pls); /* Prompt for a file name if not already set */ plOpenFile(pls); /* Allocate and initialize device-specific data */ dev = plAllocDev(pls); dev->xold = PL_UNDEFINED; dev->yold = PL_UNDEFINED; dev->xmin = 0; dev->ymin = 0; dev->xmax = IMPX; dev->ymax = IMPY; dev->xlen = dev->xmax - dev->xmin; dev->ylen = dev->ymax - dev->ymin; plP_setpxl((PLFLT) 11.81, (PLFLT) 11.81); plP_setphy(dev->xmin, dev->xmax, dev->ymin, dev->ymax); LineBuff = (short *) malloc(BUFFLENG * sizeof(short)); if (LineBuff == NULL) { plexit("Error in memory alloc in plD_init_imp()."); } fprintf(pls->OutFile, "@Document(Language ImPress, jobheader off)"); fprintf(pls->OutFile, "%c%c", SET_HV_SYSTEM, OPBYTE1); fprintf(pls->OutFile, "%c%c%c", SET_ABS_H, OPWORDH1, OPWORDH2); fprintf(pls->OutFile, "%c%c%c", SET_ABS_V, OPWORDV1, OPWORDV2); fprintf(pls->OutFile, "%c%c", SET_HV_SYSTEM, OPBYTE2); }
void plD_init_xfig(PLStream *pls) { PLDev *dev; plParseDrvOpts(xfig_options); if (text) pls->dev_text = 1; /* want to draw text */ /* Initialize family file info */ plFamInit(pls); /* Prompt for a file name if not already set */ plOpenFile(pls); /* Allocate and initialize device-specific data */ dev = plAllocDev(pls); dev->xold = PL_UNDEFINED; dev->yold = PL_UNDEFINED; dev->xmin = 0; dev->xmax = FIGX; dev->ymin = 0; dev->ymax = FIGY; dev->xscale_dev = DPI/25.4; dev->yscale_dev = DPI/25.4; offset_inc = dev->ymax * (PLINT)dev->yscale_dev; offset = - offset_inc; pls->dev_fill0 = 1; /* Handle solid fills */ if (!pls->colorset) pls->color = 1; /* Is a color device */ plP_setpxl(dev->xscale_dev, dev->xscale_dev); /* dpmm -- dots per mm */ plP_setphy(0, FIGX * dev->xscale_dev, 0, FIGY * dev->yscale_dev); /* physical dimension in mm */ /* Write out header */ fprintf(pls->OutFile, "#FIG 3.2\n"); fprintf(pls->OutFile, "Landscape\n"); fprintf(pls->OutFile, "Center\n"); fprintf(pls->OutFile, "Metric\n"); fprintf(pls->OutFile, "A4\n"); fprintf(pls->OutFile, "100.0\n"); fprintf(pls->OutFile, "Single\n"); fprintf(pls->OutFile, "-2\n"); fprintf(pls->OutFile, "%d 2\n", DPI); /* user defined colors, for colormap0 */ cmap0_ncol = 2 * pls->ncol0; /* allow for a maximum of 2x the default cmap0 entries */ cmap0_pos = ftell(pls->OutFile); stcmap0(pls); /* user defined colors, for colormap1 */ cmap1_ncol = 2 * pls->ncol1; /* allow for a maximum of 2x the default cmap1 entries */ cmap1_pos = ftell(pls->OutFile); stcmap1(pls); bufflen = 2 * BSIZE; buffptr = (short *) malloc(sizeof(short) * bufflen); if (buffptr == NULL) plexit("Out of memory!"); }
void plD_init_ljii(PLStream *pls) { PLDev *dev; /* Initialize family file info */ plFamInit(pls); /* Prompt for a file name if not already set */ plOpenFile(pls); /* Allocate and initialize device-specific data */ dev = plAllocDev(pls); dev->xold = PL_UNDEFINED; dev->yold = PL_UNDEFINED; dev->xmin = 0; dev->ymin = 0; plP_setpxl((PLFLT) 5.905, (PLFLT) 5.905); /* Rotate by 90 degrees since portrait mode addressing is used */ dev->xmin = 0; dev->ymin = 0; dev->xmax = JETY; dev->ymax = JETX; dev->xlen = dev->xmax - dev->xmin; dev->ylen = dev->ymax - dev->ymin; plP_setphy(dev->xmin, dev->xmax, dev->ymin, dev->ymax); /* If portrait mode is specified, then set up an additional rotation * transformation with aspect ratio allowed to adjust via freeaspect. * Default orientation is landscape (ORIENTATION == 3 or 90 deg rotation * counter-clockwise from portrait). (Legacy PLplot used seascape * which was equivalent to ORIENTATION == 1 or 90 deg clockwise rotation * from portrait.) */ if (pls->portrait) { plsdiori((PLFLT)(4 - ORIENTATION)); pls->freeaspect = 1; } /* Allocate storage for bit map matrix */ #ifdef MSDOS if ((bitmap = (char _HUGE *) halloc((long) NBYTES, sizeof(char))) == NULL) plexit("Out of memory in call to calloc"); #else if ((bitmap = (void *) calloc(NBYTES, sizeof(char))) == NULL) plexit("Out of memory in call to calloc"); #endif /* Reset Printer */ fprintf(OF, "%cE", ESC); }
static void ps_init(PLStream *pls) { PSDev *dev; PLFLT pxlx = YPSSIZE/LPAGE_X; PLFLT pxly = XPSSIZE/LPAGE_Y; if (text) { pls->dev_text = 1; /* want to draw text */ pls->dev_unicode = 1; /* want unicode */ if(hrshsym) pls->dev_hrshsym = 1; /* want Hershey symbols */ } pls->dev_fill0 = 1; /* Can do solid fills */ /* Initialize family file info */ plFamInit(pls); /* Prompt for a file name if not already set */ plOpenFile(pls); /* Allocate and initialize device-specific data */ if (pls->dev != NULL) free((void *) pls->dev); pls->dev = calloc(1, (size_t) sizeof(PSDev)); if (pls->dev == NULL) plexit("ps_init: Out of memory."); dev = (PSDev *) pls->dev; dev->xold = PL_UNDEFINED; dev->yold = PL_UNDEFINED; plP_setpxl(pxlx, pxly); dev->llx = XPSSIZE; dev->lly = YPSSIZE; dev->urx = 0; dev->ury = 0; dev->ptcnt = 0; /* Rotate by 90 degrees since portrait mode addressing is used */ dev->xmin = 0; dev->ymin = 0; dev->xmax = PSY; dev->ymax = PSX; dev->xlen = dev->xmax - dev->xmin; dev->ylen = dev->ymax - dev->ymin; plP_setphy(dev->xmin, dev->xmax, dev->ymin, dev->ymax); /* If portrait mode is specified, then set up an additional rotation * transformation with aspect ratio allowed to adjust via freeaspect. * Default orientation is landscape (ORIENTATION == 3 or 90 deg rotation * counter-clockwise from portrait). (Legacy PLplot used seascape * which was equivalent to ORIENTATION == 1 or 90 deg clockwise rotation * from portrait.) */ if (pls->portrait) { plsdiori((PLFLT)(4 - ORIENTATION)); pls->freeaspect = 1; } /* Header comments into PostScript file */ fprintf(OF, "%%!PS-Adobe-2.0 EPSF-2.0\n"); fprintf(OF, "%%%%BoundingBox: \n"); fprintf(OF, "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"); fprintf(OF, "%%%%Title: PLplot Graph\n"); fprintf(OF, "%%%%Creator: PLplot Version %s\n", VERSION); fprintf(OF, "%%%%CreationDate: %s\n", ps_getdate()); fprintf(OF, "%%%%Pages: (atend)\n"); fprintf(OF, "%%%%EndComments\n\n"); /* Definitions */ /* Save VM state */ fprintf(OF, "/PSSave save def\n"); /* Define a dictionary and start using it */ fprintf(OF, "/PSDict 200 dict def\n"); fprintf(OF, "PSDict begin\n"); fprintf(OF, "/@restore /restore load def\n"); fprintf(OF, "/restore\n"); fprintf(OF, " {vmstatus pop\n"); fprintf(OF, " dup @VMused lt {pop @VMused} if\n"); fprintf(OF, " exch pop exch @restore /@VMused exch def\n"); fprintf(OF, " } def\n"); fprintf(OF, "/@pri\n"); fprintf(OF, " {\n"); fprintf(OF, " ( ) print\n"); fprintf(OF, " ( ) cvs print\n"); fprintf(OF, " } def\n"); /* n @copies - */ fprintf(OF, "/@copies\n"); fprintf(OF, " {\n"); fprintf(OF, " /#copies exch def\n"); fprintf(OF, " } def\n"); /* - @start - -- start everything */ fprintf(OF, "/@start\n"); fprintf(OF, " {\n"); fprintf(OF, " vmstatus pop /@VMused exch def pop\n"); fprintf(OF, " } def\n"); /* - @end - -- finished */ fprintf(OF, "/@end\n"); fprintf(OF, " {flush\n"); fprintf(OF, " end\n"); fprintf(OF, " PSSave restore\n"); fprintf(OF, " } def\n"); /* bop - -- begin a new page */ /* Only fill background if we are using color and if the bg isn't white */ fprintf(OF, "/bop\n"); fprintf(OF, " {\n"); fprintf(OF, " /SaveImage save def\n"); fprintf(OF, " } def\n"); /* - eop - -- end a page */ fprintf(OF, "/eop\n"); fprintf(OF, " {\n"); fprintf(OF, " showpage\n"); fprintf(OF, " SaveImage restore\n"); fprintf(OF, " } def\n"); /* Set line parameters */ fprintf(OF, "/@line\n"); fprintf(OF, " {0 setlinecap\n"); fprintf(OF, " 0 setlinejoin\n"); fprintf(OF, " 1 setmiterlimit\n"); fprintf(OF, " } def\n"); /* d @hsize - horizontal clipping dimension */ fprintf(OF, "/@hsize {/hs exch def} def\n"); fprintf(OF, "/@vsize {/vs exch def} def\n"); /* d @hoffset - shift for the plots */ fprintf(OF, "/@hoffset {/ho exch def} def\n"); fprintf(OF, "/@voffset {/vo exch def} def\n"); /* Set line width */ fprintf(OF, "/lw %d def\n", (int) ( (pls->width < MIN_WIDTH) ? DEF_WIDTH : (pls->width > MAX_WIDTH) ? MAX_WIDTH : pls->width)); /* Setup user specified offsets, scales, sizes for clipping */ fprintf(OF, "/@SetPlot\n"); fprintf(OF, " {\n"); fprintf(OF, " ho vo translate\n"); fprintf(OF, " XScale YScale scale\n"); fprintf(OF, " lw setlinewidth\n"); fprintf(OF, " } def\n"); /* Setup x & y scales */ fprintf(OF, "/XScale\n"); fprintf(OF, " {hs %d div} def\n", YPSSIZE); fprintf(OF, "/YScale\n"); fprintf(OF, " {vs %d div} def\n", XPSSIZE); /* Macro definitions of common instructions, to keep output small */ fprintf(OF, "/M {moveto} def\n"); fprintf(OF, "/D {lineto} def\n"); fprintf(OF, "/A {0.5 0 360 arc} def\n"); fprintf(OF, "/S {stroke} def\n"); fprintf(OF, "/Z {stroke newpath} def\n"); fprintf(OF, "/F {fill} def\n"); fprintf(OF, "/C {setrgbcolor} def\n"); fprintf(OF, "/G {setgray} def\n"); fprintf(OF, "/W {setlinewidth} def\n"); fprintf(OF, "/SF {selectfont} def\n"); fprintf(OF, "/R {rotate} def\n"); fprintf(OF, "/SW {stringwidth 2 index mul exch 2 index mul exch rmoveto pop} bind def\n"); fprintf(OF, "/B {Z %d %d M %d %d D %d %d D %d %d D %d %d closepath} def\n", XMIN, YMIN, XMIN, YMAX, XMAX, YMAX, XMAX, YMIN, XMIN, YMIN); fprintf(OF, "/CL {newpath M D D D closepath clip} def\n"); /* End of dictionary definition */ fprintf(OF, "end\n\n"); /* Set up the plots */ fprintf(OF, "PSDict begin\n"); fprintf(OF, "@start\n"); fprintf(OF, "%d @copies\n", COPIES); fprintf(OF, "@line\n"); fprintf(OF, "%d @hsize\n", YSIZE); fprintf(OF, "%d @vsize\n", XSIZE); fprintf(OF, "%d @hoffset\n", YOFFSET); fprintf(OF, "%d @voffset\n", XOFFSET); fprintf(OF, "@SetPlot\n\n"); }
void plD_init_win3(PLStream *pls) { HWND hwndMain; WNDCLASS wndclass; HINSTANCE hInstance; WinDev *dev; int greyvalue; char *ptitle; //long backGroundColor; /* Initial window position */ int xPos = 100; int yPos = 100; /* Initial window size */ int nWidth = 720; int nHeight = 540; int xmin = 0; int xmax = PIXELS_X-1; int ymin = 0; int ymax = PIXELS_Y-1; color = 1; hwnd = 0; pls->color = 1; /* Is a color device */ plParseDrvOpts(win3_options); if (!color) pls->color = 0; /* But user does not want color */ /* Set up device parameters */ pls->termin = 1; /* is an interactive terminal */ pls->icol0 = 1; /* current color */ pls->width = 1; /* current pen width */ pls->bytecnt = 0; pls->page = 0; if (buffered) pls->plbuf_write = 1; /* buffer the output */ else pls->plbuf_write = 0; pls->dev_flush = 1; /* flush as we like */ pls->dev_fill0 = 1; pls->dev_fastimg = 1; /* is a fast image device */ pls->dev_xor = 1; /* device support xor mode */ if (pls->dev != NULL) delete pls->dev; pls->dev = new WinDev; assert(pls->dev != NULL); dev = (WinDev *) pls->dev; dev->nextPlot = 0; dev->write_to_window = 1; dev->write_to_pixmap = 0; dev->PenColor=RGB(pls->cmap0[0].r,pls->cmap0[0].g,pls->cmap0[0].b); dev->PenWidth=0; dev->hPen = CreatePen(PS_SOLID,dev->PenWidth,dev->PenColor); dev->hPenOld = (HPEN)SelectObject(dev->hdc,dev->hPen); dev->hbr = CreateSolidBrush(RGB(pls->cmap0[0].r,pls->cmap0[0].g,pls->cmap0[0].b)); dev->hbrOld = (HBRUSH)SelectObject(dev->hdc,dev->hbr); dev->hMenu = NULL; dev->isDead = FALSE; if (pls->color) { dev->backGroundColor = RGB(pls->cmap0[0].r,pls->cmap0[0].g,pls->cmap0[0].b); } else { greyvalue = (pls->cmap0[0].r+pls->cmap0[0].g+pls->cmap0[0].b)/3; dev->backGroundColor = RGB(greyvalue,greyvalue,greyvalue); } if (!hwnd) { /* Window created by the driver */ dev->externalWindow = 0; hInstance = GetModuleHandle(NULL); wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_SAVEBITS; wndclass.lpfnWndProc = ::PlPlotWndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = sizeof(pls); wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(hInstance,"PLICON"); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (struct HBRUSH__ *)CreateSolidBrush(dev->backGroundColor); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szPlPlotClass; RegisterClass (&wndclass); ptitle = (char *) &szPlPlotWName[0] ; if ( pls->plwindow ) ptitle = pls->plwindow ; dev->hwnd = CreateWindow(szPlPlotClass,ptitle, WS_OVERLAPPEDWINDOW, xPos,yPos,nWidth,nHeight, NULL,dev->hMenu, hInstance,NULL); SetWindowLong(dev->hwnd,GWL_USERDATA,(long)pls); ShowWindow(dev->hwnd,SW_SHOWDEFAULT); SetForegroundWindow(dev->hwnd); } else { /* Window provided externally */ dev->hwnd = (HWND)hwnd; dev->externalWindow = 1; } dev->hdc = GetDC(dev->hwnd); SetPolyFillMode(dev->hdc,WINDING); plP_setpxl(xmax/150.0/nWidth*nHeight,ymax/150.0); plP_setphy(xmin,xmax,ymin,ymax); if (pls->db) { // create a compatible device context dev->db_hdc = CreateCompatibleDC(dev->hdc); dev->db_bmp = CreateCompatibleBitmap(dev->hdc, nWidth,nHeight); SelectObject(dev->db_hdc, dev->db_bmp); dev->hdc=dev->db_hdc; } }
/*-------------------------------------------------------------------------- * void common_init( PLStream *pls ) * * Basic initialization for all devices. *--------------------------------------------------------------------------*/ wxPLDevBase* common_init( PLStream *pls ) { // Log_Verbose( "common_init()" ); wxPLDevBase* dev; /* default options */ static PLINT freetype=-1; static PLINT smooth_text=1; static PLINT text=-1; static PLINT hrshsym = 0; /* default backend uses wxGraphicsContext, if not available the agg library will be used, if not available the basic backend will be used. */ static PLINT backend=wxBACKEND_DC; #if wxUSE_GRAPHICS_CONTEXT backend=wxBACKEND_GC; #else #ifdef HAVE_AGG backend=wxBACKEND_AGG; #endif #endif DrvOpt wx_options[] = { #ifdef HAVE_FREETYPE {"freetype", DRV_INT, &freetype, "Use FreeType library"}, {"smooth", DRV_INT, &smooth_text, "Turn text smoothing on (1) or off (0)"}, #endif {"hrshsym", DRV_INT, &hrshsym, "Use Hershey symbol set (hrshsym=0|1)"}, {"backend", DRV_INT, &backend, "Choose backend: (0) standard, (1) using AGG library, (2) using wxGraphicsContext"}, {"text", DRV_INT, &text, "Use own text routines (text=0|1)"}, {NULL, DRV_INT, NULL, NULL} }; /* Check for and set up driver options */ plParseDrvOpts( wx_options ); /* allocate memory for the device storage */ switch( backend ) { case wxBACKEND_GC: /* in case wxGraphicsContext isn't available, the next backend (agg if available) in this list will be used */ #if wxUSE_GRAPHICS_CONTEXT dev = new wxPLDevGC; /* by default the own text routines are used for wxGC */ if(text==-1) text=1; freetype = 0; /* this backend is vector oriented and doesn't know pixels */ break; #endif case wxBACKEND_AGG: /* in case the agg library isn't available, the standard backend will be used */ #ifdef HAVE_AGG dev = new wxPLDevAGG; /* by default the freetype text routines are used for wxAGG */ text = 0; /* text processing doesn't work yet for the AGG backend */ if(freetype==-1) freetype=1; break; #endif default: dev = new wxPLDevDC; /* by default the own text routines are used for wxDC */ if(text==-1) if(freetype!=1) text=1; else text=0; if(freetype==-1) freetype=0; break; } if( dev == NULL) { plexit( "Insufficient memory" ); } pls->dev = (void*)dev; /* be verbose and write out debug messages */ #ifdef _DEBUG pls->verbose = 1; pls->debug = 1; #else pls->verbose = 0; pls->debug = 0; #endif pls->color = 1; /* Is a color device */ pls->dev_fill0 = 1; /* Can handle solid fills */ pls->dev_fill1 = 0; /* Can't handle pattern fills */ pls->dev_dash = 0; pls->dev_clear = 1; /* driver supports clear */ if( text ) { pls->dev_text = 1; /* want to draw text */ pls->dev_unicode = 1; /* want unicode */ if( hrshsym ) pls->dev_hrshsym = 1; } #ifdef HAVE_FREETYPE /* own text routines have higher priority over freetype if text and freetype option are set to 1 */ if( !text) { dev->smooth_text=smooth_text; dev->freetype=freetype; } if( dev->freetype ) { pls->dev_text = 1; /* want to draw text */ pls->dev_unicode = 1; /* want unicode */ if( hrshsym ) pls->dev_hrshsym = 1; init_freetype_lv1( pls ); FT_Data* FT=(FT_Data *)pls->FT; FT->want_smooth_text=smooth_text; } #endif /* initialize frame size and position */ if( pls->xlength <= 0 || pls->ylength <=0 ) plspage( 0.0, 0.0, (PLINT)(CANVAS_WIDTH*DEVICE_PIXELS_PER_IN), (PLINT)(CANVAS_HEIGHT*DEVICE_PIXELS_PER_IN), 0, 0 ); dev->width=pls->xlength; dev->height=pls->ylength; dev->clipminx=pls->xlength; dev->clipminy=pls->ylength; if( pls->xoffset!=0 || pls->yoffset!=0) { dev->xpos = (int)(pls->xoffset); dev->ypos = (int)(pls->yoffset); } /* If portrait mode, apply a rotation and set freeaspect */ if( pls->portrait ) { plsdiori( (PLFLT)(4 - ORIENTATION) ); pls->freeaspect = 1; } /* Set the number of pixels per mm */ plP_setpxl( (PLFLT)VIRTUAL_PIXELS_PER_MM, (PLFLT)VIRTUAL_PIXELS_PER_MM ); /* Set up physical limits of plotting device (in drawing units) */ plP_setphy( (PLINT)0, (PLINT)(CANVAS_WIDTH*VIRTUAL_PIXELS_PER_IN), (PLINT)0, (PLINT)(CANVAS_HEIGHT*VIRTUAL_PIXELS_PER_IN) ); /* get physical device limits coordinates */ plP_gphy( &dev->xmin, &dev->xmax, &dev->ymin, &dev->ymax ); /* setting scale factors */ dev->scalex=(PLFLT)(dev->xmax-dev->xmin)/(dev->width); dev->scaley=(PLFLT)(dev->ymax-dev->ymin)/(dev->height); /* set dpi */ plspage(VIRTUAL_PIXELS_PER_IN/dev->scalex, VIRTUAL_PIXELS_PER_IN/dev->scaley, 0, 0, 0, 0); #ifdef HAVE_FREETYPE if( dev->freetype ) init_freetype_lv2( pls ); #endif /* find out what file drivers are available */ plgFileDevs( &dev->devDesc, &dev->devName, &dev->ndev ); return dev; }
void plD_init_gif(PLStream *pls) { png_Dev *dev=NULL; pls->termin = 0; /* Not an interactive device */ pls->icol0 = 1; pls->bytecnt = 0; pls->page = 0; pls->dev_fill0 = 1; /* Can do solid fills */ pls->family = 1; /* pmr: allow multiple pages. */ if (!pls->colorset) pls->color = 1; /* Is a color device */ /* Initialize family file info */ plFamInit(pls); /* Prompt for a file name if not already set */ plOpenFile(pls); /* Allocate and initialize device-specific data */ plD_init_gif_Dev(pls); dev=(png_Dev *)pls->dev; if (pls->xlength <= 0 || pls->ylength <=0) { /* use default width, height of 800x600 if not specifed by -geometry option * or plspage */ plspage(0., 0., 800, 600, 0, 0); } pls->graphx = GRAPHICS_MODE; dev->pngx = pls->xlength - 1; /* should I use -1 or not??? */ dev->pngy = pls->ylength - 1; #ifdef use_experimental_hidden_line_hack if (dev->pngx>dev->pngy) /* Work out the scaling factor for the */ { /* "virtual" (oversized) page */ dev->scale=PIXELS_X/dev->pngx; } else { dev->scale=PIXELS_Y/dev->pngy; } #else dev->scale=1; #endif if (pls->xdpi<=0) { /* This corresponds to a typical monitor resolution of 4 pixels/mm. */ plspage(4.*25.4, 4.*25.4, 0, 0, 0, 0); } else { pls->ydpi=pls->xdpi; /* Set X and Y dpi's to the same value */ } /* Convert DPI to pixels/mm */ plP_setpxl(dev->scale*pls->xdpi/25.4,dev->scale*pls->ydpi/25.4); plP_setphy(0, dev->scale*dev->pngx, 0, dev->scale*dev->pngy); #ifdef HAVE_FREETYPE if (pls->dev_text) { init_freetype_lv2(pls); } #endif }
static void tek_init(PLStream *pls) { TekDev *dev; int xmin = 0; int xmax = TEKX; int ymin = 0; int ymax = TEKY; PLFLT pxlx = 4.771; PLFLT pxly = 4.653; pls->graphx = TEXT_MODE; /* Allocate and initialize device-specific data */ pls->dev = calloc(1, (size_t) sizeof(TekDev)); if (pls->dev == NULL) plexit("tek_init: Out of memory."); dev = (TekDev *) pls->dev; dev->curcolor = 1; dev->xold = PL_UNDEFINED; dev->yold = PL_UNDEFINED; plP_setpxl(pxlx, pxly); plP_setphy(xmin, xmax, ymin, ymax); /* Terminal/file initialization */ if (pls->termin) { pls->OutFile = stdout; tty_setup(); } else { plFamInit(pls); plOpenFile(pls); } switch (pls->dev_minor) { #ifdef PLD_tek4107 case tek4107: pls->graphx = GRAPHICS_MODE; fprintf(pls->OutFile, "\033%%!0"); /* set tek mode */ fprintf(pls->OutFile, "\033KN1"); /* clear the view */ fprintf(pls->OutFile, "\033LZ"); /* clear dialog buffer */ fprintf(pls->OutFile, "\033ML1"); /* set default color */ break; #endif /* PLD_tek4107 */ /* A sneaky hack: VLT sometimes has leftover panel information, causing * garbage at the beginning of a sequence of color fills. Since * there is no clear panel command, instead I set the fill color to the * same as background and issue an end panel command. */ #ifdef PLD_vlt case vlt:{ char fillcol[4]; tek_graph(pls); encode_int(fillcol, 0); fprintf(pls->OutFile, "\033MP%s\033LE", fillcol); break; } #endif /* PLD_vlt */ default: tek_graph(pls); } /* Initialize palette */ if ( pls->color & 0x01 ) { printf("\033TM111"); /* Switch to RGB colors */ setcmap(pls); } /* Finish initialization */ fprintf(pls->OutFile, VECTOR_MODE); /* Enter vector mode */ if (pls->termin) fprintf(pls->OutFile, CLEAR_VIEW);/* erase and home */ fflush(pls->OutFile); }
void plD_init_ntk(PLStream *pls) { pls->dev_fill0 = 1; /* Handle solid fills */ pls->dev_fill1 = 1; /* Dont handle pattern fills */ pls->color = 1; /* Is a color device */ pls->dev_dash = 1; /* Handle dashed lines */ pls->plbuf_write = 1; /* Use plot buffer */ strcpy(curcolor, "black"); /* default color by name, not #rrggbb */ if (pls->server_name != NULL) { local = 0; strcpy(rem_interp, pls->server_name); } if (pls->geometry != NULL) sscanf(pls->geometry, "%dx%d", &xmax, &ymax); if (pls->plwindow != NULL) strcpy(base, pls->plwindow); else strcpy(base,".plf"); /* default frame containing the canvas */ interp = Tcl_CreateInterp(); if (Tcl_Init(interp) != TCL_OK) plexit("Unable to initialize Tcl."); if (Tk_Init( interp )) plexit("Unable to initialize Tk."); mainw = Tk_MainWindow(interp); Tcl_Eval(interp, "rename exec {}"); Tcl_Eval(interp, "tk appname PLplot_ntk"); /* give interpreter a name */ if (!local) { Tcl_Eval(interp, "wm withdraw ."); sprintf(cmd, "send %s \"set client [tk appname]; wm deiconify .\"", rem_interp); if (Tcl_Eval(interp, cmd) != TCL_OK) { fprintf(stderr,"%s\n", interp->result); plexit("No such tk server."); } } sprintf(cmd, "set scroll_use 0; set plf %s; set vs $plf.f2.vscroll; set hs $plf.f2.hscroll; set xmax %d; set ymax %d; set ocanvas .;", base, xmax, ymax); tk_cmd(cmd); tk_cmd("catch \"frame $plf\"; pack $plf -fill both -expand 1"); sprintf(cmd, "frame $plf.f1;\n" "frame $plf.f2 -width %d -height %d;\n" "pack $plf.f1 -fill x;\n" "pack $plf.f2 -fill both -expand 1", xmax, ymax); tk_cmd(cmd); tk_cmd("scrollbar $plf.f2.hscroll -orient horiz;\n" "scrollbar $plf.f2.vscroll"); tk_cmd("menubutton $plf.f1.mb -text \"Page 1\" -textvariable dname -relief raised -indicatoron 1 -menu $plf.f1.mb.menu;\n" "menu $plf.f1.mb.menu -tearoff 0;\n" "pack $plf.f1.mb -side left"); if (local) tk_cmd("button $plf.f1.quit -text Quit -command exit;\n" "pack $plf.f1.quit -side right"); else tk_cmd("button $plf.f1.quit -text Quit -command {send -async $client exit;\n" "destroy $plf;\n" "wm withdraw .};\n" "pack $plf.f1.quit -side right"); /* FIXME: I just discovered that Tcl_Eval is slower than Tcl_EvalObj. Fix it global-wide, `man Tcl_Eval' */ /* Set up device parameters */ Tcl_Eval(interp, "tk scaling"); /* pixels per mm */ ppm = (PLFLT) atof(interp->result)/(25.4/72.); plP_setpxl(ppm, ppm); plP_setphy(xmin, xmax*scale, ymin, ymax*scale); }