Синтаксис RevitAPI
Главная › Форумы › Задать вопрос › Синтаксис RevitAPI
- В этой теме 2 ответа, 2 участника, последнее обновление 6 лет, 11 месяцев назад сделано ИваСерж.
-
АвторСообщения
-
Добрый день, объясните, пожалуйста, синтаксис и логику строчки 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“Калька” с си-шарпа…
Пишу своими, а не словами из учебника.
Си – язык требующий четкого определения переменных. Инт, Дабл, Стринг и т.п.
Питон – язык без “формализации” данных и может запросто проводить действия без предопределения переменных.В данном случае
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].
Спасибо за хороший вопрос. Пришлось посидеть, почитать.По поводу того, как пользоваться методами – надо смотреть видео Хасана. Там все подробно и доступно.
Немножко опыта и смыкалки и все становится понятно.
На пальцах для себя объясняю так:
Есть “объект” – у объекта есть свойства (описательные характеристики), и методы – что можно сделать с объектом.
Через точку “.” можно получать эту информацию или же делать c объектом какое-то действие.
Часто свойством объекта является другой объект. Например, для экземпляра семейства это точка вставки.Комманда вытягивающая координату Х инстанса выглядит так:
OUT = UnwrapElement(IN[0]).Location.Point.X
1. UnwrapElement(IN[0]) – входящий элемент разворачиваем. Фактически это Ревитовский объект, в который добавлены методы из Динамо. Для работы с “чистым” РевитАпи нам нужен “чистый” ревитовский объект.
2. У Инстанса есть метод Location – для одних объектов это может быть точка вставки, для других (например стен) – это будет кривая (линия или другой линейный объект).
3. Для семейства мне нужна точка. Point
4. Из полученной точки я спокойно получаю любые координаты. В данном случае Х -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.