📄 qwt__scale__engine_8cpp-source.html
字号:
<a name="l00751"></a>00751 <span class="keywordflow">if</span> ( maxMinSteps > 0 )<a name="l00752"></a>00752 {<a name="l00753"></a>00753 ticks[QwtScaleDiv::MinorTick] = buildMinorTicks(<a name="l00754"></a>00754 ticks[QwtScaleDiv::MajorTick], maxMinSteps, stepSize);<a name="l00755"></a>00755 }<a name="l00756"></a>00756 <a name="l00757"></a>00757 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i < QwtScaleDiv::NTickTypes; i++ )<a name="l00758"></a>00758 ticks[i] = <a class="code" href="class_qwt_scale_engine.html#f4522cd83e7885f19d35579d42fbc1fc">strip</a>(ticks[i], interval);<a name="l00759"></a>00759 }<a name="l00760"></a>00760 <a name="l00761"></a>00761 QwtValueList QwtLog10ScaleEngine::buildMajorTicks(<a name="l00762"></a>00762 <span class="keyword">const</span> <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> &interval, <span class="keywordtype">double</span> stepSize)<span class="keyword"> const</span><a name="l00763"></a>00763 <span class="keyword"></span>{<a name="l00764"></a>00764 <span class="keywordtype">double</span> width = <a class="code" href="class_qwt_log10_scale_engine.html#1d3abcbe5ce63d7f9cfa5a04c028bf55">log10</a>(interval).<a class="code" href="class_qwt_double_interval.html#b5d610e0d1fc9a5a3bc020dd39326327">width</a>();<a name="l00765"></a>00765 <a name="l00766"></a>00766 <span class="keywordtype">int</span> numTicks = qRound(width / stepSize) + 1;<a name="l00767"></a>00767 <span class="keywordflow">if</span> ( numTicks > 10000 )<a name="l00768"></a>00768 numTicks = 10000;<a name="l00769"></a>00769 <a name="l00770"></a>00770 <span class="keyword">const</span> <span class="keywordtype">double</span> lxmin = log(interval.minValue());<a name="l00771"></a>00771 <span class="keyword">const</span> <span class="keywordtype">double</span> lxmax = log(interval.maxValue());<a name="l00772"></a>00772 <span class="keyword">const</span> <span class="keywordtype">double</span> lstep = (lxmax - lxmin) / <span class="keywordtype">double</span>(numTicks - 1);<a name="l00773"></a>00773 <a name="l00774"></a>00774 QwtValueList ticks;<a name="l00775"></a>00775 <a name="l00776"></a>00776 ticks += interval.minValue();<a name="l00777"></a>00777 <a name="l00778"></a>00778 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; i < numTicks; i++)<a name="l00779"></a>00779 ticks += exp(lxmin + <span class="keywordtype">double</span>(i) * lstep);<a name="l00780"></a>00780 <a name="l00781"></a>00781 ticks += interval.maxValue();<a name="l00782"></a>00782 <a name="l00783"></a>00783 <span class="keywordflow">return</span> ticks;<a name="l00784"></a>00784 }<a name="l00785"></a>00785 <a name="l00786"></a>00786 QwtValueList QwtLog10ScaleEngine::buildMinorTicks(<a name="l00787"></a>00787 <span class="keyword">const</span> QwtValueList &majorTicks, <a name="l00788"></a>00788 <span class="keywordtype">int</span> maxMinSteps, <span class="keywordtype">double</span> stepSize)<span class="keyword"> const</span><a name="l00789"></a>00789 <span class="keyword"></span>{ <a name="l00790"></a>00790 <span class="keywordflow">if</span> (stepSize < 1.1) <span class="comment">// major step width is one decade</span><a name="l00791"></a>00791 {<a name="l00792"></a>00792 <span class="keywordflow">if</span> ( maxMinSteps < 1 )<a name="l00793"></a>00793 <span class="keywordflow">return</span> QwtValueList();<a name="l00794"></a>00794 <a name="l00795"></a>00795 <span class="keywordtype">int</span> k0, kstep, kmax;<a name="l00796"></a>00796 <a name="l00797"></a>00797 <span class="keywordflow">if</span> (maxMinSteps >= 8)<a name="l00798"></a>00798 {<a name="l00799"></a>00799 k0 = 2;<a name="l00800"></a>00800 kmax = 9;<a name="l00801"></a>00801 kstep = 1;<a name="l00802"></a>00802 } <a name="l00803"></a>00803 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxMinSteps >= 4)<a name="l00804"></a>00804 {<a name="l00805"></a>00805 k0 = 2;<a name="l00806"></a>00806 kmax = 8;<a name="l00807"></a>00807 kstep = 2;<a name="l00808"></a>00808 } <a name="l00809"></a>00809 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (maxMinSteps >= 2)<a name="l00810"></a>00810 {<a name="l00811"></a>00811 k0 = 2;<a name="l00812"></a>00812 kmax = 5;<a name="l00813"></a>00813 kstep = 3;<a name="l00814"></a>00814 }<a name="l00815"></a>00815 <span class="keywordflow">else</span><a name="l00816"></a>00816 {<a name="l00817"></a>00817 k0 = 5;<a name="l00818"></a>00818 kmax = 5;<a name="l00819"></a>00819 kstep = 1;<a name="l00820"></a>00820 }<a name="l00821"></a>00821 <a name="l00822"></a>00822 QwtValueList minorTicks;<a name="l00823"></a>00823 <a name="l00824"></a>00824 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < (int)majorTicks.count(); i++)<a name="l00825"></a>00825 {<a name="l00826"></a>00826 <span class="keyword">const</span> <span class="keywordtype">double</span> v = majorTicks[i];<a name="l00827"></a>00827 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = k0; k<= kmax; k+=kstep)<a name="l00828"></a>00828 minorTicks += v * <span class="keywordtype">double</span>(k);<a name="l00829"></a>00829 }<a name="l00830"></a>00830 <a name="l00831"></a>00831 <span class="keywordflow">return</span> minorTicks;<a name="l00832"></a>00832 }<a name="l00833"></a>00833 <span class="keywordflow">else</span> <span class="comment">// major step > one decade</span><a name="l00834"></a>00834 {<a name="l00835"></a>00835 <span class="keywordtype">double</span> minStep = divideInterval(stepSize, maxMinSteps);<a name="l00836"></a>00836 <span class="keywordflow">if</span> ( minStep == 0.0 )<a name="l00837"></a>00837 <span class="keywordflow">return</span> QwtValueList();<a name="l00838"></a>00838 <a name="l00839"></a>00839 <span class="keywordflow">if</span> ( minStep < 1.0 )<a name="l00840"></a>00840 minStep = 1.0;<a name="l00841"></a>00841 <a name="l00842"></a>00842 <span class="comment">// # subticks per interval</span><a name="l00843"></a>00843 <span class="keywordtype">int</span> nMin = qRound(stepSize / minStep) - 1;<a name="l00844"></a>00844 <a name="l00845"></a>00845 <span class="comment">// Do the minor steps fit into the interval?</span><a name="l00846"></a>00846 <a name="l00847"></a>00847 <span class="keywordflow">if</span> ( <a class="code" href="class_qwt_scale_arithmetic.html#6c6f982022550fba9ccee034f87461ce">QwtScaleArithmetic::compareEps</a>((nMin + 1) * minStep, <a name="l00848"></a>00848 qwtAbs(stepSize), stepSize) > 0)<a name="l00849"></a>00849 {<a name="l00850"></a>00850 nMin = 0;<a name="l00851"></a>00851 }<a name="l00852"></a>00852 <a name="l00853"></a>00853 <span class="keywordflow">if</span> (nMin < 1)<a name="l00854"></a>00854 <span class="keywordflow">return</span> QwtValueList(); <span class="comment">// no subticks</span><a name="l00855"></a>00855 <a name="l00856"></a>00856 <span class="comment">// substep factor = 10^substeps</span><a name="l00857"></a>00857 <span class="keyword">const</span> <span class="keywordtype">double</span> minFactor = qwtMax(pow(10.0, minStep), 10.0);<a name="l00858"></a>00858 <a name="l00859"></a>00859 QwtValueList minorTicks;<a name="l00860"></a>00860 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < (int)majorTicks.count(); i++)<a name="l00861"></a>00861 {<a name="l00862"></a>00862 <span class="keywordtype">double</span> val = majorTicks[i];<a name="l00863"></a>00863 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k=0; k< nMin; k++)<a name="l00864"></a>00864 {<a name="l00865"></a>00865 val *= minFactor;<a name="l00866"></a>00866 minorTicks += val;<a name="l00867"></a>00867 }<a name="l00868"></a>00868 }<a name="l00869"></a>00869 <span class="keywordflow">return</span> minorTicks;<a name="l00870"></a>00870 }<a name="l00871"></a>00871 }<a name="l00872"></a>00872 <a name="l00884"></a>00884 <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> QwtLog10ScaleEngine::align(<a name="l00885"></a>00885 <span class="keyword">const</span> <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> &interval, <span class="keywordtype">double</span> stepSize)<span class="keyword"> const</span><a name="l00886"></a>00886 <span class="keyword"></span>{<a name="l00887"></a>00887 <span class="keyword">const</span> <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> intv = <a class="code" href="class_qwt_log10_scale_engine.html#1d3abcbe5ce63d7f9cfa5a04c028bf55">log10</a>(interval);<a name="l00888"></a>00888 <a name="l00889"></a>00889 <span class="keyword">const</span> <span class="keywordtype">double</span> x1 = <a class="code" href="class_qwt_scale_arithmetic.html#924d97f2e5db236f43f4d65e430e09c1">QwtScaleArithmetic::floorEps</a>(intv.<a class="code" href="class_qwt_double_interval.html#2d7d56e81ee75911f176c94f6aaf4b8b">minValue</a>(), stepSize);<a name="l00890"></a>00890 <span class="keyword">const</span> <span class="keywordtype">double</span> x2 = <a class="code" href="class_qwt_scale_arithmetic.html#86da4fc0928457d03201d8b520d7d816">QwtScaleArithmetic::ceilEps</a>(intv.<a class="code" href="class_qwt_double_interval.html#8fd8629d76f24d5494e59458cd79c4e2">maxValue</a>(), stepSize);<a name="l00891"></a>00891 <a name="l00892"></a>00892 <span class="keywordflow">return</span> <a class="code" href="class_qwt_log10_scale_engine.html#f08b0486afd765554702f4c237302985">pow10</a>(<a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a>(x1, x2));<a name="l00893"></a>00893 }<a name="l00894"></a>00894 <a name="l00899"></a><a class="code" href="class_qwt_log10_scale_engine.html#1d3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -