¬аше окно в мир —јѕ–
 
Ќовости —татьи јвторы —обыти€ ¬акансии Ёнциклопеди€ –екламодател€м
—татьи

14 окт€бр€ 2015

јвтоматизаци€ работы Autodesk Revit журналами действий

јлександр  анивец

ќт редакции isicad.ru: Ќедавно мы обратились к читател€м и писател€м с предложением Ч размещать на isicad.ru больше технических публикаций, например, в жанре рационализаторских предложений, общезначимых советов и т.п. —егодн€ мы предлагаем вам один из таких материалов, который на сайте компании BIM2B охарактеризован так: ЂЌова€ бомба от јлександра  анивца Ч это использование журналов Revit... ѕо факту, јлександр открыл новую эру в автоматизации Revit, сравнимую только со стартом Dynamo.ї

ќригинал опубликован в блоге автора и воспроизводитс€ с небольшими стилистическими изменени€ми.

јлександр  анивец ¬от биографическа€ справка, предоставленна€ нам самим автором:

ѕо образованию Ч бакалавр ѕ√—, но с детства мечтал стать архитектором. ѕосле окончани€ ¬”«а в 2003, год работал инженером ѕ“ќ ќблагростро€, а после представилась возможность реализовать мечту в  иеве, где в 2004 году впервые и познакомилс€ с системой »нформационного моделировани€ зданий Autodesk Revit.

—пуст€ два года практического применени€ пон€л, что значительно интересней заниматьс€ продвижением Revit и перешел к официальному дистрибьютору Autodesk в ”краине компанию Ђјркадаї, а после Ђ—офтпромї. «а 7 лет работы в партнерской сети, провел более 50 обучений клиентов и партнеров, участвовал и выступал на региональных и международных меропри€ти€х Autodesk, разрабатывал официальные библиотеки Revit, собирал и передавал пожелани€ от —ообщества пользователей, а также сопровождал государственную программу внедрени€ BIM в –еспублике Ѕеларусь результатом которой стал государственный BIM стандарт.

ѕоследние два года занимаюсь сопровождением частных проектно-строительных компаний, продолжаю работу над стандартом и библиотеками на его основе.

¬ Autodesk Revit имеетс€ функци€ записи всех действий пользовател€ в текстовый файл Ц журнал, который используетс€ разработчиками в основном дл€ вы€влени€ причин сбо€ приложени€. —амое интересное, что действи€ можно воспроизвести путем перетаскивани€ файла на значок Revit. Ёто позвол€ет восстановить часть работы после Ђвылетаї Revit или же сэкономить врем€ на некоторых часто повтор€емых действи€х.   примеру, рассмотрим случай создани€ нового проекта дл€ коллективной работы на основе требуемого Ўаблона (Template). Ќапомню, что дл€ этого необходимо будет создать –абочие наборы (Worksets), которые позвол€ют назначить ¬ладельца (Owner) и «аемщика (Borrower) совокупности пользовательских элементов, семейств, видов и настроек. Ќа первый взгл€д процедура не сложна€, но отнимающа€ врем€ и требующа€ внимани€.

1. «апись

—начала запустим Autodesk Revit и создадим новый проект, с об€зательным выбором Ўаблона проекта (Template) из библиотеки дл€ получени€ его пути и наименовани€. ƒалее приступим к созданию –абочих наборов (Worksets) и сначала введем наименовани€ основного набора дл€ ”ровней (Levels) и ќсей (Grids), а также дл€ всех остальных элементов проекта, например, ћестности (Site). —оответственно составл€ю наименовани€ согласно своему классификатору данных, в котором все элементы –азбивки (Layouts) имеют код 000 00240, а ћестности (Site) Ц 100 00000. ≈стественно, можете ввести любые пон€тные ¬ам значени€.
Revit журналы

