/// <summary>
        /// Méthode interne.
        /// Renvoi la liste des corps de la pièces filtrée par les arguments.
        /// </summary>
        /// <param name="TypeDeCorps"></param>
        /// <param name="PrendreEnCompteCache"></param>
        /// <returns></returns>
        public ArrayList ListeDesCorps(String NomARechercher = "", TypeCorps_e TypeDeCorps = TypeCorps_e.cTous, Boolean PrendreEnCompteCache = false)
        {
            Log.Methode(cNOMCLASSE);

            ArrayList Liste = new ArrayList();

            Object[] TableauDesCorps = _SwPiece.GetBodies2((int)swBodyType_e.swAllBodies, !PrendreEnCompteCache);

            if (TableauDesCorps.Length > 0)
            {
                foreach (Object ObjetCorps in TableauDesCorps)
                {
                    Body2 pSwCorps = (Body2)ObjetCorps;
                    eCorps pCorps = new eCorps();
                    if (pCorps.Init(pSwCorps, this) && TypeDeCorps.HasFlag(pCorps.TypeDeCorps) && Regex.IsMatch(pSwCorps.Name, NomARechercher))
                    {
                        Liste.Add(pCorps);
                    }
                }
            }

            return Liste;
        }
        /// <summary>
        /// Méthode interne
        /// Renvoi la liste des dossiers de pièces soudées de la pièce filtrée par les arguments.
        /// </summary>
        /// <param name="TypeDeCorps"></param>
        /// <param name="PrendreEnCompteExclus"></param>
        /// <returns></returns>
        public ArrayList ListeDesDossiersDePiecesSoudees(TypeCorps_e TypeDeCorps = TypeCorps_e.cTous, Boolean PrendreEnCompteExclus = false)
        {
            Log.Methode(cNOMCLASSE);

            ArrayList Liste = new ArrayList();

            Feature pFonction = DossierDesCorps();

            // S'il n'y a pas de liste, on arrete là
            if (pFonction == null)
                return null;

            pFonction = pFonction.GetFirstSubFeature();

            while (pFonction != null)
            {
                if (pFonction.GetTypeName2() == "CutListFolder")
                {
                    BodyFolder pSwDossier = pFonction.GetSpecificFeature2();
                    eDossier Dossier = new eDossier();

                    if (Dossier.Init(pSwDossier, this) && TypeDeCorps.HasFlag(Dossier.TypeDeCorps) && (!Dossier.EstExclu | PrendreEnCompteExclus))
                        Liste.Add(Dossier);

                    Dossier = null;
                }

                pFonction = pFonction.GetNextSubFeature();
            }

            return Liste;
        }
        /// <summary>
        /// Renvoi Vrai si la piece contient des corps du type T
        /// A tester. Peut dans certain cas renvoyer un resultat erroné. ex :
        /// Si un corps de tolerie ou un profil a été créé puis supprimé,
        /// la fonction existe mais plus le corps. Pb également dans le cas de corps combiné
        /// </summary>
        /// <param name="T"></param>
        /// <returns></returns>
        public Boolean Contient(TypeCorps_e T)
        {
            Log.Methode(cNOMCLASSE);

            if (T.HasFlag(TypeCorps_e.cTole))
            {
                foreach (eFonction Fonction in _Modele.ListeDesFonctions())
                {
                    if ((Fonction.TypeDeLaFonction == "SMBaseFlange")
                        || (Fonction.TypeDeLaFonction == "SolidToSheetMetal")
                        || (Fonction.TypeDeLaFonction == "SheetMetal")
                        || (Fonction.TypeDeLaFonction == "FlatPattern"))
                        return true;
                }
            }

            if (T.HasFlag(TypeCorps_e.cBarre))
            {
                if (_Modele.ListeDesFonctions("", "WeldMemberFeat", false).Count > 0)
                    return true;
            }

            if (T.HasFlag(TypeCorps_e.cAutre))
            {
                if (ListeDesDossiersDePiecesSoudees(TypeCorps_e.cAutre, false).Count > 0)
                    return true;
            }

            return false;
        }