Сергей Кривой

Ответы в темах

Просмотр 5 сообщений - с 1 по 5 (из 5 всего)
  • Автор
    Сообщения
  • #4048 Score: 1
    Сергей Кривой
    Модератор
    14 pts

    Искал *.chm для Revit 2017, в итоге пришлось установить SDK. Вот, может кому понадобится:

    RevitAPI (2017).chm

    #4430 Score: 1
    Сергей Кривой
    Модератор
    14 pts

    Здравствуйте, Анатолий.

    У вас второй цикл проверяет все элементы списка “c”, каждый раз перезаписывая переменную “d”. Таким образом, значению этой переменной в случае прохождения второго цикла всегда соответствует последний элемент списка “c” (в вашем случае 1, т. е. “d” равно “Третий”).

    Чтобы при значении 0 в первом списке проверялся элемент с соответствующим индексом из второго списка, можно применить один и следующих способов:

    1. Назначить дополнительную переменную, в которую записывать текущий индекс.
    2. Использовать функцию enumerate (возвращает пары индекса и элемента из списка).
    3. Использовать цикл while вместо for.

    В любом из предложенных вариантов второй цикл в теле первого не требуется.

    #4444 Score: 1
    Сергей Кривой
    Модератор
    14 pts

    Ещё один онлайн-ресурс по Revit API: http://www.revitapidocs.com/

    Сразу 2015, 2016 и 2017 версии. Также потихоньку появляются примеры использования на Python, что не может не радовать.

    #4460 Score: 1
    Сергей Кривой
    Модератор
    14 pts

    Здравствуйте, Юлия.

    None в питоне обозначает отсутствие элемента (выводится как нуль или null). В вашем случае элемент присутствует, и этот элемент — пустой список. Проверить, что список пустой можно, взяв количество его элементов:

    if a[13][1].Count == 0:
    b = 10

    #7306 Score: 1
    Сергей Кривой
    Модератор
    14 pts

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

    Можно попробовать примерно так:

    # Загрузка библиотек
    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 = 'Всё нормально'
Просмотр 5 сообщений - с 1 по 5 (из 5 всего)