Files
CDMUtility/CDMUtil/Utility/Utility.cs
2026-02-23 14:35:54 +08:00

60 lines
2.3 KiB
C#

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<ElementId, string> GetDictLevelId_LevelCodes(Document doc)
{
var levelCol = new FilteredElementCollector(doc).OfClass(typeof(Level)).Cast<Level>();
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<ElementId, string> LevelId_LevelCodes = new Dictionary<ElementId, string>();
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;
}
}
}