ƒалее добавл€ю –абочие наборы (Worksets), которые могут понадобитьс€ дл€ распределени€ элементов  онцепции (Massing),  онструкций (Structure), јрхитектуры (Architecture), “ехнологии (Technology), »нженерии (Services) и т.п. “аким образом, каждый проектировщик будет работать в наборе, соответствующем его разделу. —просите Ц а как же быть в случае работы нескольких архитекторов? ¬едь Revit не позвол€ет одновременно назначать нескольких владельцев одному набору, в то врем€ как другие участники проекта смогут свободно занимать их элементы.  ак вариант, можно создать дополнительные архитектурные наборы дл€ более детального распределени€ элементов, например, —тены (Walls), ѕолы (Floors), ѕотолки (Ceilings), ѕроемы (Openings) и т.п., а можно разделить проект на отдельные модели и св€зать их между собой наложенными ссылками. „то лучше?

Revit журналы

—обственно, это тема следующих публикаций, а пока выберем јктивный рабочий набор (Active Workset), установим ѕодавление графики неактивных наборов (Gray Inactive Workset Graphics) и завершим их создание. ƒалее можем еще раз открыть диалог наборов дл€ проверки результата и закрыть Revit. «апись журнала завершена.

2. –едактирование

ƒл€ просмотра полученного журнала действий перейдем по следующему пути: C:\Users\%UserName%\AppData\Local\Autodesk\Revit\Autodesk Revit 2016\Journals.

ѕри наличии нескольких файлов журналов, отсортируем их по дате создани€, выделим самый новый и скопируем в другое месторасположение. »менно скопируем, а не перенесем, так как оригинал нам может понадобитьс€ на случай восстановлени€ чего-то нужного, которое можно случайно удалить в ходе редактировани€. —копированный файл лично сохран€ю в своей библиотеке по пути L:/01 Libraries/Autodesk/Revit/2016/ASK/ASK 000 00000/JRN с об€зательным переименованием.

ƒалее открываем файл журнала дл€ редактировани€ в Ѕлокноте (Notepad). Ќесмотр€ на то, что было совершено два дес€тка действий, строк записей оказалось значительно больше, но это обсто€тельство не должно вас пугать, так как большинство из них Ц это комментарии помеченные символом апострофа в начале и не представл€ющие дл€ нас никакой ценности. —оответственно по ходу редактировани€ все они удал€ютс€, кроме комментариев в 3-4 строках, которые содержат информацию о сборке Revit и без которых выполнение может не произойти.   сожалению, официально журналы не поддерживаютс€ и в справочной документации нет по ним описани€, а также их синтаксис может измен€тьс€ от версии к версии, как и отличатьс€ в зависимости от локализации.

Revit журналы

ѕоскольку € упом€нул о синтаксисе, обратим внимание на следующие строки, в которых объ€вл€етс€ переменна€ Jrn в формате vbScript с последующим присвоением ей команд выполнени€ скриптов:

  • Dim Jrn
  • Set Jrn = CrsJournalScript

“аким образом все необходимые нам строки будут начинатьс€ с Jrn и, очень веро€тно, в журнале можно будет воспользоватьс€ преимуществами скриптового программировани€ с целью оптимизации.

ѕриступим к поиску строчки с командой —оздани€ нового проекта на основе шаблона. ѕридетс€ пролистать половину журнала, внимательно просмотреть множество строчек комментариев, в которых отображаетс€ информаци€ о Revit, ходе его загрузки и всех св€занных с ним библиотек, компонентов и надстроек, доступности пам€ти, а также пропустить команды назначени€ вс€ческих переменных и т.п., пока не найдем строчку ќткрыти€ главного меню приложени€:

  • Jrn.AppButtonEvent 1 , УApplication Menu is openingФ

“еперь все лишнее можно смело удалить. —пуст€ несколько комментариев следует команда «акрыти€ главного меню приложени€ и сразу же искома€ команда —оздание нового проекта:

  • Jrn.AppButtonEvent 0 , УApplication Menu is closingФ Jrn.Command "Ribbon" , "Create a new project , ID_FILE_NEW_CHOOSE_TEMPLATE"

¬от как раз с этого места и начинаютс€ исполн€емые команды и следует быть очень осторожным, чтобы в ходе редактировани€ не удалить и не повредить нужные строки. ≈стественно комментарии между командами удал€ем, а также можем удалить переносы строк исполн€емых команд, которые обозначаютс€ в конце символом нижнего подчеркивани€. ќбратите внимание на команды выбора шаблона проекта:

  • Jrn.PushButton "Modal , New Project , Dialog_Revit_NewProject" _
    , "Browse..., Control_Revit_BrowseTemplateName"
  • Jrn.Data "FileDialog" _
    , "IDOK" , "L:\01 Libraries\Autodesk\Revit\2016\ASK\ASK 000 00000 General.rte", "rte" _
    , "ASK 000 00000 General.rte", "ASK 000 00000 General.rte"
  • Jrn.Data "FileType" , "Template Files (*.rte)"

¬ них указаны значени€ пути и имени файла Ўаблона проекта (Project Template), которые можно будет заменить, что позволит создавать –абочие наборы (Worksets) на основе любых шаблонов. ѕосле команды подтверждени€ —оздани€ нового проекта:

  • Jrn.PushButton "Modal , New Project , Dialog_Revit_NewProject" , "OK, IDOK"

следует множество комментариев его загрузки, подготовки активных видов, назначени€ переменных и т.п., которые также удал€ем до момента открыти€ диалога —оздани€ рабочих наборов:

  • Jrn.Command "StatusBar" , "Workset control , ID_SETTINGS_PARTITIONS"
  • Jrn.Edit "Modal , Worksharing , Dialog_Revit_PartitionsEnable" _
    , "Control_Revit_PartitionsEnableLevelsGridsViewsEdit" , "ReplaceContents" _
    , "000 00240 Layout"
  • Jrn.Edit "Modal , Worksharing , Dialog_Revit_PartitionsEnable" _
    , "Control_Revit_PartitionsEnableOthersEdit" , "ReplaceContents" _
    , "100 00000 Site"
  • Jrn.PushButton "Modal , Worksharing , Dialog_Revit_PartitionsEnable" , "OK, IDOK"

¬ нем указываем наименовани€ наборов дл€ хранени€ элементов ”ровней (Levels) и ќсей (Grids), а также ќстальных (Others) элементов. ѕосле нажати€ подтверждени€ создани€, снова последует много комментариев, после которых важно не пропустить команду завершени€ “ранзакции (Transaction). „то она собой представл€ет? Ёто фактическое завершение режима ожидани€ значений дл€ переменных с передачей их следующим процессам в случае подтверждени€ или же возврат предыдущих значений в случае отмены.

  • Jrn.Data "Transaction Successful" , "Worksets"

ƒалее последуют команды создани€ дополнительных рабочих наборов:

  • Jrn.PushButton "Modal , Worksets , Dialog_Revit_Partitions" , "New, Control_Revit_New"
  • Jrn.Edit "Modal , New Workset , Dialog_Revit_NewPartition" _
    , "Control_Revit_NewPartitionName" , "ReplaceContents" , "200 00000 Massing"
  • Jrn.PushButton "Modal , New Workset , Dialog_Revit_NewPartition" , "OK, IDOK"

 ак видно из скрипта, на создание каждого набора требуетс€ три строки Ц нажатие кнопки Ќового набора, введение значени€ его имени и подтверждение, при этом завершение “ранзакции (Transaction) после каждого создани€ не требуетс€. –азница в строках заключаетс€ только в наименовании Ќаборов, и чтобы не тер€ть врем€ на долгое форматирование строк и удаление комментариев, достаточно скопировать уже готовые три строки команд и указать только требуемые имена, а нижеследующие строки Ц удалить. »того получаем:

  • Jrn.PushButton "Modal , Worksets , Dialog_Revit_Partitions" , "New, Control_Revit_New"
  • Jrn.Edit "Modal , New Workset , Dialog_Revit_NewPartition" _
    , "Control_Revit_NewPartitionName" , "ReplaceContents" , "300 00000 Structure"
  • Jrn.PushButton "Modal , New Workset , Dialog_Revit_NewPartition" , "OK, IDOK"
  • Jrn.PushButton "Modal , Worksets , Dialog_Revit_Partitions" , "New, Control_Revit_New"
  • Jrn.Edit "Modal , New Workset , Dialog_Revit_NewPartition" _
    , "Control_Revit_NewPartitionName" , "ReplaceContents" , "400 00000 Architecture"
  • Jrn.PushButton "Modal , New Workset , Dialog_Revit_NewPartition" , "OK, IDOK"
  • Jrn.PushButton "Modal , Worksets , Dialog_Revit_Partitions" , "New, Control_Revit_New"
  • Jrn.Edit "Modal , New Workset , Dialog_Revit_NewPartition" _
    , "Control_Revit_NewPartitionName" , "ReplaceContents" , "500 00000 Technology"
  • Jrn.PushButton "Modal , New Workset , Dialog_Revit_NewPartition" , "OK, IDOK
  • Jrn.PushButton "Modal , Worksets , Dialog_Revit_Partitions" , "New, Control_Revit_New"
  • Jrn.Edit "Modal , New Workset , Dialog_Revit_NewPartition" _
    , "Control_Revit_NewPartitionName" , "ReplaceContents" , "600 00000 Services"
  • Jrn.PushButton "Modal , New Workset , Dialog_Revit_NewPartition" , "OK, IDOK

