| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 | /*=========================================================================  Library:   CTK  Copyright (c) Kitware Inc.  Licensed under the Apache License, Version 2.0 (the "License");  you may not use this file except in compliance with the License.  You may obtain a copy of the License at      http://www.apache.org/licenses/LICENSE-2.0.txt  Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License.=========================================================================*//// Qt includes#include <QColor>#include <QDebug>/// CTK includes#include "ctkVTKLookupTable.h"/// VTK includes#include <vtkLookupTable.h>#include <vtkSmartPointer.h>//-----------------------------------------------------------------------------class ctkVTKLookupTablePrivate{public:  vtkSmartPointer<vtkLookupTable> LookupTable;};//-----------------------------------------------------------------------------ctkVTKLookupTable::ctkVTKLookupTable(QObject* parentObject)  :ctkTransferFunction(parentObject)  , d_ptr(new ctkVTKLookupTablePrivate){}//-----------------------------------------------------------------------------ctkVTKLookupTable::ctkVTKLookupTable(vtkLookupTable* lookupTable,                                      QObject* parentObject)  :ctkTransferFunction(parentObject)  , d_ptr(new ctkVTKLookupTablePrivate){  this->setLookupTable(lookupTable);}//-----------------------------------------------------------------------------ctkVTKLookupTable::~ctkVTKLookupTable(){}//-----------------------------------------------------------------------------int ctkVTKLookupTable::count()const{  Q_D(const ctkVTKLookupTable);  if (d->LookupTable.GetPointer() == 0)    {    Q_ASSERT(d->LookupTable.GetPointer());    return -1;    }  return d->LookupTable->GetNumberOfColors();}//-----------------------------------------------------------------------------bool ctkVTKLookupTable::isDiscrete()const{  return true;}//-----------------------------------------------------------------------------bool ctkVTKLookupTable::isEditable()const{  return true;}//-----------------------------------------------------------------------------void ctkVTKLookupTable::range(qreal& minRange, qreal& maxRange)const{  Q_D(const ctkVTKLookupTable);  if (d->LookupTable.GetPointer() == 0)    {    Q_ASSERT(d->LookupTable.GetPointer());    minRange = 1.; // set incorrect values    maxRange = 0.;    return;    }  double rangeValues[2];  d->LookupTable->GetTableRange(rangeValues);  minRange = rangeValues[0];  maxRange = rangeValues[1];}//-----------------------------------------------------------------------------QVariant ctkVTKLookupTable::minValue()const{  Q_D(const ctkVTKLookupTable);  if (d->LookupTable.GetPointer() == 0)    {    Q_ASSERT(d->LookupTable.GetPointer());    return QColor();    }  QColor minValue = QColor::fromHsvF(    d->LookupTable->GetHueRange()[0],    d->LookupTable->GetSaturationRange()[0],    d->LookupTable->GetValueRange()[0],    d->LookupTable->GetAlphaRange()[0]);  return minValue;}//-----------------------------------------------------------------------------QVariant ctkVTKLookupTable::maxValue()const{  Q_D(const ctkVTKLookupTable);  if (d->LookupTable.GetPointer() == 0)    {    Q_ASSERT(d->LookupTable.GetPointer());    return QColor();    }  QColor maxValue = QColor::fromHsvF(    d->LookupTable->GetHueRange()[1],    d->LookupTable->GetSaturationRange()[1],    d->LookupTable->GetValueRange()[1],    d->LookupTable->GetAlphaRange()[1]);  return maxValue;}//-----------------------------------------------------------------------------qreal ctkVTKLookupTable::indexToPos(int index)const{  Q_D(const ctkVTKLookupTable);  double* range = d->LookupTable->GetRange();  return range[0] + index * ((range[1] - range[0]) / (d->LookupTable->GetNumberOfColors() - 1));}//-----------------------------------------------------------------------------int ctkVTKLookupTable::posToIndex(qreal pos)const{  Q_D(const ctkVTKLookupTable);  double* range = d->LookupTable->GetRange();  return (pos - range[0]) / ((range[1] - range[0]) / (d->LookupTable->GetNumberOfColors() - 1));}//-----------------------------------------------------------------------------ctkControlPoint* ctkVTKLookupTable::controlPoint(int index)const{  ctkControlPoint* cp = new ctkControlPoint();  cp->P.X = this->indexToPos(index);  cp->P.Value = this->value(cp->P.X);  return cp;}//-----------------------------------------------------------------------------QVariant ctkVTKLookupTable::value(qreal pos)const{  Q_D(const ctkVTKLookupTable);  Q_ASSERT(d->LookupTable.GetPointer());  double rgb[3];  d->LookupTable->GetColor(pos, rgb);  double alpha = d->LookupTable->GetOpacity(pos);  return QColor::fromRgbF(rgb[0], rgb[1], rgb[2], alpha);}//-----------------------------------------------------------------------------int ctkVTKLookupTable::insertControlPoint(const ctkControlPoint& cp){  Q_UNUSED(cp);  //Q_D(ctkVTKLookupTable);  qDebug() << "ctkVTKLookupTable doesn't support insertControlPoint";  return -1;}//-----------------------------------------------------------------------------// insert point with value = 0int ctkVTKLookupTable::insertControlPoint(qreal pos){  Q_UNUSED(pos);  // nothing  int index = 0;  return index;}//-----------------------------------------------------------------------------void ctkVTKLookupTable::setControlPointPos(int index, qreal pos){  Q_UNUSED(index);  Q_UNUSED(pos);  //Q_D(ctkVTKLookupTable);  // TODO, inform that nothing is done here.  qDebug() << "ctkVTKLookupTable doesn't support setControlPointPos";  return;}//-----------------------------------------------------------------------------void ctkVTKLookupTable::setControlPointValue(int index, const QVariant& value){  Q_D(ctkVTKLookupTable);  Q_ASSERT(value.value<QColor>().isValid());  QColor rgba = value.value<QColor>();  d->LookupTable->SetTableValue(index, rgba.redF(), rgba.greenF(), rgba.blueF(), rgba.alphaF());}//-----------------------------------------------------------------------------void ctkVTKLookupTable::setLookupTable(vtkLookupTable* lookupTable){  Q_D(ctkVTKLookupTable);  d->LookupTable = lookupTable;  this->qvtkReconnect(d->LookupTable,vtkCommand::ModifiedEvent,                      this, SIGNAL(changed()));  emit changed();}//-----------------------------------------------------------------------------vtkLookupTable* ctkVTKLookupTable::lookupTable()const{  Q_D(const ctkVTKLookupTable);  return d->LookupTable;}//-----------------------------------------------------------------------------void ctkVTKLookupTable::removeControlPoint( qreal pos ){  Q_UNUSED(pos);  // TO BE IMPLEMENTED}
 |