/// <summary> /// Méthode privée. /// Méthode récursive permettant de traverser tous les composants d'une pièce ou d'un assemblage /// </summary> /// <param name="ComposantRacine"></param> /// <param name="TypeComposant"></param> /// <param name="DicComposants"></param> /// <param name="NomComposant"></param> private void RecListerComposants(eComposant ComposantRacine, TypeFichier_e TypeComposant, Dictionary<String, eComposant> DicComposants, String NomComposant = "") { Log.Methode(cNOMCLASSE); foreach (eComposant pComp in ComposantRacine.ComposantsEnfants("", _PrendreEnCompteSupprime)) { // Operateur "Implique" sur la propriété EstExclu if (!pComp.EstExclu | _PrendreEnCompteExclus) { // Attention, Regex.IsMatch peut renvoyer une erreur si NomComposant est égal à un caractère spécial // du style "*" ou "[" et autre. Pb à corriger. if (TypeComposant.HasFlag(pComp.Modele.TypeDuModele) && Regex.IsMatch(pComp.Modele.FichierSw.Chemin, NomComposant)) { eComposant pComposant = new eComposant(); String pCle = NomCle(pComp); Log.Message("Clé : " + pCle); // S'il est déjà dans le dico, on on rajoute 1 if (DicComposants.ContainsKey(pCle)) { pComposant = DicComposants[pCle]; pComposant.Nb += 1; } // sinon on le rajoute else { // Si on supprime les doublons et que l'on ne prend pas e compte les configs, on associe au modèle le composant racine // et non le composant de l'assemblage if (_SupprimerDoublons && !_PrendreEnCompteConfig) { eModele pModele = pComp.Modele; pModele.ReinitialiserComposant(); pComposant = pModele.Composant; } else { pComposant = pComp; } pComposant.Nb = 1; DicComposants.Add(pCle, pComposant); } } // Si c'est un assemblage et qu'il n'est pas supprimé, on scan if ((pComp.Modele.TypeDuModele == TypeFichier_e.cAssemblage) && (pComp.EstSupprime == false)) { RecListerComposants(pComp, TypeComposant, DicComposants, NomComposant); } } } }