¬еро€тно, можно будет оптимизировать строки —оздани€ наборов путем применени€ цикла и массива значений наборов. ќстаетс€ всего несколько команд до завершени€ редактировани€ Ц это —ортировка наборов по имени, выбор јктивного набора (Active Workset) и установка ѕодавлени€ графики неактивных наборов (Gray Inactive Workset Graphics).

  • Jrn.Gris УControl; Modal , Worksets , Dialog_Revit_Partitions; Control_Revit_Partition" _
    , "MoveCurrentCell" , "HeaderRow" , "Name"
  • Jrn.ComboBox "Modal , Worksets , Dialog_Revit_Partitions" _
    , "Control_Revit_ActivePartitionCombo" , "SelEndOk" , "000 00240 Layout"
  • Jrn.ComboBox "Modal , Worksets , Dialog_Revit_Partitions" _
    , "Control_Revit_ActivePartitionCombo" , "Select" , "000 00240 Layout"
  • Jrn.CheckBox "Modal , Worksets , Dialog_Revit_Partitions" , "Gray Inactive Workset Graphics _
    , Control_Revit_GrayInactiveWorksetGraphics" , True

ќбратите внимание на то, что команда выбора активного набора (Active Workset) дублируетс€ с различными операторами "SelEndOk" и "Select", соответственно одна из них может быть лишней, в чем убедимс€ позже. ѕосле закрыти€ диалога –абочих наборов (Worksets), об€зательно должна следовать команда успешного завершени€ “ранзакции (Transaction) дл€ подтверждени€ действий:

  • Jrn.PushButton "Modal , Worksets , Dialog_Revit_Partitions" , "OK, IDOK"
  • Jrn.Data "Transaction Successful" , "Worksets"

¬ заключении работы скрипта, осуществл€етс€ повторное открытие диалога –абочих наборов (Worksets) дл€ проверки результата:

  • Jrn.Command "StatusBar" , "Workset control , ID_SETTINGS_PARTITIONS"

ќставшиес€ строки закрыти€ проекта без сохранени€ и все комментарии можно смело удалить, а также закомментировать лишнюю строку выбора активного набора, например, с оператором "SelEndOk". ¬се, сохран€ем журнал и приступаем к проверке его работоспособности.

3. ¬ыполнение

ќткроем ѕроводник, перейдем в месторасположение файла нашего журнала и перетащим его на значок Autodesk Revit на –абочем столе.  ак результат, будет запущенное приложение и выполнение команд создани€ –абочих наборов (Worksets). ¬ случае возникновени€ неполадок, по€витс€ окно ќшибки журнала (Journal Error) с предложением перейти в »нтерактивный режим (Enter interactive mode). —оответственно закрываем Revit без сохранени€, возвращаемс€ в ѕроводник и открываем новый файл журнала, например, journal.0001.txt, который по€вилс€ в ходе выполнени€ нашего в той же директории. ¬ нем будет запись всех действий в ходе выполнени€ журнала до момента сбо€, потому листаем почти в самый конец, ищем строку с комментарием причины ошибки и ссылки на строку ее расположени€, например:
  • С 1:< Execution did not correspond to recorded journal sequence.
  • С At line number 31 of source journal.

