protected override void Command() { try { // On liste les composants var ListeComposants = MdlBase.pListerComposants(); // On boucle sur les modeles foreach (var mdl in ListeComposants.Keys) { mdl.eActiver(swRebuildOnActivation_e.swRebuildActiveDoc); foreach (var nomCfg in ListeComposants[mdl].Keys) { mdl.ShowConfiguration2(nomCfg); mdl.EditRebuild3(); var piece = mdl.ePartDoc(); var ListeDossier = piece.eListeDesFonctionsDePiecesSoudees( swD => { BodyFolder Dossier = swD.GetSpecificFeature2(); // Si le dossier est la racine d'un sous-ensemble soudé, il n'y a rien dedans if (Dossier.IsRef() && (Dossier.eEstExclu() == false) && (Dossier.eNbCorps() > 0) && (eTypeCorps.Barre).HasFlag(Dossier.eTypeDeDossier())) { return(true); } return(false); } ); var NbConfig = ListeComposants[mdl][nomCfg]; foreach (var fDossier in ListeDossier) { BodyFolder Dossier = fDossier.GetSpecificFeature2(); var SwCorps = Dossier.ePremierCorps(); var NomCorps = SwCorps.Name; var MateriauCorps = SwCorps.eGetMateriauCorpsOuPiece(piece, nomCfg); var NbCorps = Dossier.eNbCorps() * NbConfig; var Profil = Dossier.eProfilDossier(); var Longueur = Dossier.eLongueurProfilDossier().eToDouble(); for (int i = 0; i < NbCorps; i++) { var LgTmp = Longueur; while (LgTmp > LgMax) { RassemblerBarre(MateriauCorps, Profil, LgMax); LgTmp -= LgMax; } RassemblerBarre(MateriauCorps, Profil, LgTmp); } } } mdl.eFermerSiDifferent(MdlBase); } // On fait la mise en barre foreach (var Materiau in DicBarres.Keys) { WindowLog.SautDeLigne(); WindowLog.EcrireF("{0}", Materiau);; foreach (var Profil in DicBarres[Materiau].Keys) { WindowLog.SautDeLigne(); WindowLog.EcrireF(" {0}", Profil); var lst = DicBarres[Materiau][Profil]; lst.Sort(); lst.Reverse(); foreach (var lg in lst) { WindowLog.EcrireF(" - {0}", lg); } int i = 0; while (true) { var lg = lst[i]; if (AjouterBarre(Materiau, Profil, lg)) { lst.RemoveAt(i); if (lst.Count == 0) { break; } } else { i++; } if (i >= lst.Count) { i = 0; NouvelleBarre(Materiau, Profil); } } } } String Resume = ""; foreach (var Materiau in DicMateriau.Keys) { Resume += System.Environment.NewLine; Resume += String.Format("{0}", Materiau); foreach (var Profil in DicMateriau[Materiau].Keys) { var Ligne = DicMateriau[Materiau][Profil]; Resume += System.Environment.NewLine; Resume += String.Format(" {1,4}× {0,-25} [{2:N0}]", Profil, Ligne.NbBarre, Ligne.Reste); } } WindowLog.SautDeLigne(); WindowLog.Ecrire("A commander"); WindowLog.Ecrire(Resume); WindowLog.SautDeLigne(); File.WriteAllText(Path.Combine(MdlBase.eDossier(), "CommandeProfil.txt"), Resume); } catch (Exception e) { this.LogErreur(new Object[] { e }); } }
/// <summary> /// Pour pouvoir obtenir une référence unique pour chaque dossier de corps, identiques /// dans l'assemblage, on passe par la création d'une propriété dans chaque dossier. /// Cette propriété est liée à une cote dans une esquisse dont la valeur est égale au repère. /// Suivant la configuration, la valeur de la cote peut changer et donc le repère du dossier. /// C'est le seul moyen pour avoir un lien entre les dossiers et la configuration du modèle. /// Les propriétés des dossiers ne sont pas configurables. /// </summary> protected override void Command() { try { App.Sw.CommandInProgress = true; // Si aucun corps n'a déjà été repéré, on reinitialise tout if (ListeCorps.Count == 0) { // On supprime tout les fichiers foreach (FileInfo file in new DirectoryInfo(MdlBase.pDossierPiece()).GetFiles()) { file.Delete(); } } if (ReinitCampagneActuelle && (ListeCorps.Count > 0)) { // On supprime les repères de la campagne actuelle // On recherche les repères appartenant aux campagnes précédentes // pour ne pas supprimer les fichiers // Si la somme des quantités des campagnes précédente est superieure à 0 // on garde le repère ListeSortedCorps FichierAsauvegarder = new ListeSortedCorps(); FichierAsauvegarder.CampagneDepartDecompte = ListeCorps.CampagneDepartDecompte; foreach (var corps in ListeCorps.Values) { int nb = 0; foreach (var camp in corps.Campagne) { if (camp.Key < IndiceCampagne) { nb += camp.Value; } else { break; } } if (nb > 0) { FichierAsauvegarder.Add(corps.Repere, corps); } } // On nettoie les fichiers précedement crées foreach (var corps in ListeCorps.Values) { if (FichierAsauvegarder.ContainsKey(corps.Repere)) { continue; } corps.SupprimerFichier(); } ListeCorps = FichierAsauvegarder; } // On supprime les campagnes superieures à l'indice actuelle foreach (var corps in ListeCorps.Values) { for (int i = IndiceCampagne; i < corps.Campagne.Keys.Max(); i++) { if (corps.Campagne.ContainsKey(i + 1)) { corps.Campagne.Remove(i + 1); } } } WindowLog.SautDeLigne(); WindowLog.EcrireF("Campagne de départ : {0}", ListeCorps.CampagneDepartDecompte); // On charge les corps existant à partir des fichiers // et seulement ceux dont la quantité pour CampagneDepartDecompte est supérieure à 0 if (CombinerCorpsIdentiques && (ListeCorps.Count > 0)) { var FiltreCampagne = IndiceCampagne; if (CombinerAvecCampagnePrecedente) { FiltreCampagne = ListeCorps.CampagneDepartDecompte; } WindowLog.SautDeLigne(); WindowLog.Ecrire("Chargement des corps existants :"); foreach (var corps in ListeCorps.Values) { // On additionne les quantités pour les corps supperieur à filtreCampagne // S if (corps.Campagne.ContainsKey(FiltreCampagne) && corps.Campagne.Sum(d => d.Key >= FiltreCampagne? d.Value : 0) > 0 && File.Exists(corps.CheminFichierRepere) ) { WindowLog.EcrireF(" - {0}", corps.RepereComplet); corps.ChargerCorps(); } } } // On reinitialise la quantité pour la campagne actuelle à 0 foreach (var corps in ListeCorps.Values) { corps.InitCampagne(IndiceCampagne); } ////////////////////////////////// DEBUT DU REPERAGE //////////////////////////////////////////////////// MdlBase.eActiver(swRebuildOnActivation_e.swRebuildActiveDoc); MdlBase.eActiverManager(false); WindowLog.SautDeLigne(); WindowLog.Ecrire("Debut du repérage"); // On recherche l'indice de repere max if (ListeCorps.Count > 0) { _GenRepereDossier = ListeCorps.Keys.Max(); } // On liste les composants var ListeComposants = MdlBase.pListerComposants(); // On boucle sur les modeles foreach (var mdl in ListeComposants.Keys) { mdl.eActiver(swRebuildOnActivation_e.swRebuildActiveDoc); mdl.eActiverManager(false); // On met à jour les options mdl.Extension.SetUserPreferenceToggle(((int)(swUserPreferenceToggle_e.swDisableDerivedConfigurations)), 0, false); mdl.Extension.SetUserPreferenceToggle(((int)(swUserPreferenceToggle_e.swWeldmentRenameCutlistDescriptionPropertyValue)), 0, true); mdl.Extension.SetUserPreferenceToggle(((int)(swUserPreferenceToggle_e.swWeldmentCollectIdenticalBodies)), 0, true); mdl.Extension.SetUserPreferenceString(((int)(swUserPreferenceStringValue_e.swSheetMetalDescription)), 0, "Tôle"); if (mdl.ePartDoc().eDossierListeDesPiecesSoudees().GetAutomaticUpdate() == false) { mdl.ePartDoc().eMajListeDesPiecesSoudeesAuto(true); mdl.EditRebuild3(); } // On crée l'esquisse pour le reperage des dossiers mdl.pEsquisseRepere(); // Si le modele est a repérer complètement Boolean InitModele = true; // On recherche l'index de la dimension maximum int IndexDimension = 0; // On liste les dossiers déja traité pour l'attribution des nouveaux index de dimension HashSet <int> HashPieceIdDossiers = new HashSet <int>(); // Les données sont stockées dans des propriétés du modèle // Le nom du modèle est stocké dans une propriété, si le modèle est copié // la propriété n'est plus valable, on force le repérage // On récupère également le dernier indice de la dimension utilisée if (mdl.ePropExiste(CONST_PRODUCTION.ID_PIECE) && (mdl.eGetProp(CONST_PRODUCTION.ID_PIECE) == mdl.eNomSansExt())) { InitModele = false; if (mdl.ePropExiste(CONST_PRODUCTION.MAX_INDEXDIM)) { IndexDimension = mdl.eGetProp(CONST_PRODUCTION.MAX_INDEXDIM).eToInteger(); } if (mdl.ePropExiste(CONST_PRODUCTION.PIECE_ID_DOSSIERS)) { var tab = mdl.eGetProp(CONST_PRODUCTION.PIECE_ID_DOSSIERS).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (var id in tab) { HashPieceIdDossiers.Add(id.eToInteger()); } } } ////////////////////////////////// BOUCLE SUR LES CONFIGS //////////////////////////////////////////////////// foreach (var nomCfg in ListeComposants[mdl].Keys) { mdl.ShowConfiguration2(nomCfg); mdl.EditRebuild3(); WindowLog.SautDeLigne(); WindowLog.EcrireF("{0} \"{1}\"", mdl.eNomSansExt(), nomCfg); HashSet <int> HashConfigIdDossiers = new HashSet <int>(); Boolean InitConfig = true; int IdCfg = mdl.GetConfigurationByName(nomCfg).GetID(); // Idem modèle, on stock l'id de la config dans une propriété. // Si une nouvelle config est crée, la valeur de cette propriété devient caduc, // on repère alors les dossiers // On en profite pour récupérer la liste des ids de dossiers déjà traité dans les précédentes // campagne de repérage if (!InitModele && mdl.ePropExiste(CONST_PRODUCTION.ID_CONFIG, nomCfg) && (mdl.eGetProp(CONST_PRODUCTION.ID_CONFIG, nomCfg) == IdCfg.ToString())) { InitConfig = false; if (mdl.ePropExiste(CONST_PRODUCTION.CONFIG_ID_DOSSIERS, nomCfg)) { var tab = mdl.eGetProp(CONST_PRODUCTION.CONFIG_ID_DOSSIERS, nomCfg).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); foreach (var id in tab) { HashConfigIdDossiers.Add(id.eToInteger()); } } } var piece = mdl.ePartDoc(); var ListeDossier = piece.eListeDesFonctionsDePiecesSoudees( swD => { BodyFolder Dossier = swD.GetSpecificFeature2(); // Si le dossier est la racine d'un sous-ensemble soudé, il n'y a rien dedans if (Dossier.IsRef() && (Dossier.eNbCorps() > 0) && !Dossier.eEstExclu() && FiltrerCorps.HasFlag(Dossier.eTypeDeDossier())) { return(true); } return(false); } ); var NbConfig = ListeComposants[mdl][nomCfg]; ////////////////////////////////// BOUCLE SUR LES DOSSIERS //////////////////////////////////////////////////// foreach (var fDossier in ListeDossier) { BodyFolder Dossier = fDossier.GetSpecificFeature2(); int IdDossier = fDossier.GetID(); Dimension param = null; if (!HashPieceIdDossiers.Contains(IdDossier)) { param = CreerParam(mdl, fDossier, nomCfg, ++IndexDimension); } else { param = GetParam(mdl, fDossier, nomCfg); } var SwCorps = Dossier.ePremierCorps(); var NomCorps = SwCorps.Name; var MateriauCorps = SwCorps.eGetMateriauCorpsOuPiece(piece, nomCfg); eTypeCorps TypeCorps = Dossier.eTypeDeDossier(); var nbCorps = Dossier.eNbCorps() * NbConfig; int Repere = -1; if (CombinerCorpsIdentiques) { // On recherche s'il existe des corps identiques // Si oui, on applique le même repère au parametre foreach (var CorpsTest in ListeCorps.Values) { if (CorpsTest.SwCorps.IsRef() && (CombinerAvecCampagnePrecedente || CorpsTest.Campagne.ContainsKey(IndiceCampagne)) && (MateriauCorps == CorpsTest.Materiau) && (TypeCorps == CorpsTest.TypeCorps) && SwCorps.eComparerGeometrie(CorpsTest.SwCorps) == Sw.Comparaison_e.Semblable) { Repere = CorpsTest.Repere; SetRepere(param, CorpsTest.Repere, nomCfg); break; } } } // Initialisation du repère if (Repere.eEstNegatif()) { // A tester // Si on est mode "MajCampagnePrecedente", ça évite de repérer une seconde fois les pièces // Si on est pas en mode "Combiner les corps" // on recupère le repère du dossier // Sinon c'est forcément un nouveau repère if (!CombinerCorpsIdentiques) { Repere = GetRepere(param, nomCfg); } // Création d'un nouveau repère suivant conditions // Dans tous les cas, si la clé est négative, on crée un nouveau repère if (Repere.eEstNegatif() || InitConfig || !HashConfigIdDossiers.Contains(IdDossier) || !ListeCorps.ContainsKey(Repere)) { Repere = GenRepereDossier; SetRepere(param, Repere, nomCfg); } } // Initialisation du corps Corps corps = null; if (!ListeCorps.ContainsKey(Repere)) { corps = new Corps(SwCorps, TypeCorps, MateriauCorps, MdlBase); corps.InitCampagne(IndiceCampagne); ListeCorps.Add(Repere, corps); } else { corps = ListeCorps[Repere]; } corps.Campagne[IndiceCampagne] += nbCorps; corps.Repere = Repere; corps.InitCaracteristiques(Dossier, SwCorps); corps.AjouterModele(mdl, nomCfg, IdDossier, NomCorps); HashPieceIdDossiers.Add(IdDossier); HashConfigIdDossiers.Add(IdDossier); WindowLog.EcrireF(" - {1} -> {0}", fDossier.Name, corps.RepereComplet); } mdl.ePropAdd(CONST_PRODUCTION.ID_CONFIG, IdCfg, nomCfg); mdl.ePropAdd(CONST_PRODUCTION.CONFIG_ID_DOSSIERS, String.Join(" ", HashConfigIdDossiers), nomCfg); } mdl.ePropAdd(CONST_PRODUCTION.ID_PIECE, mdl.eNomSansExt()); mdl.ePropAdd(CONST_PRODUCTION.PIECE_ID_DOSSIERS, String.Join(" ", HashPieceIdDossiers)); mdl.ePropAdd(CONST_PRODUCTION.MAX_INDEXDIM, IndexDimension); mdl.eActiverManager(true); mdl.eSauver(); mdl.eFermerSiDifferent(MdlBase); } MdlBase.eActiverManager(true); MdlBase.eActiver(swRebuildOnActivation_e.swRebuildActiveDoc); MdlBase.EditRebuild3(); MdlBase.eSauver(); ////////////////////////////////// FIN DU REPERAGE //////////////////////////////////////////////////// // On fermer les fichiers chargé foreach (var corps in ListeCorps.Values) { Sw.eFermer(corps.CheminFichierRepere); } WindowLog.SautDeLigne(); if (ListeCorps.Count > 0) { WindowLog.EcrireF("Nb de repères : {0}", ListeCorps.Keys.Max()); } else { WindowLog.Ecrire("Aucun corps repéré"); } // S'il n'y a aucun corps, on se barre if (ListeCorps.Count == 0) { return; } ////////////////////////////////// EXPORTER LES CORPS ///////////////////////////////////////////////// WindowLog.SautDeLigne(); WindowLog.Ecrire("Export des corps :"); foreach (var corps in ListeCorps.Values) { if (corps.Modele.IsNull()) { continue; } // Si on est pas en mode "Combiner corps identique" et que le fichier existe // on le supprime pour le mettre à jour, sinon on peut se retrouver // avec des fichiers ne correpondants pas au corps if (!CombinerCorpsIdentiques) { corps.SupprimerFichier(); } // Si le fichier existe, on passe au suivant if (File.Exists(corps.CheminFichierRepere)) { continue; } WindowLog.EcrireF("- {0} exporté", CONSTANTES.PREFIXE_REF_DOSSIER + corps.Repere); corps.SauverRepere(CreerDvp); } ////////////////////////////////// RECAP ///////////////////////////////////////////////// // Petit récap WindowLog.SautDeLigne(); WindowLog.EcrireF("Nb de corps unique : {0}", ListeCorps.Count); int nbtt = 0; foreach (var corps in ListeCorps.Values) { nbtt += corps.Campagne[IndiceCampagne]; if (corps.Campagne[IndiceCampagne] > 0) { WindowLog.EcrireF("{2} P{0} ×{1}", corps.Repere, corps.Campagne[IndiceCampagne], IndiceCampagne); } } WindowLog.EcrireF("Nb total de corps : {0}", nbtt); ////////////////////////////////// SAUVEGARDE DE LA NOMENCLATURE ///////////////////////////////////////////// ListeCorps.EcrireNomenclature(MdlBase.pDossierPiece(), IndiceCampagne); //////////////////////////////////////////////////////////////////////////////////////////////////////////// MdlBase.eActiver(swRebuildOnActivation_e.swRebuildActiveDoc); App.Sw.CommandInProgress = false; var aff = new AffichageElementWPF(ListeCorps, IndiceCampagne); aff.ShowDialog(); ListeCorps = null; ListeComposants = null; } catch (Exception e) { this.LogErreur(new Object[] { e }); } }
protected override void Command() { try { int NbDvp = 0; var dic = MdlBase.ListerComposants(false); int MdlPct = 0; foreach (var mdl in dic.Keys) { WindowLog.SautDeLigne(); WindowLog.EcrireF("[{1}/{2}] {0}", mdl.eNomSansExt(), ++MdlPct, dic.Count); mdl.eActiver(swRebuildOnActivation_e.swRebuildActiveDoc); var cfgActive = mdl.eNomConfigActive(); var ListeNomConfigs = dic[mdl]; if (ToutesLesConfigurations) { mdl.eParcourirConfiguration( (String c) => { if (c.eEstConfigPliee() && !ListeNomConfigs.ContainsKey(c)) { ListeNomConfigs.Add(c, 1); } return(false); } ); } if (MasquerEsquisses) { cmdMasquerEsquisses(mdl); } if (SupprimerLesAnciennesConfigs) { cmdSupprimerLesAnciennesConfigs(mdl); } if (!mdl.Extension.LinkedDisplayState) { mdl.Extension.LinkedDisplayState = true; foreach (var c in mdl.eListeConfigs(eTypeConfig.Tous)) { c.eRenommerEtatAffichage(); } } int CfgPct = 0; foreach (var NomConfigPliee in ListeNomConfigs.Keys) { WindowLog.SautDeLigne(); WindowLog.EcrireF(" [{1}/{2}] Config : \"{0}\"", NomConfigPliee, ++CfgPct, ListeNomConfigs.Count); mdl.ShowConfiguration2(NomConfigPliee); mdl.EditRebuild3(); if (SupprimerFonctions) { cmdSupprimerFonctions(mdl, NomConfigPliee); } PartDoc Piece = mdl.ePartDoc(); var ListeDossier = Piece.eListePIDdesFonctionsDePiecesSoudees( swD => { BodyFolder dossier = swD.GetSpecificFeature2(); if (dossier.eEstExclu() || dossier.IsNull() || (dossier.GetBodyCount() == 0) || dossier.eTypeDeDossier() != eTypeCorps.Tole) { return(false); } return(true); } ); for (int noD = 0; noD < ListeDossier.Count; noD++) { var f = ListeDossier[noD]; BodyFolder dossier = f.GetSpecificFeature2(); var RefDossier = dossier.eProp(CONSTANTES.REF_DOSSIER); Body2 Tole = dossier.eCorpsDeTolerie(); var pidTole = new SwObjectPID <Body2>(Tole, MdlBase); String NomConfigDepliee = Sw.eNomConfigDepliee(NomConfigPliee, RefDossier); WindowLog.EcrireF(" - [{1}/{2}] Dossier : \"{0}\" -> {3}", f.Name, noD + 1, ListeDossier.Count, NomConfigDepliee); Configuration CfgDepliee = null; if (ReconstuireLesConfigs) { CfgDepliee = MdlBase.GetConfigurationByName(NomConfigDepliee); } if (CfgDepliee.IsNull()) { CfgDepliee = mdl.CreerConfigDepliee(NomConfigDepliee, NomConfigPliee); } else if (!ReconstuireLesConfigs) { continue; } if (CfgDepliee.IsNull()) { WindowLog.Ecrire(" - Config non crée"); continue; } NbDvp++; try { mdl.ShowConfiguration2(NomConfigDepliee); // On ajoute le numero de la config parent aux propriétés de la configuration depliée CfgDepliee.CustomPropertyManager.Add3(CONSTANTES.NO_CONFIG, (int)swCustomInfoType_e.swCustomInfoText, NomConfigPliee, (int)swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd); pidTole.Maj(ref Tole); Tole.DeplierTole(mdl, NomConfigDepliee); } catch (Exception e) { DicErreur.Add(mdl.eNomSansExt() + " -> cfg : " + NomConfigPliee + " - No : " + RefDossier + " = " + NomConfigDepliee); WindowLog.Ecrire("Erreur de depliage"); this.LogMethode(new Object[] { e }); } try { mdl.ShowConfiguration2(NomConfigPliee); pidTole.Maj(ref Tole); Tole.PlierTole(mdl, NomConfigPliee); } catch (Exception e) { WindowLog.Ecrire("Erreur de repliage"); this.LogMethode(new Object[] { e }); } } } mdl.ShowConfiguration2(cfgActive); WindowLog.SautDeLigne(); mdl.eFermerSiDifferent(MdlBase); } if (DicErreur.Count > 0) { WindowLog.SautDeLigne(); WindowLog.Ecrire("Liste des erreurs :"); foreach (var item in DicErreur) { WindowLog.Ecrire(" - " + item); } WindowLog.SautDeLigne(); } else { WindowLog.Ecrire("Pas d'erreur"); } WindowLog.SautDeLigne(); WindowLog.Ecrire("Resultat :"); WindowLog.Ecrire("----------------"); WindowLog.EcrireF(" {0} dvp crées", NbDvp); File.WriteAllText(Path.Combine(MdlBase.eDossier(), "Log_CreerConfigDvp.txt"), WindowLog.Resume); MdlBase.eActiver(swRebuildOnActivation_e.swRebuildActiveDoc); MdlBase.ShowConfiguration2(nomConfigBase); MdlBase.EditRebuild3(); } catch (Exception e) { this.LogErreur(new Object[] { e }); } }
/// <summary> /// Renvoi la liste des modeles avec la liste des configurations, des dossiers /// et les quantites de chaque dossier dans l'assemblage /// Modele : ModelDoc2 /// |-Config1 : Nom de la configuration /// | |-Dossier1 : Comparaison avec la propriete RefDossier, référence à l'Id de la fonction pour pouvoir le selectionner plus tard /// | | |- Nb : quantite de corps identique dans le modele complet /// | | /// | |-Dossier2 /// | |- Nb /// |-Config 2 /// | etc... /// </summary> /// <param name="mdlBase"></param> /// <param name="composantsExterne"></param> /// <param name="filtreDossier"></param> /// <returns></returns> public static SortedDictionary <ModelDoc2, SortedDictionary <String, SortedDictionary <int, int> > > DenombrerDossiers(this ModelDoc2 mdlBase, Boolean composantsExterne, Predicate <Feature> filtreDossier = null, Boolean fermerFichier = false) { SortedDictionary <ModelDoc2, SortedDictionary <String, SortedDictionary <int, int> > > dic = new SortedDictionary <ModelDoc2, SortedDictionary <String, SortedDictionary <int, int> > >(new CompareModelDoc2()); try { var ListeComposants = mdlBase.ListerComposants(composantsExterne); var ListeDossiers = new Dictionary <String, Dossier>(); Predicate <Feature> Test = delegate(Feature fDossier) { BodyFolder SwDossier = fDossier.GetSpecificFeature2(); if (SwDossier.IsRef() && SwDossier.eNbCorps() > 0 && !SwDossier.eEstExclu() && (filtreDossier.IsNull() || filtreDossier(fDossier))) { return(true); } return(false); }; foreach (var mdl in ListeComposants.Keys) { mdl.eActiver(swRebuildOnActivation_e.swRebuildActiveDoc); foreach (var t in ListeComposants[mdl]) { var cfg = t.Key; var nbCfg = t.Value; mdl.ShowConfiguration2(cfg); mdl.EditRebuild3(); var Piece = mdl.ePartDoc(); foreach (var fDossier in Piece.eListeDesFonctionsDePiecesSoudees(Test)) { BodyFolder SwDossier = fDossier.GetSpecificFeature2(); var RefDossier = SwDossier.eProp(CONSTANTES.REF_DOSSIER); if (ListeDossiers.ContainsKey(RefDossier)) { ListeDossiers[RefDossier].Nb += SwDossier.eNbCorps() * nbCfg; } else { var dossier = new Dossier(RefDossier, mdl, cfg, fDossier.GetID()); dossier.Nb = SwDossier.eNbCorps() * nbCfg; ListeDossiers.Add(RefDossier, dossier); } } } if (fermerFichier) { mdl.eFermerSiDifferent(mdlBase); } ; } // Conversion d'une liste de dossier // en liste de modele foreach (var dossier in ListeDossiers.Values) { if (dic.ContainsKey(dossier.Mdl)) { var lcfg = dic[dossier.Mdl]; if (lcfg.ContainsKey(dossier.Config)) { var ldossier = lcfg[dossier.Config]; ldossier.Add(dossier.Id, dossier.Nb); } else { var ldossier = new SortedDictionary <int, int>(); ldossier.Add(dossier.Id, dossier.Nb); lcfg.Add(dossier.Config, ldossier); } } else { var ldossier = new SortedDictionary <int, int>(); ldossier.Add(dossier.Id, dossier.Nb); var lcfg = new SortedDictionary <String, SortedDictionary <int, int> >(new WindowsStringComparer()); lcfg.Add(dossier.Config, ldossier); dic.Add(dossier.Mdl, lcfg); } } } catch (Exception e) { Log.LogErreur(new Object[] { e }); } return(dic); }