void ccColorScaleEditorDialog::createNewScale() { ccColorScale::Shared scale = ccColorScale::Create("New scale"); //add default min and max steps scale->insert(ccColorScaleElement(0.0,Qt::blue),false); scale->insert(ccColorScaleElement(1.0,Qt::red),true); assert(m_manager); if (m_manager) m_manager->addScale(scale); updateMainComboBox(); setActiveScale(scale); }
bool ccColorScale::fromFile(QFile& in, short dataVersion, int flags) { if (dataVersion < 27) //structure appeared at version 27! return false; QDataStream inStream(&in); //name (dataVersion>=27) inStream >> m_name; //UUID (dataVersion>=27) inStream >> m_uuid; //relative state (dataVersion>=27) if (in.read((char*)&m_relative,sizeof(bool)) < 0) return ReadError(); //Absolute min value (dataVersion>=27) if (in.read((char*)&m_absoluteMinValue,sizeof(double)) < 0) return ReadError(); //Absolute range (dataVersion>=27) if (in.read((char*)&m_absoluteRange,sizeof(double)) < 0) return ReadError(); //locked state (dataVersion>=27) if (in.read((char*)&m_locked,sizeof(bool)) < 0) return ReadError(); //steps list (dataVersion>=27) { //steps count uint32_t stepCount = 0; if (in.read((char*)&stepCount,4) < 0) return ReadError(); //read each step m_steps.clear(); for (uint32_t i=0; i<stepCount; ++i) { double relativePos = 0.0; QColor color(Qt::white); inStream >> relativePos; inStream >> color; m_steps.push_back(ccColorScaleElement(relativePos,color)); } update(); } return true; }
void ccColorScalesManager::fromPersistentSettings() { QSettings settings; settings.beginGroup(c_csm_groupName); QStringList scales = settings.childGroups(); ccLog::Print(QString("[ccColorScalesManager] Found %1 custom scale(s) in persistent settings").arg(scales.size())); //read each scale for (int j=0; j<scales.size(); ++j) { settings.beginGroup(scales[j]); QString name = settings.value(c_csm_scaleName,"unknown").toString(); bool relative = settings.value(c_csm_relative,true).toBool(); ccColorScale::Shared scale(new ccColorScale(name,scales[j])); if (!relative) { double minVal = settings.value(c_csm_minVal,0.0).toDouble(); double maxVal = settings.value(c_csm_maxVal,1.0).toDouble(); scale->setAbsolute(minVal,maxVal); } int size = settings.beginReadArray(c_csm_stepsList); for (int i=0; i<size;++i) { settings.setArrayIndex(i); double relativePos = settings.value(c_csm_stepRelativePos, 0.0).toDouble(); QRgb rgb = static_cast<QRgb>(settings.value(c_csm_stepColor, 0).toInt()); QColor color = QColor::fromRgb(rgb); scale->insert(ccColorScaleElement(relativePos,color),false); } settings.endArray(); settings.endGroup(); scale->update(); addScale(scale); } settings.endGroup(); }
ccColorScale::Shared ccColorScalesManager::Create(DEFAULT_SCALES scaleType) { QString name; switch (scaleType) { case BGYR: name = "Blue>Green>Yellow>Red"; break; case GREY: name = "Grey"; break; case BWR: name = "Blue>White>Red"; break; case RY: name = "Red>Yellow"; break; case RW: name = "Red>White"; break; case ABS_NORM_GREY: name = "Intensity [0-1]"; break; case HSV_360_DEG: name = "HSV angle [0-360]"; break; case VERTEX_QUALITY: name = "Vertex types default colors"; break; default: ccLog::Error(QString("Unhandled pre-defined scale (%1)").arg(scaleType)); return ccColorScale::Shared(0); } ccColorScale::Shared scale(new ccColorScale(name, QString::number(scaleType))); switch (scaleType) { case BGYR: scale->insert(ccColorScaleElement(0.0,Qt::blue),false); scale->insert(ccColorScaleElement(1.0/3.0,Qt::green),false); scale->insert(ccColorScaleElement(2.0/3.0,Qt::yellow),false); scale->insert(ccColorScaleElement(1.0,Qt::red),false); break; case GREY: scale->insert(ccColorScaleElement(0.0,Qt::black),false); scale->insert(ccColorScaleElement(1.0,Qt::white),false); break; case BWR: scale->insert(ccColorScaleElement(0.0,Qt::blue),false); scale->insert(ccColorScaleElement(0.5,Qt::white),false); scale->insert(ccColorScaleElement(1.0,Qt::red),false); break; case RY: scale->insert(ccColorScaleElement(0.0,Qt::red),false); scale->insert(ccColorScaleElement(1.0,Qt::yellow),false); break; case RW: scale->insert(ccColorScaleElement(0.0,Qt::red),false); scale->insert(ccColorScaleElement(1.0,Qt::white),false); break; case ABS_NORM_GREY: scale->insert(ccColorScaleElement(0.0,Qt::black),false); scale->insert(ccColorScaleElement(1.0,Qt::white),false); scale->setAbsolute(0.0,1.0); break; case HSV_360_DEG: scale->insert(ccColorScaleElement( 0.0/360.0,Qt::red),false); scale->insert(ccColorScaleElement( 60.0/360.0,Qt::yellow),false); scale->insert(ccColorScaleElement(120.0/360.0,Qt::green),false); scale->insert(ccColorScaleElement(180.0/360.0,Qt::cyan),false); scale->insert(ccColorScaleElement(240.0/360.0,Qt::blue),false); scale->insert(ccColorScaleElement(300.0/360.0,Qt::magenta),false); scale->insert(ccColorScaleElement(360.0/360.0,Qt::red),false); scale->setAbsolute(0.0,360.0); break; case VERTEX_QUALITY: scale->insert(ccColorScaleElement(0.0,Qt::blue),false); scale->insert(ccColorScaleElement(0.5,Qt::green),false); scale->insert(ccColorScaleElement(1.0,Qt::red),false); assert( CCLib::MeshSamplingTools::VERTEX_NORMAL < CCLib::MeshSamplingTools::VERTEX_BORDER && CCLib::MeshSamplingTools::VERTEX_BORDER < CCLib::MeshSamplingTools::VERTEX_NON_MANIFOLD ); scale->setAbsolute(CCLib::MeshSamplingTools::VERTEX_NORMAL,CCLib::MeshSamplingTools::VERTEX_NON_MANIFOLD); break; default: assert(false); } //don't forget to update internal representation! scale->update(); scale->setLocked(true); return scale; }
bool ccColorScale::fromFile(QFile& in, short dataVersion, int flags) { if (dataVersion < 27) //structure appeared at version 27! return false; QDataStream inStream(&in); //name (dataVersion>=27) inStream >> m_name; //UUID (dataVersion>=27) inStream >> m_uuid; //relative state (dataVersion>=27) if (in.read((char*)&m_relative,sizeof(bool)) < 0) return ReadError(); //Absolute min value (dataVersion>=27) if (in.read((char*)&m_absoluteMinValue,sizeof(double)) < 0) return ReadError(); //Absolute range (dataVersion>=27) if (in.read((char*)&m_absoluteRange,sizeof(double)) < 0) return ReadError(); //locked state (dataVersion>=27) if (in.read((char*)&m_locked,sizeof(bool)) < 0) return ReadError(); //steps list (dataVersion>=27) { //steps count uint32_t stepCount = 0; if (in.read((char*)&stepCount,4) < 0) return ReadError(); //read each step m_steps.clear(); for (uint32_t i=0; i<stepCount; ++i) { double relativePos = 0.0; QColor color(Qt::white); inStream >> relativePos; inStream >> color; m_steps.push_back(ccColorScaleElement(relativePos,color)); } update(); } //custom labels (dataVersion>=40) if (dataVersion >= 40) { //custom label count uint32_t labelCount = 0; if (in.read((char*)&labelCount,4) < 0) return ReadError(); try { for (uint32_t i=0; i<labelCount; ++i) { double label = 0.0; inStream >> label; m_customLabels.insert(label); } } catch (const std::bad_alloc&) { //not enough memory return MemoryError(); } }
ccColorScale::Shared ccColorScalesManager::Create(DEFAULT_SCALES scaleType) { QString name; switch (scaleType) { case BGYR: name = "Blue>Green>Yellow>Red"; break; case GREY: name = "Grey"; break; case BWR: name = "Blue>White>Red"; break; case RY: name = "Red>Yellow"; break; case RW: name = "Red>White"; break; case ABS_NORM_GREY: name = "Intensity [0-1]"; break; default: ccLog::Error(QString("Unhandled pre-defined scale (%1)").arg(scaleType)); return ccColorScale::Shared(0); } ccColorScale::Shared scale(new ccColorScale(name, QString::number(scaleType))); switch (scaleType) { case BGYR: scale->insert(ccColorScaleElement(0.0,Qt::blue),false); scale->insert(ccColorScaleElement(1.0/3.0,Qt::green),false); scale->insert(ccColorScaleElement(2.0/3.0,Qt::yellow),false); scale->insert(ccColorScaleElement(1.0,Qt::red),false); break; case GREY: scale->insert(ccColorScaleElement(0.0,Qt::black),false); scale->insert(ccColorScaleElement(1.0,Qt::white),false); break; case BWR: scale->insert(ccColorScaleElement(0.0,Qt::blue),false); scale->insert(ccColorScaleElement(0.5,Qt::white),false); scale->insert(ccColorScaleElement(1.0,Qt::red),false); break; case RY: scale->insert(ccColorScaleElement(0.0,Qt::red),false); scale->insert(ccColorScaleElement(1.0,Qt::yellow),false); break; case RW: scale->insert(ccColorScaleElement(0.0,Qt::red),false); scale->insert(ccColorScaleElement(1.0,Qt::white),false); break; case ABS_NORM_GREY: scale->insert(ccColorScaleElement(0.0,Qt::black),false); scale->insert(ccColorScaleElement(1.0,Qt::white),false); scale->setAbsolute(0.0,1.0); break; default: assert(false); } //don't forget to update internal representation! scale->update(); scale->setLocked(true); return scale; }
void ccColorScalesManager::fromPersistentSettings() { QSettings settings; settings.beginGroup(c_csm_groupName); QStringList scales = settings.childGroups(); ccLog::Print(QString("[ccColorScalesManager] Found %1 custom scale(s) in persistent settings").arg(scales.size())); //read each scale for (int j=0; j<scales.size(); ++j) { settings.beginGroup(scales[j]); QString name = settings.value(c_csm_scaleName,"unknown").toString(); bool relative = settings.value(c_csm_relative,true).toBool(); ccColorScale::Shared scale(new ccColorScale(name,scales[j])); if (!relative) { double minVal = settings.value(c_csm_minVal,0.0).toDouble(); double maxVal = settings.value(c_csm_maxVal,1.0).toDouble(); scale->setAbsolute(minVal,maxVal); } try { //steps { int size = settings.beginReadArray(c_csm_stepsList); for (int i=0; i<size;++i) { settings.setArrayIndex(i); double relativePos = settings.value(c_csm_stepRelativePos, 0.0).toDouble(); QRgb rgb = static_cast<QRgb>(settings.value(c_csm_stepColor, 0).toInt()); QColor color = QColor::fromRgb(rgb); scale->insert(ccColorScaleElement(relativePos,color),false); } settings.endArray(); } //custom labels { int size = settings.beginReadArray(c_csm_customLabels); for (int i=0; i<size;++i) { settings.setArrayIndex(i); double label = settings.value(c_csm_customLabelValue, 0.0).toDouble(); scale->customLabels().insert(label); } settings.endArray(); } } catch (const std::bad_alloc&) { ccLog::Warning(QString("[ccColorScalesManager] Failed to load scale '%1' (not enough memory)").arg(scale->getName())); scale.clear(); } settings.endGroup(); if (scale) { scale->update(); addScale(scale); } } settings.endGroup(); }