//-------------------------------------------------------------------------- // PLINT wxPLDevDC::GetPixel( short x, short y ) // // Get color information from pixel @ (x,y). //-------------------------------------------------------------------------- PLINT wxPLDevDC::GetPixel( short x, short y ) { #ifdef __WXGTK__ // The GetPixel method is incredible slow for wxGTK. Therefore we set the colour // always to the background color, since this is the case anyway 99% of the time. PLINT bgr, bgg, bgb; // red, green, blue (void) x; (void) y; // Cast to void to silence compiler warnings about unused parameters plgcolbg( &bgr, &bgg, &bgb ); // get background color information return RGB( bgr, bgg, bgb ); #else wxColour col; m_dc->GetPixel( x, y, &col ); return RGB( col.Red(), col.Green(), col.Blue() ); #endif }
/*-------------------------------------------------------------------------- * void plD_bop_wxwidgets( PLStream *pls ) * * Begin of page. Before any plot command, this function is called, If we * have already a dc the background is cleared in background color and some * state calls are resent - this is because at the first call of this * function, a dc does most likely not exist, but state calls are recorded * and when a new dc is created this function is called again. *--------------------------------------------------------------------------*/ void plD_bop_wxwidgets( PLStream *pls ) { // Log_Verbose( "plD_bop_wxwidgets()" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; if( dev->ready ) { /*if( pls->termin==0 ) { plGetFam( pls );*/ /* force new file if pls->family set for all subsequent calls to plGetFam n.b. putting this after plGetFam call is important since plinit calls bop, and you don't want the familying sequence started until after that first call to bop.*/ /* n.b. pls->dev can change because of an indirect call to plD_init_png from plGetFam if familying is enabled. Thus, wait to define dev until now. */ /*dev = (wxPLDevBase*)pls->dev; pls->famadv = 1; pls->page++; }*/ /* clear background */ PLINT bgr, bgg, bgb; /* red, green, blue */ plgcolbg( &bgr, &bgg, &bgb); /* get background color information */ dev->ClearBackground( bgr, bgg, bgb ); /* Replay escape calls that come in before PLESC_DEVINIT. All of them * required a DC that didn't exist yet. */ if( dev->plstate_width ) plD_state_wxwidgets( pls, PLSTATE_WIDTH ); dev->plstate_width = false; if( dev->plstate_color0 ) plD_state_wxwidgets( pls, PLSTATE_COLOR0 ); dev->plstate_color0 = false; if( dev->plstate_color1 ) plD_state_wxwidgets( pls, PLSTATE_COLOR1 ); dev->plstate_color1 = false; /* why this? xwin driver has this */ /* pls->page++; */ } }
/*--------------------------------------------------------------------------*\ * void wx_set_size( PLStream* pls, int width, int height ) * * Adds a dc to the stream. The associated device is attached to the canvas * as the property "dev". \*--------------------------------------------------------------------------*/ void wx_set_size( PLStream* pls, int width, int height ) { /* TODO: buffer must be resized here or in wxplotstream */ // Log_Verbose( "wx_set_size()" ); wxPLDevBase* dev = (wxPLDevBase*)pls->dev; /* set new size and scale parameters */ dev->width = width; dev->height = height; dev->scalex=(PLFLT)(dev->xmax-dev->xmin)/dev->width; dev->scaley=(PLFLT)(dev->ymax-dev->ymin)/dev->height; /* recalculate the dpi used in calculation of fontsize */ pls->xdpi = VIRTUAL_PIXELS_PER_IN/dev->scalex; pls->ydpi = VIRTUAL_PIXELS_PER_IN/dev->scaley; /* clear background if we have a dc, since it's invalid (TODO: why, since in bop it must be cleared anyway?) */ if( dev->ready ) { PLINT bgr, bgg, bgb; /* red, green, blue */ plgcolbg( &bgr, &bgg, &bgb); /* get background color information */ dev->CreateCanvas(); dev->ClearBackground( bgr, bgg, bgb ); } /* freetype parameters must also be changed */ #ifdef HAVE_FREETYPE if( dev->freetype ) { FT_Data *FT=(FT_Data *)pls->FT; FT->scalex=dev->scalex; FT->scaley=dev->scaley; FT->ymax=dev->height; } #endif }
int main( int argc, char *argv[] ) { PLFLT xmin0, xmax0, ymin0, ymax0, zxmin0, zxmax0, zymin0, zymax0; PLFLT xmin, xmax, ymin, ymax, zxmin, zxmax, zymin, zymax; PLFLT xmid, ymid, wx, wy; PLFLT mar0, aspect0, jx0, jy0, ori0; PLFLT mar, aspect, jx, jy, ori; PLINT win, level2, digmax, digits, compression1, compression2; PLFLT xp0, yp0; PLINT xleng0, yleng0, xoff0, yoff0; PLFLT xp1, yp1; PLINT xleng1, yleng1, xoff1, yoff1; PLFLT xp2, yp2; PLINT xleng2, yleng2, xoff2, yoff2; PLINT fam0, num0, bmax0; PLINT fam1, num1, bmax1; PLINT fam2, num2, bmax2; PLINT r0, g0, b0; PLFLT a0; PLINT r, g, b; PLFLT a; PLINT r1[] = { 0, 255 }; PLINT g1[] = { 255, 0 }; PLINT b1[] = { 0, 0 }; PLFLT a1[] = { 1.0, 1.0 }; int status; char fnam[256]; // Parse and process command line arguments status = 0; (void) plparseopts( &argc, argv, PL_PARSE_FULL ); // Test setting / getting familying parameters before plinit // Save values set by plparseopts to be restored later. plgfam( &fam0, &num0, &bmax0 ); fam1 = 0; num1 = 10; bmax1 = 1000; plsfam( fam1, num1, bmax1 ); // Retrieve the same values? plgfam( &fam2, &num2, &bmax2 ); printf( "family parameters: fam, num, bmax = %d %d %d\n", fam2, num2, bmax2 ); if ( fam2 != fam1 || num2 != num1 || bmax2 != bmax1 ) { fputs( "plgfam test failed\n", stderr ); status = 1; } // Restore values set initially by plparseopts. plsfam( fam0, num0, bmax0 ); // Test setting / getting page parameters before plinit // Save values set by plparseopts to be restored later. plgpage( &xp0, &yp0, &xleng0, &yleng0, &xoff0, &yoff0 ); xp1 = 200.; yp1 = 200.; xleng1 = 400; yleng1 = 200; xoff1 = 10; yoff1 = 20; plspage( xp1, yp1, xleng1, yleng1, xoff1, yoff1 ); // Retrieve the same values? plgpage( &xp2, &yp2, &xleng2, &yleng2, &xoff2, &yoff2 ); printf( "page parameters: xp, yp, xleng, yleng, xoff, yoff = %f %f %d %d %d %d\n", xp2, yp2, xleng2, yleng2, xoff2, yoff2 ); if ( xp2 != xp1 || yp2 != yp1 || xleng2 != xleng1 || yleng2 != yleng1 || xoff2 != xoff1 || yoff2 != yoff1 ) { fputs( "plgpage test failed\n", stderr ); status = 1; } // Restore values set initially by plparseopts. plspage( xp0, yp0, xleng0, yleng0, xoff0, yoff0 ); // Test setting / getting compression parameter across plinit. compression1 = 95; plscompression( compression1 ); // Initialize plplot plinit(); // Test if device initialization screwed around with the preset // compression parameter. plgcompression( &compression2 ); printf( "Output various PLplot parameters\n" ); printf( "compression parameter = %d\n", compression2 ); if ( compression2 != compression1 ) { fputs( "plgcompression test failed\n", stderr ); status = 1; } // Exercise plscolor, plscol0, plscmap1, and plscmap1a to make sure // they work without any obvious error messages. plscolor( 1 ); plscol0( 1, 255, 0, 0 ); plscmap1( r1, g1, b1, 2 ); plscmap1a( r1, g1, b1, a1, 2 ); plglevel( &level2 ); printf( "level parameter = %d\n", level2 ); if ( level2 != 1 ) { fputs( "plglevel test failed.\n", stderr ); status = 1; } pladv( 0 ); xmin0 = 0.01; xmax0 = 0.99; ymin0 = 0.02; ymax0 = 0.49; plvpor( xmin0, xmax0, ymin0, ymax0 ); plgvpd( &xmin, &xmax, &ymin, &ymax ); printf( "plvpor: xmin, xmax, ymin, ymax = %f %f %f %f\n", xmin, xmax, ymin, ymax ); if ( xmin != xmin0 || xmax != xmax0 || ymin != ymin0 || ymax != ymax0 ) { fputs( "plgvpd test failed\n", stderr ); status = 1; } xmid = 0.5 * ( xmin + xmax ); ymid = 0.5 * ( ymin + ymax ); xmin0 = 0.2; xmax0 = 0.3; ymin0 = 0.4; ymax0 = 0.5; plwind( xmin0, xmax0, ymin0, ymax0 ); plgvpw( &xmin, &xmax, &ymin, &ymax ); printf( "plwind: xmin, xmax, ymin, ymax = %f %f %f %f\n", xmin, xmax, ymin, ymax ); if ( xmin != xmin0 || xmax != xmax0 || ymin != ymin0 || ymax != ymax0 ) { fputs( "plgvpw test failed\n", stderr ); status = 1; } // Get world coordinates for middle of viewport plcalc_world( xmid, ymid, &wx, &wy, &win ); printf( "world parameters: wx, wy, win = %f %f %d\n", wx, wy, win ); if ( fabs( wx - 0.5 * ( xmin + xmax ) ) > 1.0E-5 || fabs( wy - 0.5 * ( ymin + ymax ) ) > 1.0E-5 ) { fputs( "plcalc_world test failed\n", stderr ); status = 1; } // Retrieve and print the name of the output file (if any). // This goes to stderr not stdout since it will vary between tests and // we want stdout to be identical for compare test. plgfnam( fnam ); if ( fnam[0] == '\0' ) { printf( "No output file name is set\n" ); } else { printf( "Output file name read\n" ); } fprintf( stderr, "Output file name is %s\n", fnam ); // Set and get the number of digits used to display axis labels // Note digits is currently ignored in pls[xyz]ax and // therefore it does not make sense to test the returned // value plsxax( 3, 0 ); plgxax( &digmax, &digits ); printf( "x axis parameters: digmax, digits = %d %d\n", digmax, digits ); if ( digmax != 3 ) { fputs( "plgxax test failed\n", stderr ); status = 1; } plsyax( 4, 0 ); plgyax( &digmax, &digits ); printf( "y axis parameters: digmax, digits = %d %d\n", digmax, digits ); if ( digmax != 4 ) { fputs( "plgyax test failed\n", stderr ); status = 1; } plszax( 5, 0 ); plgzax( &digmax, &digits ); printf( "z axis parameters: digmax, digits = %d %d\n", digmax, digits ); if ( digmax != 5 ) { fputs( "plgzax test failed\n", stderr ); status = 1; } mar0 = 0.05; aspect0 = PL_NOTSET; jx0 = 0.1; jy0 = 0.2; plsdidev( mar0, aspect0, jx0, jy0 ); plgdidev( &mar, &aspect, &jx, &jy ); printf( "device-space window parameters: mar, aspect, jx, jy = %f %f %f %f\n", mar, aspect, jx, jy ); if ( mar != mar0 || jx != jx0 || jy != jy0 ) { fputs( "plgdidev test failed\n", stderr ); status = 1; } ori0 = 1.0; plsdiori( ori0 ); plgdiori( &ori ); printf( "ori parameter = %f\n", ori ); if ( ori != ori0 ) { fputs( "plgdiori test failed\n", stderr ); status = 1; } xmin0 = 0.1; ymin0 = 0.2; xmax0 = 0.9; ymax0 = 0.8; plsdiplt( xmin0, ymin0, xmax0, ymax0 ); plgdiplt( &xmin, &ymin, &xmax, &ymax ); printf( "plot-space window parameters: xmin, ymin, xmax, ymax = %f %f %f %f\n", xmin, ymin, xmax, ymax ); if ( xmin != xmin0 || ymin != ymin0 || xmax != xmax0 || ymax != ymax0 ) { fputs( "plgdiplt test failed\n", stderr ); status = 1; } zxmin0 = 0.1; zymin0 = 0.1; zxmax0 = 0.9; zymax0 = 0.9; plsdiplz( zxmin0, zymin0, zxmax0, zymax0 ); plgdiplt( &zxmin, &zymin, &zxmax, &zymax ); printf( "zoomed plot-space window parameters: xmin, ymin, xmax, ymax = %f %f %f %f\n", zxmin, zymin, zxmax, zymax ); if ( fabs( zxmin - ( xmin + ( xmax - xmin ) * zxmin0 ) ) > 1.0E-5 || fabs( zymin - ( ymin + ( ymax - ymin ) * zymin0 ) ) > 1.0E-5 || fabs( zxmax - ( xmin + ( xmax - xmin ) * zxmax0 ) ) > 1.0E-5 || fabs( zymax - ( ymin + ( ymax - ymin ) * zymax0 ) ) > 1.0E-5 ) { fputs( "plsdiplz test failed\n", stderr ); status = 1; } r0 = 10; g0 = 20; b0 = 30; plscolbg( r0, g0, b0 ); plgcolbg( &r, &g, &b ); printf( "background colour parameters: r, g, b = %d %d %d\n", r, g, b ); if ( r != r0 || g != g0 || b != b0 ) { fputs( "plgcolbg test failed\n", stderr ); status = 1; } r0 = 20; g0 = 30; b0 = 40; a0 = 0.5; plscolbga( r0, g0, b0, a0 ); plgcolbga( &r, &g, &b, &a ); printf( "background/transparency colour parameters: r, g, b, a = %d %d %d %f\n", r, g, b, a ); if ( r != r0 || g != g0 || b != b0 || a != a0 ) { fputs( "plgcolbga test failed\n", stderr ); status = 1; } plend(); exit( status ); }