From: <ai...@us...> - 2011-04-28 13:53:09
|
Revision: 11726 http://plplot.svn.sourceforge.net/plplot/?rev=11726&view=rev Author: airwin Date: 2011-04-28 13:53:02 +0000 (Thu, 28 Apr 2011) Log Message: ----------- Use new PL_COLORBAR_ORIENT_* #defines for first argument of draw_cap rather than enum. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-04-28 13:51:32 UTC (rev 11725) +++ trunk/src/pllegend.c 2011-04-28 13:53:02 UTC (rev 11726) @@ -883,20 +883,14 @@ #ifdef PL_COLORBAR_NEW_API // Code version with reorganized API for plcolorbar -enum PLCapOrientation -{ - PLCapRight, - PLCapUp, - PLCapLeft, - PLCapDown -}; //-------------------------------------------------------------------------- //! Draw triangular end-caps for color bars. //! -//! @param orientation This enum variable defines the -//! orientation of the triangle. The triangle points to the -//! right, up, left, or down if orientation is equal to -//! PLCapRight, PLCapUp, PLCapLeft, or PLCapDown. +//! @param orientation This enum variable defines the orientation of +//! the triangle. The triangle points to the right, up, left, or down +//! if orientation contains PL_COLORBAR_ORIENT_RIGHT, +//! PL_COLORBAR_ORIENT_TOP, PL_COLORBAR_ORIENT_LEFT, or +//! PL_COLORBAR_ORIENT_BOTTOM bits. //! @param xmin Minimum X coordinate of rectangle inscribing the triangle. //! @param xmax Maximum X coordinate of rectangle inscribing the triangle. //! @param ymin Minimum Y coordinate of rectangle inscribing the triangle. @@ -905,10 +899,10 @@ //! void -draw_cap( enum PLCapOrientation orientation, PLFLT xmin, PLFLT xmax, +draw_cap( PLINT orientation, PLFLT xmin, PLFLT xmax, PLFLT ymin,PLFLT ymax, PLFLT color ) { - // Save drawing color + // Save current drawing color. PLINT col0_save = plsc->icol0; // Save window and viewport @@ -925,11 +919,11 @@ // The viewport is the specified rectangle that inscribes the // triangle. The world coordinates are chosen to make drawing of - // the triangle convenient. + // that triangle convenient. plvpor( xmin, xmax, ymin, ymax ); plwind( 0.0, 1.0, 0.0, 1.0 ); - if ( orientation == PLCapRight ) + if ( orientation == PL_COLORBAR_ORIENT_RIGHT ) { xs[0] = 0.; ys[0] = 0.; @@ -938,7 +932,7 @@ xs[2] = 0.; ys[2] = 1.; } - else if ( orientation == PLCapUp ) + else if ( orientation == PL_COLORBAR_ORIENT_TOP ) { xs[0] = 1.; ys[0] = 0.; @@ -947,7 +941,7 @@ xs[2] = 0.; ys[2] = 0.; } - else if ( orientation == PLCapLeft ) + else if ( orientation == PL_COLORBAR_ORIENT_LEFT ) { xs[0] = 1.; ys[0] = 1.; @@ -956,7 +950,7 @@ xs[2] = 1.; ys[2] = 0.; } - else if ( orientation == PLCapDown ) + else if ( orientation == PL_COLORBAR_ORIENT_BOTTOM ) { xs[0] = 0.; ys[0] = 1.; @@ -965,6 +959,10 @@ xs[2] = 1.; ys[2] = 1.; } + else + { + plexit( "draw_cap: internal error. Incorrect orientation"); + } plcol1( color ); plfill( 3, xs, ys ); @@ -1052,7 +1050,8 @@ // Assumes that the values array is sorted from smallest to largest // OR from largest to smallest. PLFLT min_value, max_value; - // Height the cap in normalized coordinates + // Height of the cap in normalized coordinates + // ToDo: Use better value related to size of color bar. PLFLT cap_height = 0.05; min_value = values[0]; @@ -1331,11 +1330,11 @@ // Draw a filled triangle (cap/arrow) at the low end of the scale if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) { - draw_cap( PLCapDown, vx_min, vx_max, vy_min - cap_height, vy_min, low_cap_color ); + draw_cap( PL_COLORBAR_ORIENT_BOTTOM, vx_min, vx_max, vy_min - cap_height, vy_min, low_cap_color ); } else if ( position & PL_POSITION_BOTTOM || position & PL_POSITION_TOP ) { - draw_cap( PLCapLeft, vx_min - cap_height, vx_min, vy_min, vy_max, low_cap_color ); + draw_cap( PL_COLORBAR_ORIENT_LEFT, vx_min - cap_height, vx_min, vy_min, vy_max, low_cap_color ); } } if ( opt & PL_COLORBAR_CAP_HIGH ) @@ -1352,11 +1351,11 @@ // Draw a filled triangle (cap/arrow) at the high end of the scale if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) { - draw_cap( PLCapUp, vx_min, vx_max, vy_max, vy_max + cap_height, high_cap_color ); + draw_cap( PL_COLORBAR_ORIENT_TOP, vx_min, vx_max, vy_max, vy_max + cap_height, high_cap_color ); } else if ( position & PL_POSITION_BOTTOM || position & PL_POSITION_TOP ) { - draw_cap( PLCapRight, vx_max, vx_max + cap_height, vy_min, vy_max, high_cap_color ); + draw_cap( PL_COLORBAR_ORIENT_RIGHT, vx_max, vx_max + cap_height, vy_min, vy_max, high_cap_color ); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-04-29 17:11:18
|
Revision: 11728 http://plplot.svn.sourceforge.net/plplot/?rev=11728&view=rev Author: airwin Date: 2011-04-29 17:11:11 +0000 (Fri, 29 Apr 2011) Log Message: ----------- Style change: Put all declarations at top of curly braces. I believe this style is required by some compilers. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-04-28 22:46:49 UTC (rev 11727) +++ trunk/src/pllegend.c 2011-04-29 17:11:11 UTC (rev 11728) @@ -1058,20 +1058,14 @@ // ToDo: Use better value related to size of color bar. PLFLT cap_height = 0.05; - min_value = values[0]; - max_value = values[ n_values - 1 ]; - // Min and max colors - // Assumes that the colors array is sorted from smallest to largest. PLFLT min_color, max_color; - plgcmap1_range( &min_color, &max_color ); // Saved normalized coordinates of viewport. PLFLT xdmin_save, xdmax_save, ydmin_save, ydmax_save; + // Saved world coordinates of viewport. PLFLT xwmin_save, xwmax_save, ywmin_save, ywmax_save; - plgvpsp( &xdmin_save, &xdmax_save, &ydmin_save, &ydmax_save ); - plgvpw( &xwmin_save, &xwmax_save, &ywmin_save, &ywmax_save ); // Active attributes to be saved and restored afterward. PLINT col0_save = plsc->icol0; @@ -1080,6 +1074,34 @@ // coordinates). PLFLT vx_min, vx_max, vy_min, vy_max; PLFLT wx_min, wx_max, wy_min, wy_max; + + // The data to plot + PLFLT **color_data; + + // Setting up the data for display + PLINT i, j, ni, nj, n_steps; + PLFLT step_size; + + // How far away from the axis should the label be drawn? + PLFLT label_offset; + + // For building axis option string + PLINT max_opts = 25; + char opt_string[max_opts]; + const char *tick_string; + + // Draw a title + char perp; + + min_value = values[0]; + max_value = values[ n_values - 1 ]; + + // Assumes that the colors array is sorted from smallest to largest. + plgcmap1_range( &min_color, &max_color ); + + plgvpsp( &xdmin_save, &xdmax_save, &ydmin_save, &ydmax_save ); + plgvpw( &xwmin_save, &xwmax_save, &ywmin_save, &ywmax_save ); + // Build the proper viewport and window dimension along the requested side // of the subpage if ( position & PL_POSITION_LEFT ) @@ -1135,12 +1157,6 @@ plvpor( vx_min, vx_max, vy_min, vy_max ); plwind( wx_min, wx_max, wy_min, wy_max ); - // The data to plot - PLFLT **color_data; - // Setting up the data for display - PLINT i, j, ni, nj, n_steps; - PLFLT step_size; - // What kind of color bar are we making? if ( opt & PL_COLORBAR_IMAGE ) { @@ -1285,6 +1301,7 @@ else if ( opt & PL_COLORBAR_GRADIENT ) { PLFLT xs[4], ys[4]; + PLFLT angle; xs[0] = wx_min; ys[0] = wy_min; xs[1] = wx_max; @@ -1293,7 +1310,6 @@ ys[2] = wy_max; xs[3] = wx_min; ys[3] = wy_max; - PLFLT angle; // Make sure the gradient runs in the proper direction if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) { @@ -1315,8 +1331,6 @@ // Restore the previous drawing color to use for outlines and text plcol0( col0_save ); - // How far away from the axis should the label be drawn? - PLFLT label_offset; label_offset = 0.0; // Draw end-caps @@ -1363,15 +1377,8 @@ } } - // For building axis option string - PLINT max_opts = 25; - char opt_string[max_opts]; - const char *tick_string; - tick_string = ""; - // Draw a title - char perp; if ( opt & PL_COLORBAR_LABEL_LEFT ) { if ( position & PL_POSITION_RIGHT || position & PL_POSITION_LEFT ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-04-30 18:37:34
|
Revision: 11736 http://plplot.svn.sourceforge.net/plplot/?rev=11736&view=rev Author: airwin Date: 2011-04-30 18:37:28 +0000 (Sat, 30 Apr 2011) Log Message: ----------- Put the orientation of the colorbar directly under the control of the user with the PL_COLORBAR_ORIENT_(RIGHT, TOP, LEFT, BOTTOM) orientation bits of opt. However, if the user does not specify any of these bits, then adopt a sensible orientation default which depends on position. Make all previous orientation logic (which was controlled strictly by position bits before) depend on the orientation bits instead. There are no changes to the example 33 PostScript results due to these internal changes (because of the default orientation choice noted above). ToDo: My goal here is that position should control nothing except overall position of colorbar with no cross-talk with how that colorbar object is specified except for the default value of the orientation. I have only dealt with the obvious orientation stuff for now and there is some non-position logic (e.g., label offsets, numerical label positions, and tick marks for the colorbar) that currently depends on position bits that still must be dealt with to achieve my goal. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-04-30 04:28:20 UTC (rev 11735) +++ trunk/src/pllegend.c 2011-04-30 18:37:28 UTC (rev 11736) @@ -1093,6 +1093,18 @@ // Draw a title char perp; + // Default orientation. + if ( !( opt & PL_COLORBAR_ORIENT_RIGHT || + opt & PL_COLORBAR_ORIENT_TOP || + opt & PL_COLORBAR_ORIENT_LEFT || + opt & PL_COLORBAR_ORIENT_BOTTOM ) ) + { + if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) + opt = opt | PL_COLORBAR_ORIENT_TOP; + else + opt = opt | PL_COLORBAR_ORIENT_RIGHT; + } + min_value = values[0]; max_value = values[ n_values - 1 ]; @@ -1102,58 +1114,69 @@ plgvpsp( &xdmin_save, &xdmax_save, &ydmin_save, &ydmax_save ); plgvpw( &xwmin_save, &xwmax_save, &ywmin_save, &ywmax_save ); - // Build the proper viewport and window dimension along the requested side + // Specify the proper viewport ranges along the requested side // of the subpage if ( position & PL_POSITION_LEFT ) { vx_min = x; vy_min = y; - vx_max = vx_min + x_length; - vy_max = vy_min + y_length; - wx_min = 0.0; - wy_min = min_value; - wx_max = 1.0; - wy_max = max_value; } else if ( position & PL_POSITION_RIGHT ) { vx_min = 1.0 - x - x_length; vy_min = y; - vx_max = vx_min + x_length; - vy_max = vy_min + y_length; - wx_min = 0.0; - wy_min = min_value; - wx_max = 1.0; - wy_max = max_value; } else if ( position & PL_POSITION_TOP ) { vx_min = x; vy_min = 1.0 - y - y_length; - vx_max = vx_min + x_length; - vy_max = vy_min + y_length; - wx_min = min_value; - wy_min = 0.0; - wx_max = max_value; - wy_max = 1.0; } else if ( position & PL_POSITION_BOTTOM ) { vx_min = x; vy_min = y; - vx_max = vx_min + x_length; - vy_max = vy_min + y_length; + } + else + { + plabort( "plcolorbar: Invalid PL_POSITION_* bits" ); + } + vx_max = vx_min + x_length; + vy_max = vy_min + y_length; + + // Specify the proper window ranges depending on orientation. + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) + { wx_min = min_value; + wx_max = max_value; wy_min = 0.0; - wx_max = max_value; wy_max = 1.0; } + else if ( opt & PL_COLORBAR_ORIENT_TOP ) + { + wx_min = 0.0; + wx_max = 1.0; + wy_min = min_value; + wy_max = max_value; + } + else if ( opt & PL_COLORBAR_ORIENT_LEFT ) + { + wx_min = max_value; + wx_max = min_value; + wy_min = 0.0; + wy_max = 1.0; + } + else if ( opt & PL_COLORBAR_ORIENT_BOTTOM) + { + wx_min = 0.0; + wx_max = 1.0; + wy_min = max_value; + wy_max = min_value; + } else { - plabort( "plcolorbar: Invalid or missing side" ); + plabort( "plcolorbar: Invalid PL_COLORBAR_ORIENT_* bits" ); } - // The window used to draw the colorbar should take up the whole viewport plvpor( vx_min, vx_max, vy_min, vy_max ); plwind( wx_min, wx_max, wy_min, wy_max ); @@ -1170,8 +1193,21 @@ // TODO: Determine a better way to specify the steps here? n_steps = plsc->ncol1; step_size = ( max_value - min_value ) / (PLFLT) n_steps; - if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { + 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] = min_value + (PLFLT) i * step_size; + } + } + } + else if ( opt & PL_COLORBAR_ORIENT_TOP ) + { ni = 2; nj = n_steps; plAlloc2dGrid( &color_data, ni, nj ); @@ -1183,7 +1219,7 @@ } } } - else if ( position & PL_POSITION_TOP || position & PL_POSITION_BOTTOM ) + else if ( opt & PL_COLORBAR_ORIENT_LEFT ) { ni = n_steps; nj = 2; @@ -1192,13 +1228,26 @@ { for ( j = 0; j < nj; j++ ) { - color_data[i][j] = min_value + (PLFLT) i * step_size; + color_data[i][j] = max_value - (PLFLT) i * step_size; } } } + else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + 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] = max_value - (PLFLT) j * step_size; + } + } + } else { - plabort( "plcolorbar: Invalid side" ); + plabort( "plcolorbar: Invalid orientation bits" ); } } // No interpolation - use values array as-is @@ -1206,8 +1255,21 @@ { n_steps = n_values; // Use the provided values in this case. - if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { + 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 if ( opt & PL_COLORBAR_ORIENT_TOP ) + { ni = 2; nj = n_steps; plAlloc2dGrid( &color_data, ni, nj ); @@ -1219,7 +1281,7 @@ } } } - else if ( position & PL_POSITION_TOP || position & PL_POSITION_BOTTOM ) + else if ( opt & PL_COLORBAR_ORIENT_LEFT ) { ni = n_steps; nj = 2; @@ -1228,10 +1290,23 @@ { for ( j = 0; j < nj; j++ ) { - color_data[i][j] = values[i]; + color_data[i][j] = values[ni - 1 - i]; } } } + else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + 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[nj - 1 - j]; + } + } + } else { plabort( "plcolorbar: Invalid side" ); @@ -1253,8 +1328,25 @@ PLFLT grid_axis[2] = { 0.0, 1.0 }; n_steps = n_values; // Use the provided values. - if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { + grid.xg = (PLFLT *) values; + grid.yg = grid_axis; + grid.nx = n_steps; + grid.ny = 2; + 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 if ( opt & PL_COLORBAR_ORIENT_TOP ) + { grid.xg = grid_axis; grid.yg = (PLFLT *) values; grid.nx = 2; @@ -1270,7 +1362,7 @@ } } } - else if ( position & PL_POSITION_TOP || position & PL_POSITION_BOTTOM ) + else if ( opt & PL_COLORBAR_ORIENT_LEFT ) { grid.xg = (PLFLT *) values; grid.yg = grid_axis; @@ -1283,13 +1375,30 @@ { for ( j = 0; j < nj; j++ ) { - color_data[i][j] = values[i]; + color_data[i][j] = values[ni - 1 - i]; } } } + else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + grid.xg = grid_axis; + grid.yg = (PLFLT *) values; + grid.nx = 2; + grid.ny = n_steps; + 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[nj - 1 - j]; + } + } + } else { - plabort( "plcolorbar: Invalid side" ); + plabort( "plcolorbar: Invalid orientation" ); } // Draw the color bar @@ -1311,19 +1420,25 @@ xs[3] = wx_min; ys[3] = wy_max; // Make sure the gradient runs in the proper direction - if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { - // Top to bottom + angle = 0.0; + } + else if ( opt & PL_COLORBAR_ORIENT_TOP ) + { angle = 90.0; } - else if ( position & PL_POSITION_TOP || position & PL_POSITION_BOTTOM ) + else if ( opt & PL_COLORBAR_ORIENT_LEFT ) { - // Left to right - angle = 0.0; + angle = 180.0; } + else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + angle = 270.0; + } else { - plabort( "plcolorbar: Invalid side" ); + plabort( "plcolorbar: Invalid orientation" ); } plgradient( 4, xs, ys, angle ); } @@ -1338,50 +1453,66 @@ { // Add an extra offset for the label so it does not bump in to the // cap if the label is placed on the same side as the cap. - if ( ( ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) && - opt & PL_COLORBAR_LABEL_BOTTOM ) || - ( ( position & PL_POSITION_TOP || position & PL_POSITION_BOTTOM ) && - opt & PL_COLORBAR_LABEL_LEFT ) ) + if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_LEFT ) || + ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_BOTTOM ) || + ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_RIGHT ) || + ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_TOP ) ) { label_offset += 2.5; } // Draw a filled triangle (cap/arrow) at the low end of the scale - if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { + draw_cap( PL_COLORBAR_ORIENT_LEFT, vx_min - cap_height, vx_min, vy_min, vy_max, low_cap_color ); + } + else if ( opt & PL_COLORBAR_ORIENT_TOP ) + { draw_cap( PL_COLORBAR_ORIENT_BOTTOM, vx_min, vx_max, vy_min - cap_height, vy_min, low_cap_color ); } - else if ( position & PL_POSITION_BOTTOM || position & PL_POSITION_TOP ) + else if ( opt & PL_COLORBAR_ORIENT_LEFT ) { - draw_cap( PL_COLORBAR_ORIENT_LEFT, vx_min - cap_height, vx_min, vy_min, vy_max, low_cap_color ); + draw_cap( PL_COLORBAR_ORIENT_RIGHT, vx_max, vx_max + cap_height, vy_min, vy_max, low_cap_color ); } + else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + draw_cap( PL_COLORBAR_ORIENT_TOP, vx_min, vx_max, vy_max, vy_max + cap_height, low_cap_color ); + } } if ( opt & PL_COLORBAR_CAP_HIGH ) { // Add an extra offset for the label so it does not bump in to the // cap if the label is placed on the same side as the cap. - if ( ( ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) && - opt & PL_COLORBAR_LABEL_TOP ) || - ( ( position & PL_POSITION_TOP || position & PL_POSITION_BOTTOM ) && - opt & PL_COLORBAR_LABEL_RIGHT ) ) + if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_RIGHT ) || + ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_TOP ) || + ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_LEFT ) || + ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_BOTTOM ) ) { label_offset += 2.5; } // Draw a filled triangle (cap/arrow) at the high end of the scale - if ( position & PL_POSITION_LEFT || position & PL_POSITION_RIGHT ) + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { + draw_cap( PL_COLORBAR_ORIENT_RIGHT, vx_max, vx_max + cap_height, vy_min, vy_max, high_cap_color ); + } + else if ( opt & PL_COLORBAR_ORIENT_TOP ) + { draw_cap( PL_COLORBAR_ORIENT_TOP, vx_min, vx_max, vy_max, vy_max + cap_height, high_cap_color ); } - else if ( position & PL_POSITION_BOTTOM || position & PL_POSITION_TOP ) + if ( opt & PL_COLORBAR_ORIENT_LEFT ) { - draw_cap( PL_COLORBAR_ORIENT_RIGHT, vx_max, vx_max + cap_height, vy_min, vy_max, high_cap_color ); + draw_cap( PL_COLORBAR_ORIENT_LEFT, vx_min - cap_height, vx_min, vy_min, vy_max, high_cap_color ); } + else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + draw_cap( PL_COLORBAR_ORIENT_BOTTOM, vx_min, vx_max, vy_min - cap_height, vy_min, high_cap_color ); + } } tick_string = ""; if ( opt & PL_COLORBAR_LABEL_LEFT ) { - if ( position & PL_POSITION_RIGHT || position & PL_POSITION_LEFT ) + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) { if ( position & PL_POSITION_LEFT ) label_offset += 4.0; @@ -1401,7 +1532,7 @@ } else if ( opt & PL_COLORBAR_LABEL_RIGHT ) { - if ( position & PL_POSITION_RIGHT || position & PL_POSITION_LEFT ) + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) { if ( position & PL_POSITION_RIGHT ) label_offset += 4.0; @@ -1421,7 +1552,7 @@ } else if ( opt & PL_COLORBAR_LABEL_TOP ) { - if ( position & PL_POSITION_RIGHT || position & PL_POSITION_LEFT ) + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) { label_offset += 1.5; perp = '\0'; @@ -1439,7 +1570,7 @@ } else if ( opt & PL_COLORBAR_LABEL_BOTTOM ) { - if ( position & PL_POSITION_RIGHT || position & PL_POSITION_LEFT ) + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) { label_offset += 1.5; perp = '\0'; @@ -1496,26 +1627,16 @@ } // Draw the outline for the entire colorbar, tick marks, tick labels. - if ( position & PL_POSITION_LEFT ) + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM) { snprintf( opt_string, max_opts, "bc%s%s", tick_string, axis_opts ); - plbox( "bc", ticks, sub_ticks, opt_string, ticks, sub_ticks ); - } - else if ( position & PL_POSITION_RIGHT ) - { - snprintf( opt_string, max_opts, "bc%s%s", tick_string, axis_opts ); plbox( "bc", 0.0, 0, opt_string, ticks, sub_ticks ); } - else if ( position & PL_POSITION_TOP ) + else { snprintf( opt_string, max_opts, "bc%s%s", tick_string, axis_opts ); plbox( opt_string, ticks, sub_ticks, "bc", 0.0, 0 ); } - else if ( position & PL_POSITION_BOTTOM ) - { - snprintf( opt_string, max_opts, "bc%s%s", tick_string, axis_opts ); - plbox( opt_string, ticks, sub_ticks, "bc", 0.0, 0 ); - } // Restore previous plot characteristics. plcol0( col0_save ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-06-14 06:13:37
|
Revision: 11768 http://plplot.svn.sourceforge.net/plplot/?rev=11768&view=rev Author: airwin Date: 2011-06-14 06:13:31 +0000 (Tue, 14 Jun 2011) Log Message: ----------- Background part of bounding box is plotted first (while edge line of bounding box continues to be plotted last). Incorporate caps into bounding box. Temporarily reduce cap angle to accentuate cap to demonstrate there are no positioning issues (e.g., bounding boxes are properly centered for example 33) or bounding-box issues associated with the caps. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-06-13 16:16:57 UTC (rev 11767) +++ trunk/src/pllegend.c 2011-06-14 06:13:31 UTC (rev 11768) @@ -1119,7 +1119,7 @@ // direction of the orientation of the cap. In other words, // cap_angle completely controls the shape of the triangle, but // not its scale. - PLFLT cap_angle = 90.; + PLFLT cap_angle = 15.; // Ratio of length of cap in orientation direction // to the width of the bar (and cap) in the direction // perpendicular to the orientation in physical coordinates @@ -1147,8 +1147,28 @@ PLINT col0_save = plsc->icol0, line_style_save = plsc->line_style; - // Position of the color bar in adopted coordinates. + // positional data. + PLFLT colorbar_width, colorbar_height, + colorbar_width_bb, colorbar_height_bb, + colorbar_width_vc, colorbar_height_vc, + x_colorbar_position, y_colorbar_position, + xsign, ysign, + plot_x, plot_y; + // Normalized subpage coordinates of top left of the bounding box. + PLFLT plot_x_subpage_bb, plot_y_subpage_bb; + // Differences between normalized subpage coordinates for the + // undecorated colorbar (where the decorations consist of external + // tick marks, numerical tick labels, or text if any of those + // exist) and the bounding box. + PLFLT dx_subpage = 0., dy_subpage = 0.; + // Normalized subpage coordinates of the top left of undecorated + // colorbar, + PLFLT plot_x_subpage, plot_y_subpage; + + // Position of the undecorated colorbar in normalized subpage coordinates. PLFLT vx_min, vx_max, vy_min, vy_max; + + // World coordinate limits describing undecorated colorbar. PLFLT wx_min, wx_max, wy_min, wy_max; // The data to plot @@ -1172,15 +1192,6 @@ char *local_axis_opts; PLBOOL if_edge; - // positional data. - PLFLT colorbar_width, colorbar_height, - bar_width, bar_height, - colorbar_width_vc, colorbar_height_vc, - x_colorbar_position, y_colorbar_position, - xsign, ysign, - plot_x, plot_y, - plot_x_subpage, plot_y_subpage; - // Default position flags and sanity checks for position flags. if ( !( position & PL_POSITION_RIGHT ) && !( position & PL_POSITION_LEFT ) && !( position & PL_POSITION_TOP ) && !( position & PL_POSITION_BOTTOM ) ) { @@ -1271,35 +1282,94 @@ // Assumes that the colors array is sorted from smallest to largest. plgcmap1_range( &min_color, &max_color ); - // Width and height of just the bar (i.e., excluding caps, numerical tick - // labels, and text) in normalized subpage coordinates. - bar_width = adopted_to_subpage_x( x_length ) - adopted_to_subpage_x( 0. ); - bar_height = adopted_to_subpage_y( y_length ) - adopted_to_subpage_y( 0. ); - // Total width and height of colorbar bounding box in normalized subpage - // coordinates. - // FIXME. Need to add caps + numerical tick labels + text to + // Width and height of the undecorated colorbar in normalized + // subpage coordinates. + colorbar_width = adopted_to_subpage_x( x_length ) - + adopted_to_subpage_x( 0. ); + colorbar_height = adopted_to_subpage_y( y_length ) - + adopted_to_subpage_y( 0. ); + // width and height of colorbar bounding box in normalized subpage + // coordinates. Caps taken care of. + // FIXME. Need to add inverted tickmarks + numerical tick labels + text to // these calculations. - colorbar_width = bar_width; - colorbar_height = bar_height; + if ( opt & PL_COLORBAR_ORIENT_RIGHT || opt & PL_COLORBAR_ORIENT_LEFT ) + { + cap_extent = cap_ratio * colorbar_height / aspspp; + } + else + { + cap_extent = cap_ratio * colorbar_width * aspspp; + } + + colorbar_width_bb = colorbar_width; + colorbar_height_bb = colorbar_height; + if ( opt & PL_COLORBAR_CAP_LOW ) + { + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) + { + colorbar_width_bb += cap_extent; + dx_subpage += cap_extent; + } + if (opt & PL_COLORBAR_ORIENT_TOP ) + { + colorbar_height_bb += cap_extent; + } + if (opt & PL_COLORBAR_ORIENT_LEFT ) + { + colorbar_width_bb += cap_extent; + } + if (opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + colorbar_height_bb += cap_extent; + dy_subpage -= cap_extent; + } + } + if ( opt & PL_COLORBAR_CAP_HIGH ) + { + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) + { + colorbar_width_bb += cap_extent; + } + if (opt & PL_COLORBAR_ORIENT_TOP ) + { + colorbar_height_bb += cap_extent; + dy_subpage -= cap_extent; + } + if (opt & PL_COLORBAR_ORIENT_LEFT ) + { + colorbar_width_bb += cap_extent; + dx_subpage += cap_extent; + } + if (opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + colorbar_height_bb += cap_extent; + } + } // Total width and height of colorbar bounding box in adopted subpage // coordinates. - colorbar_width_vc = subpage_to_adopted_x( colorbar_width ) - subpage_to_adopted_x( 0. ); - colorbar_height_vc = subpage_to_adopted_y( colorbar_height ) - subpage_to_adopted_y( 0. ); + colorbar_width_vc = subpage_to_adopted_x( colorbar_width_bb ) - + subpage_to_adopted_x( 0. ); + colorbar_height_vc = subpage_to_adopted_y( colorbar_height_bb ) - + subpage_to_adopted_y( 0. ); *p_colorbar_width = colorbar_width_vc; *p_colorbar_height = colorbar_height_vc; legend_position( position, colorbar_width_vc, colorbar_height_vc, &x_colorbar_position, &y_colorbar_position, &xsign, &ysign ); plot_x = x * xsign + x_colorbar_position; plot_y = y * ysign + y_colorbar_position; - // Normalized subpage coordinates for colorbar plots - plot_x_subpage = adopted_to_subpage_x( plot_x ); - plot_y_subpage = adopted_to_subpage_y( plot_y ); + // Normalized subpage coordinates (top-left corner) for bounding box. + plot_x_subpage_bb = adopted_to_subpage_x( plot_x ); + plot_y_subpage_bb = adopted_to_subpage_y( plot_y ); + // Normalized subpage coordinates (top-left corner) for undecorated + // colorbar + plot_x_subpage = plot_x_subpage_bb + dx_subpage; + plot_y_subpage = plot_y_subpage_bb + dy_subpage; // Specify the proper window ranges depending on orientation. if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { vx_min = plot_x_subpage; - vx_max = plot_x_subpage + bar_width; - vy_min = plot_y_subpage - bar_height; + vx_max = plot_x_subpage + colorbar_width; + vy_min = plot_y_subpage - colorbar_height; vy_max = plot_y_subpage; wx_min = min_value; wx_max = max_value; @@ -1309,8 +1379,8 @@ else if ( opt & PL_COLORBAR_ORIENT_TOP ) { vx_min = plot_x_subpage; - vx_max = plot_x_subpage + bar_width; - vy_min = plot_y_subpage - bar_height; + vx_max = plot_x_subpage + colorbar_width; + vy_min = plot_y_subpage - colorbar_height; vy_max = plot_y_subpage; wx_min = 0.0; wx_max = 1.0; @@ -1320,8 +1390,8 @@ else if ( opt & PL_COLORBAR_ORIENT_LEFT ) { vx_min = plot_x_subpage; - vx_max = plot_x_subpage + bar_width; - vy_min = plot_y_subpage - bar_height; + vx_max = plot_x_subpage + colorbar_width; + vy_min = plot_y_subpage - colorbar_height; vy_max = plot_y_subpage; wx_min = max_value; wx_max = min_value; @@ -1331,8 +1401,8 @@ else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) { vx_min = plot_x_subpage; - vx_max = plot_x_subpage + bar_width; - vy_min = plot_y_subpage - bar_height; + vx_max = plot_x_subpage + colorbar_width; + vy_min = plot_y_subpage - colorbar_height; vy_max = plot_y_subpage; wx_min = 0.0; wx_max = 1.0; @@ -1344,6 +1414,30 @@ plabort( "plcolorbar: Invalid PL_COLORBAR_ORIENT_* bits" ); } + // Viewport and world coordinate ranges for cap and bounding-box areas. + plvpor( 0., 1., 0., 1. ); + plwind( 0., 1., 0., 1. ); + + if ( opt & PL_COLORBAR_BACKGROUND ) + { + PLFLT xbg[4] = { + plot_x_subpage_bb, + plot_x_subpage_bb, + plot_x_subpage_bb + colorbar_width_bb, + plot_x_subpage_bb + colorbar_width_bb, + }; + PLFLT ybg[4] = { + plot_y_subpage_bb, + plot_y_subpage_bb - colorbar_height_bb, + plot_y_subpage_bb - colorbar_height_bb, + plot_y_subpage_bb, + }; + plpsty( 0 ); + plcol0( bg_color ); + plfill( 4, xbg, ybg ); + plcol0( col0_save ); + } + // Viewport and world coordinate ranges for all but cap and // bounding-box areas. plvpor( vx_min, vx_max, vy_min, vy_max ); @@ -1623,11 +1717,6 @@ plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); - if ( opt & PL_COLORBAR_ORIENT_RIGHT || opt & PL_COLORBAR_ORIENT_LEFT ) - cap_extent = cap_ratio * bar_height / aspspp; - else - cap_extent = cap_ratio * bar_width * aspspp; - if ( opt & PL_COLORBAR_CAP_LOW ) { // Add an extra offset for the label so it does not bump in to the @@ -1643,21 +1732,21 @@ if ( opt & PL_COLORBAR_ORIENT_RIGHT ) draw_cap( if_edge, PL_COLORBAR_ORIENT_LEFT, plot_x_subpage - cap_extent, plot_x_subpage, - plot_y_subpage - bar_height, plot_y_subpage, + plot_y_subpage - colorbar_height, plot_y_subpage, low_cap_color ); else if ( opt & PL_COLORBAR_ORIENT_TOP ) draw_cap( if_edge, PL_COLORBAR_ORIENT_BOTTOM, - plot_x_subpage, plot_x_subpage + bar_width, - plot_y_subpage - bar_height - cap_extent, plot_y_subpage - bar_height, + plot_x_subpage, plot_x_subpage + colorbar_width, + plot_y_subpage - colorbar_height - cap_extent, plot_y_subpage - colorbar_height, low_cap_color ); else if ( opt & PL_COLORBAR_ORIENT_LEFT ) draw_cap( if_edge, PL_COLORBAR_ORIENT_RIGHT, - plot_x_subpage + bar_width, plot_x_subpage + bar_width + cap_extent, - plot_y_subpage - bar_height, plot_y_subpage, + plot_x_subpage + colorbar_width, plot_x_subpage + colorbar_width + cap_extent, + plot_y_subpage - colorbar_height, plot_y_subpage, low_cap_color ); else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) draw_cap( if_edge, PL_COLORBAR_ORIENT_TOP, - plot_x_subpage, plot_x_subpage + bar_width, + plot_x_subpage, plot_x_subpage + colorbar_width, plot_y_subpage, plot_y_subpage + cap_extent, low_cap_color ); } @@ -1675,23 +1764,23 @@ // Draw a filled triangle (cap/arrow) at the high end of the scale if ( opt & PL_COLORBAR_ORIENT_RIGHT ) draw_cap( if_edge, PL_COLORBAR_ORIENT_RIGHT, - plot_x_subpage + bar_width, plot_x_subpage + bar_width + cap_extent, - plot_y_subpage - bar_height, plot_y_subpage, + plot_x_subpage + colorbar_width, plot_x_subpage + colorbar_width + cap_extent, + plot_y_subpage - colorbar_height, plot_y_subpage, high_cap_color ); else if ( opt & PL_COLORBAR_ORIENT_TOP ) draw_cap( if_edge, PL_COLORBAR_ORIENT_TOP, - plot_x_subpage, plot_x_subpage + bar_width, + plot_x_subpage, plot_x_subpage + colorbar_width, plot_y_subpage, plot_y_subpage + cap_extent, high_cap_color ); else if ( opt & PL_COLORBAR_ORIENT_LEFT ) draw_cap( if_edge, PL_COLORBAR_ORIENT_LEFT, plot_x_subpage - cap_extent, plot_x_subpage, - plot_y_subpage - bar_height, plot_y_subpage, + plot_y_subpage - colorbar_height, plot_y_subpage, high_cap_color ); else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) draw_cap( if_edge, PL_COLORBAR_ORIENT_BOTTOM, - plot_x_subpage, plot_x_subpage + bar_width, - plot_y_subpage - bar_height - cap_extent, plot_y_subpage - bar_height, + plot_x_subpage, plot_x_subpage + colorbar_width, + plot_y_subpage - colorbar_height - cap_extent, plot_y_subpage - colorbar_height, high_cap_color ); } @@ -1815,41 +1904,21 @@ plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); - if ( opt & PL_COLORBAR_BACKGROUND ) - { - PLFLT xbg[4] = { - plot_x_subpage, - plot_x_subpage, - plot_x_subpage + colorbar_width, - plot_x_subpage + colorbar_width, - }; - PLFLT ybg[4] = { - plot_y_subpage, - plot_y_subpage - colorbar_height, - plot_y_subpage - colorbar_height, - plot_y_subpage, - }; - plpsty( 0 ); - plcol0( bg_color ); - plfill( 4, xbg, ybg ); - plcol0( col0_save ); - } - if ( opt & PL_COLORBAR_BOUNDING_BOX ) { PLFLT xbb[5] = { - plot_x_subpage, - plot_x_subpage, - plot_x_subpage + colorbar_width, - plot_x_subpage + colorbar_width, - plot_x_subpage, + plot_x_subpage_bb, + plot_x_subpage_bb, + plot_x_subpage_bb + colorbar_width_bb, + plot_x_subpage_bb + colorbar_width_bb, + plot_x_subpage_bb, }; PLFLT ybb[5] = { - plot_y_subpage, - plot_y_subpage - colorbar_height, - plot_y_subpage - colorbar_height, - plot_y_subpage, - plot_y_subpage, + plot_y_subpage_bb, + plot_y_subpage_bb - colorbar_height_bb, + plot_y_subpage_bb - colorbar_height_bb, + plot_y_subpage_bb, + plot_y_subpage_bb, }; pllsty( bb_style ); plcol0( bb_color ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-06-15 17:06:33
|
Revision: 11771 http://plplot.svn.sourceforge.net/plplot/?rev=11771&view=rev Author: airwin Date: 2011-06-15 17:06:26 +0000 (Wed, 15 Jun 2011) Log Message: ----------- Smaller cap angles imply large caps which are great for debugging cap position problems, but as far as I know those are all debugged now so return cap_angle to a larger cap_angle. I have currently chosen that to be 90 deg, but we may want to make the cap angle a bit smaller than that if people prefer a slightly larger cap style. Or we may want to make this style parameter something that the user can set. Adjust label_offset inside plcolorbar to account for exact cap extent. (This was debugged with a small cap angle ==> large cap.) Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-06-15 16:55:17 UTC (rev 11770) +++ trunk/src/pllegend.c 2011-06-15 17:06:26 UTC (rev 11771) @@ -309,7 +309,7 @@ } //-------------------------------------------------------------------------- -//! Obtain character or symbol height in (y) subpage coordinates. +//! Obtain character or symbol height in (y) in normalized subpage coordinates. //! //! @param ifcharacter TRUE obtain character height, FALSE obtain symbol //! height. @@ -1119,7 +1119,7 @@ // direction of the orientation of the cap. In other words, // cap_angle completely controls the shape of the triangle, but // not its scale. - PLFLT cap_angle = 15.; + PLFLT cap_angle = 90.; // Ratio of length of cap in orientation direction // to the width of the bar (and cap) in the direction // perpendicular to the orientation in physical coordinates @@ -1178,8 +1178,9 @@ PLINT i, j, ni, nj, n_steps; PLFLT step_size; - // How far away from the axis should the label be drawn? - PLFLT label_offset; + // How far away from the axis should the label be drawn in units of + // the character height? + PLFLT label_offset = 0.; // For building plmtex option string. PLINT max_opts = 25; @@ -1192,6 +1193,9 @@ char *local_axis_opts; PLBOOL if_edge; + // Character height in x and y normalized subpage coordinates. + PLFLT character_height_x, character_height_y; + // Default position flags and sanity checks for position flags. if ( !( position & PL_POSITION_RIGHT ) && !( position & PL_POSITION_LEFT ) && !( position & PL_POSITION_TOP ) && !( position & PL_POSITION_BOTTOM ) ) { @@ -1709,24 +1713,29 @@ // Restore the previous drawing color to use for outlines and text plcol0( col0_save ); - label_offset = 0.0; - // Draw end-caps // Viewport and world coordinate ranges for cap and bounding-box areas. plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); + character_height_y = get_character_or_symbol_height( TRUE ); + // character height _in normalized subpage coordinates_ is smaller + // in the x direction if the subpage aspect ratio is larger than one. + character_height_x = character_height_y / aspspp; if ( opt & PL_COLORBAR_CAP_LOW ) { // Add an extra offset for the label so it does not bump in to the // cap if the label is placed on the same side as the cap. if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_LEFT ) || - ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_BOTTOM ) || - ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_RIGHT ) || + ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_RIGHT ) ) + { + label_offset += cap_extent/character_height_x; + } + if ( ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_BOTTOM ) || ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_TOP ) ) { - label_offset += 2.5; + label_offset += cap_extent/character_height_y; } // Draw a filled triangle (cap/arrow) at the low end of the scale if ( opt & PL_COLORBAR_ORIENT_RIGHT ) @@ -1755,11 +1764,14 @@ // Add an extra offset for the label so it does not bump in to the // cap if the label is placed on the same side as the cap. if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_RIGHT ) || - ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_TOP ) || - ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_LEFT ) || + ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_LEFT ) ) + { + label_offset += cap_extent/character_height_x; + } + if ( ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_TOP ) || ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_BOTTOM ) ) { - label_offset += 2.5; + label_offset += cap_extent/character_height_y; } // Draw a filled triangle (cap/arrow) at the high end of the scale if ( opt & PL_COLORBAR_ORIENT_RIGHT ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-11 22:04:30
|
Revision: 11807 http://plplot.svn.sourceforge.net/plplot/?rev=11807&view=rev Author: airwin Date: 2011-07-11 22:04:24 +0000 (Mon, 11 Jul 2011) Log Message: ----------- Fix small error in line-style restoration. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-11 22:03:15 UTC (rev 11806) +++ trunk/src/pllegend.c 2011-07-11 22:04:24 UTC (rev 11807) @@ -835,6 +835,7 @@ ybox[2] = ty - 0.5 * drow * box_scales[i]; ybox[3] = ty + 0.5 * drow * box_scales[i]; plfill( 4, xbox, ybox ); + pllsty( line_style_save ); plwid( line_width_save ); } if ( opt_array[i] & PL_LEGEND_LINE ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-12 01:47:15
|
Revision: 11809 http://plplot.svn.sourceforge.net/plplot/?rev=11809&view=rev Author: airwin Date: 2011-07-12 01:47:09 +0000 (Tue, 12 Jul 2011) Log Message: ----------- For some reason, plgradient gives unreliable results when the x and y world coordinates have vastly different magnitudes. Work around this issue, by changing the world coordinates of the direction perpendicular to the plcolorbar from {0., 1.} to {0., max_abs} where max_abs is the maximum of the absolute values of the minimum and maximum of the world coordinate range being plotted by the colorbar. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-11 22:11:54 UTC (rev 11808) +++ trunk/src/pllegend.c 2011-07-12 01:47:09 UTC (rev 11809) @@ -1169,7 +1169,7 @@ // Min and max values // Assumes that the values array is sorted from smallest to largest // OR from largest to smallest. - PLFLT min_value, max_value; + PLFLT min_value, max_value, max_abs; // Length of cap in orientation direction PLFLT cap_extent; @@ -1336,6 +1336,7 @@ min_value = values[0]; max_value = values[ n_values - 1 ]; + max_abs = MAX( fabs(min_value), fabs(max_value)); // Assumes that the colors array is sorted from smallest to largest. plgcmap1_range( &min_color, &max_color ); @@ -1364,12 +1365,12 @@ wx_min = min_value; wx_max = max_value; wy_min = 0.0; - wy_max = 1.0; + wy_max = max_abs; } else if ( opt & PL_COLORBAR_ORIENT_TOP ) { wx_min = 0.0; - wx_max = 1.0; + wx_max = max_abs; wy_min = min_value; wy_max = max_value; } @@ -1378,12 +1379,12 @@ wx_min = max_value; wx_max = min_value; wy_min = 0.0; - wy_max = 1.0; + wy_max = max_abs; } else if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) { wx_min = 0.0; - wx_max = 1.0; + wx_max = max_abs; wy_min = max_value; wy_max = min_value; } @@ -1663,7 +1664,7 @@ // makes up 10% of the scale and segment B makes up 20% of the scale // then segment B will be twice the length of segment A. PLcGrid grid; - PLFLT grid_axis[2] = { 0.0, 1.0 }; + PLFLT grid_axis[2] = { 0.0, max_abs }; n_steps = n_values; // Use the provided values. if ( opt & PL_COLORBAR_ORIENT_RIGHT ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-12 21:52:51
|
Revision: 11812 http://plplot.svn.sourceforge.net/plplot/?rev=11812&view=rev Author: airwin Date: 2011-07-12 21:52:45 +0000 (Tue, 12 Jul 2011) Log Message: ----------- Fix memory management issues with draw_box (static function called by plcolorbar). Implement draw_box documentation. Improve plcolorbar documentation and parameter sanity checking/defaults. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-12 05:48:39 UTC (rev 11811) +++ trunk/src/pllegend.c 2011-07-12 21:52:45 UTC (rev 11812) @@ -1013,6 +1013,28 @@ plline( 3, xs, ys ); } +//-------------------------------------------------------------------------- +//! Calculate bounding-box (if_bb TRUE) or draw box (if_bb FALSE) +//! around colorbar with possible tick mark, numerical label, and +//! exponent decorations. +//! +//! @param if_bb If if_bb is TRUE evaluate bounding box of decorated box. +//! If if_bb is FALSE draw the decorated box. +//! @param opt Can contain the same control bits as the opt argument +//! for plcolorbar. However, the only bits that relevant here are +//! PL_COLORBAR_SHADE,PL_COLORBAR_SHADE_LABEL, and +//! PL_COLORBAR_ORIENT_(RIGHT|TOP|LEFT|BOTTOM). For full +//! documentation of these bits, see the documentation of opt for +//! plcolorbar. +//! @param axis_opts Axis options for the colorbar's major axis, as +//! for plcolorbar. +//! @param if_edge If if_edge is TRUE (FALSE) do (do not) draw the edge of +//! the colorbox. +//! @param ticks As for plcolorbar. +//! @param sub_ticks As for plcolorbar. +//! @param n_values As for plcolorbar. +//! @param values As for plcolorbar. + static void draw_box( PLBOOL if_bb, PLINT opt, const char *axis_opts, PLBOOL if_edge, PLFLT ticks, PLINT sub_ticks, PLINT n_values, const PLFLT *values ) @@ -1045,6 +1067,7 @@ if ( if_bb ) { plsc->if_boxbb = FALSE; + free( local_axis_opts ); return; } // Exclude ticks for plbox call below since those tick marks and @@ -1079,17 +1102,20 @@ //! colorbar is specified with PL_COLORBAR_ORIENT_(RIGHT, TOP, LEFT, //! BOTTOM). If none of those bits are specified, the default //! orientation is toward the top, i.e., a vertical colorbar. The -//! type of colorbar can be specified with PL_COLORBAR_SHADE, -//! PL_COLORBAR_IMAGE or PL_COLORBAR_GRADIENT. The position of the -//! (optional) label/title can be specified with -//! PL_COLORBAR_LABEL_(LEFT|RIGHT|TOP|BOTTOM). If no label position -//! is specified then no label will be drawn. End-caps for the -//! colorbar can added with PL_COLORBAR_CAP_LOW and -//! PL_COLORBAR_CAP_HIGH. If a particular colorbar cap option is not -//! specified then no cap will be drawn for that end. As a special -//! case for PL_COLORBAR_SHADE, the option PL_COLORBAR_SHADE_LABEL can -//! be specified. If this option is provided then any tick marks and -//! tick labels will be placed at the breaks between shaded segments. +//! type of colorbar must be specified with one of PL_COLORBAR_IMAGE, +//! PL_COLORBAR_SHADE or PL_COLORBAR_GRADIENT. If more than one of +//! those bits is set only the first one in the above list is honored. +//! The position of the (optional) label/title can be specified with +//! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). If no label position +//! bit is set then no label will be drawn. If more than one of this +//! list of bits is specified, only the first one on the list is +//! honored. End-caps for the colorbar can added with +//! PL_COLORBAR_CAP_LOW and PL_COLORBAR_CAP_HIGH. If a particular +//! colorbar cap option is not specified then no cap will be drawn for +//! that end. As a special case for PL_COLORBAR_SHADE, the option +//! PL_COLORBAR_SHADE_LABEL can be specified. If this option is +//! provided then any tick marks and tick labels will be placed at the +//! breaks between shaded segments. //! TODO: This should be expanded to support custom placement of tick //! marks and tick labels at custom value locations for any colorbar //! type. @@ -1143,7 +1169,7 @@ //! @param axis_opts Axis options for the colorbar's major axis, as for plbox. //! @param label Text label for the colorbar. No label is drawn if no //! label position is specified with one of the -//! PL_COLORBAR_LABEL_(LEFT|RIGHT|TOP|BOTTOM) bits in opt. +//! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in opt. //! @param n_values Number of elements in the values array. //! @param values Numeric values for the data range represented by the //! colorbar. For PL_COLORBAR_SHADE, this should include one value per break @@ -1258,6 +1284,9 @@ // Decorated colorbox bounding box limits in subpage coordinates. PLFLT bb_xmin, bb_xmax, bb_ymin, bb_ymax; + // To help sanity check number of specified labels. + PLINT nlabel = 0; + // Default position flags and sanity checks for position flags. if ( !( position & PL_POSITION_RIGHT ) && !( position & PL_POSITION_LEFT ) && !( position & PL_POSITION_TOP ) && !( position & PL_POSITION_BOTTOM ) ) { @@ -1295,6 +1324,34 @@ return; } + // Only honor first bit in list of + // PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). + if ( opt & PL_COLORBAR_LABEL_RIGHT ) + { + nlabel = 1; + } + if ( opt & PL_COLORBAR_LABEL_TOP ) + { + if ( nlabel == 1 ) + opt = opt & ~PL_COLORBAR_LABEL_TOP; + else + nlabel = 1; + } + if ( opt & PL_COLORBAR_LABEL_LEFT ) + { + if ( nlabel == 1 ) + opt = opt & ~PL_COLORBAR_LABEL_LEFT; + else + nlabel = 1; + } + if ( opt & PL_COLORBAR_LABEL_BOTTOM ) + { + if ( nlabel == 1 ) + opt = opt & ~PL_COLORBAR_LABEL_BOTTOM; + else + nlabel = 1; + } + // xdmin_save, etc., are the actual external relative viewport // coordinates within the current sub-page used only for // restoration at the end. @@ -1336,7 +1393,7 @@ min_value = values[0]; max_value = values[ n_values - 1 ]; - max_abs = MAX( fabs(min_value), fabs(max_value)); + max_abs = MAX( fabs( min_value ), fabs( max_value ) ); // Assumes that the colors array is sorted from smallest to largest. plgcmap1_range( &min_color, &max_color ); @@ -1781,6 +1838,10 @@ } plgradient( 4, xs, ys, angle ); } + else + { + plabort( "plcolorbar: One of PL_COLORBAR_IMAGE, PL_COLORBAR_SHADE, or PL_COLORBAR_GRADIENT bits must be set in opt" ); + } // Restore the previous drawing color to use for outlines and text plcol0( col0_save ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-13 22:03:03
|
Revision: 11813 http://plplot.svn.sourceforge.net/plplot/?rev=11813&view=rev Author: airwin Date: 2011-07-13 22:02:56 +0000 (Wed, 13 Jul 2011) Log Message: ----------- Fix accident waiting to happen for get_subpage_per_mm (a static function which is called directly or indirectly by pllegend and plcolorbar). The only reason this function worked correctly before was it was always called after plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); But the point is the get_subpage_per_mm doesn't need to know anything about the viewport, and a call to plgspa returns all data required to calculate the x and y ratios of normalized subpage coordinates to mm. So get_subpage_per_mm can be substantially simplified, and that simplification insures that routine will give correct results when plvpor and plwind have been called with other than the above values. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-12 21:52:45 UTC (rev 11812) +++ trunk/src/pllegend.c 2011-07-13 22:02:56 UTC (rev 11813) @@ -295,17 +295,11 @@ static void get_subpage_per_mm( PLFLT *x_subpage_per_mm, PLFLT *y_subpage_per_mm ) { - // Normalized viewport limits - PLFLT vxmin, vxmax, vymin, vymax; // Size of subpage in mm PLFLT mxmin, mxmax, mymin, mymax; - // Viewport limits in world coordinates - PLFLT wxmin, wxmax, wymin, wymax; - plgvpsp( &vxmin, &vxmax, &vymin, &vymax ); plgspa( &mxmin, &mxmax, &mymin, &mymax ); - plgvpw( &wxmin, &wxmax, &wymin, &wymax ); - *x_subpage_per_mm = ( wxmax - wxmin ) / ( ( vxmax - vxmin ) * ( mxmax - mxmin ) ); - *y_subpage_per_mm = ( wymax - wymin ) / ( ( vymax - vymin ) * ( mymax - mymin ) ); + *x_subpage_per_mm = 1. / ( mxmax - mxmin ); + *y_subpage_per_mm = 1. / ( mymax - mymin ); } //-------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-13 22:49:13
|
Revision: 11814 http://plplot.svn.sourceforge.net/plplot/?rev=11814&view=rev Author: airwin Date: 2011-07-13 22:49:07 +0000 (Wed, 13 Jul 2011) Log Message: ----------- Reorganize plcolorbar code so the overall colorbar label is drawn with the separate static function draw_label. This reorganization gives identical example 33 results to before and prepares the way to reposition the label to be centred relative to the bounding box of the inner decorated box and to also do bounding box calculations for the whole object (label + inner bounding box). Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-13 22:02:56 UTC (rev 11813) +++ trunk/src/pllegend.c 2011-07-13 22:49:07 UTC (rev 11814) @@ -1008,15 +1008,16 @@ } //-------------------------------------------------------------------------- -//! Calculate bounding-box (if_bb TRUE) or draw box (if_bb FALSE) -//! around colorbar with possible tick mark, numerical label, and -//! exponent decorations. +//! Draw box (when if_bb FALSE) around colorbar with possible tick +//! marks, numerical labels of those tick marks, and exponent +//! decorations of that box or else (when if_bb TRUE) calculate +//! bounding box of that decorated box. //! -//! @param if_bb If if_bb is TRUE evaluate bounding box of decorated box. +//! @param If if_bb is TRUE evaluate bounding box of decorated box. //! If if_bb is FALSE draw the decorated box. //! @param opt Can contain the same control bits as the opt argument -//! for plcolorbar. However, the only bits that relevant here are -//! PL_COLORBAR_SHADE,PL_COLORBAR_SHADE_LABEL, and +//! for plcolorbar. However, the only bits that are relevant here are +//! PL_COLORBAR_SHADE, PL_COLORBAR_SHADE_LABEL, and //! PL_COLORBAR_ORIENT_(RIGHT|TOP|LEFT|BOTTOM). For full //! documentation of these bits, see the documentation of opt for //! plcolorbar. @@ -1089,6 +1090,199 @@ } //-------------------------------------------------------------------------- +//! Draw label (when if_bb FALSE) with appropriate position relative to the +//! "inner" bounding-box of the decorated box around the colorbar +//! or else (when if_bb TRUE) calculate combined bounding box of that label +//! + decorated box. +//! +//! @param if_bb If if_bb is TRUE evaluate bounding box of combined +//! decorated box + label. If if_bb is FALSE draw the label. +//! @param opt Can contain the same control bits as the opt argument +//! for plcolorbar. However, the only bits that are relevant here are +//! PL_COLORBAR_CAP_LOW, PL_COLORBAR_CAP_HIGH, +//! PL_COLORBAR_ORIENT_(RIGHT|TOP|LEFT|BOTTOM), and +//! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). For full documentation +//! of these bits, see the documentation of opt for plcolorbar. +//! @param cap_extent Extent of cap in normalized subpage coordinates +//! in either X or Y direction as appropriate. +//! @param label Text label for the colorbar. No label is drawn if no +//! label position is specified with one of the +//! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in opt. + +static void +draw_label( PLBOOL if_bb, PLINT opt, PLINT position, PLFLT cap_extent, + const char *label) +{ + // Justification of label text + PLFLT just; + + // How far away from the axis should the label be drawn in units of + // the character height? + PLFLT label_offset = 0.; + + // For building plmtex option string. + PLINT max_opts = 25; + char opt_label[max_opts]; + char perp; + + // To help sanity check number of specified labels. + PLINT nlabel = 0; + + // aspect ratio of physical area of subpage. + PLFLT aspspp = ( ( plsc->sppxma - plsc->sppxmi ) / plsc->xpmm ) / + ( ( plsc->sppyma - plsc->sppymi ) / plsc->ypmm ); + + // Character height in y and x normalized subpage coordinates. + PLFLT character_height_y = get_character_or_symbol_height( TRUE ); + // character height _in normalized subpage coordinates_ is smaller + // in the x direction if the subpage aspect ratio is larger than one. + PLFLT character_height_x = character_height_y / aspspp; + + // Only honor first bit in list of + // PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). + if ( opt & PL_COLORBAR_LABEL_RIGHT ) + { + nlabel = 1; + } + if ( opt & PL_COLORBAR_LABEL_TOP ) + { + if ( nlabel == 1 ) + opt = opt & ~PL_COLORBAR_LABEL_TOP; + else + nlabel = 1; + } + if ( opt & PL_COLORBAR_LABEL_LEFT ) + { + if ( nlabel == 1 ) + opt = opt & ~PL_COLORBAR_LABEL_LEFT; + else + nlabel = 1; + } + if ( opt & PL_COLORBAR_LABEL_BOTTOM ) + { + if ( nlabel == 1 ) + opt = opt & ~PL_COLORBAR_LABEL_BOTTOM; + else + nlabel = 1; + } + + // Start preparing data to help plot the label or + // calculate the corresponding bounding box changes. + + if ( opt & PL_COLORBAR_CAP_LOW ) + { + // Add an extra offset for the label so it does not bump in to the + // cap if the label is placed on the same side as the cap. + if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_LEFT ) || + ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_RIGHT ) ) + { + label_offset += cap_extent / character_height_x; + } + if ( ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_BOTTOM ) || + ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_TOP ) ) + { + label_offset += cap_extent / character_height_y; + } + } + if ( opt & PL_COLORBAR_CAP_HIGH ) + { + // Add an extra offset for the label so it does not bump in to the + // cap if the label is placed on the same side as the cap. + if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_RIGHT ) || + ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_LEFT ) ) + { + label_offset += cap_extent / character_height_x; + } + if ( ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_TOP ) || + ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_BOTTOM ) ) + { + label_offset += cap_extent / character_height_y; + } + } + if ( opt & PL_COLORBAR_LABEL_LEFT ) + { + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + if ( position & PL_POSITION_LEFT ) + label_offset += 4.0; + else + label_offset += 2.0; + perp = '\0'; + just = 0.5; + } + else + { + label_offset += 1.5; + perp = 'v'; + just = 1.0; + } + snprintf( opt_label, max_opts, "l%c", perp ); + } + else if ( opt & PL_COLORBAR_LABEL_RIGHT ) + { + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + if ( position & PL_POSITION_RIGHT ) + label_offset += 4.0; + else + label_offset += 2.0; + perp = '\0'; + just = 0.5; + } + else + { + label_offset += 1.5; + perp = 'v'; + just = 0.0; + } + snprintf( opt_label, max_opts, "r%c", perp ); + } + else if ( opt & PL_COLORBAR_LABEL_TOP ) + { + just = 0.5; + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + label_offset += 1.5; + perp = '\0'; + } + else + { + if ( position & PL_POSITION_TOP ) + label_offset += 4.0; + else + label_offset += 2.0; + perp = '\0'; + } + snprintf( opt_label, max_opts, "t%c", perp ); + } + else if ( opt & PL_COLORBAR_LABEL_BOTTOM ) + { + just = 0.5; + if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) + { + label_offset += 1.5; + perp = '\0'; + } + else + { + if ( position & PL_POSITION_BOTTOM ) + label_offset += 4.0; + else + label_offset += 2.0; + perp = '\0'; + } + snprintf( opt_label, max_opts, "b%c", perp ); + } + if ( if_bb ) + { + } + else + { + plmtex( opt_label, label_offset, 0.5, just, label ); + } +} + +//-------------------------------------------------------------------------- //! Plot color bar for image, shade or gradient plots. //! //! @param opt This variable contains bits which control the overall @@ -1183,9 +1377,6 @@ const char *axis_opts, const char *label, PLINT n_values, const PLFLT *values ) { - // Justification of label text - PLFLT just; - // Min and max values // Assumes that the values array is sorted from smallest to largest // OR from largest to smallest. @@ -1257,20 +1448,8 @@ PLINT i, j, ni, nj, n_steps; PLFLT step_size; - // How far away from the axis should the label be drawn in units of - // the character height? - PLFLT label_offset = 0.; - - // For building plmtex option string. - PLINT max_opts = 25; - char opt_string[max_opts]; - char perp; - PLBOOL if_edge; - // Character height in x and y normalized subpage coordinates. - PLFLT character_height_x, character_height_y; - // Ratio of normalized subpage coordinates to mm coordinates in // x and y. PLFLT sbxpmm, sbypmm; @@ -1278,9 +1457,6 @@ // Decorated colorbox bounding box limits in subpage coordinates. PLFLT bb_xmin, bb_xmax, bb_ymin, bb_ymax; - // To help sanity check number of specified labels. - PLINT nlabel = 0; - // Default position flags and sanity checks for position flags. if ( !( position & PL_POSITION_RIGHT ) && !( position & PL_POSITION_LEFT ) && !( position & PL_POSITION_TOP ) && !( position & PL_POSITION_BOTTOM ) ) { @@ -1318,34 +1494,6 @@ return; } - // Only honor first bit in list of - // PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). - if ( opt & PL_COLORBAR_LABEL_RIGHT ) - { - nlabel = 1; - } - if ( opt & PL_COLORBAR_LABEL_TOP ) - { - if ( nlabel == 1 ) - opt = opt & ~PL_COLORBAR_LABEL_TOP; - else - nlabel = 1; - } - if ( opt & PL_COLORBAR_LABEL_LEFT ) - { - if ( nlabel == 1 ) - opt = opt & ~PL_COLORBAR_LABEL_LEFT; - else - nlabel = 1; - } - if ( opt & PL_COLORBAR_LABEL_BOTTOM ) - { - if ( nlabel == 1 ) - opt = opt & ~PL_COLORBAR_LABEL_BOTTOM; - else - nlabel = 1; - } - // xdmin_save, etc., are the actual external relative viewport // coordinates within the current sub-page used only for // restoration at the end. @@ -1846,24 +1994,8 @@ plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); - character_height_y = get_character_or_symbol_height( TRUE ); - // character height _in normalized subpage coordinates_ is smaller - // in the x direction if the subpage aspect ratio is larger than one. - character_height_x = character_height_y / aspspp; if ( opt & PL_COLORBAR_CAP_LOW ) { - // Add an extra offset for the label so it does not bump in to the - // cap if the label is placed on the same side as the cap. - if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_LEFT ) || - ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_RIGHT ) ) - { - label_offset += cap_extent / character_height_x; - } - if ( ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_BOTTOM ) || - ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_TOP ) ) - { - label_offset += cap_extent / character_height_y; - } // Draw a filled triangle (cap/arrow) at the low end of the scale if ( opt & PL_COLORBAR_ORIENT_RIGHT ) draw_cap( if_edge, PL_COLORBAR_ORIENT_LEFT, @@ -1888,18 +2020,6 @@ } if ( opt & PL_COLORBAR_CAP_HIGH ) { - // Add an extra offset for the label so it does not bump in to the - // cap if the label is placed on the same side as the cap. - if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_RIGHT ) || - ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_LEFT ) ) - { - label_offset += cap_extent / character_height_x; - } - if ( ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_TOP ) || - ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_BOTTOM ) ) - { - label_offset += cap_extent / character_height_y; - } // Draw a filled triangle (cap/arrow) at the high end of the scale if ( opt & PL_COLORBAR_ORIENT_RIGHT ) draw_cap( if_edge, PL_COLORBAR_ORIENT_RIGHT, @@ -1933,83 +2053,7 @@ draw_box( FALSE, opt, axis_opts, if_edge, ticks, sub_ticks, n_values, values ); // Write label. - if ( opt & PL_COLORBAR_LABEL_LEFT ) - { - if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) - { - if ( position & PL_POSITION_LEFT ) - label_offset += 4.0; - else - label_offset += 2.0; - perp = '\0'; - just = 0.5; - } - else - { - label_offset += 1.5; - perp = 'v'; - just = 1.0; - } - snprintf( opt_string, max_opts, "l%c", perp ); - plmtex( opt_string, label_offset, 0.5, just, label ); - } - else if ( opt & PL_COLORBAR_LABEL_RIGHT ) - { - if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) - { - if ( position & PL_POSITION_RIGHT ) - label_offset += 4.0; - else - label_offset += 2.0; - perp = '\0'; - just = 0.5; - } - else - { - label_offset += 1.5; - perp = 'v'; - just = 0.0; - } - snprintf( opt_string, max_opts, "r%c", perp ); - plmtex( opt_string, label_offset, 0.5, just, label ); - } - else if ( opt & PL_COLORBAR_LABEL_TOP ) - { - if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) - { - label_offset += 1.5; - perp = '\0'; - } - else - { - if ( position & PL_POSITION_TOP ) - label_offset += 4.0; - else - label_offset += 2.0; - perp = '\0'; - } - snprintf( opt_string, max_opts, "t%c", perp ); - plmtex( opt_string, label_offset, 0.5, 0.5, label ); - } - else if ( opt & PL_COLORBAR_LABEL_BOTTOM ) - { - if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) - { - label_offset += 1.5; - perp = '\0'; - } - else - { - if ( position & PL_POSITION_BOTTOM ) - label_offset += 4.0; - else - label_offset += 2.0; - perp = '\0'; - } - snprintf( opt_string, max_opts, "b%c", perp ); - plmtex( opt_string, label_offset, 0.5, 0.5, label ); - } - + draw_label( FALSE, opt, position, cap_extent, label ); // Viewport and world coordinate ranges for cap and bounding-box areas. plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-14 16:36:07
|
Revision: 11815 http://plplot.svn.sourceforge.net/plplot/?rev=11815&view=rev Author: airwin Date: 2011-07-14 16:36:01 +0000 (Thu, 14 Jul 2011) Log Message: ----------- Draw overall label relative to the bounding box of the rest of the decorated (including tick marks, numerical labels for ticks, exponents, and end caps) colorbar. This change greatly simplifies the draw_box arguments and logic, and makes a much nicer-looking result. ToDo: Calculate complete bounding box of label + rest of the decorated colorbar. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-13 22:49:07 UTC (rev 11814) +++ trunk/src/pllegend.c 2011-07-14 16:36:01 UTC (rev 11815) @@ -1110,15 +1110,14 @@ //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in opt. static void -draw_label( PLBOOL if_bb, PLINT opt, PLINT position, PLFLT cap_extent, - const char *label) +draw_label( PLBOOL if_bb, PLINT opt, const char *label) { // Justification of label text PLFLT just; // How far away from the axis should the label be drawn in units of // the character height? - PLFLT label_offset = 0.; + PLFLT label_offset = 1.2; // For building plmtex option string. PLINT max_opts = 25; @@ -1169,52 +1168,18 @@ // Start preparing data to help plot the label or // calculate the corresponding bounding box changes. - if ( opt & PL_COLORBAR_CAP_LOW ) - { - // Add an extra offset for the label so it does not bump in to the - // cap if the label is placed on the same side as the cap. - if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_LEFT ) || - ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_RIGHT ) ) - { - label_offset += cap_extent / character_height_x; - } - if ( ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_BOTTOM ) || - ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_TOP ) ) - { - label_offset += cap_extent / character_height_y; - } - } - if ( opt & PL_COLORBAR_CAP_HIGH ) - { - // Add an extra offset for the label so it does not bump in to the - // cap if the label is placed on the same side as the cap. - if ( ( opt & PL_COLORBAR_ORIENT_RIGHT && opt & PL_COLORBAR_LABEL_RIGHT ) || - ( opt & PL_COLORBAR_ORIENT_LEFT && opt & PL_COLORBAR_LABEL_LEFT ) ) - { - label_offset += cap_extent / character_height_x; - } - if ( ( opt & PL_COLORBAR_ORIENT_TOP && opt & PL_COLORBAR_LABEL_TOP ) || - ( opt & PL_COLORBAR_ORIENT_BOTTOM && opt & PL_COLORBAR_LABEL_BOTTOM ) ) - { - label_offset += cap_extent / character_height_y; - } - } if ( opt & PL_COLORBAR_LABEL_LEFT ) { if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) { - if ( position & PL_POSITION_LEFT ) - label_offset += 4.0; - else - label_offset += 2.0; perp = '\0'; just = 0.5; } else { - label_offset += 1.5; perp = 'v'; just = 1.0; + label_offset -= 0.5; } snprintf( opt_label, max_opts, "l%c", perp ); } @@ -1222,55 +1187,27 @@ { if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) { - if ( position & PL_POSITION_RIGHT ) - label_offset += 4.0; - else - label_offset += 2.0; perp = '\0'; just = 0.5; } else { - label_offset += 1.5; perp = 'v'; just = 0.0; + label_offset -= 0.5; } snprintf( opt_label, max_opts, "r%c", perp ); } else if ( opt & PL_COLORBAR_LABEL_TOP ) { + perp = '\0'; just = 0.5; - if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) - { - label_offset += 1.5; - perp = '\0'; - } - else - { - if ( position & PL_POSITION_TOP ) - label_offset += 4.0; - else - label_offset += 2.0; - perp = '\0'; - } snprintf( opt_label, max_opts, "t%c", perp ); } else if ( opt & PL_COLORBAR_LABEL_BOTTOM ) { + perp = '\0'; just = 0.5; - if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) - { - label_offset += 1.5; - perp = '\0'; - } - else - { - if ( position & PL_POSITION_BOTTOM ) - label_offset += 4.0; - else - label_offset += 2.0; - perp = '\0'; - } snprintf( opt_label, max_opts, "b%c", perp ); } if ( if_bb ) @@ -1607,6 +1544,7 @@ bb_xmax = plsc->boxbb_xmax * sbxpmm; bb_ymin = plsc->boxbb_ymin * sbypmm; bb_ymax = plsc->boxbb_ymax * sbypmm; + if ( opt & PL_COLORBAR_CAP_LOW ) { if ( opt & PL_COLORBAR_ORIENT_RIGHT ) @@ -1629,6 +1567,10 @@ if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) bb_ymin = MIN( bb_ymin, -cap_extent ); } + + // Calculate the bounding box for combined label + decorated box. + //draw_label( TRUE , opt, label ); + colorbar_width_bb = bb_xmax - bb_xmin; colorbar_height_bb = bb_ymax - bb_ymin; // Offsets of upper left corner relative to plvpor coordinates of that @@ -1689,7 +1631,7 @@ plabort( "plcolorbar: Invalid PL_COLORBAR_ORIENT_* bits" ); } - // Viewport and world coordinate ranges for cap and bounding-box areas. + // Viewport and world coordinate ranges for bounding-box. plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); @@ -1713,8 +1655,7 @@ plcol0( col0_save ); } - // Viewport and world coordinate ranges for all but cap and - // bounding-box areas. + // Viewport and world coordinate ranges for colorbar. plvpor( vx_min, vx_max, vy_min, vy_max ); plwind( wx_min, wx_max, wy_min, wy_max ); @@ -1990,7 +1931,7 @@ // Draw end-caps - // Viewport and world coordinate ranges for cap and bounding-box areas. + // Viewport and world coordinate ranges for cap. plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); @@ -2043,8 +1984,7 @@ high_cap_color ); } - // Viewport and world coordinate ranges for all but cap and - // bounding-box areas. + // Viewport and world coordinate ranges for box. plvpor( vx_min, vx_max, vy_min, vy_max ); plwind( wx_min, wx_max, wy_min, wy_max ); @@ -2052,9 +1992,8 @@ // labels) box. draw_box( FALSE, opt, axis_opts, if_edge, ticks, sub_ticks, n_values, values ); - // Write label. - draw_label( FALSE, opt, position, cap_extent, label ); - // Viewport and world coordinate ranges for cap and bounding-box areas. + + // Viewport and world coordinate ranges for bounding-box. plvpor( 0., 1., 0., 1. ); plwind( 0., 1., 0., 1. ); @@ -2081,6 +2020,13 @@ pllsty( line_style_save ); } + // Viewport coordinate ranges for label. + //plvpor( vx_min, vx_max, vy_min, vy_max ); + plvpor( plot_x_subpage_bb, plot_x_subpage_bb + colorbar_width_bb, plot_y_subpage_bb - colorbar_height_bb, plot_y_subpage_bb ); + + // Write label. + draw_label( FALSE, opt, label ); + // Restore previous plot characteristics. plcol0( col0_save ); plvpor( xdmin_save, xdmax_save, ydmin_save, ydmax_save ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-17 16:30:28
|
Revision: 11817 http://plplot.svn.sourceforge.net/plplot/?rev=11817&view=rev Author: airwin Date: 2011-07-17 16:30:21 +0000 (Sun, 17 Jul 2011) Log Message: ----------- Code reorganization in preparation for calculating complete bounding box and position of the labelled and decorated colorbar. Systematically use the mm form of bounding box limits, plsc->boxbb_xmin, etc., rather than the confusing mixture of that form and one where the limits are expressed in normalized subpage coordinates. Implement the static function, calculate_limits, to isolate in one place all the limit changes due to a changed bounding box. The first call of this function is associated with changing the bounding box and corresponding position calculation from the undecorated colorbar to the decorated (ticks, numerical tick labels, and exponents) colorbar. The second call of this function (not yet used) will be associated with changing the bounding box and corresponding position calculationfrom the decorated colorbar to the labelled and decorated colorbar. However, the calculate_limits code is not yet fully understood/documented (since it just collected pre-existing code which was not fully understood/documented into a static function) so the second call is not used yet. As expected, the result is identical to the previous commit, i.e., labels are currently ignored in the bounding box calculation and in the calculation of the position of that bounding box in the overall plot. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-14 16:37:58 UTC (rev 11816) +++ trunk/src/pllegend.c 2011-07-17 16:30:21 UTC (rev 11817) @@ -569,7 +569,7 @@ PLFLT x_subpage_per_mm, y_subpage_per_mm, text_width0 = 0., text_width; PLFLT width_border, column_separation, - legend_width, legend_height, legend_width_vc, legend_height_vc; + legend_width, legend_height, legend_width_ac, legend_height_ac; PLFLT x_legend_position, y_legend_position, xsign, ysign; PLINT some_boxes = 0, some_lines = 0, some_symbols = 0; @@ -703,10 +703,10 @@ // Total width and height of legend area in adopted coordinates. - legend_width_vc = subpage_to_adopted_x( legend_width ) - subpage_to_adopted_x( 0. ); - legend_height_vc = subpage_to_adopted_y( legend_height ) - subpage_to_adopted_y( 0. ); - *p_legend_width = legend_width_vc; - *p_legend_height = legend_height_vc; + legend_width_ac = subpage_to_adopted_x( legend_width ) - subpage_to_adopted_x( 0. ); + legend_height_ac = subpage_to_adopted_y( legend_height ) - subpage_to_adopted_y( 0. ); + *p_legend_width = legend_width_ac; + *p_legend_height = legend_height_ac; // dcolumn is the spacing from one column to the next and // drow is the spacing from one row to the next. @@ -714,7 +714,7 @@ adopted_to_subpage_x( plot_width ) - adopted_to_subpage_x( 0. ); drow = text_spacing * character_height; - legend_position( position, legend_width_vc, legend_height_vc, &x_legend_position, &y_legend_position, &xsign, &ysign ); + legend_position( position, legend_width_ac, legend_height_ac, &x_legend_position, &y_legend_position, &xsign, &ysign ); plot_x = x * xsign + x_legend_position; plot_y = y * ysign + y_legend_position; plot_x_end = plot_x + plot_width; @@ -1110,7 +1110,7 @@ //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in opt. static void -draw_label( PLBOOL if_bb, PLINT opt, const char *label) +draw_label( PLBOOL if_bb, PLINT opt, const char *label ) { // Justification of label text PLFLT just; @@ -1120,9 +1120,9 @@ PLFLT label_offset = 1.2; // For building plmtex option string. - PLINT max_opts = 25; - char opt_label[max_opts]; - char perp; + PLINT max_opts = 25; + char opt_label[max_opts]; + char perp; // To help sanity check number of specified labels. PLINT nlabel = 0; @@ -1136,7 +1136,18 @@ // character height _in normalized subpage coordinates_ is smaller // in the x direction if the subpage aspect ratio is larger than one. PLFLT character_height_x = character_height_y / aspspp; - + + // Ratio of normalized subpage coordinates to mm coordinates in + // x and y. + PLFLT spxpmm = plsc->xpmm / ( plsc->sppxma - plsc->sppxmi ); + PLFLT spypmm = plsc->ypmm / ( plsc->sppyma - plsc->sppymi ); + PLFLT label_length_mm = plstrl( label ); + + PLFLT parallel_height_mm, perpendicular_height_mm, + default_mm, char_height_mm; + + plgchr( &default_mm, &char_height_mm ); + // Only honor first bit in list of // PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). if ( opt & PL_COLORBAR_LABEL_RIGHT ) @@ -1167,13 +1178,41 @@ // Start preparing data to help plot the label or // calculate the corresponding bounding box changes. - + + if ( if_bb ) + { + // Bounding-box limits are the viewport limits in mm before corrections + // for decorations are applied. + plsc->boxbb_xmin = plsc->vppxmi / plsc->xpmm; + plsc->boxbb_xmax = plsc->vppxma / plsc->xpmm; + plsc->boxbb_ymin = plsc->vppymi / plsc->ypmm; + plsc->boxbb_ymax = plsc->vppyma / plsc->ypmm; + + // For labels written parallel to axis, label_offset of zero + // corresponds to character centred on edge so should add 0.5 to + // height to obtain bounding box edge in direction away from + // edge. However, experimentally found 0.7 gave a better + // looking result. + parallel_height_mm = ( label_offset + 0.7 ) * char_height_mm; + + // For labels written perpendicular to axis, label_offset of + // zero corresponds to a character whose edge just touches the + // edge of the box so should add 0. to label_offset (corrected + // by -0.5 below) to obtain bounding box edge in direction away + // from edge, and that value apparently works. + perpendicular_height_mm = ( label_offset - 0.5 + 0.0 ) * char_height_mm; + } if ( opt & PL_COLORBAR_LABEL_LEFT ) { if ( opt & PL_COLORBAR_ORIENT_TOP || opt & PL_COLORBAR_ORIENT_BOTTOM ) { perp = '\0'; just = 0.5; + if ( if_bb ) + { + //*p_bb_xmin = MIN ( *p_bb_xmin, spxpmm * ( plsc->vppxmi / + // plsc->xpmm - parallel_height_mm - label_length_mm ) ); + } } else { @@ -1210,16 +1249,58 @@ just = 0.5; snprintf( opt_label, max_opts, "b%c", perp ); } - if ( if_bb ) - { - } - else - { + if ( !if_bb ) plmtex( opt_label, label_offset, 0.5, just, label ); - } } //-------------------------------------------------------------------------- +//! Calculate important positional limits for colorbar as a function +//! of the current bounding box limits and prior bounding-box height. +//! +// dx_subpage, dy_subpageDifferences between normalized subpage coordinates for the old +// bounding box and the new one. + +static void +calculate_limits( PLINT position, PLFLT x, PLFLT y, + PLFLT xdmin_adopted, PLFLT xdmax_adopted, PLFLT ydmin_adopted, PLFLT ydmax_adopted, + PLFLT prior_bb_height, + PLFLT *p_colorbar_width_bb, PLFLT *p_colorbar_height_bb, + PLFLT *p_colorbar_width_ac, PLFLT *p_colorbar_height_ac, + PLFLT *p_plot_x_subpage_bb, PLFLT *p_plot_y_subpage_bb, + PLFLT *p_dx_subpage, PLFLT *p_dy_subpage + ) +{ + PLFLT x_colorbar_position, y_colorbar_position, xsign, ysign; + PLFLT plot_x, plot_y; + // Ratio of normalized subpage coordinates to mm coordinates in + // x and y. + PLFLT spxpmm = plsc->xpmm / ( plsc->sppxma - plsc->sppxmi ); + PLFLT spypmm = plsc->ypmm / ( plsc->sppyma - plsc->sppymi ); + + // New bounding box width and height + *p_colorbar_width_bb = ( plsc->boxbb_xmax - plsc->boxbb_xmin ) * spxpmm; + *p_colorbar_height_bb = ( plsc->boxbb_ymax - plsc->boxbb_ymin ) * spypmm; + // Offsets of upper left corner relative to plvpor coordinates of that + // point which must be (0., prior_bb_height) as set up by the + // plvpor call prior to the calculate_limits call. + *p_dx_subpage = -plsc->boxbb_xmin * spxpmm; + *p_dy_subpage = prior_bb_height - plsc->boxbb_ymax * spypmm; + // Total width and height of colorbar bounding box in adopted + // coordinates. + *p_colorbar_width_ac = subpage_to_adopted_x( *p_colorbar_width_bb ) - + subpage_to_adopted_x( 0. ); + *p_colorbar_height_ac = subpage_to_adopted_y( *p_colorbar_height_bb ) - + subpage_to_adopted_y( 0. ); + legend_position( position, *p_colorbar_width_ac, *p_colorbar_height_ac, &x_colorbar_position, &y_colorbar_position, &xsign, &ysign ); + plot_x = x * xsign + x_colorbar_position; + plot_y = y * ysign + y_colorbar_position; + // Normalized subpage coordinates (top-left corner) for bounding box. + *p_plot_x_subpage_bb = adopted_to_subpage_x( plot_x ); + *p_plot_y_subpage_bb = adopted_to_subpage_y( plot_y ); +} + + +//-------------------------------------------------------------------------- //! Plot color bar for image, shade or gradient plots. //! //! @param opt This variable contains bits which control the overall @@ -1318,8 +1399,9 @@ // Assumes that the values array is sorted from smallest to largest // OR from largest to smallest. PLFLT min_value, max_value, max_abs; - // Length of cap in orientation direction - PLFLT cap_extent; + // Length of cap in orientation direction in normalized subpage + // coordinates and mm. + PLFLT cap_extent, cap_extent_mm; // The colorbar cap is an equilateral triangle with cap_angle // the angle (in degrees) of the unequal angle pointing in the @@ -1357,16 +1439,12 @@ // positional data. PLFLT colorbar_width, colorbar_height, colorbar_width_bb, colorbar_height_bb, - colorbar_width_vc, colorbar_height_vc, - x_colorbar_position, y_colorbar_position, - xsign, ysign, - plot_x, plot_y; + colorbar_width_ac, colorbar_height_ac, + colorbar_width_mm, colorbar_height_mm; // Normalized subpage coordinates of top left of the bounding box. PLFLT plot_x_subpage_bb, plot_y_subpage_bb; - // Differences between normalized subpage coordinates for the - // undecorated colorbar (where the decorations consist of external - // tick marks, numerical tick labels, or text if any of those - // exist) and the bounding box. + // Change in normalized subpage coordinates of the top left of undecorated + // colorbar, PLFLT dx_subpage, dy_subpage; // Normalized subpage coordinates of the top left of undecorated // colorbar, @@ -1382,17 +1460,18 @@ PLFLT **color_data; // Setting up the data for display - PLINT i, j, ni, nj, n_steps; - PLFLT step_size; + PLINT i, j, ni, nj, n_steps; + PLFLT step_size; PLBOOL if_edge; // Ratio of normalized subpage coordinates to mm coordinates in // x and y. - PLFLT sbxpmm, sbypmm; + PLFLT spxpmm = plsc->xpmm / ( plsc->sppxma - plsc->sppxmi ); + PLFLT spypmm = plsc->ypmm / ( plsc->sppyma - plsc->sppymi ); - // Decorated colorbox bounding box limits in subpage coordinates. - PLFLT bb_xmin, bb_xmax, bb_ymin, bb_ymax; + // plvpor limits for label. + PLFLT label_vpor_xmin, label_vpor_xmax, label_vpor_ymin, label_vpor_ymax; // Default position flags and sanity checks for position flags. if ( !( position & PL_POSITION_RIGHT ) && !( position & PL_POSITION_LEFT ) && !( position & PL_POSITION_TOP ) && !( position & PL_POSITION_BOTTOM ) ) @@ -1478,20 +1557,24 @@ plgcmap1_range( &min_color, &max_color ); // Width and height of the undecorated colorbar in normalized - // subpage coordinates. + // subpage coordinates and mm. colorbar_width = adopted_to_subpage_x( x_length ) - adopted_to_subpage_x( 0. ); colorbar_height = adopted_to_subpage_y( y_length ) - adopted_to_subpage_y( 0. ); + colorbar_width_mm = colorbar_width / spxpmm; + colorbar_height_mm = colorbar_height / spypmm; // Extent of cap in normalized subpage coordinates in either X or Y - // direction as appropriate. + // direction as appropriate in normalized subpage coordinates and mm. if ( opt & PL_COLORBAR_ORIENT_RIGHT || opt & PL_COLORBAR_ORIENT_LEFT ) { - cap_extent = cap_ratio * colorbar_height / aspspp; + cap_extent = cap_ratio * colorbar_height / aspspp; + cap_extent_mm = cap_extent / spxpmm; } else { - cap_extent = cap_ratio * colorbar_width * aspspp; + cap_extent = cap_ratio * colorbar_width * aspspp; + cap_extent_mm = cap_extent / spypmm; } // Specify the proper window ranges for colorbar depending on @@ -1528,9 +1611,11 @@ { plabort( "plcolorbar: Invalid PL_COLORBAR_ORIENT_* bits" ); } - // Viewport is correct size, but has an incorrect offset compared - // to the final result, but this should not affect the bounding - // box range or offsets calculated just below. + // Viewport is correct size but has a shifted zero point compared + // to the final result. This difference affects individual values + // of bb_xmin, etc., but calculate_limits below takes account of + // this shifted zero point so its results such as bounding-box + // range and position of the bounding box should be unaffected. plvpor( 0., colorbar_width, 0., colorbar_height ); plwind( wx_min, wx_max, wy_min, wy_max ); @@ -1538,64 +1623,79 @@ // marks + numerical tick labels) box. draw_box( TRUE, opt, axis_opts, if_edge, ticks, sub_ticks, n_values, values ); - sbxpmm = plsc->xpmm / ( plsc->sppxma - plsc->sppxmi ); - sbypmm = plsc->ypmm / ( plsc->sppyma - plsc->sppymi ); - bb_xmin = plsc->boxbb_xmin * sbxpmm; - bb_xmax = plsc->boxbb_xmax * sbxpmm; - bb_ymin = plsc->boxbb_ymin * sbypmm; - bb_ymax = plsc->boxbb_ymax * sbypmm; if ( opt & PL_COLORBAR_CAP_LOW ) { if ( opt & PL_COLORBAR_ORIENT_RIGHT ) - bb_xmin = MIN( bb_xmin, -cap_extent ); + plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, -cap_extent_mm ); if ( opt & PL_COLORBAR_ORIENT_TOP ) - bb_ymin = MIN( bb_ymin, -cap_extent ); + plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, -cap_extent_mm ); if ( opt & PL_COLORBAR_ORIENT_LEFT ) - bb_xmax = MAX( bb_xmax, colorbar_width + cap_extent ); + plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, colorbar_width_mm + cap_extent_mm ); if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) - bb_ymax = MAX( bb_ymax, colorbar_height + cap_extent ); + plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, colorbar_height_mm + cap_extent_mm ); } if ( opt & PL_COLORBAR_CAP_HIGH ) { if ( opt & PL_COLORBAR_ORIENT_RIGHT ) - bb_xmax = MAX( bb_xmax, colorbar_width + cap_extent ); + plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, colorbar_width_mm + cap_extent_mm ); if ( opt & PL_COLORBAR_ORIENT_TOP ) - bb_ymax = MAX( bb_ymax, colorbar_height + cap_extent ); + plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, colorbar_height_mm + cap_extent_mm ); if ( opt & PL_COLORBAR_ORIENT_LEFT ) - bb_xmin = MIN( bb_xmin, -cap_extent ); + plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, -cap_extent_mm ); if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) - bb_ymin = MIN( bb_ymin, -cap_extent ); + plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, -cap_extent_mm ); } - // Calculate the bounding box for combined label + decorated box. - //draw_label( TRUE , opt, label ); + // Calculate limits relevant to label position. + calculate_limits( position, x, y, + xdmin_adopted, xdmax_adopted, ydmin_adopted, ydmax_adopted, + colorbar_height, + &colorbar_width_bb, &colorbar_height_bb, + &colorbar_width_ac, &colorbar_height_ac, + &plot_x_subpage_bb, &plot_y_subpage_bb, + &dx_subpage, &dy_subpage ); - colorbar_width_bb = bb_xmax - bb_xmin; - colorbar_height_bb = bb_ymax - bb_ymin; - // Offsets of upper left corner relative to plvpor coordinates of that - // point which are (0., colorbar_height), see above. - dx_subpage = -bb_xmin; - dy_subpage = colorbar_height - bb_ymax; - // Total width and height of colorbar bounding box in adopted subpage - // coordinates. - colorbar_width_vc = subpage_to_adopted_x( colorbar_width_bb ) - - subpage_to_adopted_x( 0. ); - colorbar_height_vc = subpage_to_adopted_y( colorbar_height_bb ) - - subpage_to_adopted_y( 0. ); - *p_colorbar_width = colorbar_width_vc; - *p_colorbar_height = colorbar_height_vc; - legend_position( position, colorbar_width_vc, colorbar_height_vc, &x_colorbar_position, &y_colorbar_position, &xsign, &ysign ); - plot_x = x * xsign + x_colorbar_position; - plot_y = y * ysign + y_colorbar_position; - // Normalized subpage coordinates (top-left corner) for bounding box. - plot_x_subpage_bb = adopted_to_subpage_x( plot_x ); - plot_y_subpage_bb = adopted_to_subpage_y( plot_y ); // Normalized subpage coordinates (top-left corner) for undecorated // colorbar plot_x_subpage = plot_x_subpage_bb + dx_subpage; plot_y_subpage = plot_y_subpage_bb + dy_subpage; + label_vpor_xmin = plot_x_subpage_bb; + label_vpor_xmax = plot_x_subpage_bb + colorbar_width_bb; + label_vpor_ymin = plot_y_subpage_bb - colorbar_height_bb; + label_vpor_ymax = plot_y_subpage_bb; + + if ( 0 ) + { + // Viewport for draw_label is correct size, but has a shifted zero + // point compared to the final result but consistent with the + // coordinate scheme for bb_xmin, etc., established above with the + // previous plvpor call. calculate_limits below takes account of + // this shifted zero point so its results such as bounding-box + // range and position of the bounding box should be unaffected. + plvpor( 0., label_vpor_xmax - label_vpor_xmin, 0., label_vpor_ymax - label_vpor_ymin ); + + // Calculate the bounding box for combined label + decorated box. + draw_label( TRUE, opt, label ); + + // Calculate overall limits. + calculate_limits( position, x, y, + xdmin_adopted, xdmax_adopted, ydmin_adopted, ydmax_adopted, + label_vpor_ymax - label_vpor_ymin, + &colorbar_width_bb, &colorbar_height_bb, + &colorbar_width_ac, &colorbar_height_ac, + &plot_x_subpage_bb, &plot_y_subpage_bb, + &dx_subpage, &dy_subpage ); + + // Normalized subpage coordinates (top-left corner) for undecorated + // colorbar + //plot_x_subpage = plot_x_subpage_bb + dx_subpage; + //plot_y_subpage = plot_y_subpage_bb + dy_subpage; + } + *p_colorbar_width = colorbar_width_ac; + *p_colorbar_height = colorbar_height_ac; + // Specify the proper viewport ranges for colorbar depending on // orientation. if ( opt & PL_COLORBAR_ORIENT_RIGHT ) @@ -2020,11 +2120,9 @@ pllsty( line_style_save ); } + // Write label. // Viewport coordinate ranges for label. - //plvpor( vx_min, vx_max, vy_min, vy_max ); - plvpor( plot_x_subpage_bb, plot_x_subpage_bb + colorbar_width_bb, plot_y_subpage_bb - colorbar_height_bb, plot_y_subpage_bb ); - - // Write label. + plvpor( label_vpor_xmin, label_vpor_xmax, label_vpor_ymin, label_vpor_ymax ); draw_label( FALSE, opt, label ); // Restore previous plot characteristics. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-17 17:34:09
|
Revision: 11818 http://plplot.svn.sourceforge.net/plplot/?rev=11818&view=rev Author: airwin Date: 2011-07-17 17:34:03 +0000 (Sun, 17 Jul 2011) Log Message: ----------- Make second call to calculate_limits with appropriate transformation of input and output results. Since additional coordinate system tranformations are involved the results are numerically different, but the ndiff app confirms these changes are only for one unit in the last PostScript place. That numerical result helps to verify that the correct transformations are being used for the second calculate_limits call. ToDo: Implement bounding box calculation in draw_label so that the overall position and bounding box will (finally) be correct. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-17 16:30:21 UTC (rev 11817) +++ trunk/src/pllegend.c 2011-07-17 17:34:03 UTC (rev 11818) @@ -1661,38 +1661,42 @@ plot_x_subpage = plot_x_subpage_bb + dx_subpage; plot_y_subpage = plot_y_subpage_bb + dy_subpage; + // Coordinates of bounding box for decorated colorbar (without overall label). label_vpor_xmin = plot_x_subpage_bb; label_vpor_xmax = plot_x_subpage_bb + colorbar_width_bb; label_vpor_ymin = plot_y_subpage_bb - colorbar_height_bb; label_vpor_ymax = plot_y_subpage_bb; - if ( 0 ) - { - // Viewport for draw_label is correct size, but has a shifted zero - // point compared to the final result but consistent with the - // coordinate scheme for bb_xmin, etc., established above with the - // previous plvpor call. calculate_limits below takes account of - // this shifted zero point so its results such as bounding-box - // range and position of the bounding box should be unaffected. - plvpor( 0., label_vpor_xmax - label_vpor_xmin, 0., label_vpor_ymax - label_vpor_ymin ); + // Viewport for draw_label is correct size, but has a shifted zero + // point compared to the final result but consistent with the + // coordinate scheme for bb_xmin, etc., established above with the + // previous plvpor call. calculate_limits below takes account of + // this shifted zero point so its results such as bounding-box + // range and position of the bounding box should be unaffected. + plvpor( 0., label_vpor_xmax - label_vpor_xmin, 0., label_vpor_ymax - label_vpor_ymin ); - // Calculate the bounding box for combined label + decorated box. - draw_label( TRUE, opt, label ); + // Calculate the bounding box for combined label + decorated box. + draw_label( TRUE, opt, label ); - // Calculate overall limits. - calculate_limits( position, x, y, - xdmin_adopted, xdmax_adopted, ydmin_adopted, ydmax_adopted, - label_vpor_ymax - label_vpor_ymin, - &colorbar_width_bb, &colorbar_height_bb, - &colorbar_width_ac, &colorbar_height_ac, - &plot_x_subpage_bb, &plot_y_subpage_bb, - &dx_subpage, &dy_subpage ); + // Calculate overall limits. + calculate_limits( position, x, y, + xdmin_adopted, xdmax_adopted, ydmin_adopted, ydmax_adopted, + label_vpor_ymax - label_vpor_ymin, + &colorbar_width_bb, &colorbar_height_bb, + &colorbar_width_ac, &colorbar_height_ac, + &plot_x_subpage_bb, &plot_y_subpage_bb, + &dx_subpage, &dy_subpage ); - // Normalized subpage coordinates (top-left corner) for undecorated - // colorbar - //plot_x_subpage = plot_x_subpage_bb + dx_subpage; - //plot_y_subpage = plot_y_subpage_bb + dy_subpage; - } + // Transform normalized subpage coordinates (top-left corner) for undecorated + // colorbar to new coordinate system. + plot_x_subpage += dx_subpage; + plot_y_subpage += dy_subpage; + // Transform bounding box for decorated colorbar (without label) to + // new coordinate system. + label_vpor_xmin += dx_subpage; + label_vpor_xmax += dx_subpage; + label_vpor_ymin += dy_subpage; + label_vpor_ymax += dy_subpage; *p_colorbar_width = colorbar_width_ac; *p_colorbar_height = colorbar_height_ac; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2011-07-18 05:35:03
|
Revision: 11820 http://plplot.svn.sourceforge.net/plplot/?rev=11820&view=rev Author: airwin Date: 2011-07-18 05:34:57 +0000 (Mon, 18 Jul 2011) Log Message: ----------- Improve internal documentation of calculate_limits so that it is more obvious what is being calculated. Distinguish arguments for calls to calculate_limits more carefully to keep track of everything necessary for calculating offsets and sizes of bounding boxes for undecorated colorbar, decorated colorbar, and labelled and decorated colorbar. Implement bounding box calculation in draw_label so that the overall bounding box (for labelled and decorated colorbar) will (finally) be correct. This change has been tested for long labels for plcolorbar in example 33 where both x and y bounding box limits are increased as well as the standard short labels for plcolorbar in example 33. This commit completes my planned work on the bounding box and position calculations for plcolorbar. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-07-17 19:38:33 UTC (rev 11819) +++ trunk/src/pllegend.c 2011-07-18 05:34:57 UTC (rev 11820) @@ -1191,9 +1191,9 @@ // For labels written parallel to axis, label_offset of zero // corresponds to character centred on edge so should add 0.5 to // height to obtain bounding box edge in direction away from - // edge. However, experimentally found 0.7 gave a better + // edge. However, experimentally found 0.8 gave a better // looking result. - parallel_height_mm = ( label_offset + 0.7 ) * char_height_mm; + parallel_height_mm = ( label_offset + 0.8 ) * char_height_mm; // For labels written perpendicular to axis, label_offset of // zero corresponds to a character whose edge just touches the @@ -1210,8 +1210,14 @@ just = 0.5; if ( if_bb ) { - //*p_bb_xmin = MIN ( *p_bb_xmin, spxpmm * ( plsc->vppxmi / - // plsc->xpmm - parallel_height_mm - label_length_mm ) ); + plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, plsc->vppxmi / + plsc->xpmm - parallel_height_mm ); + plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, + 0.5 * ( plsc->vppymi + plsc->vppyma ) / + plsc->ypmm - 0.5 * label_length_mm ); + plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, + 0.5 * ( plsc->vppymi + plsc->vppyma ) / + plsc->ypmm + 0.5 * label_length_mm ); } } else @@ -1219,6 +1225,11 @@ perp = 'v'; just = 1.0; label_offset -= 0.5; + if ( if_bb ) + { + plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, plsc->vppxmi / + plsc->xpmm - perpendicular_height_mm - label_length_mm ); + } } snprintf( opt_label, max_opts, "l%c", perp ); } @@ -1228,12 +1239,28 @@ { perp = '\0'; just = 0.5; + if ( if_bb ) + { + plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, plsc->vppxma / + plsc->xpmm + parallel_height_mm ); + plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, + 0.5 * ( plsc->vppymi + plsc->vppyma ) / + plsc->ypmm - 0.5 * label_length_mm ); + plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, + 0.5 * ( plsc->vppymi + plsc->vppyma ) / + plsc->ypmm + 0.5 * label_length_mm ); + } } else { perp = 'v'; just = 0.0; label_offset -= 0.5; + if ( if_bb ) + { + plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, plsc->vppxma / + plsc->xpmm + perpendicular_height_mm + label_length_mm ); + } } snprintf( opt_label, max_opts, "r%c", perp ); } @@ -1242,12 +1269,34 @@ perp = '\0'; just = 0.5; snprintf( opt_label, max_opts, "t%c", perp ); + if ( if_bb ) + { + plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, plsc->vppyma / + plsc->ypmm + parallel_height_mm ); + plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, + 0.5 * ( plsc->vppxmi + plsc->vppxma ) / + plsc->xpmm - 0.5 * label_length_mm ); + plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, + 0.5 * ( plsc->vppxmi + plsc->vppxma ) / + plsc->xpmm + 0.5 * label_length_mm ); + } } else if ( opt & PL_COLORBAR_LABEL_BOTTOM ) { perp = '\0'; just = 0.5; snprintf( opt_label, max_opts, "b%c", perp ); + if ( if_bb ) + { + plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, plsc->vppymi / + plsc->ypmm - parallel_height_mm ); + plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, + 0.5 * ( plsc->vppxmi + plsc->vppxma ) / + plsc->xpmm - 0.5 * label_length_mm ); + plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, + 0.5 * ( plsc->vppxmi + plsc->vppxma ) / + plsc->xpmm + 0.5 * label_length_mm ); + } } if ( !if_bb ) plmtex( opt_label, label_offset, 0.5, just, label ); @@ -1256,6 +1305,13 @@ //-------------------------------------------------------------------------- //! Calculate important positional limits for colorbar as a function //! of the current bounding box limits and prior bounding-box height. +//! plvpor(0, prior_bb_width, 0, prior_bb_height) is called before +//! each bounding-box calculation and this calculate_limits call, +//! where prior_bb_width and prior_bb_height are the width and height +//! of the prior bounding box in subpage coordinates. Thus, an +//! arbitrary but convenient offset is given to old and new bounding +//! box limits because the actual offset is not known until +//! calculate_limits is finished. //! // dx_subpage, dy_subpageDifferences between normalized subpage coordinates for the old // bounding box and the new one. @@ -1277,24 +1333,31 @@ PLFLT spxpmm = plsc->xpmm / ( plsc->sppxma - plsc->sppxmi ); PLFLT spypmm = plsc->ypmm / ( plsc->sppyma - plsc->sppymi ); - // New bounding box width and height + // New bounding box width and height in normalized subpage coordinates. *p_colorbar_width_bb = ( plsc->boxbb_xmax - plsc->boxbb_xmin ) * spxpmm; *p_colorbar_height_bb = ( plsc->boxbb_ymax - plsc->boxbb_ymin ) * spypmm; - // Offsets of upper left corner relative to plvpor coordinates of that - // point which must be (0., prior_bb_height) as set up by the - // plvpor call prior to the calculate_limits call. + + // Offsets (in sense of prior minus current) of upper left corner of prior bounding box + // relative to current bounding box in normalized subpage coordinates. From + // the above comments, the upper left corner of prior bounding box + // has the coordinates (0., prior_bb_height). *p_dx_subpage = -plsc->boxbb_xmin * spxpmm; *p_dy_subpage = prior_bb_height - plsc->boxbb_ymax * spypmm; - // Total width and height of colorbar bounding box in adopted + + // Total width and height of new bounding box in adopted // coordinates. *p_colorbar_width_ac = subpage_to_adopted_x( *p_colorbar_width_bb ) - subpage_to_adopted_x( 0. ); *p_colorbar_height_ac = subpage_to_adopted_y( *p_colorbar_height_bb ) - subpage_to_adopted_y( 0. ); + + // Calculate parameters that help determine the position of the top + // left of the legend in adopted coordinates. See pllegend + // documentation for definition of adopted coordinates. legend_position( position, *p_colorbar_width_ac, *p_colorbar_height_ac, &x_colorbar_position, &y_colorbar_position, &xsign, &ysign ); plot_x = x * xsign + x_colorbar_position; plot_y = y * ysign + y_colorbar_position; - // Normalized subpage coordinates (top-left corner) for bounding box. + // Calculate normalized subpage coordinates of top left of new bounding box. *p_plot_x_subpage_bb = adopted_to_subpage_x( plot_x ); *p_plot_y_subpage_bb = adopted_to_subpage_y( plot_y ); } @@ -1436,16 +1499,30 @@ PLINT col0_save = plsc->icol0, line_style_save = plsc->line_style; - // positional data. + // Normalized subpage coordinates of top left of the bounding box. + PLFLT plot_x_subpage_bb, plot_y_subpage_bb; + + // colorbar width and height in normalized subpage coordinates. + // No suffix refers to bonding box of undecorated colorbar, d + // suffix refers to bounding box of decorated colorbar, and l + // suffix refers to bounding box of labelled and decorated + // colorbar. PLFLT colorbar_width, colorbar_height, - colorbar_width_bb, colorbar_height_bb, - colorbar_width_ac, colorbar_height_ac, + colorbar_width_d, colorbar_height_d, + colorbar_width_l, colorbar_height_l; + + // ac suffix refers to latest colorbar_width (d or l suffix) converted to + // adopted coordinates. + // mm suffix refers to colorbar_width and colorbar_height (with no suffix) + // converted from normalized subpage coordinates to mm. + PLFLT colorbar_width_ac, colorbar_height_ac, colorbar_width_mm, colorbar_height_mm; - // Normalized subpage coordinates of top left of the bounding box. - PLFLT plot_x_subpage_bb, plot_y_subpage_bb; - // Change in normalized subpage coordinates of the top left of undecorated - // colorbar, - PLFLT dx_subpage, dy_subpage; + + // Change in normalized subpage coordinates of the top left of + // undecorated colorbar. (The omd suffix refers to original + // colorbar minus decorated colorbar, and the dml suffix refers to + // decorated colorbar minus labelled and decorated colorbar.) + PLFLT dx_subpage_omd, dy_subpage_omd, dx_subpage_dml, dy_subpage_dml; // Normalized subpage coordinates of the top left of undecorated // colorbar, PLFLT plot_x_subpage, plot_y_subpage; @@ -1611,11 +1688,11 @@ { plabort( "plcolorbar: Invalid PL_COLORBAR_ORIENT_* bits" ); } - // Viewport is correct size but has a shifted zero point compared - // to the final result. This difference affects individual values - // of bb_xmin, etc., but calculate_limits below takes account of - // this shifted zero point so its results such as bounding-box - // range and position of the bounding box should be unaffected. + + // Viewport has correct size but has a shifted zero-point + // convention required by bounding-box calculations in draw_box, + // further bounding-box calculations in the cap_extent section + // below, and also in the calculate_limits call below that. plvpor( 0., colorbar_width, 0., colorbar_height ); plwind( wx_min, wx_max, wy_min, wy_max ); @@ -1651,52 +1728,41 @@ calculate_limits( position, x, y, xdmin_adopted, xdmax_adopted, ydmin_adopted, ydmax_adopted, colorbar_height, - &colorbar_width_bb, &colorbar_height_bb, + &colorbar_width_d, &colorbar_height_d, &colorbar_width_ac, &colorbar_height_ac, &plot_x_subpage_bb, &plot_y_subpage_bb, - &dx_subpage, &dy_subpage ); + &dx_subpage_omd, &dy_subpage_omd ); - // Normalized subpage coordinates (top-left corner) for undecorated - // colorbar - plot_x_subpage = plot_x_subpage_bb + dx_subpage; - plot_y_subpage = plot_y_subpage_bb + dy_subpage; + // Viewport has correct size but has a shifted zero point + // convention required by bounding-box calculations in draw_label + // and further calculations in calculate_limits. + plvpor( 0., colorbar_width_d, 0., colorbar_height_d ); - // Coordinates of bounding box for decorated colorbar (without overall label). - label_vpor_xmin = plot_x_subpage_bb; - label_vpor_xmax = plot_x_subpage_bb + colorbar_width_bb; - label_vpor_ymin = plot_y_subpage_bb - colorbar_height_bb; - label_vpor_ymax = plot_y_subpage_bb; - - // Viewport for draw_label is correct size, but has a shifted zero - // point compared to the final result but consistent with the - // coordinate scheme for bb_xmin, etc., established above with the - // previous plvpor call. calculate_limits below takes account of - // this shifted zero point so its results such as bounding-box - // range and position of the bounding box should be unaffected. - plvpor( 0., label_vpor_xmax - label_vpor_xmin, 0., label_vpor_ymax - label_vpor_ymin ); - // Calculate the bounding box for combined label + decorated box. draw_label( TRUE, opt, label ); // Calculate overall limits. calculate_limits( position, x, y, xdmin_adopted, xdmax_adopted, ydmin_adopted, ydmax_adopted, - label_vpor_ymax - label_vpor_ymin, - &colorbar_width_bb, &colorbar_height_bb, + colorbar_height_d, + &colorbar_width_l, &colorbar_height_l, &colorbar_width_ac, &colorbar_height_ac, &plot_x_subpage_bb, &plot_y_subpage_bb, - &dx_subpage, &dy_subpage ); + &dx_subpage_dml, &dy_subpage_dml ); - // Transform normalized subpage coordinates (top-left corner) for undecorated - // colorbar to new coordinate system. - plot_x_subpage += dx_subpage; - plot_y_subpage += dy_subpage; - // Transform bounding box for decorated colorbar (without label) to - // new coordinate system. - label_vpor_xmin += dx_subpage; - label_vpor_xmax += dx_subpage; - label_vpor_ymin += dy_subpage; - label_vpor_ymax += dy_subpage; + // Normalized subpage coordinates (top-left corner) for undecorated + // colorbar + plot_x_subpage = plot_x_subpage_bb + dx_subpage_omd + dx_subpage_dml; + plot_y_subpage = plot_y_subpage_bb + dy_subpage_omd + dy_subpage_dml; + + // Coordinates of bounding box for decorated colorbar (without overall label). + label_vpor_xmin = plot_x_subpage_bb + dx_subpage_dml; + label_vpor_xmax = label_vpor_xmin + colorbar_width_d; + label_vpor_ymax = plot_y_subpage_bb + dy_subpage_dml; + label_vpor_ymin = label_vpor_ymax - colorbar_height_d; + + // Return bounding box width and height in adopted coordinates for + // labelled and decorated colorbar. *p_colorbar_width = colorbar_width_ac; *p_colorbar_height = colorbar_height_ac; @@ -1744,13 +1810,13 @@ PLFLT xbg[4] = { plot_x_subpage_bb, plot_x_subpage_bb, - plot_x_subpage_bb + colorbar_width_bb, - plot_x_subpage_bb + colorbar_width_bb, + plot_x_subpage_bb + colorbar_width_l, + plot_x_subpage_bb + colorbar_width_l, }; PLFLT ybg[4] = { plot_y_subpage_bb, - plot_y_subpage_bb - colorbar_height_bb, - plot_y_subpage_bb - colorbar_height_bb, + plot_y_subpage_bb - colorbar_height_l, + plot_y_subpage_bb - colorbar_height_l, plot_y_subpage_bb, }; plpsty( 0 ); @@ -2106,14 +2172,14 @@ PLFLT xbb[5] = { plot_x_subpage_bb, plot_x_subpage_bb, - plot_x_subpage_bb + colorbar_width_bb, - plot_x_subpage_bb + colorbar_width_bb, + plot_x_subpage_bb + colorbar_width_l, + plot_x_subpage_bb + colorbar_width_l, plot_x_subpage_bb, }; PLFLT ybb[5] = { plot_y_subpage_bb, - plot_y_subpage_bb - colorbar_height_bb, - plot_y_subpage_bb - colorbar_height_bb, + plot_y_subpage_bb - colorbar_height_l, + plot_y_subpage_bb - colorbar_height_l, plot_y_subpage_bb, plot_y_subpage_bb, }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <arj...@us...> - 2011-10-07 07:00:36
|
Revision: 11939 http://plplot.svn.sourceforge.net/plplot/?rev=11939&view=rev Author: arjenmarkus Date: 2011-10-07 07:00:30 +0000 (Fri, 07 Oct 2011) Log Message: ----------- Change max_opts into a preprocessor macro, because MS Visual C/C++ does not like "automatic" arrays. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-10-06 18:13:58 UTC (rev 11938) +++ trunk/src/pllegend.c 2011-10-07 07:00:30 UTC (rev 11939) @@ -1120,7 +1120,7 @@ PLFLT label_offset = 1.2; // For building plmtex option string. - PLINT max_opts = 25; +#define max_opts 25 char opt_label[max_opts]; char perp; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2011-12-08 22:57:17
|
Revision: 12106 http://plplot.svn.sourceforge.net/plplot/?rev=12106&view=rev Author: andrewross Date: 2011-12-08 22:57:11 +0000 (Thu, 08 Dec 2011) Log Message: ----------- Comment out code which set but never used variables. I've not deleted it as this is still a work in progress and the code might be required at a later stage. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2011-12-08 20:56:36 UTC (rev 12105) +++ trunk/src/pllegend.c 2011-12-08 22:57:11 UTC (rev 12106) @@ -572,7 +572,8 @@ legend_width, legend_height, legend_width_ac, legend_height_ac; PLFLT x_legend_position, y_legend_position, xsign, ysign; - PLINT some_boxes = 0, some_lines = 0, some_symbols = 0; + //PLINT some_boxes = 0, some_lines = 0; + PLINT some_symbols = 0; PLINT max_symbol_numbers = 0; PLINT irow = 0, icolumn = 0; @@ -658,10 +659,10 @@ for ( i = 0; i < nlegend; i++ ) { - if ( opt_array[i] & PL_LEGEND_COLOR_BOX ) - some_boxes = 1; - if ( opt_array[i] & PL_LEGEND_LINE ) - some_lines = 1; + //if ( opt_array[i] & PL_LEGEND_COLOR_BOX ) + // some_boxes = 1; + //if ( opt_array[i] & PL_LEGEND_LINE ) + // some_lines = 1; if ( opt_array[i] & PL_LEGEND_SYMBOL ) { max_symbol_numbers = MAX( max_symbol_numbers, symbol_numbers[i] ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2012-02-15 07:37:23
|
Revision: 12166 http://plplot.svn.sourceforge.net/plplot/?rev=12166&view=rev Author: airwin Date: 2012-02-15 07:37:17 +0000 (Wed, 15 Feb 2012) Log Message: ----------- Improve handling of plcolorbar case where none of PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits are specified for opt. In this case, the user wants no label on the colorbar so return immediately from draw_label. This fixes an uninitialized opt_label revealed by valgrind for examples/c/x16c -colorbar -dev psc Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2012-02-10 22:03:53 UTC (rev 12165) +++ trunk/src/pllegend.c 2012-02-15 07:37:17 UTC (rev 12166) @@ -1147,8 +1147,6 @@ PLFLT parallel_height_mm = 0.0, perpendicular_height_mm = 0.0, default_mm, char_height_mm; - plgchr( &default_mm, &char_height_mm ); - // Only honor first bit in list of // PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). if ( opt & PL_COLORBAR_LABEL_RIGHT ) @@ -1176,7 +1174,12 @@ else nlabel = 1; } + // If no label wanted, then return. + if ( nlabel == 0 ) + return; + plgchr( &default_mm, &char_height_mm ); + // Start preparing data to help plot the label or // calculate the corresponding bounding box changes. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hez...@us...> - 2012-10-25 01:35:30
|
Revision: 12255 http://plplot.svn.sourceforge.net/plplot/?rev=12255&view=rev Author: hezekiahcarty Date: 2012-10-25 01:35:24 +0000 (Thu, 25 Oct 2012) Log Message: ----------- More plcolorbar fixes - Properly initialize and propagate bounding box values throughout plcolorbar - Only calculate the bounding box contributions of colorbar caps once - Make sure plvpor is called before each draw_* + calculate_limits call This should bring plcolorbar back to a state where it renders properly for basic and complex uses. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2012-10-25 01:33:29 UTC (rev 12254) +++ trunk/src/pllegend.c 2012-10-25 01:35:24 UTC (rev 12255) @@ -1660,6 +1660,8 @@ adopted_to_subpage_x( 0. ); colorbar_height = adopted_to_subpage_y( y_length ) - adopted_to_subpage_y( 0. ); + colorbar_width_d = colorbar_width; + colorbar_height_d = colorbar_height; colorbar_width_mm = colorbar_width / spxpmm; colorbar_height_mm = colorbar_height / spypmm; // Extent of cap in normalized subpage coordinates in either X or Y @@ -1720,7 +1722,7 @@ // convention required by bounding-box calculations in draw_box, // further bounding-box calculations in the cap_extent section // below, and also in the calculate_limits call below that. - plvpor( 0., colorbar_width, 0., colorbar_height ); + plvpor( 0., colorbar_width_d, 0., colorbar_height_d ); plwind( wx_min, wx_max, wy_min, wy_max ); // Calculate the bounding box for decorated (i.e., including tick @@ -1728,33 +1730,36 @@ draw_box( TRUE, opt, axis_opts[i], if_edge, ticks[i], sub_ticks[i], n_values[i], values[i] ); - if ( opt & PL_COLORBAR_CAP_LOW ) + if ( i == n_axes - 1 ) { - if ( opt & PL_COLORBAR_ORIENT_RIGHT ) - plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, -cap_extent_mm ); - if ( opt & PL_COLORBAR_ORIENT_TOP ) - plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, -cap_extent_mm ); - if ( opt & PL_COLORBAR_ORIENT_LEFT ) - plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, colorbar_width_mm + cap_extent_mm ); - if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) - plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, colorbar_height_mm + cap_extent_mm ); + if ( opt & PL_COLORBAR_CAP_LOW ) + { + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) + plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, -cap_extent_mm ); + if ( opt & PL_COLORBAR_ORIENT_TOP ) + plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, -cap_extent_mm ); + if ( opt & PL_COLORBAR_ORIENT_LEFT ) + plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, colorbar_width_mm + cap_extent_mm ); + if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) + plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, colorbar_height_mm + cap_extent_mm ); + } + if ( opt & PL_COLORBAR_CAP_HIGH ) + { + if ( opt & PL_COLORBAR_ORIENT_RIGHT ) + plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, colorbar_width_mm + cap_extent_mm ); + if ( opt & PL_COLORBAR_ORIENT_TOP ) + plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, colorbar_height_mm + cap_extent_mm ); + if ( opt & PL_COLORBAR_ORIENT_LEFT ) + plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, -cap_extent_mm ); + if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) + plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, -cap_extent_mm ); + } } - if ( opt & PL_COLORBAR_CAP_HIGH ) - { - if ( opt & PL_COLORBAR_ORIENT_RIGHT ) - plsc->boxbb_xmax = MAX( plsc->boxbb_xmax, colorbar_width_mm + cap_extent_mm ); - if ( opt & PL_COLORBAR_ORIENT_TOP ) - plsc->boxbb_ymax = MAX( plsc->boxbb_ymax, colorbar_height_mm + cap_extent_mm ); - if ( opt & PL_COLORBAR_ORIENT_LEFT ) - plsc->boxbb_xmin = MIN( plsc->boxbb_xmin, -cap_extent_mm ); - if ( opt & PL_COLORBAR_ORIENT_BOTTOM ) - plsc->boxbb_ymin = MIN( plsc->boxbb_ymin, -cap_extent_mm ); - } // Calculate limits relevant to label position. calculate_limits( position, x, y, xdmin_adopted, xdmax_adopted, ydmin_adopted, ydmax_adopted, - colorbar_height, + colorbar_height_d, &colorbar_width_d, &colorbar_height_d, &colorbar_width_ac, &colorbar_height_ac, &plot_x_subpage_bb, &plot_y_subpage_bb, @@ -1769,15 +1774,26 @@ dy_subpage_omd_accu += dy_subpage_omd; } + // Capture the current bounding box dimensions + colorbar_width_l = colorbar_width_d; + colorbar_height_l = colorbar_height_d; + for ( i = 0; i < n_labels; i++ ) { + // Viewport has correct size but has a shifted zero-point + // convention required by bounding-box calculations in draw_box, + // further bounding-box calculations in the cap_extent section + // below, and also in the calculate_limits call below that. + plvpor( 0., colorbar_width_l, 0., colorbar_height_l ); + plwind( wx_min, wx_max, wy_min, wy_max ); + // Calculate the bounding box for combined label + decorated box. draw_label( TRUE, opt | label_opts[i], labels[i] ); // Calculate overall limits. calculate_limits( position, x, y, xdmin_adopted, xdmax_adopted, ydmin_adopted, ydmax_adopted, - colorbar_height_d, + colorbar_height_l, &colorbar_width_l, &colorbar_height_l, &colorbar_width_ac, &colorbar_height_ac, &plot_x_subpage_bb, &plot_y_subpage_bb, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2013-05-01 21:44:21
|
Revision: 12318 http://sourceforge.net/p/plplot/code/12318 Author: airwin Date: 2013-05-01 21:44:17 +0000 (Wed, 01 May 2013) Log Message: ----------- Fix pllegend issue when non-integral line width values are specified. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2013-05-01 19:54:31 UTC (rev 12317) +++ trunk/src/pllegend.c 2013-05-01 21:44:17 UTC (rev 12318) @@ -555,8 +555,8 @@ // Active attributes to be saved and restored afterward. PLINT col0_save = plsc->icol0, line_style_save = plsc->line_style, - line_width_save = plsc->width, pattern_save = plsc->patt; + PLFLT line_width_save = plsc->width; PLFLT text_scale_save = plsc->chrht / plsc->chrdef; // Saved external world coordinates of viewport. PLFLT xwmin_save, xwmax_save, ywmin_save, ywmax_save; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2013-08-27 23:03:56
|
Revision: 12498 http://sourceforge.net/p/plplot/code/12498 Author: airwin Date: 2013-08-27 23:03:51 +0000 (Tue, 27 Aug 2013) Log Message: ----------- Add doxygen documentation of plcolorbar arguments that were previously undocumented. This change should finalize the plcolorbar API documentation in preparation for copying it to the DocBook API chapter. In addition, this change and a few other minor doxygen changes eliminated the last of the argument inconsistency warnings previously generated for pllegend.c by doxygen. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2013-08-24 22:39:23 UTC (rev 12497) +++ trunk/src/pllegend.c 2013-08-27 23:03:51 UTC (rev 12498) @@ -1014,8 +1014,8 @@ //! decorations of that box or else (when if_bb TRUE) calculate //! bounding box of that decorated box. //! -//! @param If if_bb is TRUE evaluate bounding box of decorated box. -//! If if_bb is FALSE draw the decorated box. +//! @param if_bb If if_bb is TRUE evaluate bounding box of decorated +//! box. If if_bb is FALSE draw the decorated box. //! @param opt Can contain the same control bits as the opt argument //! for plcolorbar. However, the only bits that are relevant here are //! PL_COLORBAR_SHADE, PL_COLORBAR_SHADE_LABEL, and @@ -1104,8 +1104,6 @@ //! PL_COLORBAR_ORIENT_(RIGHT|TOP|LEFT|BOTTOM), and //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). For full documentation //! of these bits, see the documentation of opt for plcolorbar. -//! @param cap_extent Extent of cap in normalized subpage coordinates -//! in either X or Y direction as appropriate. //! @param label Text label for the colorbar. No label is drawn if no //! label position is specified with one of the //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in opt. @@ -1370,6 +1368,12 @@ //-------------------------------------------------------------------------- //! Plot color bar for image, shade or gradient plots. //! +//! @param p_colorbar_width Pointer to a location which contains +//! (after the call) the labelled and decorated colorbar width in +//! adopted coordinates. +//! @param p_colorbar_height Pointer to a location which contains +//! (after the call) the labelled and decorated colorbar height in +//! adopted coordinates. //! @param opt This variable contains bits which control the overall //! colorbar. The orientation (direction of the maximum value) of the //! colorbar is specified with PL_COLORBAR_ORIENT_(RIGHT, TOP, LEFT, @@ -1425,6 +1429,12 @@ //! or bottom positions if the PL_POSITION_INSIDE/PL_POSITION_OUTSIDE //! bit is set in position. For the standard left or right positions, //! the direction of motion for positive y is toward positive Y. +//! @param bg_color The cmap0 index of the background color for the colorbar +//! (PL_COLORBAR_BACKGROUND). +//! @param bb_color The cmap0 index of the color of the bounding-box +//! line for the colorbar (PL_COLORBAR_BOUNDING_BOX). +//! @param bb_style The pllsty style number for the bounding-box line +//! for the colorbar (PL_COLORBAR_BOUNDING_BOX). //! @param x_length Length of the body of the colorbar in the X //! direction in adopted coordinates. //! @param y_length Length of the body of the colorbar in the Y This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2013-08-28 01:05:29
|
Revision: 12499 http://sourceforge.net/p/plplot/code/12499 Author: airwin Date: 2013-08-28 01:05:27 +0000 (Wed, 28 Aug 2013) Log Message: ----------- Systematic commentary (including special doxygen commentary) changes to replace the word "colorbar" by "color bar". Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2013-08-27 23:03:51 UTC (rev 12498) +++ trunk/src/pllegend.c 2013-08-28 01:05:27 UTC (rev 12499) @@ -1009,7 +1009,7 @@ } //-------------------------------------------------------------------------- -//! Draw box (when if_bb FALSE) around colorbar with possible tick +//! Draw box (when if_bb FALSE) around color bar with possible tick //! marks, numerical labels of those tick marks, and exponent //! decorations of that box or else (when if_bb TRUE) calculate //! bounding box of that decorated box. @@ -1022,7 +1022,7 @@ //! PL_COLORBAR_ORIENT_(RIGHT|TOP|LEFT|BOTTOM). For full //! documentation of these bits, see the documentation of opt for //! plcolorbar. -//! @param axis_opts Axis options for the colorbar's major axis, as +//! @param axis_opts Axis options for the color bar's major axis, as //! for plcolorbar. //! @param if_edge If if_edge is TRUE (FALSE) do (do not) draw the edge of //! the colorbox. @@ -1071,7 +1071,7 @@ remove_characters( local_axis_opts, "TtXx" ); } - // Draw the outline for the entire colorbar, tick marks, tick labels. + // Draw the outline for the entire color bar, tick marks, tick labels. if ( if_edge ) edge_string = "bc"; @@ -1092,7 +1092,7 @@ //-------------------------------------------------------------------------- //! Draw label (when if_bb FALSE) with appropriate position relative to the -//! "inner" bounding-box of the decorated box around the colorbar +//! "inner" bounding-box of the decorated box around the color bar //! or else (when if_bb TRUE) calculate combined bounding box of that label //! + decorated box. //! @@ -1104,7 +1104,7 @@ //! PL_COLORBAR_ORIENT_(RIGHT|TOP|LEFT|BOTTOM), and //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). For full documentation //! of these bits, see the documentation of opt for plcolorbar. -//! @param label Text label for the colorbar. No label is drawn if no +//! @param label Text label for the color bar. No label is drawn if no //! label position is specified with one of the //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in opt. @@ -1305,7 +1305,7 @@ } //-------------------------------------------------------------------------- -//! Calculate important positional limits for colorbar as a function +//! Calculate important positional limits for color bar as a function //! of the current bounding box limits and prior bounding-box height. //! plvpor(0, prior_bb_width, 0, prior_bb_height) is called before //! each bounding-box calculation and this calculate_limits call, @@ -1369,33 +1369,35 @@ //! Plot color bar for image, shade or gradient plots. //! //! @param p_colorbar_width Pointer to a location which contains -//! (after the call) the labelled and decorated colorbar width in +//! (after the call) the labelled and decorated color bar width in //! adopted coordinates. //! @param p_colorbar_height Pointer to a location which contains -//! (after the call) the labelled and decorated colorbar height in +//! (after the call) the labelled and decorated color bar height in //! adopted coordinates. //! @param opt This variable contains bits which control the overall -//! colorbar. The orientation (direction of the maximum value) of the -//! colorbar is specified with PL_COLORBAR_ORIENT_(RIGHT, TOP, LEFT, +//! color bar. The orientation (direction of the maximum value) of the +//! color bar is specified with PL_COLORBAR_ORIENT_(RIGHT, TOP, LEFT, //! BOTTOM). If none of those bits are specified, the default -//! orientation is toward the top, i.e., a vertical colorbar. The -//! type of colorbar must be specified with one of PL_COLORBAR_IMAGE, +//! orientation is toward the top, i.e., a vertical color bar. If the +//! PL_COLORBAR_BACKGROUND bit is set, plot a (semi-transparent) +//! background for the color bar. If the PL_COLORBAR_BOUNDING_BOX bit +//! is set, plot a bounding box for the color bar. The type of +//! color bar must be specified with one of PL_COLORBAR_IMAGE, //! PL_COLORBAR_SHADE or PL_COLORBAR_GRADIENT. If more than one of //! those bits is set only the first one in the above list is honored. //! The position of the (optional) label/title can be specified with //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). If no label position //! bit is set then no label will be drawn. If more than one of this //! list of bits is specified, only the first one on the list is -//! honored. End-caps for the colorbar can added with +//! honored. End-caps for the color bar can added with //! PL_COLORBAR_CAP_LOW and PL_COLORBAR_CAP_HIGH. If a particular -//! colorbar cap option is not specified then no cap will be drawn for +//! color bar cap option is not specified then no cap will be drawn for //! that end. As a special case for PL_COLORBAR_SHADE, the option //! PL_COLORBAR_SHADE_LABEL can be specified. If this option is //! provided then any tick marks and tick labels will be placed at the -//! breaks between shaded segments. -//! TODO: This should be expanded to support custom placement of tick -//! marks and tick labels at custom value locations for any colorbar -//! type. +//! breaks between shaded segments. TODO: This should be expanded to +//! support custom placement of tick marks and tick labels at custom +//! value locations for any color bar type. //! @param position This variable contains bits which control the //! overall position of the legend and the definition of the adopted //! coordinates used for positions just like what is done for the @@ -1429,15 +1431,15 @@ //! or bottom positions if the PL_POSITION_INSIDE/PL_POSITION_OUTSIDE //! bit is set in position. For the standard left or right positions, //! the direction of motion for positive y is toward positive Y. -//! @param bg_color The cmap0 index of the background color for the colorbar +//! @param bg_color The cmap0 index of the background color for the color bar //! (PL_COLORBAR_BACKGROUND). //! @param bb_color The cmap0 index of the color of the bounding-box -//! line for the colorbar (PL_COLORBAR_BOUNDING_BOX). +//! line for the color bar (PL_COLORBAR_BOUNDING_BOX). //! @param bb_style The pllsty style number for the bounding-box line -//! for the colorbar (PL_COLORBAR_BOUNDING_BOX). -//! @param x_length Length of the body of the colorbar in the X +//! for the color bar (PL_COLORBAR_BOUNDING_BOX). +//! @param x_length Length of the body of the color bar in the X //! direction in adopted coordinates. -//! @param y_length Length of the body of the colorbar in the Y +//! @param y_length Length of the body of the color bar in the Y //! direction in adopted coordinates. //! @param low_cap_color Color of the low-end color bar cap, if it is drawn. //! @param high_cap_color Color of the high-end color bar cap, if it is drawn. @@ -1447,14 +1449,14 @@ //! @param cont_width Contour width for PL_COLORBAR_SHADE plots. This is //! passed directly to plshades, so it will be interpreted according to the //! design of plshades. -//! @param n_labels Number of labels to place around the colorbar +//! @param n_labels Number of labels to place around the color bar //! @param label_opts Options for each label. n_label total values. -//! @param labels Text labels for the colorbar. No label is drawn if no +//! @param labels Text labels for the color bar. No label is drawn if no //! label position is specified with one of the //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in the corresponding //! label_opts field. //! @param n_axes Number of axis definitions provided. Must be >= 1. -//! @param axis_opts Axis options for the colorbar's major axis, as for plbox. +//! @param axis_opts Axis options for the color bar's major axis, as for plbox. //! n_axes values in the array. //! @param ticks Spacing of major ticks, as for plbox. n_axes values in the //! array. @@ -1462,10 +1464,10 @@ //! array. //! @param n_values Number of elements in each values array. //! @param values Numeric values for the data range represented by the -//! colorbar. For PL_COLORBAR_SHADE, this should include one value per break +//! color bar. For PL_COLORBAR_SHADE, this should include one value per break //! between segments. For PL_COLORBAR_IMAGE and PL_COLORBAR_GRADIENT this //! includes two values, one for the maximum value on the scale and one for the -//! minimum value. The first entry will be used to render the colorbar +//! minimum value. The first entry will be used to render the color bar //! contents. All other entries will be used only for axis rendering. //! @@ -1489,7 +1491,7 @@ // coordinates and mm. PLFLT cap_extent, cap_extent_mm; - // The colorbar cap is an equilateral triangle with cap_angle + // The color bar cap is an equilateral triangle with cap_angle // the angle (in degrees) of the unequal angle pointing in the // direction of the orientation of the cap. In other words, // cap_angle completely controls the shape of the triangle, but @@ -1525,16 +1527,16 @@ // Normalized subpage coordinates of top left of the bounding box. PLFLT plot_x_subpage_bb, plot_y_subpage_bb; - // colorbar width and height in normalized subpage coordinates. - // No suffix refers to bonding box of undecorated colorbar, d - // suffix refers to bounding box of decorated colorbar, and l + // color bar width and height in normalized subpage coordinates. + // No suffix refers to bonding box of undecorated color bar, d + // suffix refers to bounding box of decorated color bar, and l // suffix refers to bounding box of labelled and decorated - // colorbar. + // color bar. PLFLT colorbar_width, colorbar_height, colorbar_width_d, colorbar_height_d, colorbar_width_l, colorbar_height_l; - // ac suffix refers to latest colorbar_width (d or l suffix) converted to + // ac suffix refers to latest color bar_width (d or l suffix) converted to // adopted coordinates. // mm suffix refers to colorbar_width and colorbar_height (with no suffix) // converted from normalized subpage coordinates to mm. @@ -1542,19 +1544,19 @@ colorbar_width_mm, colorbar_height_mm; // Change in normalized subpage coordinates of the top left of - // undecorated colorbar. (The omd suffix refers to original - // colorbar minus decorated colorbar, and the dml suffix refers to - // decorated colorbar minus labelled and decorated colorbar.) + // undecorated color bar. (The omd suffix refers to original + // color bar minus decorated color bar, and the dml suffix refers to + // decorated color bar minus labelled and decorated color bar.) PLFLT dx_subpage_omd, dy_subpage_omd, dx_subpage_dml, dy_subpage_dml; PLFLT dx_subpage_omd_accu = 0.0, dy_subpage_omd_accu = 0.0, dx_subpage_dml_accu = 0.0, dy_subpage_dml_accu = 0.0; // Normalized subpage coordinates of the top left of undecorated - // colorbar, + // color bar, PLFLT plot_x_subpage, plot_y_subpage; - // Position of the undecorated colorbar in normalized subpage coordinates. + // Position of the undecorated color bar in normalized subpage coordinates. PLFLT vx_min = 0.0, vx_max = 0.0, vy_min = 0.0, vy_max = 0.0; - // World coordinate limits describing undecorated colorbar. + // World coordinate limits describing undecorated color bar. PLFLT wx_min = 0.0, wx_max = 0.0, wy_min = 0.0, wy_max = 0.0; // The data to plot @@ -1664,7 +1666,7 @@ // Assumes that the colors array is sorted from smallest to largest. plgcmap1_range( &min_color, &max_color ); - // Width and height of the undecorated colorbar in normalized + // Width and height of the undecorated color bar in normalized // subpage coordinates and mm. colorbar_width = adopted_to_subpage_x( x_length ) - adopted_to_subpage_x( 0. ); @@ -1693,7 +1695,7 @@ max_value = values[i][ n_values[i] - 1 ]; max_abs = MAX( fabs( min_value ), fabs( max_value ) ); - // Specify the proper window ranges for colorbar depending on + // Specify the proper window ranges for color bar depending on // orientation. if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { @@ -1814,22 +1816,22 @@ } // Normalized subpage coordinates (top-left corner) for undecorated - // colorbar + // color bar plot_x_subpage = plot_x_subpage_bb + dx_subpage_omd_accu + dx_subpage_dml_accu; plot_y_subpage = plot_y_subpage_bb + dy_subpage_omd_accu + dy_subpage_dml_accu; - // Coordinates of bounding box for decorated colorbar (without overall label). + // Coordinates of bounding box for decorated color bar (without overall label). label_vpor_xmin = plot_x_subpage_bb + dx_subpage_dml_accu; label_vpor_xmax = label_vpor_xmin + colorbar_width_d; label_vpor_ymax = plot_y_subpage_bb + dy_subpage_dml_accu; label_vpor_ymin = label_vpor_ymax - colorbar_height_d; // Return bounding box width and height in adopted coordinates for - // labelled and decorated colorbar. + // labelled and decorated color bar. *p_colorbar_width = colorbar_width_ac; *p_colorbar_height = colorbar_height_ac; - // Specify the proper viewport ranges for colorbar depending on + // Specify the proper viewport ranges for color bar depending on // orientation. if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { @@ -1888,7 +1890,7 @@ plcol0( col0_save ); } - // Viewport and world coordinate ranges for colorbar. + // Viewport and world coordinate ranges for color bar. plvpor( vx_min, vx_max, vy_min, vy_max ); plwind( wx_min, wx_max, wy_min, wy_max ); @@ -2223,7 +2225,7 @@ max_value = values[i][ n_values[i] - 1 ]; max_abs = MAX( fabs( min_value ), fabs( max_value ) ); - // Specify the proper window ranges for colorbar depending on + // Specify the proper window ranges for color bar depending on // orientation. if ( opt & PL_COLORBAR_ORIENT_RIGHT ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2013-09-18 07:23:52
|
Revision: 12506 http://sourceforge.net/p/plplot/code/12506 Author: airwin Date: 2013-09-18 07:23:49 +0000 (Wed, 18 Sep 2013) Log Message: ----------- Update doxgyen documentation of pllegend and plcolorbar and associated internal functions. I plan no further changes in this documentation at the present time. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2013-09-13 04:19:42 UTC (rev 12505) +++ trunk/src/pllegend.c 2013-09-18 07:23:49 UTC (rev 12506) @@ -2,8 +2,8 @@ // All routines that help to create a discrete legend (pllegend) or // a continuous legend (plcolorbar). // -// Copyright (C) 2010-2011 Hezekiah M. Carty -// Copyright (C) 2010-2011 Alan W. Irwin +// Copyright (C) 2010-2013 Hezekiah M. Carty +// Copyright (C) 2010-2013 Alan W. Irwin // // This file is part of PLplot. // @@ -421,17 +421,21 @@ //! @param position This variable contains bits which control the //! overall position of the legend and the definition of the adopted //! coordinates used for positions just like what is done for the -//! position argument for plcolorbar. Note, however, that the defaults -//! for the position bits (see below) are different than the plcolorbar -//! case. The combination of the PL_POSITION_LEFT, PL_POSITION_RIGHT, -//! PL_POSITION_TOP, PL_POSITION_BOTTOM, PL_POSITION_INSIDE, and -//! PL_POSITION_OUTSIDE bits specifies one of the 16 possible standard -//! positions (the 4 corners and 4 side centers for both the inside -//! and outside cases) of the legend relative to the adopted -//! coordinate system. The adopted coordinates are normalized -//! viewport coordinates if the PL_POSITION_VIEWPORT bit is set or -//! normalized subpage coordinates if the PL_POSITION_SUBPAGE bit is -//! set. Default position bits: If none of PL_POSITION_LEFT, +//! position argument for plcolorbar. However, note that the +//! defaults for the position bits (see below) are different than the +//! plcolorbar case. The combination of the PL_POSITION_LEFT, +//! PL_POSITION_RIGHT, PL_POSITION_TOP, PL_POSITION_BOTTOM, +//! PL_POSITION_INSIDE, and PL_POSITION_OUTSIDE bits specifies one of +//! the 16 possible standard positions (the 4 corners and 4 centers of +//! the sides for both the inside and outside cases) of the legend +//! relative to the adopted coordinate system. The corner positions +//! are specified by the appropriate combination of two of the +//! PL_POSITION_LEFT, PL_POSITION_RIGHT, PL_POSITION_TOP, and +//! PL_POSITION_BOTTOM bits while the sides are specified by a single +//! value of one of those bits. The adopted coordinates are +//! normalized viewport coordinates if the PL_POSITION_VIEWPORT bit is +//! set or normalized subpage coordinates if the PL_POSITION_SUBPAGE +//! bit is set. Default position bits: If none of PL_POSITION_LEFT, //! PL_POSITION_RIGHT, PL_POSITION_TOP, or PL_POSITION_BOTTOM are set, //! then the combination of PL_POSITION_RIGHT and PL_POSITION_TOP. If //! neither of PL_POSITION_INSIDE or PL_POSITION_OUTSIDE is set, use @@ -454,9 +458,9 @@ //! @param plot_width Horizontal width in adopted coordinates of the //! plot area (where colored boxes, lines, and/or symbols are drawn in //! the legend). -//! @param bg_color The cmap0 index of the background color for the legend +//! @param bg_color The cmap0 color of the background for the legend //! (PL_LEGEND_BACKGROUND). -//! @param bb_color The cmap0 index of the color of the bounding-box +//! @param bb_color The cmap0 color of the bounding-box //! line for the legend (PL_LEGEND_BOUNDING_BOX). //! @param bb_style The pllsty style number for the bounding-box line //! for the legend (PL_LEGEND_BOUNDING_BOX). @@ -492,12 +496,12 @@ //! 0., 0.5, or 1. corresponding to a text that is left justified, //! centred, or right justified within the text area, but other values //! are allowed as well. -//! @param text_colors Array of nlegend text colors (cmap0 indices). +//! @param text_colors Array of nlegend cmap0 text colors. //! @param text Array of nlegend pointers to null-terminated text //! annotation strings. Like other PLplot strings specified by the //! user, the string must be UTF-8 (including its ascii subset) and //! may include any of the PLplot text escapes. -//! @param box_colors Array of nlegend colors (cmap0 indices) for +//! @param box_colors Array of nlegend cmap0 colors for //! the discrete colored boxes (PL_LEGEND_COLOR_BOX). //! @param box_patterns Array of nlegend patterns (plpsty indices) //! for the discrete colored boxes (PL_LEGEND_COLOR_BOX). @@ -506,13 +510,13 @@ //! (PL_LEGEND_COLOR_BOX). //! @param box_line_widths Array of nlegend line widths for the //! patterns specified by box_patterns (PL_LEGEND_COLOR_BOX). -//! @param line_colors Array of nlegend line colors (cmap0 indices) +//! @param line_colors Array of nlegend cmap0 line colors //! (PL_LEGEND_LINE). //! @param line_styles Array of nlegend line styles (pllsty indices) //! (PL_LEGEND_LINE). //! @param line_widths Array of nlegend line widths (PL_LEGEND_LINE). -//! @param symbol_colors Array of nlegend symbol colors (cmap0 -//! indices) (PL_LEGEND_SYMBOL). +//! @param symbol_colors Array of nlegend cmap0 symbol colors +//! (PL_LEGEND_SYMBOL). //! @param symbol_scales Array of nlegend scale values for the //! symbol height (PL_LEGEND_SYMBOL). //! @param symbol_numbers Array of nlegend numbers of symbols to be @@ -939,7 +943,7 @@ //! inscribing the triangle. //! @param ymax Maximum world Y coordinate of rectangle //! inscribing the triangle. -//! @param color Color (color palette 1) used to fill the end cap. +//! @param color The cmap1 color used to fill the end cap. //! static void @@ -1100,7 +1104,6 @@ //! decorated box + label. If if_bb is FALSE draw the label. //! @param opt Can contain the same control bits as the opt argument //! for plcolorbar. However, the only bits that are relevant here are -//! PL_COLORBAR_CAP_LOW, PL_COLORBAR_CAP_HIGH, //! PL_COLORBAR_ORIENT_(RIGHT|TOP|LEFT|BOTTOM), and //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). For full documentation //! of these bits, see the documentation of opt for plcolorbar. @@ -1375,15 +1378,15 @@ //! (after the call) the labelled and decorated color bar height in //! adopted coordinates. //! @param opt This variable contains bits which control the overall -//! color bar. The orientation (direction of the maximum value) of the -//! color bar is specified with PL_COLORBAR_ORIENT_(RIGHT, TOP, LEFT, -//! BOTTOM). If none of those bits are specified, the default +//! color bar. The orientation (direction of the maximum value) of +//! the color bar is specified with PL_COLORBAR_ORIENT_(RIGHT, TOP, +//! LEFT, BOTTOM). If none of those bits are specified, the default //! orientation is toward the top, i.e., a vertical color bar. If the //! PL_COLORBAR_BACKGROUND bit is set, plot a (semi-transparent) //! background for the color bar. If the PL_COLORBAR_BOUNDING_BOX bit -//! is set, plot a bounding box for the color bar. The type of -//! color bar must be specified with one of PL_COLORBAR_IMAGE, -//! PL_COLORBAR_SHADE or PL_COLORBAR_GRADIENT. If more than one of +//! is set, plot a bounding box for the color bar. The type of color +//! bar must be specified with one of PL_COLORBAR_IMAGE, +//! PL_COLORBAR_SHADE, or PL_COLORBAR_GRADIENT. If more than one of //! those bits is set only the first one in the above list is honored. //! The position of the (optional) label/title can be specified with //! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM). If no label position @@ -1391,84 +1394,106 @@ //! list of bits is specified, only the first one on the list is //! honored. End-caps for the color bar can added with //! PL_COLORBAR_CAP_LOW and PL_COLORBAR_CAP_HIGH. If a particular -//! color bar cap option is not specified then no cap will be drawn for -//! that end. As a special case for PL_COLORBAR_SHADE, the option +//! color bar cap option is not specified then no cap will be drawn +//! for that end. As a special case for PL_COLORBAR_SHADE, the option //! PL_COLORBAR_SHADE_LABEL can be specified. If this option is //! provided then any tick marks and tick labels will be placed at the //! breaks between shaded segments. TODO: This should be expanded to //! support custom placement of tick marks and tick labels at custom //! value locations for any color bar type. //! @param position This variable contains bits which control the -//! overall position of the legend and the definition of the adopted -//! coordinates used for positions just like what is done for the -//! position argument for pllegend. Note, however, that the defaults -//! for the position bits (see below) are different than the pllegend -//! case. The combination of the PL_POSITION_LEFT, PL_POSITION_RIGHT, -//! PL_POSITION_TOP, PL_POSITION_BOTTOM, PL_POSITION_INSIDE, and -//! PL_POSITION_OUTSIDE bits specifies one of the 16 possible standard -//! positions (the 4 corners and 4 side centers for both the inside -//! and outside cases) of the legend relative to the adopted -//! coordinate system. The adopted coordinates are normalized -//! viewport coordinates if the PL_POSITION_VIEWPORT bit is set or -//! normalized subpage coordinates if the PL_POSITION_SUBPAGE bit is -//! set. Default position bits: If none of PL_POSITION_LEFT, +//! overall position of the color bar and the definition of the +//! adopted coordinates used for positions just like what is done for +//! the position argument for pllegend. However, note that the +//! defaults for the position bits (see below) are different than the +//! pllegend case. The combination of the PL_POSITION_LEFT, +//! PL_POSITION_RIGHT, PL_POSITION_TOP, PL_POSITION_BOTTOM, +//! PL_POSITION_INSIDE, and PL_POSITION_OUTSIDE bits specifies one of +//! the 16 possible standard positions (the 4 corners and centers of +//! the 4 sides for both the inside and outside cases) of the color +//! bar relative to the adopted coordinate system. The corner +//! positions are specified by the appropriate combination of two of +//! the PL_POSITION_LEFT, PL_POSITION_RIGHT, PL_POSITION_TOP, and +//! PL_POSITION_BOTTOM bits while the sides are specified by a single +//! value of one of those bits. The adopted coordinates are +//! normalized viewport coordinates if the PL_POSITION_VIEWPORT bit is +//! set or normalized subpage coordinates if the PL_POSITION_SUBPAGE +//! bit is set. Default position bits: If none of PL_POSITION_LEFT, //! PL_POSITION_RIGHT, PL_POSITION_TOP, or PL_POSITION_BOTTOM are set, //! then use PL_POSITION_RIGHT. If neither of PL_POSITION_INSIDE or //! PL_POSITION_OUTSIDE is set, use PL_POSITION_OUTSIDE. If neither //! of PL_POSITION_VIEWPORT or PL_POSITION_SUBPAGE is set, use //! PL_POSITION_VIEWPORT. -//! @param x X offset of the legend position in adopted coordinates -//! from the specified standard position of the legend. For positive +//! @param x X offset of the color bar position in adopted coordinates +//! from the specified standard position of the color bar. For positive //! x, the direction of motion away from the standard position is //! inward/outward from the standard corner positions or standard left //! or right positions if the PL_POSITION_INSIDE/PL_POSITION_OUTSIDE //! bit is set in position. For the standard top or bottom positions, //! the direction of motion for positive x is toward positive X. -//! @param y Y offset of the legend position in adopted coordinates -//! from the specified standard position of the legend. For positive +//! @param y Y offset of the color bar position in adopted coordinates +//! from the specified standard position of the color bar. For positive //! y, the direction of motion away from the standard position is //! inward/outward from the standard corner positions or standard top //! or bottom positions if the PL_POSITION_INSIDE/PL_POSITION_OUTSIDE //! bit is set in position. For the standard left or right positions, //! the direction of motion for positive y is toward positive Y. -//! @param bg_color The cmap0 index of the background color for the color bar +//! @param x_length Length of the body of the color bar in the X +//! direction in adopted coordinates. +//! @param y_length Length of the body of the color bar in the Y +//! direction in adopted coordinates. +//! @param bg_color The cmap0 color of the background for the color bar //! (PL_COLORBAR_BACKGROUND). -//! @param bb_color The cmap0 index of the color of the bounding-box +//! @param bb_color The cmap0 color of the bounding-box //! line for the color bar (PL_COLORBAR_BOUNDING_BOX). //! @param bb_style The pllsty style number for the bounding-box line //! for the color bar (PL_COLORBAR_BOUNDING_BOX). -//! @param x_length Length of the body of the color bar in the X -//! direction in adopted coordinates. -//! @param y_length Length of the body of the color bar in the Y -//! direction in adopted coordinates. -//! @param low_cap_color Color of the low-end color bar cap, if it is drawn. -//! @param high_cap_color Color of the high-end color bar cap, if it is drawn. -//! @param cont_color Contour color for PL_COLORBAR_SHADE plots. This is -//! passed directly to plshades, so it will be interpreted according to the -//! design of plshades. +//! @param low_cap_color The cmap1 color of the low-end color bar cap, if it is drawn (PL_COLORBAR_CAP_LOW). +//! @param high_cap_color The cmap1 color of the high-end color bar cap, if it is drawn (PL_COLORBAR_CAP_HIGH). +//! @param cont_color The cmap0 contour color for PL_COLORBAR_SHADE +//! plots. This value is passed directly to plshades, so it will be +//! interpreted according to the design of plshades. //! @param cont_width Contour width for PL_COLORBAR_SHADE plots. This is //! passed directly to plshades, so it will be interpreted according to the //! design of plshades. -//! @param n_labels Number of labels to place around the color bar -//! @param label_opts Options for each label. n_label total values. -//! @param labels Text labels for the color bar. No label is drawn if no -//! label position is specified with one of the -//! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in the corresponding -//! label_opts field. -//! @param n_axes Number of axis definitions provided. Must be >= 1. -//! @param axis_opts Axis options for the color bar's major axis, as for plbox. -//! n_axes values in the array. -//! @param ticks Spacing of major ticks, as for plbox. n_axes values in the -//! array. -//! @param sub_ticks Number of subticks, as for plbox. n_axes values in the -//! array. -//! @param n_values Number of elements in each values array. -//! @param values Numeric values for the data range represented by the -//! color bar. For PL_COLORBAR_SHADE, this should include one value per break -//! between segments. For PL_COLORBAR_IMAGE and PL_COLORBAR_GRADIENT this -//! includes two values, one for the maximum value on the scale and one for the -//! minimum value. The first entry will be used to render the color bar -//! contents. All other entries will be used only for axis rendering. +//! @param n_labels Number of labels to place around the color bar. +//! @param label_opts An array of n_labels opt values to help calculate the +//! combined opt value for each of the labels. For each +//! different label the combined opt value is the bitwise OR of the +//! overall opt value and the relevant label_opts array element. The +//! only bits that are relevant in a combined opt value for a label +//! are PL_COLORBAR_ORIENT_(RIGHT|TOP|LEFT|BOTTOM) and +//! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) (which are documented in +//! the documentation of the overall opt value). +//! @param labels n_labels text labels for the color bar. No label is +//! drawn if no label position is specified with one of the +//! PL_COLORBAR_LABEL_(RIGHT|TOP|LEFT|BOTTOM) bits in the bitwise OR +//! of the opt value with the relevant label_opts array element. +//! @param n_axes Number of axis definitions provided. This value +//! must be greater than 0. It is typically 1 (numerical axis labels +//! are provided for one of the long edges of the color bar), but it +//! can be larger if multiple numerical axis labels for the long edges +//! of the color bar are desired. +//! @param axis_opts An array of n_axes axis options (interpreted as for +//! plbox) for the color bar's axis definitions. +//! @param ticks An array of n_axes values of the spacing of the major +//! tick marks (interpreted as for plbox) for the color bar's axis +//! definitions. +//! @param sub_ticks An array of n_axes values of the number of +//! subticks (interpreted as for plbox) for the color bar's axis +//! definitions. +//! @param n_values An array containing the number of elements in each of the +//! n_axes rows of the two-dimensional values array. +//! @param values A two-dimensional array containing the numeric +//! values for the data range represented by the color bar. For a row +//! index of i_axis (where 0 < i_axis < n_axes), the number of +//! elements in the row is specified by n_values[i_axis]. For +//! PL_COLORBAR_IMAGE and PL_COLORBAR_GRADIENT the number of elements +//! is 2, and the corresponding row elements of the values array are +//! the minimum and maximum value represented by the colorbar. For +//! PL_COLORBAR_SHADE, the number and values of the elements of a +//! row of the values array is interpreted the same +//! as the nlevel and clevel arguments of plshades. //! void This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2013-09-22 02:17:15
|
Revision: 12511 http://sourceforge.net/p/plplot/code/12511 Author: airwin Date: 2013-09-22 02:17:11 +0000 (Sun, 22 Sep 2013) Log Message: ----------- Implement sanity check that pllegend caller does not specify NULL array pointers for one of the box, line, or symbol arrays when opt_array contains the relevant bit which would force the array to be used. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2013-09-21 21:19:22 UTC (rev 12510) +++ trunk/src/pllegend.c 2013-09-22 02:17:11 UTC (rev 12511) @@ -576,10 +576,10 @@ legend_width, legend_height, legend_width_ac, legend_height_ac; PLFLT x_legend_position, y_legend_position, xsign, ysign; - //PLINT some_boxes = 0, some_lines = 0; PLINT some_symbols = 0; PLINT max_symbol_numbers = 0; - PLINT irow = 0, icolumn = 0; + PLINT irow = 0, icolumn = 0; + int some_boxes = 0, some_lines = 0; // Default nrow, ncolumn. nrow = MAX( nrow, 1 ); @@ -663,17 +663,37 @@ for ( i = 0; i < nlegend; i++ ) { - //if ( opt_array[i] & PL_LEGEND_COLOR_BOX ) - // some_boxes = 1; - //if ( opt_array[i] & PL_LEGEND_LINE ) - // some_lines = 1; + if ( opt_array[i] & PL_LEGEND_COLOR_BOX ) + some_boxes = 1; + if ( opt_array[i] & PL_LEGEND_LINE ) + some_lines = 1; if ( opt_array[i] & PL_LEGEND_SYMBOL ) { - max_symbol_numbers = MAX( max_symbol_numbers, symbol_numbers[i] ); - some_symbols = 1; + if ( symbol_numbers != NULL ) + max_symbol_numbers = MAX( max_symbol_numbers, symbol_numbers[i] ); + some_symbols = 1; } } + // Sanity checks on NULL arrays: + if ( some_boxes && ( box_colors == NULL || box_patterns == NULL || box_scales == NULL || box_line_widths == NULL ) ) + { + plabort( "pllegend: all box_* arrays must be defined when the PL_LEGEND_COLOR_BOX bit is set." ); + return; + } + + if ( some_lines && ( line_colors == NULL || line_styles == NULL || line_widths == NULL ) ) + { + plabort( "pllegend: all line_* arrays must be defined when the PL_LEGEND_LINE bit is set." ); + return; + } + + if ( some_symbols && ( symbol_colors == NULL || symbol_scales == NULL || symbol_numbers == NULL ) ) + { + plabort( "pllegend: all symbol_* arrays must be defined when the PL_LEGEND_SYMBOL bit is set." ); + return; + } + // Get character height and width in normalized subpage coordinates. character_height = get_character_or_symbol_height( TRUE ); character_width = character_height; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2013-09-22 05:46:11
|
Revision: 12514 http://sourceforge.net/p/plplot/code/12514 Author: airwin Date: 2013-09-22 05:46:07 +0000 (Sun, 22 Sep 2013) Log Message: ----------- Implement sanity check that plcolorbar caller does not specify NULL array pointers for one of the label_opts or labels arrays when n_labels > 0. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2013-09-22 02:20:12 UTC (rev 12513) +++ trunk/src/pllegend.c 2013-09-22 05:46:07 UTC (rev 12514) @@ -1659,6 +1659,13 @@ return; } + // Sanity check for NULL label arrays. + if ( n_labels > 0 && ( label_opts == NULL || labels == NULL ) ) + { + plabort( "plcolorbar: label_opts and labels arrays must be defined when n_labels > 0." ); + return; + } + if ( n_axes < 1 ) { plabort( "plcolorbar: At least one axis must be specified" ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2013-12-11 20:35:27
|
Revision: 12853 http://sourceforge.net/p/plplot/code/12853 Author: andrewross Date: 2013-12-11 20:35:24 +0000 (Wed, 11 Dec 2013) Log Message: ----------- Alternative implementation of remove_characters which avoids the valgrind warnings when the code is compiled with -O3. Modified Paths: -------------- trunk/src/pllegend.c Modified: trunk/src/pllegend.c =================================================================== --- trunk/src/pllegend.c 2013-12-11 12:06:41 UTC (rev 12852) +++ trunk/src/pllegend.c 2013-12-11 20:35:24 UTC (rev 12853) @@ -933,16 +933,20 @@ static void remove_characters( char *string, const char *characters ) { - size_t length = strlen( string ); - size_t prefix_length = strcspn( string, characters ); - if ( prefix_length < length ) + char *src, *dst; + const char *ptr; + for(src=dst=string; *src != '\0'; src++) { - // Remove first matching character by shifting tail of string - // (including null-terminator) down by one. - memmove( string + prefix_length, string + prefix_length + 1, length - prefix_length ); - // Recurse to remove any remaining specified characters. - remove_characters( string, characters ); + ptr = characters; + while ( (*ptr != '\0') && (*src != *ptr) ) + ptr++; + if (*src != *ptr) + { + *dst = *src; + dst++; + } } + *dst = '\0'; } //-------------------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |