Необходимо настроить выборку в dynamo 1.3 через ctrl (стандартные инструменты дают выбирать либо 1 шт либо областью выбора). Откопал в интернете работавший на момент написания код:
import Revit
clr.ImportExtensions(Revit.Elements)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistance import DocumentManager
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
sel=[]
elt=[]
sel=uidoc.Selection.Elements
for i in sel:
elt.append(i.ToDSType(False))
OUT=elt
Однако написан он был для 2015 ревита и выдает ошибку: не существует модуля с названием Revit. Как обратиться к этой библиотеке? Или какие варианты решения можете предложить?
Solved! Go to Solution.
Solved by architect.bim. Go to Solution.
В этом коде как минимум не хватает нескольких строчек. Могу предложить данный вариант:
import clr clr.AddReference("RevitAPIUI") from Autodesk.Revit.UI import * clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager doc = DocumentManager.Instance.CurrentDBDocument uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument clr.AddReference("RevitNodes") import Revit clr.ImportExtensions(Revit.Elements) def get_selected_elements(): """Return Selected Elements as a list[]. Returns empty list if no elements are selected. Usage: - Select 1 or more elements > selected_elements = get_selected_elements() > [] """ selection = uidoc.Selection selection_ids = selection.GetElementIds() elements = [] for element_id in selection_ids: elements.append(doc.GetElement(element_id)) return elements OUT = get_selected_elements()
Нашел рабочий нод tool.getrevitselection, из пакета SteamNodes. Под 2017 ревит Динамо 1.3v подошло
Его рабочий код:
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
# Import geometry conversion extension methods
clr.ImportExtensions(Revit.GeometryConversion)
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
sel=[]
elt=[]
# Start Transaction
TransactionManager.Instance.EnsureInTransaction(doc)
sel=uidoc.Selection.GetElementIds()
for i in sel:
elt.append(doc.GetElement(i).ToDSType(True))
# End Transaction
TransactionManager.Instance.TransactionTaskDone()
OUT=elt
Минус кода-выполняется 1 раз и все. Повторение при запуске можно создать с помощью нода forcechildreneval, пакет prorubimDScommonKit. Эт я тем кто будет искать по схожей тематике)
Can't find what you're looking for? Ask the community or share your knowledge.