⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwt__scale__engine_8cpp-source.html

📁 QWT5.01用于Qt开发的二维图形库程序
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00577"></a>00577     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; (int)majorTicks.count(); i++)<a name="l00578"></a>00578     {<a name="l00579"></a>00579         <span class="keywordtype">double</span> val = majorTicks[i];<a name="l00580"></a>00580         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k=0; k&lt; nMin; k++)<a name="l00581"></a>00581         {<a name="l00582"></a>00582             val += minStep;<a name="l00583"></a>00583 <a name="l00584"></a>00584             <span class="keywordtype">double</span> alignedValue = val;<a name="l00585"></a>00585             <span class="keywordflow">if</span> (<a class="code" href="class_qwt_scale_arithmetic.html#6c6f982022550fba9ccee034f87461ce">QwtScaleArithmetic::compareEps</a>(val, 0.0, stepSize) == 0) <a name="l00586"></a>00586                 alignedValue = 0.0;<a name="l00587"></a>00587 <a name="l00588"></a>00588             <span class="keywordflow">if</span> ( k == medIndex )<a name="l00589"></a>00589                 mediumTicks += alignedValue;<a name="l00590"></a>00590             <span class="keywordflow">else</span><a name="l00591"></a>00591                 minorTicks += alignedValue;<a name="l00592"></a>00592         }<a name="l00593"></a>00593     }<a name="l00594"></a>00594 }<a name="l00595"></a>00595 <a name="l00607"></a><a class="code" href="class_qwt_linear_scale_engine.html#152ccac12d8782b43b7a82061a4e1947">00607</a> <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> <a class="code" href="class_qwt_linear_scale_engine.html#152ccac12d8782b43b7a82061a4e1947">QwtLinearScaleEngine::align</a>(<a name="l00608"></a>00608     <span class="keyword">const</span> <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> &amp;interval, <span class="keywordtype">double</span> stepSize)<span class="keyword"> const</span><a name="l00609"></a>00609 <span class="keyword"></span>{<a name="l00610"></a>00610     <span class="keyword">const</span> <span class="keywordtype">double</span> x1 = <a name="l00611"></a>00611         <a class="code" href="class_qwt_scale_arithmetic.html#924d97f2e5db236f43f4d65e430e09c1">QwtScaleArithmetic::floorEps</a>(interval.<a class="code" href="class_qwt_double_interval.html#2d7d56e81ee75911f176c94f6aaf4b8b">minValue</a>(), stepSize);<a name="l00612"></a>00612     <span class="keyword">const</span> <span class="keywordtype">double</span> x2 = <a name="l00613"></a>00613         <a class="code" href="class_qwt_scale_arithmetic.html#86da4fc0928457d03201d8b520d7d816">QwtScaleArithmetic::ceilEps</a>(interval.<a class="code" href="class_qwt_double_interval.html#8fd8629d76f24d5494e59458cd79c4e2">maxValue</a>(), stepSize);<a name="l00614"></a>00614 <a name="l00615"></a>00615     <span class="keywordflow">return</span> <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a>(x1, x2);<a name="l00616"></a>00616 }<a name="l00617"></a>00617 <a name="l00621"></a><a class="code" href="class_qwt_log10_scale_engine.html#f972778615ea076c8452abea96516ce9">00621</a> <a class="code" href="class_qwt_scale_transformation.html">QwtScaleTransformation</a> *<a class="code" href="class_qwt_log10_scale_engine.html#f972778615ea076c8452abea96516ce9">QwtLog10ScaleEngine::transformation</a>()<span class="keyword"> const</span><a name="l00622"></a>00622 <span class="keyword"></span>{<a name="l00623"></a>00623     <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="class_qwt_scale_transformation.html">QwtScaleTransformation</a>(QwtScaleTransformation::Log10);<a name="l00624"></a>00624 }<a name="l00625"></a>00625 <a name="l00636"></a><a class="code" href="class_qwt_log10_scale_engine.html#bcab6bb8667f82dcdb656ad634976142">00636</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_log10_scale_engine.html#bcab6bb8667f82dcdb656ad634976142">QwtLog10ScaleEngine::autoScale</a>(<span class="keywordtype">int</span> maxNumSteps, <a name="l00637"></a>00637     <span class="keywordtype">double</span> &amp;x1, <span class="keywordtype">double</span> &amp;x2, <span class="keywordtype">double</span> &amp;stepSize)<span class="keyword"> const</span><a name="l00638"></a>00638 <span class="keyword"></span>{<a name="l00639"></a>00639     <span class="keywordflow">if</span> ( x1 &gt; x2 )<a name="l00640"></a>00640         qSwap(x1, x2);<a name="l00641"></a>00641 <a name="l00642"></a>00642     <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> interval(x1 / pow(10.0, <a class="code" href="class_qwt_scale_engine.html#51447104ab614a157c2bac6a0f0f7dc9">loMargin</a>()), <a name="l00643"></a>00643         x2 * pow(10.0, <a class="code" href="class_qwt_scale_engine.html#a1e2d260975cef6546a3829213bc5f2f">hiMargin</a>()) );<a name="l00644"></a>00644 <a name="l00645"></a>00645     <span class="keywordtype">double</span> logRef = 1.0;<a name="l00646"></a>00646     <span class="keywordflow">if</span> (<a class="code" href="class_qwt_scale_engine.html#5962458870865df797e84e3bd6badf02">reference</a>() &gt; LOG_MIN / 2)<a name="l00647"></a>00647         logRef = qwtMin(<a class="code" href="class_qwt_scale_engine.html#5962458870865df797e84e3bd6badf02">reference</a>(), LOG_MAX / 2);<a name="l00648"></a>00648 <a name="l00649"></a>00649     <span class="keywordflow">if</span> (<a class="code" href="class_qwt_scale_engine.html#b43cac5ff8843531bbb02b4401e8fb62">testAttribute</a>(QwtScaleEngine::Symmetric))<a name="l00650"></a>00650     {<a name="l00651"></a>00651         <span class="keyword">const</span> <span class="keywordtype">double</span> delta = qwtMax(interval.<a class="code" href="class_qwt_double_interval.html#8fd8629d76f24d5494e59458cd79c4e2">maxValue</a>() / logRef,  <a name="l00652"></a>00652             logRef / interval.<a class="code" href="class_qwt_double_interval.html#2d7d56e81ee75911f176c94f6aaf4b8b">minValue</a>());<a name="l00653"></a>00653         interval.<a class="code" href="class_qwt_double_interval.html#a824f64ce1f33a025d60e1810c956f09">setInterval</a>(logRef / delta, logRef * delta);<a name="l00654"></a>00654     }<a name="l00655"></a>00655 <a name="l00656"></a>00656     <span class="keywordflow">if</span> (<a class="code" href="class_qwt_scale_engine.html#b43cac5ff8843531bbb02b4401e8fb62">testAttribute</a>(QwtScaleEngine::IncludeReference))<a name="l00657"></a>00657         interval = interval.<a class="code" href="class_qwt_double_interval.html#718e883366caa45e24b2ba4b9d529f11">extend</a>(logRef);<a name="l00658"></a>00658 <a name="l00659"></a>00659     interval = interval.<a class="code" href="class_qwt_double_interval.html#01ad17798ad6236638a16771405075cd">limited</a>(LOG_MIN, LOG_MAX);<a name="l00660"></a>00660 <a name="l00661"></a>00661     <span class="keywordflow">if</span> (interval.<a class="code" href="class_qwt_double_interval.html#b5d610e0d1fc9a5a3bc020dd39326327">width</a>() == 0.0)<a name="l00662"></a>00662         interval = <a class="code" href="class_qwt_scale_engine.html#f06bc397d46b40c69fe5c82b7f2c3267">buildInterval</a>(interval.<a class="code" href="class_qwt_double_interval.html#2d7d56e81ee75911f176c94f6aaf4b8b">minValue</a>());<a name="l00663"></a>00663 <a name="l00664"></a>00664     stepSize = <a class="code" href="class_qwt_scale_engine.html#ff30158c5ccfee78f4c3e01c0fb5f4de">divideInterval</a>(<a class="code" href="class_qwt_log10_scale_engine.html#1d3abcbe5ce63d7f9cfa5a04c028bf55">log10</a>(interval).width(), qwtMax(maxNumSteps, 1));<a name="l00665"></a>00665     <span class="keywordflow">if</span> ( stepSize &lt; 1.0 )<a name="l00666"></a>00666         stepSize = 1.0;<a name="l00667"></a>00667 <a name="l00668"></a>00668     <span class="keywordflow">if</span> (!<a class="code" href="class_qwt_scale_engine.html#b43cac5ff8843531bbb02b4401e8fb62">testAttribute</a>(QwtScaleEngine::Floating))<a name="l00669"></a>00669         interval = align(interval, stepSize);<a name="l00670"></a>00670 <a name="l00671"></a>00671     x1 = interval.<a class="code" href="class_qwt_double_interval.html#2d7d56e81ee75911f176c94f6aaf4b8b">minValue</a>();<a name="l00672"></a>00672     x2 = interval.<a class="code" href="class_qwt_double_interval.html#8fd8629d76f24d5494e59458cd79c4e2">maxValue</a>();<a name="l00673"></a>00673 <a name="l00674"></a>00674     <span class="keywordflow">if</span> (<a class="code" href="class_qwt_scale_engine.html#b43cac5ff8843531bbb02b4401e8fb62">testAttribute</a>(QwtScaleEngine::Inverted))<a name="l00675"></a>00675     {<a name="l00676"></a>00676         qSwap(x1, x2);<a name="l00677"></a>00677         stepSize = -stepSize;<a name="l00678"></a>00678     }<a name="l00679"></a>00679 }<a name="l00680"></a>00680 <a name="l00693"></a><a class="code" href="class_qwt_log10_scale_engine.html#e46745d561ce2ac583bb44e94f0fc7d6">00693</a> <a class="code" href="class_qwt_scale_div.html">QwtScaleDiv</a> <a class="code" href="class_qwt_log10_scale_engine.html#e46745d561ce2ac583bb44e94f0fc7d6">QwtLog10ScaleEngine::divideScale</a>(<span class="keywordtype">double</span> x1, <span class="keywordtype">double</span> x2,<a name="l00694"></a>00694     <span class="keywordtype">int</span> maxMajSteps, <span class="keywordtype">int</span> maxMinSteps, <span class="keywordtype">double</span> stepSize)<span class="keyword"> const</span><a name="l00695"></a>00695 <span class="keyword"></span>{<a name="l00696"></a>00696     <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> interval = <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a>(x1, x2).<a class="code" href="class_qwt_double_interval.html#e4735252fef79bff0bda2dc61fb886c2">normalized</a>();<a name="l00697"></a>00697     interval = interval.<a class="code" href="class_qwt_double_interval.html#01ad17798ad6236638a16771405075cd">limited</a>(LOG_MIN, LOG_MAX);<a name="l00698"></a>00698 <a name="l00699"></a>00699     <span class="keywordflow">if</span> (interval.<a class="code" href="class_qwt_double_interval.html#b5d610e0d1fc9a5a3bc020dd39326327">width</a>() &lt;= 0 )<a name="l00700"></a>00700         <span class="keywordflow">return</span> <a class="code" href="class_qwt_scale_div.html">QwtScaleDiv</a>();<a name="l00701"></a>00701 <a name="l00702"></a>00702     <span class="keywordflow">if</span> (interval.<a class="code" href="class_qwt_double_interval.html#8fd8629d76f24d5494e59458cd79c4e2">maxValue</a>() / interval.<a class="code" href="class_qwt_double_interval.html#2d7d56e81ee75911f176c94f6aaf4b8b">minValue</a>() &lt; 10.0)<a name="l00703"></a>00703     {<a name="l00704"></a>00704         <span class="comment">// scale width is less than one decade -&gt; build linear scale</span><a name="l00705"></a>00705     <a name="l00706"></a>00706         <a class="code" href="class_qwt_linear_scale_engine.html">QwtLinearScaleEngine</a> linearScaler;<a name="l00707"></a>00707         linearScaler.<a class="code" href="class_qwt_scale_engine.html#d221d715e28e644975c6cbda9cae492e">setAttributes</a>(<a class="code" href="class_qwt_scale_engine.html#3e8d3101af3dbab7a97b96779118e428">attributes</a>());<a name="l00708"></a>00708         linearScaler.<a class="code" href="class_qwt_scale_engine.html#89985ea69dbd858c8b9162ecd2be936e">setReference</a>(<a class="code" href="class_qwt_scale_engine.html#5962458870865df797e84e3bd6badf02">reference</a>());<a name="l00709"></a>00709         linearScaler.<a class="code" href="class_qwt_scale_engine.html#d6e83875e5e7a65b005ebb6213e1e869">setMargins</a>(<a class="code" href="class_qwt_scale_engine.html#51447104ab614a157c2bac6a0f0f7dc9">loMargin</a>(), <a class="code" href="class_qwt_scale_engine.html#a1e2d260975cef6546a3829213bc5f2f">hiMargin</a>());<a name="l00710"></a>00710 <a name="l00711"></a>00711         <span class="keywordflow">return</span> linearScaler.<a class="code" href="class_qwt_linear_scale_engine.html#afed94c688e67c95a6ecf18e8bb522ab">divideScale</a>(x1, x2, <a name="l00712"></a>00712             maxMajSteps, maxMinSteps, stepSize);<a name="l00713"></a>00713     }<a name="l00714"></a>00714 <a name="l00715"></a>00715     stepSize = qwtAbs(stepSize);<a name="l00716"></a>00716     <span class="keywordflow">if</span> ( stepSize == 0.0 )<a name="l00717"></a>00717     {<a name="l00718"></a>00718         <span class="keywordflow">if</span> ( maxMajSteps &lt; 1 )<a name="l00719"></a>00719             maxMajSteps = 1;<a name="l00720"></a>00720 <a name="l00721"></a>00721         stepSize = <a class="code" href="class_qwt_scale_engine.html#ff30158c5ccfee78f4c3e01c0fb5f4de">divideInterval</a>(<a class="code" href="class_qwt_log10_scale_engine.html#1d3abcbe5ce63d7f9cfa5a04c028bf55">log10</a>(interval).width(), maxMajSteps);<a name="l00722"></a>00722         <span class="keywordflow">if</span> ( stepSize &lt; 1.0 )<a name="l00723"></a>00723             stepSize = 1.0; <span class="comment">// major step must be &gt;= 1 decade</span><a name="l00724"></a>00724     }<a name="l00725"></a>00725 <a name="l00726"></a>00726     <a class="code" href="class_qwt_scale_div.html">QwtScaleDiv</a> scaleDiv;<a name="l00727"></a>00727     <span class="keywordflow">if</span> ( stepSize != 0.0 )<a name="l00728"></a>00728     {<a name="l00729"></a>00729         QwtValueList ticks[QwtScaleDiv::NTickTypes];<a name="l00730"></a>00730         buildTicks(interval, stepSize, maxMinSteps, ticks);<a name="l00731"></a>00731 <a name="l00732"></a>00732         scaleDiv = <a class="code" href="class_qwt_scale_div.html">QwtScaleDiv</a>(interval, ticks);<a name="l00733"></a>00733     }<a name="l00734"></a>00734 <a name="l00735"></a>00735     <span class="keywordflow">if</span> ( x1 &gt; x2 )<a name="l00736"></a>00736         scaleDiv.<a class="code" href="class_qwt_scale_div.html#1ea38d52d5836fd4376f480180973786">invert</a>();<a name="l00737"></a>00737 <a name="l00738"></a>00738     <span class="keywordflow">return</span> scaleDiv;<a name="l00739"></a>00739 }<a name="l00740"></a>00740 <a name="l00741"></a>00741 <span class="keywordtype">void</span> QwtLog10ScaleEngine::buildTicks(<a name="l00742"></a>00742     <span class="keyword">const</span> <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a>&amp; interval, <span class="keywordtype">double</span> stepSize, <span class="keywordtype">int</span> maxMinSteps,<a name="l00743"></a>00743     QwtValueList ticks[QwtScaleDiv::NTickTypes])<span class="keyword"> const</span><a name="l00744"></a>00744 <span class="keyword"></span>{<a name="l00745"></a>00745     <span class="keyword">const</span> <a class="code" href="class_qwt_double_interval.html">QwtDoubleInterval</a> boundingInterval =<a name="l00746"></a>00746         align(interval, stepSize);<a name="l00747"></a>00747     <a name="l00748"></a>00748     ticks[QwtScaleDiv::MajorTick] = <a name="l00749"></a>00749         buildMajorTicks(boundingInterval, stepSize);<a name="l00750"></a>00750 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -