2 // File : VISU_LookupTable.cxx
3 // Created : UI team, 18.02.03
4 // Descr : Scaling values of vtkLookupTable
5 // Author : Vitaliy Smetannikov
8 // Copyright : Open CASCADE 2003
11 #include "VISU_LookupTable.hxx"
12 #include "vtkObjectFactory.h"
15 VISU_LookupTable *VISU_LookupTable::New() {
16 vtkObject* ret = vtkObjectFactory::CreateInstance("VISU_LookupTable");
18 return (VISU_LookupTable*)ret;
20 // If the factory was unable to create the object, then create it here.
21 return new VISU_LookupTable;
24 VISU_LookupTable::VISU_LookupTable(int sze, int ext)
25 : vtkLogLookupTable(sze, ext), myScale(1.), myIsLog(0)
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");
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]);
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]);
43 //vtkErrorMacro(<<"Can't use logarithmic table on mixed negative/positive values");
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];
57 unsigned char* VISU_LookupTable::MapValue(float v) {
58 v = this->TableRange[0] + (v - this->TableRange[0])*myScale;
60 v = pow((float)10.0,v)*myScale;
61 //v = pow(10.0, (this->LogMinRange + (v - this->LogMinRange)))*myScale;
62 return vtkLogLookupTable::MapValue(v);
65 return vtkLookupTable::MapValue(v);