Changeset 13714

Show
Ignore:
Timestamp:
05/13/08 00:54:43 (8 weeks ago)
Author:
elazutkin
Message:

dojox.charting: more correct incorporation of subintervals in axes. !strict

Location:
dojox/trunk/charting
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • dojox/trunk/charting/axis2d/Default.js

    r13713 r13714  
    7272                calculate: function(min, max, span, labels){ 
    7373                        if(this.initialized()){ return this; } 
     74                        this.min = min; 
     75                        this.max = max; 
    7476                        this.labels = "labels" in this.opt ? this.opt.labels : labels; 
    7577                        this.scaler = lin.buildScaler(min, max, span, this.opt); 
     
    8991                                                }), "Math.max(a, b)", 0); 
    9092                                        }else{ 
    91                                                 var labelLength = Math.ceil(Math.log(Math.max(Math.abs(this.scaler.min), 
    92                                                                 Math.abs(this.scaler.max))) / Math.LN10), 
     93                                                var labelLength = Math.ceil(Math.log(Math.max(Math.abs(this.scaler.bounds.from), 
     94                                                                Math.abs(this.scaler.bounds.to))) / Math.LN10), 
    9395                                                        t = []; 
    94                                                 if(this.scaler.min < 0 || this.scaler.max < 0){ t.push("-"); } 
     96                                                if(this.scaler.bounds.from < 0 || this.scaler.bounds.to < 0){ t.push("-"); } 
    9597                                                t.push(dojo.string.rep("9", labelLength)); 
    96                                                 var precision = Math.floor(Math.log(this.scaler.max - this.scaler.min) / Math.LN10); 
     98                                                var precision = Math.floor(Math.log(this.scaler.bounds.to - this.scaler.bounds.from) / Math.LN10); 
    9799                                                if(precision > 0){ 
    98100                                                        t.push("."); 
  • dojox/trunk/charting/scaler/linear.js

    r13713 r13714  
    2323                } 
    2424                var lowerBound = findString(kwArgs.fixLower, ["major"]) ? 
    25                                 Math.floor(min / majorTick) * majorTick : 
     25                                Math.floor(kwArgs.min / majorTick) * majorTick : 
    2626                                        findString(kwArgs.fixLower, ["minor"]) ? 
    27                                                 Math.floor(min / minorTick) * minorTick : 
     27                                                Math.floor(kwArgs.min / minorTick) * minorTick : 
    2828                                                        findString(kwArgs.fixLower, ["micro"]) ? 
    29                                                                 Math.floor(min / microTick) * microTick : min, 
     29                                                                Math.floor(kwArgs.min / microTick) * microTick : kwArgs.min, 
    3030                        upperBound = findString(kwArgs.fixUpper, ["major"]) ? 
    31                                 Math.ceil(max / majorTick) * majorTick : 
     31                                Math.ceil(kwArgs.max / majorTick) * majorTick : 
    3232                                        findString(kwArgs.fixUpper, ["minor"]) ? 
    33                                                 Math.ceil(max / minorTick) * minorTick : 
     33                                                Math.ceil(kwArgs.max / minorTick) * minorTick : 
    3434                                                        findString(kwArgs.fixUpper, ["micro"]) ? 
    35                                                                 Math.ceil(max / microTick) * microTick : max, 
    36                         majorStart = (findString(kwArgs.fixLower, ["major"]) || !majorTick) ? 
    37                                 lowerBound : Math.ceil(lowerBound / majorTick) * majorTick, 
    38                         minorStart = (findString(kwArgs.fixLower, ["major", "minor"]) || !minorTick) ? 
    39                                 lowerBound : Math.ceil(lowerBound / minorTick) * minorTick, 
    40                         microStart = (findString(kwArgs.fixLower, ["major", "minor", "micro"]) || ! microTick) ? 
    41                                 lowerBound : Math.ceil(lowerBound / microTick) * microTick, 
    42                         majorCount = !majorTick ? 0 : (findString(kwArgs.fixUpper, ["major"]) ? 
    43                                 Math.round((upperBound - majorStart) / majorTick) : 
    44                                 Math.floor((upperBound - majorStart) / majorTick)) + 1, 
    45                         minorCount = !minorTick ? 0 : (findString(kwArgs.fixUpper, ["major", "minor"]) ? 
    46                                 Math.round((upperBound - minorStart) / minorTick) : 
    47                                 Math.floor((upperBound - minorStart) / minorTick)) + 1, 
    48                         microCount = !microTick ? 0 : (findString(kwArgs.fixUpper, ["major", "minor", "micro"]) ? 
    49                                 Math.round((upperBound - microStart) / microTick) : 
    50                                 Math.floor((upperBound - microStart) / microTick)) + 1, 
     35                                                                Math.ceil(kwArgs.max / microTick) * microTick : kwArgs.max; 
     36                                                                 
     37                if(kwArgs.useMin){ min = lowerBound; } 
     38                if(kwArgs.useMax){ max = upperBound; } 
     39                 
     40                var majorStart = (!majorTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major"])) ? 
     41                                min : Math.ceil(min / majorTick) * majorTick, 
     42                        minorStart = (!minorTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major", "minor"])) ? 
     43                                min : Math.ceil(min / minorTick) * minorTick, 
     44                        microStart = (! microTick || kwArgs.useMin && findString(kwArgs.fixLower, ["major", "minor", "micro"])) ? 
     45                                min : Math.ceil(min / microTick) * microTick, 
     46                        majorCount = !majorTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major"]) ? 
     47                                Math.round((max - majorStart) / majorTick) : 
     48                                Math.floor((max - majorStart) / majorTick)) + 1, 
     49                        minorCount = !minorTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major", "minor"]) ? 
     50                                Math.round((max - minorStart) / minorTick) : 
     51                                Math.floor((max - minorStart) / minorTick)) + 1, 
     52                        microCount = !microTick ? 0 : (kwArgs.useMax && findString(kwArgs.fixUpper, ["major", "minor", "micro"]) ? 
     53                                Math.round((max - microStart) / microTick) : 
     54                                Math.floor((max - microStart) / microTick)) + 1, 
    5155                        minorPerMajor  = minorTick ? Math.round(majorTick / minorTick) : 0, 
    5256                        microPerMinor  = microTick ? Math.round(minorTick / microTick) : 0, 
    5357                        majorPrecision = majorTick ? Math.floor(Math.log(majorTick) / Math.LN10) : 0, 
    5458                        minorPrecision = minorTick ? Math.floor(Math.log(minorTick) / Math.LN10) : 0, 
    55                         scale = span / (upperBound - lowerBound); 
     59                        scale = span / (max - min);      
    5660                if(!isFinite(scale)){ scale = 1; } 
     61                 
    5762                return { 
    5863                        bounds: { 
    5964                                lower:  lowerBound, 
    60                                 upper:  upperBound 
     65                                upper:  upperBound, 
     66                                from:   min, 
     67                                to:             max 
    6168                        }, 
    6269                        major: { 
     
    8188                        microPerMinor:  microPerMinor, 
    8289                        scale:                  scale, 
    83                         span:                   span, 
    84                         min:                    min, 
    85                         max:                    max 
     90                        span:                   span 
    8691                }; 
    8792        }; 
     
    96101                        } 
    97102                         
    98                         // update bounds, if needed 
    99                         var includeZeroFlag = false; 
     103                        // update bounds 
     104                        if("min" in kwArgs){ min = kwArgs.min; } 
     105                        if("max" in kwArgs){ max = kwArgs.max; } 
     106                        if(kwArgs.includeZero){ 
     107                                if(min > 0){ min = 0; } 
     108                                if(max < 0){ max = 0; } 
     109                        } 
     110                        h.min = min; 
     111                        h.useMin = true; 
     112                        h.max = max; 
     113                        h.useMax = true; 
     114                         
    100115                        if("from" in kwArgs){ 
    101116                                min = kwArgs.from; 
    102                                 h.fixLower = "none"; 
    103                                 h.natural = false; 
    104                         }else{ 
    105                                 if("min" in kwArgs){ min = kwArgs.min; } 
    106                                 includeZeroFlag = true; 
     117                                h.useMin = false; 
    107118                        } 
    108119                        if("to" in kwArgs){ 
    109                                 max = kwArgs.from; 
    110                                 h.fixUpper = "none"; 
    111                                 h.natural = false; 
    112                         }else{ 
    113                                 if("max" in kwArgs){ max = kwArgs.max; } 
    114                                 includeZeroFlag = true; 
    115                         } 
    116                         if(includeZeroFlag && kwArgs.includeZero){ 
    117                                 if(min > 0){ min = 0; } 
    118                                 if(max < 0){ max = 0; } 
     120                                max = kwArgs.to; 
     121                                h.useMax = false; 
    119122                        } 
    120123                         
     
    196199                        // loop over all ticks 
    197200                        var majorTicks = [], minorTicks = [], microTicks = []; 
    198                         while(next <= scaler.bounds.upper + 1/scaler.scale){ 
     201                        while(next <= scaler.bounds.to + 1/scaler.scale){ 
    199202                                if(Math.abs(nextMajor - next) < step / 2){ 
    200203                                        // major tick 
     
    230233                }, 
    231234                getTransformerFromModel: function(/*Object*/ scaler){ 
    232                         var offset = scaler.bounds.lower, scale = scaler.scale; 
     235                        var offset = scaler.bounds.from, scale = scaler.scale; 
    233236                        return function(x){ return (x - offset) * scale; };     // Function 
    234237                }, 
    235238                getTransformerFromPlot: function(/*Object*/ scaler){ 
    236                         var offset = scaler.bounds.lower, scale = scaler.scale; 
     239                        var offset = scaler.bounds.from, scale = scaler.scale; 
    237240                        return function(x){ return x / scale + offset; };       // Function 
    238241                }