From: <hez...@us...> - 2010-12-30 01:58:57
|
Revision: 11401 http://plplot.svn.sourceforge.net/plplot/?rev=11401&view=rev Author: hezekiahcarty Date: 2010-12-30 01:58:51 +0000 (Thu, 30 Dec 2010) Log Message: ----------- Add plshades and plgradient support to plcolorbar Modified Paths: -------------- trunk/examples/c/x33c.c trunk/src/pllegend.c Modified: trunk/examples/c/x33c.c =================================================================== --- trunk/examples/c/x33c.c 2010-12-29 23:30:10 UTC (rev 11400) +++ trunk/examples/c/x33c.c 2010-12-30 01:58:51 UTC (rev 11401) @@ -61,97 +61,109 @@ }; void -plcolorbar_example_1() +plcolorbar_example_1( PLINT bar_type, PLINT n, const char *title ) { pladv( 0 ); // Setup color palette 1 plspal1( "cmap1_blue_red.pal", 1 ); - PLINT n; - n = 2; - PLFLT colors[n]; - colors[0] = 0.0; - colors[1] = 1.0; PLFLT values[n]; - values[0] = 6.0; - values[1] = 13.0; + int i; + PLFLT color_step, value_step; + color_step = 1.0 / (PLFLT)(n - 1); + value_step = 8.0 / (PLFLT)(n - 1); + for ( i = 0; i < n; i++ ) + { + colors[i] = 0.0 + color_step * (PLFLT)( i ); + values[i] = 6.0 + value_step * (PLFLT)( i ); + } PLINT opt; - opt = PL_COLORBAR_LEFT | PL_COLORBAR_IMAGE | PL_COLORBAR_LABEL_LEFT | + opt = PL_COLORBAR_LEFT | bar_type | PL_COLORBAR_LABEL_LEFT | PL_COLORBAR_CAP_HIGH; plcolorbar( opt, 0.1, 0.1, 0.5, 0.1, "tv", "Test label - Left, High Cap", n, colors, values ); - opt = PL_COLORBAR_RIGHT | PL_COLORBAR_IMAGE | PL_COLORBAR_LABEL_RIGHT | + opt = PL_COLORBAR_RIGHT | bar_type | PL_COLORBAR_LABEL_RIGHT | PL_COLORBAR_CAP_LOW; plcolorbar( opt, 0.1, 0.4, 0.5, 0.1, "tv", "Test label - Right, Low Cap", n, colors, values ); - opt = PL_COLORBAR_UPPER | PL_COLORBAR_IMAGE | PL_COLORBAR_LABEL_UPPER | + opt = PL_COLORBAR_UPPER | bar_type | PL_COLORBAR_LABEL_UPPER | PL_COLORBAR_CAP_HIGH; plcolorbar( opt, 0.1, 0.1, 0.5, 0.1, "t", "Test label - Upper, High Cap", n, colors, values ); - opt = PL_COLORBAR_LOWER | PL_COLORBAR_IMAGE | PL_COLORBAR_LABEL_LOWER | + opt = PL_COLORBAR_LOWER | bar_type | PL_COLORBAR_LABEL_LOWER | PL_COLORBAR_CAP_LOW; plcolorbar( opt, 0.4, 0.1, 0.5, 0.1, "t", "Test label - Lower, Low Cap", n, colors, values ); + + plvpor( 0.0, 1.0, 0.0, 1.0 ); + plwind( 0.0, 1.0, 0.0, 1.0 ); + plptex( 0.5, 0.5, 0.0, 0.0, 0.5, title ); } void -plcolorbar_example_2() +plcolorbar_example_2( PLINT bar_type, PLINT n, const char *title ) { pladv( 0 ); // Setup color palette 1 plspal1( "cmap1_blue_yellow.pal", 1 ); - PLINT n; - n = 2; - PLFLT colors[n]; - colors[0] = 0.0; - colors[1] = 1.0; PLFLT values[n]; - values[0] = 6.0; - values[1] = 13.0; + int i; + PLFLT color_step, value_step; + color_step = 1.0 / (PLFLT)(n - 1); + value_step = 8.0 / (PLFLT)(n - 1); + for ( i = 0; i < n; i++ ) + { + colors[i] = 0.0 + color_step * (PLFLT)( i ); + values[i] = 6.0 + value_step * (PLFLT)( i ); + } PLINT opt; - opt = PL_COLORBAR_LEFT | PL_COLORBAR_IMAGE | PL_COLORBAR_LABEL_LEFT | + opt = PL_COLORBAR_LEFT | bar_type | PL_COLORBAR_LABEL_LEFT | PL_COLORBAR_CAP_LOW; plcolorbar( opt, 0.1, 0.1, 0.5, 0.1, "tv", "Test label - Left, Low Cap", n, colors, values ); - opt = PL_COLORBAR_RIGHT | PL_COLORBAR_IMAGE | PL_COLORBAR_LABEL_RIGHT | + opt = PL_COLORBAR_RIGHT | bar_type | PL_COLORBAR_LABEL_RIGHT | PL_COLORBAR_CAP_HIGH; plcolorbar( opt, 0.1, 0.4, 0.5, 0.1, "tv", "Test label - Right, High Cap", n, colors, values ); - opt = PL_COLORBAR_UPPER | PL_COLORBAR_IMAGE | PL_COLORBAR_LABEL_UPPER | + opt = PL_COLORBAR_UPPER | bar_type | PL_COLORBAR_LABEL_UPPER | PL_COLORBAR_CAP_LOW; plcolorbar( opt, 0.1, 0.1, 0.5, 0.1, "t", "Test label - Upper, Low Cap", n, colors, values ); - opt = PL_COLORBAR_LOWER | PL_COLORBAR_IMAGE | PL_COLORBAR_LABEL_LOWER | + opt = PL_COLORBAR_LOWER | bar_type | PL_COLORBAR_LABEL_LOWER | PL_COLORBAR_CAP_HIGH; plcolorbar( opt, 0.4, 0.1, 0.5, 0.1, "t", "Test label - Lower, High Cap", n, colors, values ); + + plvpor( 0.0, 1.0, 0.0, 1.0 ); + plwind( 0.0, 1.0, 0.0, 1.0 ); + plptex( 0.5, 0.5, 0.0, 0.0, 0.5, title ); } //-------------------------------------------------------------------------- @@ -697,8 +709,12 @@ max_height = MAX( max_height, legend_height ); // Color bar examples - plcolorbar_example_1(); - plcolorbar_example_2(); + plcolorbar_example_1( PL_COLORBAR_IMAGE, 2, "Image Color Bars" ); + plcolorbar_example_2( PL_COLORBAR_IMAGE, 2, "Image Color Bars" ); + plcolorbar_example_1( PL_COLORBAR_SHADE, 9, "Shade Color Bars" ); + plcolorbar_example_2( PL_COLORBAR_SHADE, 9, "Shade Color Bars" ); + plcolorbar_example_1( PL_COLORBAR_GRADIENT, 2, "Gradient Color Bars" ); + plcolorbar_example_2( PL_COLORBAR_GRADIENT, 2, "Gradient Color Bars" ); // Free space that contained legend text. for ( k = 0; k < MAX_NLEGEND; k++ ) Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2010-12-29 23:30:10 UTC (rev 11400) +++ trunk/src/pllegend.c 2010-12-30 01:58:51 UTC (rev 11401) @@ -1081,13 +1081,73 @@ } else if ( opt & PL_COLORBAR_SHADE ) { - plabort( "PL_COLORBAR_SHADE is not implemented yet" ); + n_steps = n_colors; + // Use the provided values. + if ( opt & PL_COLORBAR_LEFT || opt & PL_COLORBAR_RIGHT ) + { + ni = 2; + nj = n_steps; + plAlloc2dGrid( &color_data, ni, nj ); + for ( i = 0; i < ni; i++ ) + { + for ( j = 0; j < nj; j++ ) + { + color_data[i][j] = values[j]; + } + } + } + else if ( opt & PL_COLORBAR_UPPER || opt & PL_COLORBAR_LOWER ) + { + ni = n_steps; + nj = 2; + plAlloc2dGrid( &color_data, ni, nj ); + for ( i = 0; i < ni; i++ ) + { + for ( j = 0; j < nj; j++ ) + { + color_data[i][j] = values[i]; + } + } + } + else + { + plabort( "plcolorbar: Invalid side" ); + } + // Draw the color bar + plshades( color_data, ni, nj, NULL, wx_min, wx_max, wy_min, wy_max, + values, n_colors, 0, 0, 0, plfill, TRUE, NULL, NULL ); + plFree2dGrid( color_data, ni, nj ); } else if ( opt & PL_COLORBAR_GRADIENT ) { - plabort( "PL_COLORBAR_GRADIENT is not implemented yet" ); + PLFLT xs[4], ys[4]; + xs[0] = wx_min; + ys[0] = wy_min; + xs[1] = wx_max; + ys[1] = wy_min; + xs[2] = wx_max; + ys[2] = wy_max; + xs[3] = wx_min; + ys[3] = wy_max; + PLFLT angle; + if ( opt & PL_COLORBAR_LEFT || opt & PL_COLORBAR_RIGHT ) + { + angle = 90.0; + } + else if ( opt & PL_COLORBAR_UPPER || opt & PL_COLORBAR_LOWER ) + { + angle = 0.0; + } + else + { + plabort( "plcolorbar: Invalid side" ); + } + plgradient( 4, xs, ys, angle ); } + // Restore the previous drawing color to use for outlines and text + plcol0( col0_save ); + // Smaller text plschr( 0.0, 0.75 ); // Small ticks on the vertical axis @@ -1223,7 +1283,6 @@ plsmaj( 0.0, maj_save ); plsmin( 0.0, min_save ); plschr( 0.0, text_scale_save ); - plcol0( col0_save ); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |