Mercurial > octave-libgccjit
comparison src/graphics.cc @ 7857:09b1a9c88128
added (far from perfect) support for logscale ticks
author | Shai Ayal <shaiay@users.sourceforge.net> |
---|---|
date | Sun, 09 Mar 2008 20:51:52 +0200 |
parents | f317f14516cb |
children | fdd465b00ec0 |
comparison
equal
deleted
inserted
replaced
7856:cf672485be43 | 7857:09b1a9c88128 |
---|---|
2668 | 2668 |
2669 return retval; | 2669 return retval; |
2670 } | 2670 } |
2671 | 2671 |
2672 void | 2672 void |
2673 axes::properties::calc_ticks_and_lims (array_property& lims, array_property& ticks, bool limmode_is_auto) | 2673 axes::properties::calc_ticks_and_lims (array_property& lims, array_property& ticks, bool limmode_is_auto, bool is_logscale) |
2674 { | 2674 { |
2675 | 2675 |
2676 // FIXME -- add log ticks and lims | 2676 // FIXME -- add log ticks and lims |
2677 | 2677 |
2678 if (lims.get ().is_empty ()) | 2678 if (lims.get ().is_empty ()) |
2685 { | 2685 { |
2686 double tmp = hi; | 2686 double tmp = hi; |
2687 hi = lo; | 2687 hi = lo; |
2688 lo = tmp; | 2688 lo = tmp; |
2689 } | 2689 } |
2690 | 2690 |
2691 if (is_logscale) | |
2692 { | |
2693 // FIXME we should check for negtives here | |
2694 hi = std::log10 (hi); | |
2695 lo = std::log10 (lo); | |
2696 } | |
2697 | |
2691 double tick_sep = calc_tick_sep (lo , hi); | 2698 double tick_sep = calc_tick_sep (lo , hi); |
2692 | 2699 |
2693 int i1 = static_cast<int> (std::floor (lo / tick_sep)); | 2700 int i1 = static_cast<int> (std::floor (lo / tick_sep)); |
2694 int i2 = static_cast<int> (std::ceil (hi / tick_sep)); | 2701 int i2 = static_cast<int> (std::ceil (hi / tick_sep)); |
2695 | 2702 |
2698 // adjust limits to include min and max tics | 2705 // adjust limits to include min and max tics |
2699 Matrix tmp_lims (1,2); | 2706 Matrix tmp_lims (1,2); |
2700 tmp_lims(0) = tick_sep * i1; | 2707 tmp_lims(0) = tick_sep * i1; |
2701 tmp_lims(1) = tick_sep * i2; | 2708 tmp_lims(1) = tick_sep * i2; |
2702 | 2709 |
2710 if (is_logscale) | |
2711 { | |
2712 tmp_lims(0) = std::pow (10.,tmp_lims(0)); | |
2713 tmp_lims(1) = std::pow (10.,tmp_lims(1)); | |
2714 } | |
2703 lims = tmp_lims; | 2715 lims = tmp_lims; |
2704 } | 2716 } |
2705 else | 2717 else |
2706 { | 2718 { |
2707 // adjust min and max tics if they are out of limits | 2719 // adjust min and max tics if they are out of limits |
2708 i1 = static_cast<int> (std::ceil (lo / tick_sep)); | 2720 i1 = static_cast<int> (std::ceil (lo / tick_sep)); |
2709 i2 = static_cast<int> (std::floor (hi / tick_sep)); | 2721 i2 = static_cast<int> (std::floor (hi / tick_sep)); |
2710 } | 2722 } |
2711 | 2723 |
2712 Matrix tmp_ticks (1, i2-i1+1); | 2724 Matrix tmp_ticks (1, i2-i1+1); |
2713 for (int i = 0; i <= i2-i1; i++) | 2725 for (int i = 0; i <= i2-i1; i++) |
2714 tmp_ticks (i) = tick_sep * (i+i1); | 2726 { |
2727 tmp_ticks (i) = tick_sep * (i+i1); | |
2728 if (is_logscale) | |
2729 tmp_ticks (i) = std::pow (10., tmp_ticks (i)); | |
2730 } | |
2731 | |
2732 | |
2715 | 2733 |
2716 ticks = tmp_ticks; | 2734 ticks = tmp_ticks; |
2717 } | 2735 } |
2718 | 2736 |
2719 static bool updating_axis_limits = false; | 2737 static bool updating_axis_limits = false; |