Синтаксис RevitAPI

Главная Форумы Задать вопрос Синтаксис RevitAPI

В этой теме 2 ответа, 2 участника, последнее обновление  ИваСерж 2 нед. назад.

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)
  • Автор
    Сообщения
  • #7168 Score: 0

    Семен
    Участник
    1 pt

    Добрый день, объясните, пожалуйста, синтаксис и логику строчки 22 (скрипт из коробки с ревитом “Выбрать все маркируемые…”). Пытаюсь понять, как питоном выбирать объекты ревита и вообще пользоваться методами. Может, где то можно почитать про это дело? Revit API 2016 Guide открыл и испугался. Куда там глядеть?

    import clr
    clr.AddReference("RevitAPI")
    clr.AddReference("RevitAPIUI")
    import Autodesk
    from Autodesk.Revit.UI import *
    from Autodesk.Revit.DB import *
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    clr.AddReference("RevitNodes")
    import Revit
    # clr.ImportExtensions(Revit.Elements)
    from System.Collections.Generic import *
    elems = UnwrapElement(IN[0])
    elemIds = []
    for elem in elems:
    elemIds.append(elem.Id)
    uidoc = DocumentManager.Instance.CurrentUIDocument
    uidoc.Selection.SetElementIds(List[ElementId](elemIds))
    # Just for fun - give it to the output!
    OUT = elemIds

    #7171 Score: 0

    ИваСерж
    Модератор
    46 pts

    “Калька” с си-шарпа…
    Пишу своими, а не словами из учебника.
    Си – язык требующий четкого определения переменных. Инт, Дабл, Стринг и т.п.
    Питон – язык без “формализации” данных и может запросто проводить действия без предопределения переменных.

    В данном случае List [ElementId](elemIds)
    Означает, что в функцию подается список коллекция  List в котором находятся объекты типа [ElementId]  , а название списска elemIds

    В Питоне достаточно написать
    uidoc.Selection.SetElementIds(elemIds)

    К сожалению, тут почему-то скрипт не принимает питоновский Лист.
    Этот вопрос обсуждался в англоязычном форуме
    https://forum.dynamobim.com/t/how-to-create-an-icollection-to-work-with-revit-api/4417

    Вывод:  оказывается в ревите есть комманды, которые “едят” не родные списки, а объекты из .Net – коллецкии.
    Для создания таковых и используется List [ElementId].
    Спасибо за хороший вопрос. Пришлось посидеть, почитать.

    #7172 Score: 0

    ИваСерж
    Модератор
    46 pts

    По поводу того, как пользоваться методами – надо смотреть видео Хасана. Там все подробно и доступно.
    Немножко опыта и смыкалки и все становится понятно.
    На пальцах для себя объясняю так:
    Есть “объект” – у объекта есть свойства (описательные характеристики), и методы – что можно сделать с объектом.
    Через точку “.” можно получать эту информацию или же делать c объектом какое-то действие.
    Часто свойством объекта является другой объект. Например, для экземпляра семейства это точка вставки.

    Комманда вытягивающая координату Х инстанса выглядит так:
    OUT = UnwrapElement(IN[0]).Location.Point.X
    1. UnwrapElement(IN[0]) – входящий элемент разворачиваем. Фактически это Ревитовский объект, в который добавлены методы из Динамо. Для работы с “чистым” РевитАпи нам нужен “чистый” ревитовский объект.
    2. У Инстанса есть метод Location – для одних объектов это может быть точка вставки, для других (например стен) – это будет кривая (линия или другой линейный объект).
    3. Для семейства мне нужна точка. Point
    4. Из полученной точки я спокойно получаю любые координаты. В данном случае Х

Просмотр 3 сообщений - с 1 по 3 (из 3 всего)

Для ответа в этой теме необходимо авторизоваться.