private void UpdateSectionParasByParts(MidasCustomSectionEntity section) { double minx = double.MaxValue; double miny = double.MaxValue; double maxx = double.MinValue; double maxy = double.MinValue; foreach (var part in _midasPorterData.Parts.Where(p => p.SectionName == section.SecName)) { double xc = 0, yc = 0, h = 0, w = 0; //TODO consider rotation later, usually not necessary if (part.ShapeName.Contains("Plate")) { xc = double.Parse(part.GeoDef["XCenter"]); yc = double.Parse(part.GeoDef["YCenter"]); h = double.Parse(part.GeoDef["Thickness"]); w = double.Parse(part.GeoDef["Width"]); } else if (part.ShapeName.Contains("Rectangle")) { xc = double.Parse(part.GeoDef["XCenter"]); yc = double.Parse(part.GeoDef["YCenter"]); h = double.Parse(part.GeoDef["Height"]); w = double.Parse(part.GeoDef["Width"]); } else { Trace.WriteLine("possible error with section part."); continue; } minx = Math.Min(xc - w / 2, minx); miny = Math.Min(yc - h / 2, miny); maxx = Math.Max(xc + w / 2, maxx); maxy = Math.Max(yc + h / 2, maxy); } section.Cyp = maxx; section.Cym = minx; section.Czp = maxy; section.Czm = miny; section.Ds[0] = maxx - minx; section.Ds[1] = maxy - miny; section.Cy = Math.Max(-minx, maxx); section.Cz = Math.Max(-miny, maxy); }
private void WriteSectionInfoToMGT(StreamWriter writer) { writer.WriteLine("*SECTION"); foreach (MidasSectionEntity item in _midasPorterData.SecDict.Values) { if (item is MidasRectangleSectionEntity) { MidasRectangleSectionEntity section = item as MidasRectangleSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); //writer.Write("CC,0,0,0,0,0,0,YES,NO,"); writer.Write(section.Offset + ","); writer.Write(section.ICent + ","); writer.Write(section.IRef + ","); writer.Write(section.IHorizontalZ + ","); writer.Write(section.HUser + ","); writer.Write(section.IVertical + ","); writer.Write(section.VUser + ","); writer.Write(section.ShearDeformation?"YES,":"NO,"); writer.Write(section.WrinkleEffect?"YES,":"NO,"); writer.Write("SB,"); writer.Write("2,"); writer.Write(section.Height + "," + section.Width + ","); writer.WriteLine("0,0,0,0,0,0,0,0"); } if (item is MidasAngleSectionEntity) { MidasAngleSectionEntity section = item as MidasAngleSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); writer.Write("CC,0,0,0,0,0,0,YES,NO,"); writer.Write("L,"); writer.Write("2,"); writer.Write(section.H + "," + section.B + "," + section.Tw + "," + section.Tf + ","); writer.WriteLine("0,0,0,0,0,0"); } if (item is MidasBoxSectionEntity) { MidasBoxSectionEntity section = item as MidasBoxSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); writer.Write("CC,0,0,0,0,0,0,YES,NO,"); writer.Write("B,"); writer.Write("2,"); writer.Write(section.H + "," + section.B + "," + section.Tw + "," + section.Tf1 + "," + section.C + "," + section.Tf2 + ","); writer.WriteLine("0,0,0,0"); } if (item is MidasCircleSectionEntity) { MidasCircleSectionEntity section = item as MidasCircleSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); writer.Write("CC,0,0,0,0,0,0,YES,NO,"); writer.Write("SR,"); writer.Write("2,"); writer.Write(section.Diameter + ","); writer.WriteLine("0,0,0,0,0,0,0,0,0"); } if (item is MidasDoubleAngleSectionEntity) { MidasDoubleAngleSectionEntity section = item as MidasDoubleAngleSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); writer.Write("CC,0,0,0,0,0,0,YES,NO,"); writer.Write("2L,"); writer.Write("2,"); writer.Write(section.H + "," + section.B + "," + section.Tw + "," + section.Tf + "," + section.C + ","); writer.WriteLine("0,0,0,0,0"); } if (item is MidasGongSectionEntity) { MidasGongSectionEntity section = item as MidasGongSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); writer.Write("CC,0,0,0,0,0,0,YES,NO,"); writer.Write("H,"); writer.Write("2,"); writer.Write(section.H + "," + section.B1 + "," + section.TW + "," + section.T1 + "," + section.B2 + "," + section.T2 + ","); writer.WriteLine("0,0,0,0"); } if (item is MidasPipeSectionEntity) { MidasPipeSectionEntity section = item as MidasPipeSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); writer.Write("CC,0,0,0,0,0,0,YES,NO,"); writer.Write("P,"); writer.Write("2,"); writer.Write(section.D + "," + section.Tw + ","); writer.WriteLine("0,0,0,0,0,0,0,0"); } if (item is MidasTeeSectionEntity) { MidasTeeSectionEntity section = item as MidasTeeSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); writer.Write("CC,0,0,0,0,0,0,YES,NO,"); if (section.IsUnderT) { writer.Write("UDT,"); writer.Write("2,"); writer.Write(section.H + "," + section.b1 + "," + section.b2 + "," + section.Tw + "," + section.Tf + ","); writer.WriteLine("0,0,0,0,0"); } else { writer.Write("T,"); writer.Write("2,"); writer.Write(section.H + "," + section.B + "," + section.Tw + "," + section.Tf + ","); writer.WriteLine("0,0,0,0,0,0"); } } if (item is MidasChannelSectionEntity) { MidasChannelSectionEntity section = item as MidasChannelSectionEntity; writer.Write(section.Number + ",DBUSER,"); writer.Write(section.SecName + ","); writer.Write("CC,0,0,0,0,0,0,YES,NO,"); writer.Write("CC,"); writer.Write("2,"); writer.Write(section.H + "," + section.B + "," + section.Tw + "," + section.r + "," + section.d + ","); writer.WriteLine("0,0,0,0,0"); } } writer.WriteLine(); if (_midasPorterData.SecDict.Values.Any(s => s is MidasCustomSectionEntity)) { writer.WriteLine("*SECT-PSCVALUE"); } foreach (MidasSectionEntity item in _midasPorterData.SecDict.Values) { if (item is MidasCustomSectionEntity) { MidasCustomSectionEntity section = item as MidasCustomSectionEntity; writer.Write("SECT=" + section.Number + "," + section.MidasType + ","); writer.Write(section.SecName + "," + section.Offset + "," + "0,0,0,0,0,0,"); writer.Write((section.bSD ? "YES" : "NO") + "," + (section.bWE ? "YES" : "NO") + "," + section.MidasShape + ",YES,YES"); UpdateSectionParasByParts(section); writer.WriteLine(); writer.WriteLine(" " + section.Area + "," + section.Asy + "," + section.Asz + "," + section.Ixx + "," + section.Iyy + "," + section.Izz); writer.WriteLine(" " + section.Cyp + "," + section.Cym + "," + section.Czp + "," + section.Czm + "," + section.Qyb + "," + section.Qzb + "," + section.PeriOut + "," + section.PeriIn + "," + section.Cy + "," + section.Cz); writer.Write(" "); for (int i = 0; i < 4; i++) { writer.Write(section.Ys[i] + ","); } for (int i = 0; i < 4; i++) { writer.Write(section.Zs[i] + ","); } //writer.Write(section.Zyy + "," + section.Zzz); writer.WriteLine(); } } writer.WriteLine(); }