mapHandler.cpp 1.74 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
#include "visualization/mapHandler.h"
#include "visualization/vboHandler.h"
#include "interface/system.h"

#include "Topology/generic/genericmap.h"

MapHandler::MapHandler(CGoGN::GenericMap *map) :
	m_map(map)
{}

MapHandler::~MapHandler()
{
	while (!l_vbo.isEmpty())
	{
		VBOHandler *vboH = l_vbo.first();
		bool destroy = !vboH->isShared();
		takeVBO(vboH);

		if (destroy)
			delete vboH;
	}

	if (m_map)
		delete m_map;
}

VBOHandler *MapHandler::addNewVBO(QString name)
{
	foreach(VBOHandler * vbo, l_vbo)
	{
		if ((*vbo) == name)
		{
			System::Error::code = System::Error::VBO_EXISTS_f(name);

			return NULL;
		}
	}
	VBOHandler *newVBO = new VBOHandler(name);
	newVBO->shareWith(this);

	return newVBO;
}

bool MapHandler::addVBO(VBOHandler *vbo)
{
	if (vbo)
	{
		foreach(VBOHandler * vboH, l_vbo)
		{
			if (vbo == vboH || vbo->getName() == vboH->getName())
			{
				System::Error::code = System::Error::VBO_EXISTS_f(vbo->getName());
				return false;
			}
		}
		l_vbo.push_back(vbo);
		return true;
	}
	else
		return false;
}

VBOHandler *MapHandler::findVBO(QString name)
{
	foreach(VBOHandler * vbo, l_vbo)
	{
		if (vbo->getName() == name)
			return vbo;
	}
	return NULL;
}

VBOHandler *MapHandler::findFirstVBOMatching(QRegExp regexp)
{
	foreach(VBOHandler * vbo, l_vbo)
	{
		if (vbo->getName().contains(regexp))
			return vbo;
	}
	return NULL;
}

QList<VBOHandler *> MapHandler::findVBOsMatching(QRegExp regexp)
{
	QList<VBOHandler *> rlist;
	foreach(VBOHandler * vbo, l_vbo)
	{
		if (vbo->getName().contains(regexp))
			rlist.push_back(vbo);
	}
	return rlist;
}

VBOHandler *MapHandler::takeVBO(VBOHandler *vbo)
{
	int i = l_vbo.indexOf(vbo);

	if (i >= 0)
	{
		VBOHandler *vboh = l_vbo.takeAt(i);
		vboh->unshareWith(this);
		return vboh;
	}
	else
		return NULL;
}