Dynamo – Русский – только для чтения
Раздел для программистов и специалистов, использующих Dynamo
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Dynamo выборка через ctrl

3 REPLIES 3
SOLVED
Reply
Message 1 of 4
Anonymous
777 Views, 3 Replies

Dynamo выборка через ctrl

Необходимо настроить выборку в 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. Как обратиться к этой библиотеке? Или какие варианты решения можете предложить?

3 REPLIES 3
Message 2 of 4
architect.bim
in reply to: Anonymous

В этом коде как минимум не хватает нескольких строчек. Могу предложить данный вариант:

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()

Maxim Stepannikov | Architect, BIM Manager, Instructor
Message 3 of 4

Исходный код был взят отсюда, я просто немного его модифицировал под Dynamo, поскольку там для Revit Python Shell.


Maxim Stepannikov | Architect, BIM Manager, Instructor
Message 4 of 4
Anonymous
in reply to: architect.bim

Нашел рабочий нод 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.

Post to forums  

Autodesk Design & Make Report