using Autodesk.Revit.DB; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CDM.Interop.Revit.Utility { class Utility { public static Dictionary GetDictLevelId_LevelCodes(Document doc) { var levelCol = new FilteredElementCollector(doc).OfClass(typeof(Level)).Cast(); var groundLevel = from l in levelCol where l.get_Parameter(BuiltInParameter.LEVEL_ELEV).AsDouble() >= 0 select l; var undergroundLevel = from l in levelCol where l.get_Parameter(BuiltInParameter.LEVEL_ELEV).AsDouble() < 0 select l; var groundLevelOrdered = levelCol.OrderBy(l => l.ProjectElevation).ToList(); var undergroundLevelOrdered = undergroundLevel.OrderByDescending(l => l.ProjectElevation).ToList(); Dictionary LevelId_LevelCodes = new Dictionary(); int groundLevelCode = 1; int undergroundLevelCode = 901; for (int i = 0; i < groundLevelOrdered.Count; i++) { ElementId levelid = groundLevelOrdered[i].Id; string str; if (groundLevelCode > 9) { if (groundLevelCode > 99) { str = string.Format("{0}", groundLevelCode); } else { str = string.Format("0{0}", groundLevelCode); } } else { str = string.Format("00{0}", groundLevelCode); } LevelId_LevelCodes.Add(levelid, str); groundLevelCode += 1; } for (int i = 0; i < undergroundLevelOrdered.Count; i++) { ElementId levelid = undergroundLevelOrdered[i].Id; LevelId_LevelCodes.Add(levelid, string.Format("{0}", undergroundLevelCode)); undergroundLevelCode += 1; } return LevelId_LevelCodes; } } }