Не получается разобраться как с помощью кода Python в Dynamo создать экземпляр семейства в модели, прежде всего интересует загружаемые семейства. Поделитесь пожалуйста примером такого кода или скрипта.
Разобрался...
"""
import clr
clr.AddReference('RevitServices')
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from Autodesk.Revit.ApplicationServices import Application
doc = DocumentManager.Instance.CurrentDBDocument
family_symbol_name = "Черная сталь_ГОСТ 17375-2001_Отвод крутоизогнутый"
family_symbol = None
collector = FilteredElementCollector(doc)
family_symbols = collector.OfClass(FamilySymbol).ToElements()
for symbol in family_symbols:
if symbol.FamilyName == family_symbol_name:
family_symbol = symbol
break
if family_symbol is None:
raise ValueError("Family symbol not found")
insertion_point = XYZ(0, 0, 0)
TransactionManager.Instance.EnsureInTransaction(doc)
element = doc.Create.NewFamilyInstance(insertion_point, family_symbol, Structure.StructuralType.NonStructural)
TransactionManager.Instance.TransactionTaskDone()
OUT = "Элемент успешно вставлен"
"""
Если элементы надо создавать списком, то транзакция будет следующим образом:
TransactionManager.Instance.EnsureInTransaction(doc)
for xyz, symbol in zip(list1, list2):
element = doc.Create.NewFamilyInstance(xyz, symbol, Structure.StructuralType.NonStructural)
TransactionManager.Instance.TransactionTaskDone()
P.S. Всем спасибо за помощь, не знаю, чтобы без вас делал )
А есть у вас картинка скрипта dynamo? Тут только питон и проверяет он только одно семейство по названию "Черная сталь_ГОСТ 17375-2001_Отвод крутоизогнутый", ну или другое забитое значение. Какое-то маленькое решение задачи.
Причем вставляя ее в 0 координат.
В дописке со скриптом уже интереснее, но мне тоже не ясно как там координаты задаются семействам.
Стандартным динамо кстати вот вставка семейства как выглядит
Данный код искал для реализации скрипта, который бы позволял добавлять в спецификацию элементы для окожушивания труб, фиттингов, арматуры расположенные на кровле (снаружи), т.к. как в ревите нет такого инструмента. Сделал семейство маленького шарика, скрипт расставляет его экземпляры по центру семейств для которых нужен кожух и записывает в него данные из этих условно родительских семейств. В данном случае скрипт выглядит следующим образом - см. скриншот )), врядли эта картинка вам поможет. Стандартными нодами стараюсь не пользоваться т.к. скрипт с ними долго обрабатывается, да и в питоне руки развязаны, можно реализовать самый витиеватый сценарий.
Код представленный выше немного доработал, динамо при последующим запуске выдавал ошибку, мол symbol не активный, пришлось в тело транзакции добавить строки:
if not symbol.IsActive:
symbol.Activate()
@tai да, так понятнее у вас вставляется не в точку 0, а в точку нуля другого семейства. Я с питоном не на ты, чуть лучше тяну лапшу в dynamo
для вашей задачи подходит, но что-бы изменить название нужно лезть в питон-код. Такой себе вариант по моему мнению, можно и ввести пару импутов на вход.
видел кстати скрипт где-то, который создает семейства заместо других семейств (его стопроцентно можно было бы переделать на вставку семейств рядом). Он бы вам помог, но теперь уже вам не нужно ))