¬ данном случае сообщаетс€, что выполнение не соответствует требуемой последовательности. ќткрываем наш журнал дл€ редактировани€, находим в нем строку 31 и способом Ђнаучного тыкаї устран€ем причину ошибки, в моем случае отсутствует треть€ строка подтверждени€ создани€ рабочего набора "600 00000 Services". ¬новь сохран€ем файл журнала, но, прежде чем его воспроизвести, попробуем немного оптимизировать.

4. ќптимизаци€

ќписыва€ редактирование, € упоминал, что журналы Autodesk Revit записываютс€ в формате vbScript, соответственно можно произвести его оптимизацию. Ќачнем с создани€ переменных Ќаименовани€ и –асположени€ Ўаблона проекта (Project Template) дл€ создани€ –абочих наборов (Worksets). ƒл€ этого после строк объ€влени€ и назначени€ переменной Jrn, запишем свои:
  • Dim askFileName
  • askFileName = "ASK 000 00000 General.rte"
  • Dim askFileLocation
  • askFileLocation = "L:\01 Libraries\Autodesk\Revit\2016\ASK\"

“ак как в скрипте требуютс€ отдельные значени€ имени Ўаблона проекта и его ѕолного пути, создадим переменную askFilePath составл€емую из значений askFileLocation и askFileName:

  • Dim askFilePath
  • askFilePath = askFileLocation & askFileName

ќчень советую перед подстановкой переменных в соответствующую строку команды, сделать ее исходную копию и закомментировать на вс€кий случай:

  • С Jrn.Data "FileDialog" _
    , "IDOK" , "L:\01 Libraries\Autodesk\Revit\2016\ASK\ASK 000 00000 General.rte", "rte" _
    , "ASK 000 00000 General.rte", "ASK 000 00000 General.rte"
  • Jrn.Data "FileDialog" , "IDOK", askFilePath, "rte" , askFileName, askFileName

ѕеред сохранением можем еще закомментировать строки ќткрыти€ и «акрыти€ главного меню дл€ проверки их полезности. ≈сли все сделано правильно, выполнение журнала должно пройти без ошибок и можно попробовать применить функцию vbScript, например, ћассив (Array) с целью хранени€ всех наименований –абочих наборов (Worksets) в одной строке.

ƒл€ начала сделаем поиск в сети »нтернет доступной справочной документации по vbScript, лично советую Language Reference на сайте MSDN (Microsoft Developer Network). ¬ разделе ‘ункции (Functions) найдем информацию по ћассиву (Array), скопируем пример кода и вставим в журнал после строк предыдущих переменных. ¬пишем название переменной askWorksetArray, которой после присвоим функцию ћассива (Array) со значени€ми наименований всех –абочих наборов (Worksets):

  • Dim askWorksetArray
  • askWorksetArray = Array("000 00240 Layout","100 00000 Site","200 00000 Massing" _
    ,"300 00000 Structure","400 00000 Architecture","500 00000 Technology" _
    ,"600 00000 Services")

ƒалее сделаем замену значений наименований наборов во всех строках журнала, где они используютс€, на переменную askWorksetArray(n) с указанием в скобках позиции соответствующего значени€ в массиве, начина€ с нул€. Ќапример:

  • Jrn.Edit "Modal , Worksharing , Dialog_Revit_PartitionsEnable" _
    , "Control_Revit_PartitionsEnableLevelsGridsViewsEdit" , "ReplaceContents" _
    , askWorksetArray(0)
  • Jrn.Edit "Modal , Worksharing , Dialog_Revit_PartitionsEnable" _
    , "Control_Revit_PartitionsEnableOthersEdit" , "ReplaceContents" , askWorksetArray(1)
  • Е
  • Jrn.Edit "Modal , New Workset , Dialog_Revit_NewPartition" _
    , "Control_Revit_NewPartitionName" , "ReplaceContents" , askWorksetArray(2)
  • Е
  • Jrn.ComboBox "Modal , Worksets , Dialog_Revit_Partitions" _
    , "Control_Revit_ActivePartitionCombo" , "Select" , askWorksetArray(0)

