Сергей Кривой
Ответы в темах
-
АвторСообщения
-
Ещё один онлайн-ресурс по Revit API: http://www.revitapidocs.com/
Сразу 2015, 2016 и 2017 версии. Также потихоньку появляются примеры использования на Python, что не может не радовать.
Здравствуйте!
Можно попробовать примерно так:
# Загрузка библиотек import clr clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager clr.AddReference('RevitAPI') import Autodesk from Autodesk.Revit.DB import * # Определение текущего документа curdoc = DocumentManager.Instance.CurrentDBDocument uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument uiapp = DocumentManager.Instance.CurrentUIApplication app = uiapp.Application # Определение категорий categories = doc.Settings.Categories # Определение файла общих параметров file = app.OpenSharedParameterFile() # Опции сохранения файла optS = SaveAsOptions() optS.OverwriteExistingFile = True optS.MaximumBackups = 1 # На вход Python подаётся список файлов RVT и список параметров со всеми их свойствами files = IN[0] params = IN[1] # Функция для создания параметра # Подаём имя, группу, группирование, формат, видимость и нужные категории def paramCreate(_doc, _paramName, _paramGroup, _groupName, _paramType, _visible, _cats): group = file.Groups.get_Item(_groupName) if group == None: group = file.Groups.Create(_groupName) if not group.Definitions.Contains(group.Definitions.Item[_paramName]): opt = ExternalDefinitionCreationOptions(_paramName, _paramType) opt.Visible = _visible defin = group.Definitions.Create(opt) cats = app.Create.NewCategorySet() for cat in _cats: cats.Insert(categories.get_Item(BuiltInCategory.cat)) bind = app.Create.NewInstanceBinding(cats) _doc.ParameterBindings.Insert(defin, bind, _paramGroup) # Запускаем цикл по файлам RVT for file in files: doc = app.OpenDocumentFile(file) # Открытие транзакции TransactionManager.Instance.EnsureInTransaction(doc) # Для каждого RVT запускаем цикл по параметрам for param in params: paramCreate(doc, param[0], param[1], param[2], param[3], param[4], param[5]) # Закрытие транзакции TransactionManager.Instance.ForceCloseTransaction() doc.SaveAs(file, optS) doc.Close(0) OUT = 'Всё нормально'
Искал *.chm для Revit 2017, в итоге пришлось установить SDK. Вот, может кому понадобится:
Здравствуйте, Анатолий.
У вас второй цикл проверяет все элементы списка “c”, каждый раз перезаписывая переменную “d”. Таким образом, значению этой переменной в случае прохождения второго цикла всегда соответствует последний элемент списка “c” (в вашем случае 1, т. е. “d” равно “Третий”).
Чтобы при значении 0 в первом списке проверялся элемент с соответствующим индексом из второго списка, можно применить один и следующих способов:
- Назначить дополнительную переменную, в которую записывать текущий индекс.
- Использовать функцию enumerate (возвращает пары индекса и элемента из списка).
- Использовать цикл while вместо for.
В любом из предложенных вариантов второй цикл в теле первого не требуется.
-
АвторСообщения