При работе с шаблоном Autodesk Community 2017 многие столкнулись с интересным явлением: общие параметры как-то странно себя ведут:
Сейчас расскажу об этом явлении.
UPD: сделал табличку с сопоставлением параметров ADSK 2017 и Weandrevit:
Введение
Скажу сразу: переименовать общий параметр в текущем рабочем проекте невозможно (точнее можно, но это сломает весь файл)
Но можно сделать так, что имя того же параметра будет другим в новых проектах.
Если открыть файл общих параметров через Блокнот — в начале будет предупреждение «# Do not edit manually«.
Сломать файл действительно очень просто, но это нас не остановит! Наверняка многие пробовали переименовать параметр в этом файле вручную (безрезультатно).
Подготовим материалы
Создадим новый файл общих параметров и назовем его «Параметры Weandrevit», подключим к Revit и создадим там параметр «Рзм.Длина»:
Создадим семейство с этим общим параметром, также добавим другие параметры и формулы:
Сохраним семейство как «Семейство Weandrevit», создадим новый пустой проект, загрузим в него это семейство. В проекте создадим спецификацию, выведем в неё общий параметр «Рзм.Длина», также создадим какое-нибудь расчетные параметры:
Еще создадим марку и также выведем в неё параметр «Рзм.Длина», сохраним как «Марка Weandrevit», загрузим марку в проект и установим на семейство:
Сохраним как «Проект Weandrevit».
Затем откроем файл общих параметров в Блокноте и переименуем «Рзм.Длина» на «ADSK_Длина»:
Проделаем все те же действия: создадим новое семейство «Семейство ADSK», добавим туда параметр «ADSK_Длина», загрузим в проект, создадим спецификацию и марку, сохраним как «Проект на шаблоне ADSK»:
Эксперимент
Откроем «Семейство Weandrevit», там увидим параметр «Рзм.Длина» — имя не изменилось (в файле общих параметров имя уже новое, но семейство не обращает на это внимания).
Попытаемся добавить параметр «ADSK_Длина» — появляется ошибка:
Очевидно, что параметр получает имя при первом добавлении, которое жестко прописывается в семействе.
Дальше интереснее.
Загрузим «Семейство Weandrevit» в «Шаблон ADSK». Смотрим на семейство: «Рзм.Длина» заменен на «ADSK_Длина»! Проверяем спецификацию: параметр пришел в один столбец в «Семейством ADSK», марка тоже работает:
Закроем «Семейство Weandrevit» и откроем его на редактирование из этого проекта — удивительное дело! Мало того, что параметр переименован, так еще и формулы изменились:
Продолжаем экспериментировать: загрузим «Семейство ADSK» в «Шаблон Weandrevit». Произойдет обратное.
То же самое происходит со спецификациями и марками: при переносе из одного проекта в другой имена параметров будут изменяться, но семейства и спецификации продолжают работать, как ни в чем не бывало.
Интересно, что при копировании спецификации параметр в ней переименовывается, а «Заголовок» — остается прежним:
Очевидно, что информация о добавленном общем параметре и его имени жестко прописывается в проекте и изменяет все последующие загружаемые семейства.
Даже если удалить из файла все семейства, марки, спецификации, параметры проекта — параметр всё равно будет переименовываться при загрузке другого семейства в проект!
Вот небольшое кино:
Объяснение эксперимента
Что еще можно сделать с определениями параметров?
Зачем такие сложности?
- Для параметров шаблона Autodesk утверждена система именования с префиксом ADSK_, и вначале предлагалось генерировать все параметры с нуля. Но в этом случае все шаблон оказался быо полностью несовместимым со всеми старыми семействами (и наоборот). Использование переименования параметров позволяет решить эту проблему — семейства будут работать и в том, и в другом шаблоне;
- Помимо имени параметра в «Определении» также сохраняется «Описание» к параметру (всплывающая подсказка при наведении указателя мыши на параметр).
Но эта подсказка может со временем устареть, а поменять её также невозможно. Например, в параметре «КМ.ТипЭлемента» из старого шаблона приведена инструкция по его заполнению, но сейчас эта схема заполнения уже другая. Соответственно я изменил описание параметра в файле общих параметров, создал пустое семейство с этим параметром и загрузил его в пустой проект — заготовку для нового шаблона. При загрузке старых семейств в новый шаблон подсказка параметра будет обновлена. - Многим не нравится система именования, которую я придумал в своем шаблоне (типа «Рзм.Длина», «Орг.ТипЭлемента» и т.д.) — многие указывают в начале параметра префикс с аббревиатурой компании, кто-то не пользуется префиксами и т.д.
Теперь это не проблема — вы можете взять файл общих параметров, переименовать их по своему стандарту, создать пустое семейство со всеми этими параметрами и добавить в пустой проект. После этого, когда будете загружать в него семейства из других шаблонов — параметры в них будут сразу переименованы по вашему стандарту.
Этот механизм — важный шаг к использованию в масштабах страны одного набора общих параметров, так как до этого попытки стандартизации упирались в споры «нам нужно такое имя! — а нам нужно такое!».
Теперь основной идентификатор параметра — это его GUID.
Например, мне не нравится префикс ADSK_, так как он слишком длинный. В моем новом шаблоне «ADSK_Наименование», «ADSK_Масса» и т.д. переименованы на «О_Наименование», «О_Масса» и т.д.
Проблемы с файлом каталога типоразмеров
Если вы создадите проект на базе шаблона «ADSK АР 2017», скачаете библиотеку семейств для старого шаблона Community и попытаете загрузить семейство окна в свой проект — возникнет ошибка:
public void ShowAllDefs() { Document doc = this.ActiveUIDocument.Document; FilteredElementCollector col = new FilteredElementCollector(doc) .OfClass(typeof(SharedParameterElement)); string names = «»; foreach (SharedParameterElement spe in col) { names += spe.Name + » «; names += spe.Id.IntegerValue.ToString(); names += spe.GuidValue.ToString() + «n»; } TaskDialog.Show(«IntsDefs», names); }