Autodesk Revit: Обновление семейств

Posted: 2015/10/10 in Обучение
Метки: , , , ,

В жизни каждого ревитчика рано или поздно наступает момент обновления множества семейств и чаще всего наступает при переходе на новую версию или в случае внесения изменений, например, добавление параметров, обновление вложенных семейств… и это большая проблема. В связи с этим предлагаю Вам абсолютно доступное решение при помощи Журналов (Journals), о которых рассказывал в предыдущей публикации.

Создание файла путей семейств

Начнем из создания текстового файла путей семейств, требующих обновления, при помощи пакетных файлов CMD расположенных в корне Библиотеки (Libraries). Да, это «старые-добрые» и проверенные временем команды DOS. Откроем файл ASK 000 00000 Families.cmd:

  • @echo off
  • chcp 1251
  • cd .
  • attrib -R -H -S +A «*.rf?» /S
  • del «*.0???.r??» /S
  • dir /B /S «*.rf?» > «ASK 000 00000 Families.txt»
В нем изначально отключаем вывод результата @echo off и устанавливаем кириллическую кодировку chcp 1251. Далее указываем текущую директорию cd ., на всякий случай снимаем атрибуты скрытия, защиты от записи файлов семейств attrib -R -H -S +A «*.rf?» /S, удаляем их резервные копии del «*.0???.r??» /S и получаем их пути dir /B /S «*.rf?» с записью в текстовый файл > «ASK 000 00000 Families.txt». После выполнения файла ASK 000 00000 Families.cmd получаем текстовый файл с требуемыми строками путей и наименований файлов семейств. Обратите внимание, что для Autodesk Revit 2016 создаю библиотеки исключительно на латинице и только для англоязычной версии.

На случай получения списка путей семейств моделей есть отдельная команда ASK 000 00000 Families — Model.cmd, а соответственно для семейств оформлений – ASK 000 00000 Families — Annotation.cmd. Зачем? При внесении изменений в семейства моделей можно добавить Общие параметры (Shared parameter), а в семейства оформлений – нет. Тут же возникает логичный вопрос – как отделить «котлеты» от «мух», семейства моделей от семейств оформлений?

Лично это решаю при помощи собственной системы классификации данных, в которой все семейства моделей в численном коде имеют «0» на шестой позиции «??? ??? ??0??*.rf. В случае необходимости можно расширить условия поиска и, например, добавить составляющие семейства моделей «??? ??? ??5??*.rf с цифрой 5. В результате запуска команды получаем исключительный перечень семейств моделей, на примере которых и продемонстрирую работу журналов обновления. Естественно для этого потребуется только несколько файлов. Но прежде, еще посмотрим отличия условий выбора семейств оформлений, в которых маска «??? ??? 1?0??*.rf отвечает за обозначения, «??? ??? ??2??*.rf за аннотации и «??? ??? ??3??*.rf?» семейства детализации. Проверяем результат выполнения команды ASK 000 00000 Families — Annotation.cmd и еще раз убеждаемся в нем.

Обзор журнала обновления семейств

Таким образом мы закончили подготовку списка семейств для обновлений и перейдем к обзору журналов. С журналом созданий Рабочих наборов можно ознакомиться по ссылке. Сейчас же открываем журнал ASK 000 00000 Upgrade.txt, в начале которого обязательно указываются комментарии версии Autodesk Revit, а также переменная объявления Объекта CrsJournalScript для выполнения действий.

  • ‘ Build: 20150506_1715(x64)
  • ‘ Branch: RELEASE_2016_RTM
  • Dim Jrn
  • Set Jrn = CrsJournalScript

Далее следуют переменные получения текстового файла со списком путей семейств, его наименования, расположения и пути. После объявляется Объект работы с Файловой системой (File System):

  • Dim dirFile ‘File with Path of Families (RFT, RFA)
  • Dim dirFileName ‘ Set file name
  • dirFileName = «ASK 000 00000 Families.txt»
  • Dim dirFileLocation ‘ Set file location
  • dirFileLocation = «L:\01 Libraries\Autodesk\Revit\2016\ASK\»
  • Dim dirFilePath ‘ Get file path
  • dirFilePath = dirFileLocation & dirFileName
  • Dim fso ‘ Set file System Object
  • Set fso = CreateObject(«Scripting.FileSystemObject»)

Ознакомиться с его возможностями можно на сайте MSDN (Microsoft Developer Network) по ссылке, среди которых нам потребуется метод ReadLine для построчного чтения текстового файла. Соответственно можно скопировать готовый пример использования этого метода для записи и чтения. Вернемся к журналу, в котором после объявляю переменную хранения пути обновляемого семейства:

  • Dim upgFilePath ‘ Path of file to upgrade

Далее начинается основной код, в котором изначально делаю проверку наличия текстового файла и в случае его отсутствия вывожу Сведенья о Autodesk Revit (About) в качестве предупреждения, так как пока не получается вывести текстовое сообщение:

  • If fso.FileExists (dirFilePath) Then
  • Set dirFile = fso.OpenTextFile(dirFilePath, 1)
  • Do While dirFile.AtEndOfStream <> True
  • upgFilePath = dirFile.ReadLine
  • askUpgrade(upgFilePath)
  • Loop
  • Else
  • Jrn.Command «Ribbon» , «Display program information… , ID_APP_ABOUT»
  • End If

В случае наличия файла, открываем его и приступаем к построчному чтению циклом Do While с получением и передачей пути обновляемого семейства отдельной процедуре askUpgrade:

  • Sub askUpgrade(askFilePath)
  • Jrn.Command «Ribbon» , «Open an existing project , ID_REVIT_FILE_OPEN»
  • Jrn.Data «File Name» , «IDOK», askFilePath
  • Jrn.Command «Ribbon» , «Save the active project , ID_REVIT_FILE_SAVE»
  • Jrn.Command «Ribbon» , «Close the active project , ID_REVIT_FILE_CLOSE»
  • End Sub

