Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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();
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
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();
		}
	}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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();
}