Salome HOME
NRI : Remove dependence with KERNEL.
[modules/visu.git] / src / VISU_I / VISU_LookupTable.cxx
1 using namespace std;
2 //  File      : VISU_LookupTable.cxx
3 //  Created   : UI team, 18.02.03
4 //  Descr     : Scaling values of vtkLookupTable
5 //  Author    : Vitaliy Smetannikov
6 //  Project   : SALOME
7 //  Module    : OBJECT
8 //  Copyright : Open CASCADE 2003
9
10
11 #include "VISU_LookupTable.hxx"
12 #include "vtkObjectFactory.h"
13
14
15 VISU_LookupTable *VISU_LookupTable::New() {
16   vtkObject* ret = vtkObjectFactory::CreateInstance("VISU_LookupTable");
17   if(ret) {
18     return (VISU_LookupTable*)ret;
19   }
20   // If the factory was unable to create the object, then create it here.
21   return new VISU_LookupTable;
22 }
23
24 VISU_LookupTable::VISU_LookupTable(int sze, int ext)
25   : vtkLogLookupTable(sze, ext), myScale(1.), myIsLog(0) 
26 {}
27
28 int VISU_LookupTable::ComputeLogRange(float inRange[2], float outRange[2]){
29   if(inRange[0] >= inRange[1]){
30     //vtkErrorMacro (<<"Minimum value must be less than maximum value");
31     return -1;
32   }
33   if(0.0 <= inRange[0] && 0.0 < inRange[1]){
34     if (inRange[0] == 0.0) inRange[0] = 1.0e-06 * (inRange[1] - inRange[0]);
35     outRange[0] = log10((double)inRange[0]);
36     outRange[1] = log10((double)inRange[1]);
37     return 0;
38   }else if(inRange[0] < 0.0 && inRange[1] <= 0.0){
39     outRange[0] = log10((double)-inRange[0]);
40     outRange[1] = log10((double)-inRange[1]);
41     return 1;
42   }else{
43     //vtkErrorMacro(<<"Can't use logarithmic table on mixed negative/positive values");
44     return -1;
45   }
46 }
47
48 void VISU_LookupTable::SetTableRange(float min, float max){
49   this->TableRange[0] = min;
50   this->TableRange[1] = max;
51   this->UseAbsoluteValue = ComputeLogRange(this->TableRange,this->myLogRange);
52   if(this->UseAbsoluteValue < 0) return;
53   this->LogMinRange = this->myLogRange[0];
54   this->LogMaxRange = this->myLogRange[1];
55 }
56
57 unsigned char* VISU_LookupTable::MapValue(float v) {
58   v = this->TableRange[0] + (v - this->TableRange[0])*myScale;
59   if(myIsLog) {
60     v = pow((float)10.0,v)*myScale;
61     //v = pow(10.0, (this->LogMinRange + (v - this->LogMinRange)))*myScale;
62     return vtkLogLookupTable::MapValue(v);
63   }else{
64     //v *= myScale;
65     return vtkLookupTable::MapValue(v);
66   }
67 }
68
69
70
71
72
73
74
75
76
77
78
79