Записи с меткой «Training»

Здравствуйте!

И снова конец года, и снова новый год… время не стоит на месте, но оно того стоит чтобы бежать впереди него). 2015 год был годом работы над ошибками и составлением планов на год грядущий. Это первый год за все время, в котором я практически не работал в новой (2016) версии Autodesk Revit и не выпустил общедоступных библиотек на его основе. Причина? Очередная разработка с “нуля” библиотек семейств и шаблонов, при том что предыдущая была не так давно – под 2014 версию, но с существенными изменениями и дополнениями под 2015. И все бы хорошо, пока не начал активно использовать автоматизацию процессов проектирования и управления библиотеками при помощи журналов, скриптов и Dynamo, которые потребовали наличия более стабильной русскоязычной локализации интерфейса Revit и особенно при переходе от версии к версии.

ASK News - JournalsASK News - Dynamo rooms

Стабильности, как “с моря погоды” — не дождешься, потому принял решение переходить на англоязычную версию, заодно исправить допущенные ошибки, провести оптимизацию классификатора данных и как следствие обновить BIM Стандарт, который писал для Беларуси. На классификации и застрял… так как она является основой всей разработки и требует особого внимания. Для начала пришлось создать в Microsoft Excel таблицы по составлению классификатора Assembly code, который определяет изначальные наименования данных (семейств, шаблонов, стилей, образцов, материалов и т.п.) с распределением их по Разработчикам, Разделами, Категориям. По сути он представляет собой новую редакцию уже существующей моей классификации, но с привязкой уже к параметру типа Код по классификатору (Assembly Code) вместо Группа модели (Model), что намного удобней в случае назначения. Далее приступил к разработке Keynote классификатора для распределения данных по Материалам, Форме, Использованию и прочим Конструктивным особенностям. Долго определялся с форматом его кодирования, а после ряда экспериментов — просто взял за основу 5 последних чисел из 8 Assembly code и добавил еще 8 (5 и 3). В итоге полный код любого изделия будет состоять из 13 знаков, чего вполне достаточно… хотя время еще покажет :).

ASK News - Assembly codeASK News - Keynote

Да, после публикации моего BIM Стандарта в общий доступ и обсуждения его в комментариях к статье на isicad.ru, не все пришли в восторг от кодировок в начале наименований и особенно с точки зрения практического использования, так как наименования получаются “тяжелыми” для восприятия обычными проектировщиками. С другой точки зрения и не только моей – ко всему можно привыкнуть и это вполне доказано на практике на протяжении уже более чем двух лет. Самое главное, что предложенная мной система позволяет эффективно управлять данными и автоматизировать процессы проектирования, а также банально не задумываться над изначальными наименованиями и существенно сокращает их длину, как например:

  • RUS 410 4400 Дверь — RA`OS-LT ГРС2 №000 (ГОСТ 24698-81) !.rfa
  • Дверь прямоугольная внешняя левосторонняя глухая распашная двустворчатая базовой формы по ГОСТ 24698-81 на основе стены общественной архитектуры России.rfa

59 знаков с пробелами против 153! Совпадение? Не думаю! Ну, а если кто-то сможет предложить более краткую и понятную систему классификации – будут только рад ее принять на вооружение ;). Единственное, пожалуй соглашусь с мнением редакции ресурса bim2b.ru в еженедельном обзоре BIM блогов: “… работать со стандартом Канивца могут только те, кого учил сам Канивец …“ – однозначно да, особенно в случае наиболее эффективного его внедрения в компании и кто же, как не сам автор лично об этом Вам расскажет :). По этому случаю с Нового 2016 года, открываем свой Авторизированный учебный центр Autodesk в Киеве, о чем будет соответствующая информация. По сему – рады будем помочь!

Планов – множество, рук – не хватает. Потому желаю Вам в Новом 2016 году — по больше хватающих рук для реализации себя и себе подобным, а планы – чтука переменчивая да и Обезьяна все сделает по-своему!

Реализуйтесь!

ASK News - Monkey

В жизни каждого ревитчика рано или поздно наступает момент обновления множества семейств и чаще всего наступает при переходе на новую версию или в случае внесения изменений, например, добавление параметров, обновление вложенных семейств… и это большая проблема. В связи с этим предлагаю Вам абсолютно доступное решение при помощи Журналов (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 и любуемся результатом, а если файлов будет много – сможете успеть сделать себе чашечку кофе, пошариться в интернете, поиграть в контрстрайк или просто отдохнуть, а лучше – вложить полученную экономию времени в изучение журналов и принципов работы с ними, чтобы когда-нибудь вернуть мне вложенную инвестицию времени в виде готовых решений ;). Ведь именно время – самое дороге, что у нас действительно есть и что нельзя купить ни за какие гроши.