Порассуждаем о "динамическом" взаимодействии питона с ревитом
Главная › Форумы › Python › Помогите с питон кодом › Порассуждаем о "динамическом" взаимодействии питона с ревитом
- В этой теме 26 ответов, 5 участников, последнее обновление 8 лет, 10 месяцев назад сделано tuuletin.
-
АвторСообщения
-
Привет, друзья,
хочется порассуждать о возможности реализации “динамического” взаимодействия питона с ревитом, назовём это, в “рамках одной транзакции” (?).То есть, я хотел бы:
1. Запустить скрипт dynamo/python.
2. Скрипт ожидает-предполагает построение линии (например).
3. Ставлю первую точку на виде, потом вторую. Координаты точек (будь то координаты в системе координат относительно вида, или координаты из модели = нодSelect Point on Face
) забираются в скрипт.
4. Происходит построение линии из питона.Пока что это реализуемо, например, двумя нодами
Select Point on Face
, но это совершенно не то уже… Есть какие-нибудь идеи?Привет всем, нет, немного то, что я хотел бы!
На видео Legantmar уже поближе тому, что я хотел бы. Только, чтобы точки передавались ручным запусканием скрипта, а скрипт бы был запущен и ожидал получения этих точек (чтобы исключить каждый раз ручной пуск скрипта). Допустим, получив бы 5 этих адаптивных точек, он бы выключался.
Сейчас накопал, что естьSelection Class
, вроде бы там можно покрутить так, как я хотел бы…
Но не получается получитьActiveUIDocument
изRevitAPIUI
.Делаю вот так вот:
import clr clr.AddReference("RevitAPI") import Autodesk from Autodesk.Revit.DB import * clr.AddReference("RevitAPIUI") import Autodesk from Autodesk.Revit.UI import * from Autodesk.Revit.UI.Selection import * doc = DocumentManager.Instance.CurrentDBDocument uiapp = Autodesk.Revit.UI.UIApplication.ActiveUIDocument OUT = [uiapp, doc]
И получается вот это:
Как получить этот
UIApplication.ActiveUIDocument
?Да и из любого элемента из
RevitAPIUI
получаетсяIronPython.Runtime.Types.ReflectedProperty
.
Почему не возвращается объекты как автокадовские?>Только, чтобы точки передавались ручным запусканием скрипта, а скрипт бы был запущен и ожидал получения
к сожалению, это невозможно (есть хитрый способ, но я не скажу) (ибо ревит сильно тупит и зависает)
конкретно в твоем случае, после последней точки нужно нажимать Esc – чтобы “отпустить” ревитp.s. по поводу второй части вопроса, этот UI.UIApplication.ActiveUIDocument сильно разнится в 2015 и 2016 версии )))
посмотри вот это видео (концовку)(есть хитрый способ, но я не скажу) (ибо ревит сильно тупит и зависает)
А что за способ? Может, я бы глянул? Он ведь не запатентован? :)
Если пустить два
PickPoint()
подряд, то получается именно то, что мне пока что нужно! Идеально!pt1 = uidoc.Selection.PickPoint()
pt2 = uidoc.Selection.PickPoint()Спасибо, ребятушки.
А почему не работает
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument ids = uidoc.Selection.GetElementIds OUT = ids
?
Возвращает
IronPython.Runtime.Types.BuiltinFunction
.какая версия ревит?
вот эту тему уже видел?
для Revit 2016:
ids=uidoc.Selection.GetElementIds() — получает Id номера всех выделенных элементовдалее через doc.GetElements(ids) — можно получить сами элементы
uidoc.Selection.SetElementIds(ids) — выделяет элементы по их Id
import clr
clr.AddReference(“RevitAPI”)
import Autodesk
from Autodesk.Revit.DB import *clr.AddReference(“RevitAPIUI”)
import Autodesk
from Autodesk.Revit.UI import *
from Autodesk.Revit.UI.Selection import *clr.AddReference(“RevitServices”)
import RevitServices
from RevitServices.Persistence import DocumentManager
#from RevitServices.Transactions import TransactionManager
#from System.Collections.Generic import *reset = IN[0]
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = Autodesk.Revit.UI.UIApplication.ActiveUIDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
ids = uidoc.Selection.GetElementIds()
OUT = idsпонаписал кучу лишнего и никто меня не поправил) вот так получаем выбранные в Ревит элементы
import clr
clr.AddReference(“RevitServices”)
import RevitServices
from RevitServices.Persistence import DocumentManager
reset = IN[0]uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
ids = uidoc.Selection.GetElementIds()OUT = ids
а это код, который получает сами элементы, выделенные в Ревит, как одиночные, так и кучкой
import clr
clr.AddReference(“RevitServices”)
clr.AddReference(“RevitAPI”)
from Autodesk.Revit.DB import *
import RevitServices
from RevitServices.Persistence import DocumentManager
from Autodesk.Revit.ApplicationServices import Applicationreset = IN[0]
doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
ids = uidoc.Selection.GetElementIds()idd = [str(i) for i in ids]
if isinstance(idd, list) == True:
elems = [doc.GetElement(ElementId(int(i))) for i in idd]
else:
elems = doc.GetElement(ElementId(int(idd)))OUT = elems
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.