ѕрежде чем запустим журнал, избавимс€ от лишних закомментированных ранее строк, а также добавим несколько своих комментариев дл€ €сности и улучшени€ читаемости. —охран€ем и выполн€ем журнал, в случае успеха Ц продолжаем оптимизацию, в ином случае Ц смотрим свежие журналы на предмет информации об ошибках и устран€ем их.

Revit журналы

ѕопробуем применить цикл ForЕNext дл€ возможности создани€ любого количества наборов из массива, но пока не менее трех. ƒл€ этого потребует функци€ определени€ длинны массива uBound() и переменна€ дл€ ее хранени€:
  • Dim askWorksetCount
  • askWorksetCount = uBound(askWorksetArray)

ѕрежде чем существенно править строки, насто€тельно советую сохранить файл журнала и сделать его резервную копию. ѕосле удал€ем все повтор€емые строки создани€ дополнительных наборов кроме первых, которые впишем в цикл. ѕри этом длина цикла должна быть на два значени€ меньше, так как на момент его выполнени€ два набора уже будут созданы, а сама переменна€ askWorksetArray должна начинатьс€ со второй позиции:

  • For i = 0 to askWorksetCount - 2
  • Jrn.PushButton "Modal , Worksets , Dialog_Revit_Partitions" , "New, Control_Revit_New"
  • Jrn.Edit "Modal , New Workset , Dialog_Revit_NewPartition" _
    , "Control_Revit_NewPartitionName" , "ReplaceContents" , askWorksetArray(i +2)
  • Jrn.PushButton "Modal , New Workset , Dialog_Revit_NewPartition" , "OK, IDOK"
  • Next

≈стественно можно сразу начать цикл с требуемой позиции и не заниматьс€ дополнительными вычислени€ми:

  • For i = 2 to askWorksetCount

—охран€ем и провер€ем работоспособность оптимизации циклом путем выполнени€ журнала. ѕосле можем попробовать добавить несколько новых –абочих наборов (Worksets) к переменной askWorksetArray, сохранить и вновь запустить журнал.

5. «аключение

“аким образом мы получили простейшую автоматизацию по созданию наборов в новых проектах, которую можно еще оптимизировать услови€ми IfЕElse дл€ создани€ уже минимум двух –абочих наборов (Worksets) вместо трех, процедурами Sub с целью вынесени€ повтор€емых действий за пределы основного кода дл€ удобства их редактировани€. “акже журнал можно дополнить командами загрузки требуемых семейств, осуществлени€ настроек и создани€ видов, что позволит использовать его еще более эффективно.

√отовый журнал можете загрузить по ссылке, а также просмотреть видеоуроки (см. ниже, длительность Ч23 минуты). ѕользуйтесь и реализуйтесь!



„итайте также:


¬акансии:

јктуальное обсуждение

RSS-лента комментариев

ƒавид Ћевин
ƒавид Ћевин
ќт редактора: ќ некоторых принципах и вкусах редакции портала isicad.ru
ѕроект ЂЌародное —јѕ–-интервьюї

—лучайна€ стать€:

C3D Labs представл€ет C3D Toolkit 2017 — јркадий  амнев, менеджер по маркетингу в компании C3D Labs (19 ма€ 2017)
isicad Top 10

—амые попул€рные материалы

   ‘орумы isicad:

isicad-2010 isicad-2008
isicad-2006 isicad-2004

ќ проекте

ѕриглашаем публиковать на сайте isicad.ru новости и пресс-релизы о новых решени€х и продуктах, о проводимых меропри€ти€х и другую информацию. јдрес дл€ корреспонденции - info@isicad.ru

ѕроект isicad нацелен на

  • укрепление контактов между разработчиками, поставщиками и потребител€ми промышленных решений в област€х PLM и ERP...
ѕодробнее

»нформаци€ дл€ рекламодателей


¬се права защищены. © 2004-2017 √руппа компаний «Ћ≈ƒј—»

ѕерепечатка материалов сайта допускаетс€ с согласи€ редакции, ссылка на isicad.ru об€зательна.
¬ы можете обратитьс€ к нам по адресу info@isicad.ru.