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