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;