コード例 #1
0
        /// <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);
                    }

                }
            }
        }