Example #1
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;
}