Которая выполняет открытие требуемого семейства по указанному пути, его сохранение и закрытие. Вот собственно и все решение, которые сэкономит массу Вашего времени и главное нервов).

Обзор журнала модификации семейств

Лень однозначно – двигатель прогресса, и почему бы не сэкономить еще больше времени, например, на изменениях файлов семейств? Посмотрим журнал обновления семейств ASK 000 00000 Upgrade — Model.txt, в котором после открытия семейства в процедуре обновления askUpgrade, вызываются процедуры добавления нового параметра askAddParameter и обновления семейств обозначений askUpdateSymbols:

Процедура добавления нового параметра создана с возможностью получения его Имени, Группы, а также Значения, что существенно уменьшает требуемый объем кода в случае добавления нескольких параметров. Соответственно в скобках, после объявления процедуры, указываются переменные входящих значений, которые передают их соответствующим командам:

  • Sub askAddParameter(askParameter , askParameterGroup , askParameterValue)
  • Jrn.PushButton «Modal , Family Types , Dialog_Family_FamilyType» _
    , «Add…, Control_Family_NewFamParam»
  • Jrn.RadioButton «Modal , Parameter Properties , Dialog_Revit_ParamPropertiesFamily» _
    , «Shared parameter, Control_Revit_ExternalParam»
  • Jrn.PushButton «Modal , Parameter Properties , Dialog_Revit_ParamPropertiesFamily» _
    , «Select…, Control_Revit_ExternalParamSelect»
  • Jrn.ListBox «Modal , Shared Parameters , Dialog_Revit_ExternalParamImport» _
    , «Control_Revit_Parameters» , «DblClick» , askParameter
  • Jrn.ComboBox «Modal , Parameter Properties , Dialog_Revit_ParamPropertiesFamily» _
    , «Control_Revit_ParamGroup» , «Select» , askParameterGroup
  • Jrn.PushButton «Modal , Parameter Properties , Dialog_Revit_ParamPropertiesFamily» _
    , «OK, IDOK»
  • Jrn.Data «Transaction Successful» , «New parameter»
  • Jrn.Grid «Control; Modal , Family Types , Dialog_Family_FamilyType; _
    Control_Family_TypeGrid» , «PartialEdit» , «Developer» , «ValueCol» , askParameterValue
  • Jrn.PushButton «Modal , Family Types , Dialog_Family_FamilyType» , «OK, IDOK»
  • Jrn.Data «Transaction Successful» , «Family Types»
  • End Sub

При этом, обратите внимание, что для добавления аналогичного параметра в семейства оформлений, необходимо будет передать чуть больше значений, в связи с невозможностью использования Общих параметров (Shared Parameters).

Процедура askUpdateSymbols осуществляет обновление обозначения Уровней (Levels) и Разрезов (Section) из библиотеки по исходным путям их загрузки:

  • Sub askUpdateSymbols()
  • Jrn.Browser «Activate» , » «
  • Jrn.Browser «ToggleExpandedState» , «>>Families>>»
  • Jrn.Browser «ToggleExpandedState» , «>>Families>>Annotation Symbols>>»
  • Jrn.Browser «SelChange» , «>>Families>>Annotation Symbols>>ASK 000 00140 Level>>»
  • Jrn.Command «Internal» , «Reload Family , ID_RELOAD_FAMILY»
  • Jrn.Data «File Name» , «IDOK», «L:\01 Libraries\Autodesk\Revit\2016\ASK _
    \ASK 000 00100 Symbols\ASK 000 00140 Layouts\ASK 000 00140 Level.rfa»
  • Jrn.Data «FileExternalTypes» , «»
  • Jrn.Data «TaskDialogResult» , «You are trying to load the family ASK 000 00140 Level _
    , which already exists in this project. What do you want to do?» _
    , «Overwrite the existing version», «1001»
  • Jrn.Data «Transaction Successful» , «Reload Family»
  • Jrn.Browser «Activate» , » «
  • Jrn.Browser «SelChange» , «>>Families>>Annotation Symbols>>ASK 000 00150 Section>>»
  • Jrn.Command «Internal» , «Reload Family , ID_RELOAD_FAMILY»
  • Jrn.Data «File Name» , «IDOK», «L:\01 Libraries\Autodesk\Revit\2016\ASK _
    \ASK 000 00100 Symbols\ASK 000 00150 Views\ASK 000 00150 Section.rfa»
  • Jrn.Data «FileExternalTypes» , «»
  • Jrn.Data «TaskDialogResult» , «You are trying to load the family ASK 000 00150 Section _
    , which already exists in this project. What do you want to do?» _
    , «Overwrite the existing version», «1001»
  • Jrn.Data «Transaction Successful» , «Reload Family»
  • Jrn.Browser «Activate» , » «
  • Jrn.Browser «ToggleExpandedState» , «>>Families>>Annotation Symbols>>»
  • Jrn.Browser «ToggleExpandedState» , «>>Families>>»
  • End Sub

Проверяем работу путем перетаскивания файла журнала на значок Autodesk Revit и любуемся результатом, а если файлов будет много – сможете успеть сделать себе чашечку кофе, пошариться в интернете, поиграть в контрстрайк или просто отдохнуть, а лучше – вложить полученную экономию времени в изучение журналов и принципов работы с ними, чтобы когда-нибудь вернуть мне вложенную инвестицию времени в виде готовых решений ;). Ведь именно время – самое дороге, что у нас действительно есть и что нельзя купить ни за какие гроши.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s