60 lines
2.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|