7fd59977 |
1 | #include <Message_ProgressScale.ixx> |
2 | |
3 | static const Standard_Real ZERO = 1e-10; |
4 | static const Standard_Real INFINITE = 1e100; |
5 | |
6 | //======================================================================= |
7 | //function : Message_ProgressScale |
8 | //purpose : |
9 | //======================================================================= |
10 | |
11 | Message_ProgressScale::Message_ProgressScale () : |
12 | myMin(0.), myMax(100.), myStep(1.), myInfinite(Standard_False), |
13 | myFirst(0.), myLast(1.) |
14 | { |
15 | } |
16 | |
17 | //======================================================================= |
18 | //function : LocalToBase |
19 | //purpose : |
20 | //======================================================================= |
21 | |
22 | Standard_Real Message_ProgressScale::LocalToBase (const Standard_Real val) const |
23 | { |
24 | if ( val <= myMin ) return myFirst; |
25 | if ( myMax - myMin <= ZERO ) return myLast; |
26 | |
27 | if ( ! myInfinite ) { |
28 | if ( val >= myMax ) return myLast; |
29 | return myFirst + ( myLast - myFirst ) * ( val - myMin ) / ( myMax - myMin ); |
30 | } |
31 | Standard_Real x = ( val - myMin ) / ( myMax - myMin ); |
32 | // return myFirst + ( myLast - myFirst ) * ( 1. - exp ( -x ) ); // exponent |
33 | return myFirst + ( myLast - myFirst ) * x / ( 1. + x ); // hyperbola |
34 | } |
35 | |
36 | //======================================================================= |
37 | //function : BaseToLocal |
38 | //purpose : |
39 | //======================================================================= |
40 | |
41 | Standard_Real Message_ProgressScale::BaseToLocal (const Standard_Real val) const |
42 | { |
43 | if ( myLast - val <= ZERO ) |
44 | return myInfinite ? INFINITE : myMax; |
45 | if ( ! myInfinite ) |
46 | return myMin + ( myMax - myMin ) * ( val - myFirst ) / ( myLast - myFirst ); |
47 | // Standard_Real x = log ( ( val - myFirst ) / ( myLast - val ) ); // exponent |
48 | Standard_Real x = ( val - myFirst ) / ( myLast - val ); // hyperbola |
49 | return myMin + x * ( myMax - myMin ); |
50 | } |