Ejemplo n.º 1
0
/**
 * @brief Tests the sending and receiving of information through streams.
 */
void SearchResultTester::testStreamMethods()
{

    QList<SearchResultElement> list;
    SearchResult s(list);
    SearchResultElement element1;
    element1.setScore(2);
    SearchResultElement element2;
    element2.setScore(4);
    s.addResultElement(element1);
    s.addResultElement(element2);

    QFile file("file.dat");
    file.open(QIODevice::WriteOnly);
    QDataStream out(&file);
    out << s;
    file.close();

    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);
    SearchResult newS(list);
    in >> newS;
    file.close();

    QCOMPARE(s.getSearchResultList().takeFirst().getScore(), newS.getSearchResultList().takeFirst().getScore());
    QCOMPARE(s.getSearchResultList().takeLast().getScore(), newS.getSearchResultList().takeLast().getScore());
}
Ejemplo n.º 2
0
//Addition operator
UtlString operator+(const char* szStr, const UtlString& str)
{
    UtlString newS(szStr);
    newS.append(str);

    return newS;
}
Ejemplo n.º 3
0
Actor* Parser::parseMesh(xml_node_iterator sceneElement)
{
	// setting the mesh
	const char* filename = sceneElement->attribute("file").value();

	TriangleMesh* mesh = MeshReader().execute(filename);

	Primitive* primitive = new TriangleMeshShape(mesh);

	xml_node op;
	if ((op = sceneElement->child("transform")) != NULL) {
		vec3 position(0, 0, 0);
		quat q(vec3(0, 0, 0));
		vec3 scale(1, 1, 1);
		float x, y, z;

		xml_object_range<xml_node_iterator> transformations = op.children();

		for (xml_node_iterator transformation = transformations.begin(); transformation != transformations.end(); ++transformation)
		{
			if (strcmp(transformation->name(), "position") == 0)
			{
				const char * stringTranslation = transformation->text().as_string();

				sscanf(stringTranslation, "%f %f %f", &x, &y, &z);
				vec3 translationVec(x, y, z);
				position = translationVec;
			}
			else if (strcmp(transformation->name(), "scale") == 0)
			{
				float s_ = transformation->text().as_float();
				vec3 newS(s_, s_, s_);
				scale = newS;
			}
			else if (strcmp(transformation->name(), "rotation") == 0)
			{
				float angle = transformation->child("angle").text().as_float();

				const char * _Axis = transformation->child("axis").text().as_string();
				sscanf(_Axis, "%f %f %f", &x, &y, &z);
				vec3 axis(x, y, z);
				q = quat(axis, angle);
			}

			mesh->transform(mat4::TRS(position, q, scale));
		}
	}
	if ((op = sceneElement->child("material")) != NULL) {
		Material * material = parseMaterial(op);
		primitive->setMaterial(material);
	}
	else
	{
		Material * material = MaterialFactory::New();
		primitive->setMaterial(material->getDefault());
	}

	Actor* act = new Actor(*primitive);
	act->setName(filename);

	return act;
}
Ejemplo n.º 4
0
Actor* Parser::parseSphere(xml_node_iterator sceneElement)
{
	// default values
	vec3 center(0, 0, 0);
	REAL radius = 1.0;
	int meridians = 16;

	// opt values
	xml_node op;
	op = sceneElement->child("center");
	REAL x, y, z;
	if (op != NULL)
	{
		const char* center_vector = op.text().as_string();

		sscanf(center_vector, "%f %f %f", &x, &y, &z);
		center.set(x, y, z);
	}
	op = sceneElement->child("radius");
	if (op != NULL)
		radius = op.text().as_float();
	op = sceneElement->child("meridians");
	if (op != NULL)
		meridians = op.text().as_int();

	// now, lets make the mesh of Sphere
	TriangleMesh* sphereMesh = MeshSweeper::makeSphere(center, radius, meridians);

	Primitive* primitive = new TriangleMeshShape(sphereMesh);

	if ((op = sceneElement->child("transform")) != NULL) {
		vec3 position(0, 0, 0);
		quat q(vec3(0, 0, 0));
		vec3 scale(1, 1, 1);
		float x, y, z;

		xml_object_range<xml_node_iterator> transformations = op.children();

		for (xml_node_iterator transformation = transformations.begin(); transformation != transformations.end(); ++transformation)
		{
			if (strcmp(transformation->name(), "position") == 0)
			{
				const char * stringTranslation = transformation->text().as_string();

				sscanf(stringTranslation, "%f %f %f", &x, &y, &z);
				vec3 translationVec(x, y, z);
				position = translationVec;
			}
			else if (strcmp(transformation->name(), "scale") == 0)
			{
				float s_ = transformation->text().as_float();
				vec3 newS(s_, s_, s_);
				scale = newS;
			}
			else if (strcmp(transformation->name(), "rotation") == 0)
			{
				float angle = transformation->child("angle").text().as_float();

				const char * _Axis = transformation->child("axis").text().as_string();
				sscanf(_Axis, "%f %f %f", &x, &y, &z);
				vec3 axis(x, y, z);
				q = quat(axis, angle);
			}

			sphereMesh->transform(mat4::TRS(position, q, scale));
		}
	}
	if ((op = sceneElement->child("material")) != NULL) {
		Material * material = parseMaterial(op);
		primitive->setMaterial(material);
	}
	else
	{
		Material * material = MaterialFactory::New();
		primitive->setMaterial(material->getDefault());

	}

	Actor* act = new Actor(*primitive);
	act->setName("sphere");

	return act;

}
Ejemplo n.º 5
0
// Cria os codigos de cada simbolo de acordo com Shannon-Fano
void makeCodes(vector<Symbol> & s)
{
    double x = 0, w = 0, a =0;
    short i = 0, j = 0, z = 0;
    
    for (short i = 0; i < s.size(); i++)
    // Calcula a quantidade total de simbolos
        z+= s[i].getOcorrence();
    
    for (short i = 0; i < s.size(); i++)
        s[i].calculateProbability(z);
    
    do
    // Atribui o codigo zero aos simbolos do lado esquerdo da arvore
    {
        x += s[i].getProbability();
        s[i].addCharCode('0');
        i++;
        w = x + s[i].getProbability();
    }while (w < 0.5);
    
    // Calcula a diferença de probabilidade das partes da arvore
    w = abs(0.5 - w);
    x = abs(0.5 - x);
    a = abs(w - x);
    
    if (!((a < std::numeric_limits<double>::epsilon())&&(a!=0))&&(w < x))
//  Neste caso é melhor pegar o proximo elemento 
//  (sua probabilidade fica mais equilibrada com a do outro lado da arvore)
    {
        s[i].addCharCode('0');
        i++;
    }    
    
    j = i;
    while (i < s.size())
    // Atribui o codigo um aos simbolos do lado direito da arvore
    {
        s[i].addCharCode('1');
        i++;
    }
    
    // Separa o vector de simbolos em duas partes a depender da probabilidade dos mesmos
    vector<Symbol> newS (s.begin(),s.begin()+j); 
    vector<Symbol> newS1 (s.begin()+j,s.end()); // (s.begin()+j+1 se for no windows)
        
    if (j > 1)
//  Neste caso existem mais do que um elementos do lado esquerdo, logo é necessario expandir ambos os lados da arvore  
    {
        makeCodes(newS);
        makeCodes(newS1);
    }
    else if (i > 2)
//  Neste caso existe mais do que dois elementos do lado direito, logo so é necessario expandir o lado direito da arvore
        makeCodes(newS1);
    
    for (int y = 0; y < s.size(); y++)
    // Atribui o codigo dos simbolos de acordo com a posição dos mesmos na arvore
        if (y < j)
           s[y].setCode(newS[y].getCode());
        else
            s[y].setCode(newS1[y-j].getCode());
}