# HG changeset patch # User Shai Ayal # Date 1204432707 -7200 # Node ID 228858e69bd1f17b336765b2d776688390e62de1 # Parent 263cdf57a1dd887f3384bc6699d3819596b001d5 added {x,y,z}lim sanity check diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2008-06-04 Shai Ayal + * graphics.h.in (axes::properities::fix_limits) : New method. + (axes::properties::update_xlim, axes::properties::update_ylim, + axes::properties::update_zlim): Use fix_limits. + * graphics.cc (axes::properties::calc_ticks_and_lims): Make sure that lo <= hi. diff --git a/src/graphics.h.in b/src/graphics.h.in --- a/src/graphics.h.in +++ b/src/graphics.h.in @@ -2711,6 +2711,25 @@ double calc_tick_sep (double minval, double maxval); void calc_ticks_and_lims (array_property& lims, array_property& ticks, bool limmode_is_auto); + void fix_limits (array_property& lims) + { + if (lims.get ().is_empty ()) + return; + + Matrix l = lims.get ().matrix_value (); + if (l(0) > l(1)) + { + l(0) = 0; + l(1) = 1; + lims = l; + } + else if (l(0) == l(1)) + { + l(0) -= 0.5; + l(1) += 0.5; + lims = l; + } + } public: Matrix get_axis_limits (double xmin, double xmax, double min_pos, bool logscale); @@ -2718,18 +2737,23 @@ { if (xtickmode.is ("auto")) calc_ticks_and_lims (xlim, xtick, xlimmode.is ("auto")); + fix_limits (xlim); } void update_ylim (void) { if (ytickmode.is ("auto")) calc_ticks_and_lims (ylim, ytick, ylimmode.is ("auto")); + + fix_limits (ylim); } void update_zlim (void) { if (ztickmode.is ("auto")) calc_ticks_and_lims (zlim, ztick, zlimmode.is ("auto")); + + fix_limits (zlim); } };