Ignore:
Timestamp:
Oct 2, 2013 6:40:26 AM (11 years ago)
Author:
ldelgass
Message:

Add explicit copy ctor, assignment operator for ColorMap?, in order to make
deep copies of vtk transfer functions and lookup table (instead of copying
smart pointer refs)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/vtkvis/ColorMap.cpp

    r3978 r3982  
    3737}
    3838
     39ColorMap::ColorMap(const ColorMap& other) :
     40    _name(other._name),
     41    _controlPoints(other._controlPoints),
     42    _opacityControlPoints(other._opacityControlPoints),
     43    _needsBuild(other._needsBuild),
     44    _numTableEntries(other._numTableEntries)
     45{
     46    _colorTF = vtkSmartPointer<vtkColorTransferFunction>::New();
     47    _colorTF->ClampingOn();
     48    _opacityTF = vtkSmartPointer<vtkPiecewiseFunction>::New();
     49    _opacityTF->ClampingOn();
     50    _colorTF->DeepCopy(other._colorTF);
     51    _opacityTF->DeepCopy(other._opacityTF);
     52    if (other._lookupTable != NULL) {
     53        _lookupTable = vtkSmartPointer<vtkLookupTable>::New();
     54        _lookupTable->DeepCopy(other._lookupTable);
     55    }
     56}
     57
     58ColorMap& ColorMap::operator=(const ColorMap& other)
     59{
     60    if (&other != this) {
     61        _name = other._name;
     62        _controlPoints = other._controlPoints;
     63        _opacityControlPoints = other._opacityControlPoints;
     64        _needsBuild = other._needsBuild;
     65        _numTableEntries = other._numTableEntries;
     66        _colorTF->DeepCopy(other._colorTF);
     67        _opacityTF->DeepCopy(other._opacityTF);
     68        if (other._lookupTable != NULL) {
     69            _lookupTable = vtkSmartPointer<vtkLookupTable>::New();
     70            _lookupTable->DeepCopy(other._lookupTable);
     71        }
     72    }
     73    return *this;
     74}
     75
    3976ColorMap::~ColorMap()
    4077{
     
    70107    for (int i = 0; i < _colorTF->GetSize(); i++) {
    71108        _colorTF->GetNodeValue(i, tmp);
     109        //TRACE("Norm: %d: %g %g,%g,%g", i, tmp[0], tmp[1], tmp[2], tmp[3]);
    72110        tmp[0] = range[0] + tmp[0] * (range[1] - range[0]);
    73111        tf->AddRGBPoint(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5]);
     112        //TRACE("New : %d: %g %g,%g,%g", i, tmp[0], tmp[1], tmp[2], tmp[3]);
    74113    }
    75114    return tf;
     
    87126    for (int i = 0; i < _opacityTF->GetSize(); i++) {
    88127        _opacityTF->GetNodeValue(i, tmp);
     128        //TRACE("Norm: %d: %g %g", i, tmp[0], tmp[1]);
    89129        tmp[0] = range[0] + tmp[0] * (range[1] - range[0]);
    90         tmp[1] *= opacityScale;
     130        if (opacityScale < 1.0) {
     131            tmp[1] *= opacityScale;
     132        }
    91133        tf->AddPoint(tmp[0], tmp[1], tmp[2], tmp[3]);
     134        //TRACE("New : %d: %g %g", i, tmp[0], tmp[1]);
    92135    }
    93136    return tf;
Note: See TracChangeset for help on using the changeset viewer.