Создание элементов ...
 
Поделиться:
Уведомления
Очистить все

[Решено] Создание элементов в модели с помощью Python

4 Сообщения
2 Пользователи
0 Лайки
405 Просмотры
0
Автор темы

Не получается разобраться как с помощью кода Python в Dynamo создать экземпляр семейства в модели, прежде всего интересует загружаемые семейства. Поделитесь пожалуйста примером такого кода или скрипта. 

2 Ответов
0
Автор темы

Разобрался...

"""

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. Всем спасибо за помощь, не знаю, чтобы без вас делал )

 

Это сообщение было изменено 10 месяцев назад от TAI
selbultekov selbultekov 01.08.2023 06:26

@tai

А есть у вас картинка скрипта dynamo? Тут только питон и проверяет он только одно семейство по названию "Черная сталь_ГОСТ 17375-2001_Отвод крутоизогнутый", ну или другое забитое значение. Какое-то маленькое решение задачи.

Причем вставляя ее в 0 координат.

В дописке со скриптом уже интереснее, но мне тоже не ясно как там координаты задаются семействам.

Стандартным динамо кстати вот вставка семейства как выглядит

Screenshot 1

 

0
Автор темы

Данный код искал для реализации скрипта, который бы позволял добавлять в спецификацию элементы для окожушивания труб, фиттингов, арматуры расположенные на кровле (снаружи), т.к. как в ревите нет такого инструмента. Сделал семейство маленького шарика, скрипт расставляет его экземпляры по центру семейств для которых нужен кожух и записывает в него данные из этих условно родительских семейств. В данном случае скрипт выглядит следующим образом - см. скриншот )), врядли эта картинка вам поможет. Стандартными нодами стараюсь не пользоваться т.к. скрипт с ними долго обрабатывается, да и в питоне руки развязаны, можно реализовать самый витиеватый сценарий. 

Код представленный выше немного доработал, динамо при последующим запуске выдавал ошибку, мол symbol не активный, пришлось в тело транзакции добавить строки:

if not symbol.IsActive:
    symbol.Activate()

image
selbultekov selbultekov 01.08.2023 12:59

@tai да, так понятнее у вас вставляется не в точку 0, а в точку нуля другого семейства. Я с питоном не на ты, чуть лучше тяну лапшу в dynamo

для вашей задачи подходит, но что-бы изменить название нужно лезть в питон-код. Такой себе вариант по моему мнению, можно и ввести пару импутов на вход.

видел кстати скрипт где-то, который создает семейства заместо других семейств (его стопроцентно можно было бы переделать на вставку семейств рядом). Он бы вам помог, но теперь уже вам не нужно ))

Ответ