From: Andrew R. <and...@us...> - 2005-03-10 17:17:42
|
Update of /cvsroot/plplot/plplot/examples/c++ In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5211/examples/c++ Modified Files: x02.cc Log Message: Add java support for plRGB_HLS and plHLS_RGB. Update C++ and java versions of example 2 to match the new C version. Index: x02.cc =================================================================== RCS file: /cvsroot/plplot/plplot/examples/c++/x02.cc,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- x02.cc 3 Mar 2004 17:41:16 -0000 1.6 +++ x02.cc 10 Mar 2005 17:17:29 -0000 1.7 @@ -3,7 +3,7 @@ //---------------------------------------------------------------------------// // //---------------------------------------------------------------------------// -// Copyright (C) 2004 Andrew Ross <an...@co...> +// Copyright (C) 2004,2005 Andrew Ross // Copyright (C) 2004 Alan W. Irwin // // This file is part of PLplot. @@ -41,38 +41,111 @@ x02(int, char **); private: + void demo1(); + void demo2(); + void draw_windows(int nw, int cmap0_offset); + // Class data plstream *pls; + }; +// ------------------------------------------------------------------------- +// demo1 +// +// Demonstrates multiple windows and default color map 0 palette. +// ------------------------------------------------------------------------- +void +x02::demo1() { -x02::x02( int argc, char ** argv ) { + pls->bop(); - int i, j; - double vmin, vmax; - char text[3]; + // Divide screen into 16 regions. + pls->ssub(4, 4); - // plplot initialization + draw_windows(16,0); - pls = new plstream(); + pls->eop(); - // Divide screen into 16 regions. +} - pls->ssub(4, 4); +// ------------------------------------------------------------------------- +// demo1 +// +// Demonstrates multiple windows and default color map 0 palette. +// ------------------------------------------------------------------------- +void +x02::demo2() { - // Parse and process command line arguments. - pls->ParseOpts( &argc, argv, PL_PARSE_FULL ); + // Set up cmap0 + // Use 100 custom colors in addition to base 16 + PLINT r[116], g[116], b[116]; - // Initialize PLplot. - pls->init(); + // Min and max lightness values + PLFLT lmin = 0.15, lmax = 0.85; + + int i; + + pls->bop(); + + // Divide screen into 100 regions. + pls->ssub(10,10); + + for (i = 0; i <= 99; i++) { + PLFLT h, l, s; + PLFLT r1, g1, b1; + + // Bounds on HLS, from plHLS_RGB() commentary -- + // hue [0., 360.] degrees + // lightness [0., 1.] magnitude + // saturation [0., 1.] magnitude + // + + // Vary hue uniformly from left to right + h = (360. / 10. ) * ( i % 10 ); + // Vary lightness uniformly from top to bottom, between min & max + l = lmin + (lmax - lmin) * (i / 10) / 9.; + // Use max saturation + s = 1.0; + + pls->HLS_RGB(h, l, s, &r1, &g1, &b1); + + r[i+16] = (PLINT)(r1 * 255); + g[i+16] = (PLINT)(g1 * 255); + b[i+16] = (PLINT)(b1 * 255); + } + + // Load default cmap0 colors into our custom set + for (i = 0; i <= 15; i++) + pls->gcol0(i, r[i], g[i], b[i]); + + // Now set cmap0 all at once (faster, since fewer driver calls) + pls->scmap0(r, g, b, 116); + + draw_windows( 100, 16 ); + + pls->eop(); + +} + +// ------------------------------------------------------------------------- +// draw_windows +// +// Draws a set of numbered boxes with colors according to cmap0 entry. +// ------------------------------------------------------------------------- +void +x02::draw_windows(int nw, int cmap0_offset) { + int i, j; + PLFLT vmin, vmax; + char text[3]; pls->schr(0.0, 3.5); pls->font(4); - for (i = 0; i <= 15; i++) { - pls->col0(i); + for (i = 0; i < nw; i++) { + pls->col0(i+cmap0_offset); sprintf(text, "%d", i); @@ -90,6 +163,27 @@ pls->wid(1); pls->ptex(0.5, 0.5, 1.0, 0.0, 0.5, text); } +} + +x02::x02( int argc, char ** argv ) { + + int i, j; + double vmin, vmax; + char text[3]; + + // plplot initialization + + pls = new plstream(); + + + // Parse and process command line arguments. + pls->ParseOpts( &argc, argv, PL_PARSE_FULL ); + + // Initialize PLplot. + pls->init(); + + demo1(); + demo2(); //pls->end(); delete pls; |