//////////////////////////////////////////////////////////////////////// /// /// @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); } }
//////////////////////////////////////////////////////////////////////// /// /// @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); }
//////////////////////////////////////////////////////////////////////// /// /// @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; }
//////////////////////////////////////////////////////////////////////// /// /// @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); }
//////////////////////////////////////////////////////////////////////// /// /// @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); }