В Revit 2017 был расширен список элементов модели, у которых в спецификацию и марку может быть выведена высотная отметка их низа и верха. Но у колонн такой возможности нет.
Тем не менее, бывает задача указать отметку верха и низа колонны, например, на схеме расположения колонн.
Написал небольшой макрос для решения этой задачи.
Предварительно следует создать общие параметры проекта, тип данных — «Длина», по экземпляру, для категории «Несущие колонны»:
Общие параметры я использовал из файла общих параметров шаблона Weandrevit 2017.
Скопируйте код макроса и создайте макрос по инструкции.
В начале кода макроса укажите имена параметров, в которые будет записываться значение.
Результат:
Работает на любой версии Revit.
Приложение получает параметры «Базовый уровень» и «Смещение от уровня», а не сами точки геометрии, поэтому отметка может получиться некорректной, если, например, использовалось «Присоединение верха» колонны. Можно переписать макрос, чтобы он получал именно самую верхнюю и самую нижнюю точку геометрии, но пока так.
Пробный проект (Revit 2015):
Код макроса для копирования:
public void StartCalculateColumnElevation()
{
Document doc = this.ActiveUIDocument.Document;
string parameterBaseElevation = «Рзм.ОтметкаРасположения»;
string parameterTopElevation = «Рзм.ОтметкаВерха»;
List<Element> cols = new FilteredElementCollector(doc)
.OfCategory(BuiltInCategory.OST_StructuralColumns)
.WhereElementIsNotElementType()
.ToElements()
.ToList();
int count = 0;
int errorCount = 0;
using(Transaction t = new Transaction(doc))
{
t.Start(«Colums elevation»);
foreach(Element col in cols)
{
try
{
ElementId baseLevelId = col.get_Parameter(BuiltInParameter.SCHEDULE_BASE_LEVEL_PARAM).AsElementId();
Level baseLevel = doc.GetElement(baseLevelId) as Level;
double baseLevelHeigth = baseLevel.Elevation;
double baseOffset = col.get_Parameter(BuiltInParameter.SCHEDULE_BASE_LEVEL_OFFSET_PARAM).AsDouble();
double baseElev = baseLevelHeigth + baseOffset;
ElementId topLevelId = col.get_Parameter(BuiltInParameter.SCHEDULE_TOP_LEVEL_PARAM).AsElementId();
Level topLevel = doc.GetElement(topLevelId) as Level;
double topLevelHeigth = topLevel.Elevation;
double topOffset = col.get_Parameter(BuiltInParameter.SCHEDULE_TOP_LEVEL_OFFSET_PARAM).AsDouble();
double topElev = topLevelHeigth + topOffset;
col.LookupParameter(parameterBaseElevation).Set(baseElev);
col.LookupParameter(parameterTopElevation).Set(topElev);
count++;
}
catch { errorCount++; }
}
t.Commit();
}
TaskDialog.Show(«Отметки колонн», «Обработано колонн: « + count + «, ошибок: « + errorCount);
}