public void getGroups(List<Elm> elements) { elmMgroups.Clear(); elmGroups.Clear(); Dictionary<string, ElmAttSet.ElmAttSet> Elements = new Dictionary<string, ElmAttSet.ElmAttSet>(); try { Elements = elements.ToDictionary(elm => elm.guid); } catch { Msg.F("Model.getGroups inconsystent elements "); } //-- группы по Материалам elm.mat var matGroups = from elm in elements group elm by elm.mat; foreach (var matGr in matGroups) { List<string> guids = new List<string>(); foreach (ElmAttSet.ElmAttSet element in matGr) { // log.Info("mgr.mat=" + matGr.Key + " mgr.element.guid=" + element.guid); guids.Add(element.guid); } ElmAttSet.Mgroup Mgr = new ElmAttSet.Mgroup(elements, matGr.Key, guids); elmMgroups.Add(Mgr); } log.Info("----- Material Groups Count = " + elmMgroups.Count + "\tfrom " + elements.Count + " elements ----"); foreach (var mtGr in elmMgroups) log.Info("material= " + mtGr.mat + "\tCount= " + mtGr.guids.Count + "\tвес=" + mtGr.totalWeight + "\tобъем=" + mtGr.totalVolume); //-- группы по Материалу и Профилю elm.mat && elm.prf foreach (var Mgr in elmMgroups) { string curMat = Mgr.mat; //7/6 string curPrf = Lib.ToLat(Elements[Mgr.guids[0]].prf.ToLower()); string curPrf = Elements[Mgr.guids[0]].prf; List<string> guids = new List<string>(); foreach (var g in Mgr.guids) { ElmAttSet.ElmAttSet elm = Elements[g]; if (elm.prf == curPrf) guids.Add(g); else { elmGroups.Add(new ElmGr(Elements, curMat, curPrf, guids)); curPrf = elm.prf; guids = new List<string>(); guids.Add(g); } } if (guids.Count != 0) elmGroups.Add(new ElmGr(Elements, curMat, curPrf, guids)); } elmGroups = PrfUpdate(elmGroups); //26/6 PrfUpdate(); log.Info("----- <Material, Profile> Groups Count = " + this.elmGroups.Count); int chkSum = 0; foreach (var gr in this.elmGroups) { log.Info("material= " + gr.mat + "\tprofile= " + gr.prf + "\tCount= " + gr.guids.Count); chkSum += gr.guids.Count; } log.Info("-------------- CheckSum: total elements count in all groups = " + chkSum); }
/// <summary> /// getGroups() - groupping of elements of Model by Material and Profile /// </summary> /// <ToDo>30.9.2016 - попробовать перенести этот метод в ElmAttSet.Groups</ToDo> /// <history> 2016.09.29 </history> public void getGroups() { Dictionary <string, ElmAttSet.ElmAttSet> Elements = new Dictionary <string, ElmAttSet.ElmAttSet>(); foreach (var elm in elements) { Elements.Add(elm.guid, elm); } //-- группы по Материалам elm.mat var matGroups = from elm in elements group elm by elm.mat; foreach (var matGr in matGroups) { List <string> guids = new List <string>(); foreach (ElmAttSet.ElmAttSet element in matGr) { // log.Info("mgr.mat=" + matGr.Key + " mgr.element.guid=" + element.guid); guids.Add(element.guid); } ElmAttSet.Mgroup Mgr = new ElmAttSet.Mgroup(elements, matGr.Key, guids); elmMgroups.Add(Mgr); } log.Info("----- Material Groups Count = " + elmMgroups.Count + "\tfrom " + elements.Count + " elements ----"); foreach (var mtGr in elmMgroups) { log.Info("material= " + mtGr.mat + "\tCount= " + mtGr.guids.Count + "\tвес=" + mtGr.totalWeight + "\tобъем=" + mtGr.totalVolume); } //-- группы по Материалу и Профилю elm.mat && elm.prf this.elmGroups.Clear(); foreach (var Mgr in elmMgroups) { string curMat = Mgr.mat; string curPrf = Elements[Mgr.guids[0]].prf; List <string> guids = new List <string>(); foreach (var g in Mgr.guids) { ElmAttSet.ElmAttSet elm = Elements[g]; if (elm.prf == curPrf) { guids.Add(g); } else { this.elmGroups.Add(new ElmGr(Elements, curMat, curPrf, guids)); curPrf = elm.prf; guids = new List <string>(); guids.Add(g); } } if (guids.Count != 0) { this.elmGroups.Add(new ElmGr(Elements, curMat, curPrf, guids)); } } log.Info("----- <Material, Profile> Groups Count = " + this.elmGroups.Count); int chkSum = 0; foreach (var gr in this.elmGroups) { log.Info("material= " + gr.mat + "\tprofile= " + gr.prf + "\tCount= " + gr.guids.Count); chkSum += gr.guids.Count; } log.Info("-------------- CheckSum: total elements count in all groups = " + chkSum); }