////////////////////////////////////////////////////////////////////////
///
/// @fn void VisitorGatherProperties::visiterNodeControlPoint( NodeControlPoint* noeud )
///
/// /*Description*/
///
/// @param[in] NodeControlPoint * noeud
///
/// @return void
///
////////////////////////////////////////////////////////////////////////
void VisitorGatherProperties::visiterNodeControlPoint( NodeControlPoint* noeud )
{
    GetPos(noeud);
    NoeudAbstrait* n = dynamic_cast<NoeudAbstrait*>(noeud->getLinkedObject());
    if(n)
    {
        n->acceptVisitor(*this);
    }
}
Example #2
0
////////////////////////////////////////////////////////////////////////
///
/// @fn void VisiteurNoeudTest::testDeplacerObjet()
///
/// Cas de test: Déplacement d'objets.
///
/// @return Aucune.
///
////////////////////////////////////////////////////////////////////////
void VisiteurNoeudTest::testDeplacerObjet()
{

    NoeudAbstrait* n = new NoeudAbstrait(RAZER_KEY_NONE);
	n->setPosition(Vecteur3(0.0,0.0));
	n->setSelection(true);
	VisiteurDeplacement v(Vecteur2(25.0,-10.0));
	n->acceptVisitor(v);
	CPPUNIT_ASSERT(n->getPosition() == Vecteur3(25.0,-10.0));
}
////////////////////////////////////////////////////////////////////////
///
/// @fn void ArbreRenduTest::setUp()
///
/// Effectue l'initialisation préalable à l'exécution de l'ensemble des
/// cas de tests de cette suite de tests (si nécessaire).
/// 
/// Si certains objets doivent être construits, il est conseillé de le
/// faire ici.
///
/// @return Aucune.
///
////////////////////////////////////////////////////////////////////////
void ArbreRenduTest::setUp()
{
	arbre_ = std::make_unique<ArbreRenduINF2990>();
	NoeudAbstrait* nouveauNoeud;
	glm::dvec3 position;
	// On ajoute un noeud bidon seulement pour que quelque chose s'affiche.
	NoeudAbstrait* noeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_ZONEDEJEU);
	noeud->assignerEstSelectionnable(false);

	nouveauNoeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_TROU);
	position = glm::dvec3(0, -75, 0);
	nouveauNoeud->assignerPositionRelative(position);
	noeud->ajouter(nouveauNoeud);

	nouveauNoeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_RESSORT);
	position = glm::dvec3(41.32, -69.79, 0);
	nouveauNoeud->assignerPositionRelative(position);
	noeud->ajouter(nouveauNoeud);

	nouveauNoeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_GENERATEURBILLE);
	position = glm::dvec3(35, -45, 0);
	nouveauNoeud->assignerPositionRelative(position);
	noeud->ajouter(nouveauNoeud);

	arbre_->ajouter(noeud);
}
Example #4
0
////////////////////////////////////////////////////////////////////////
///
/// @fn void VisiteurSelection::faireSelection()
///
/// Effectue la selection sur le noeud leplus a lavant
///
///
/// @return void
///
////////////////////////////////////////////////////////////////////////
void VisiteurSelection::faireSelection()
{
	if(aSelectionner_.first!=NULL)
	{
		NoeudAbstrait* aSel = aSelectionner_.first;
        if(mToggleSelection)
        {
            aSel->toggleSelection();
        }
        else
        {
            aSel->setSelection(true);
        }
	}
}
void ArbreRenduTest::testObtenirDepassement()
{
	NoeudAbstrait * noeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_BUTOIRCIRCULAIRE);
	noeud->assignerPositionRelative(glm::dvec3(5, 10, 15));
	NoeudAbstrait * zone = arbre_->chercher("zonedejeu");
	zone->ajouter(noeud);

	glm::dvec2 depassement = arbre_->obtenirDepassement();
	//CPPUNIT_ASSERT(depassement.x == 0);
	//CPPUNIT_ASSERT(depassement.y == 0);
	noeud->assignerPositionRelative(glm::dvec3(100, 100, 0));
	depassement = arbre_->obtenirDepassement();
	//CPPUNIT_ASSERT(depassement.x==62.5);
	//CPPUNIT_ASSERT(utilitaire::EGAL_ZERO(depassement.y - 27.5));
}
////////////////////////////////////////////////////////////////////////
///
/// @fn NoeudAbstrait* ArbreRendu::ajouterNouveauNoeud(const std::string& typeParent, const std::string& typeNouveauNoeud)
///
/// Cette fonction permet d'ajouter un nouveau noeud dans l'arbre de
/// rendu.
///
/// @param[in] typeParent       : Le type du parent du nouveau noeud.
/// @param[in] typeNouveauNoeud : Le type du nouveau noeud.
///
/// @return Le noeud nouvellement créé.
///
////////////////////////////////////////////////////////////////////////
NoeudAbstrait* ArbreRendu::ajouterNouveauNoeud(
   const std::string& typeParent,
   const std::string& typeNouveauNoeud
   )
{
   NoeudAbstrait* parent = chercher(typeParent);
   if (parent == 0) {
      // Incapable de trouver le parent
      return 0;
   }

   NoeudAbstrait* nouveauNoeud = creerNoeud(typeNouveauNoeud);
   if (nouveauNoeud)
      parent->ajouter(nouveauNoeud);

   return nouveauNoeud;
}
Example #7
0
////////////////////////////////////////////////////////////////////////
///
/// @fn void NoeudComposite::assignerCentreSelection(double x, double y)
///
/// Cette fonction assigne un centre de rotation pour la rotation des noeuds sélectionnés
///
/// @return aucun
///
////////////////////////////////////////////////////////////////////////
void NoeudComposite::assignerCentreSelection()
{
	int nombreSelection = 0; // nombre de noeuds sélectionnés
	double xMin = 0., xMax = 0.;
	double yMin = 0., yMax = 0.;
	std::vector<Vecteur3> sommetsNoeud;
	NoeudAbstrait* noeudSelectionne;

	for (conteneur_enfants::const_iterator it = enfants_.begin(); it != enfants_.end(); ++it)
	{
		if ((*it)->estSelectionne()) {
			noeudSelectionne = *it;
			sommetsNoeud = (*it)->obtenirSommets();

			if (nombreSelection++ == 0) {
				// assigner leFs extrémités de la selection au premier noeud trouvé
				xMax = xMin = sommetsNoeud[0][X];
				yMax = yMin = sommetsNoeud[0][Y];
			}

			// trouver les extrémités des noeuds sélectionnés
			for (int i = 0; i < sommetsNoeud.size(); ++i) {
				if (sommetsNoeud[i][X] > xMax)
					xMax = sommetsNoeud[i][X];
				if (sommetsNoeud[i][X] < xMin)
					xMin = sommetsNoeud[i][X];
				if (sommetsNoeud[i][Y] > yMax)
					yMax = sommetsNoeud[i][Y];
				if (sommetsNoeud[i][Y] < yMin)
					yMin = sommetsNoeud[i][Y];
			}
		}
	}

	if (nombreSelection == 1 &&
		noeudSelectionne->obtenirType() == ArbreRenduINF2990::NOM_MURET) // un seul neud est sélectionné et c'est un muret
	{
		dynamic_cast<NoeudMuret*>(noeudSelectionne)->calculerCentreRotation(); // assigner le centre de rotation du muret
	}

	// déterminer le centre de la sélection
	centreSelection_[X] = xMin + (xMax - xMin) / 2;
	centreSelection_[Y] = yMin + (yMax - yMin) / 2;
}
void ArbreRenduTest::testEstDansBornes()
{
	NoeudAbstrait * noeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_BUTOIRCIRCULAIRE);
	noeud->assignerPositionRelative(glm::dvec3(5, 10, 15));
	noeud->assignerAgrandissement(glm::dvec3(1.7, 1.7, 1.7));
	noeud->assignerRotation(20);
	NoeudAbstrait * zone = arbre_->chercher("zonedejeu");
	zone->ajouter(noeud);

	CPPUNIT_ASSERT(arbre_->estDansBornes());
	noeud->assignerPositionRelative(glm::dvec3(-100, -100, 0));
	CPPUNIT_ASSERT(!arbre_->estDansBornes());
}
void ArbreRenduTest::testCreerNoeud()
{
	NoeudAbstrait * noeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_BUTOIRCIRCULAIRE);
	noeud->assignerPositionRelative(glm::dvec3(5, 10, 15));
	noeud->assignerAgrandissement(glm::dvec3(1.7, 1.7, 1.7));
	noeud->assignerRotation(20);
	NoeudAbstrait * zone = arbre_->chercher("zonedejeu");
	zone->ajouter(noeud);

	NoeudAbstrait * noeud2 = zone->chercher(zone->obtenirNombreEnfants() - 1);
	CPPUNIT_ASSERT(noeud2 != nullptr);
	CPPUNIT_ASSERT(noeud2->obtenirRotation() == 20);
	glm::dvec3 position = noeud2->obtenirPositionRelative();
	CPPUNIT_ASSERT(position.x == 5);
	CPPUNIT_ASSERT(position.y == 10);
	CPPUNIT_ASSERT(position.z == 15);
	CPPUNIT_ASSERT(noeud2->obtenirAgrandissement().x == 1.7);
}
Example #10
0
////////////////////////////////////////////////////////////////////////
///
/// @fn VisiteurSupprimer::visiter(NoeudAbstrait& noeud)
///
/// Fonction qui permet de supprimer un noeud abstrait
///
/// @param[in] noeud : le noeud à supprimer
///
/// @return Aucune
///
////////////////////////////////////////////////////////////////////////
void VisiteurSupprimer::visiter( NoeudAbstrait& noeud){
	noeud.obtenirParent()->effacerSelection();
}
void ArbreRenduTest::testCentreSelection()
{
	NoeudAbstrait * zone = arbre_->chercher("zonedejeu");
	NoeudAbstrait * noeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_BUTOIRCIRCULAIRE);
	noeud->assignerPositionRelative(glm::dvec3(5, 10, 15));
	noeud->inverserSelection();
	zone->ajouter(noeud);

	noeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_BUTOIRCIRCULAIRE);
	noeud->assignerPositionRelative(glm::dvec3(-5, 7, 15));
	noeud->inverserSelection();
	zone->ajouter(noeud);

	noeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_BUTOIRCIRCULAIRE);
	noeud->assignerPositionRelative(glm::dvec3(10, 8, 15));
	noeud->inverserSelection();
	zone->ajouter(noeud);

	noeud = arbre_->creerNoeud(ArbreRenduINF2990::NOM_BUTOIRCIRCULAIRE);
	noeud->assignerPositionRelative(glm::dvec3(-3, -15, 15));
	noeud->inverserSelection();
	zone->ajouter(noeud);
	arbre_->calculerCentreSelection();
	glm::dvec3 centre = arbre_->obtenirCentreSelection();
	CPPUNIT_ASSERT(centre.x == 2.5);
	CPPUNIT_ASSERT(centre.y == -2.5);

}