Задать изоляцию трубе через dynamo + python
Главная › Форумы › Задать вопрос › Задать изоляцию трубе через dynamo + python
- В этой теме 12 ответов, 3 участника, последнее обновление 3 года назад сделано
qwe.
-
АвторСообщения
-
Коллеги, добрый день.
Задача:
В зависимости от типа и диаметра трубы задавать изоляцию элементу (трубе).
Проблем с написанием не возникло бы, если данные параметры можно было бы менять в самой трубе, но они заблокированы и надо сопоставлять конкретную трубу и изоляцию.
Прошу помощи.
У pipeInsulation есть свойство hostElementId
Спасибо.
Просто на данный момент проблем записать толщину или тип изоляции в параметры трубы нет, но вот применить к трубе изоляцию не получается.
Часть кода:
for el in ST:
if el.GetParameterValueByName(“Диаметр”) <= 15:
el.SetParameterByName(‘MC Insulation Code’, ‘ST 13’)elif el.GetParameterValueByName(“Диаметр”) <= 20:
el.SetParameterByName(‘MC Insulation Code’, ‘ST 19’)elif el.GetParameterValueByName(“Диаметр”) <= 32:
el.SetParameterByName(‘MC Insulation Code’, ‘ST 255’)else:
el.SetParameterByName(‘MC Insulation Code’, ‘ST 40’)Понимаю что надо переписать “el.SetParameterByName(‘MC Insulation Code’, ‘ST 40’)” эту часть, но как не знаю.
Возможно кто то в курсе как исправить 3 строку:
for el in ST:
if el.GetParameterValueByName(“Диаметр”) <= 15:
Plumbing.PipeInsulation.Create(doc,el.Id,1,19)Ошибка на 3 элементе (выделил жирным), пишет что введено число, а не Id изоляции, но при вводе точного id изоляции ошибка таже.
задаете Id трубы и Id типа изоляции
<>
блин, как модер случайно удалил запись.
IvaSergeЕсли прописать id изоляции то выдает ошибку.
Привет. А что именно ты “прописываешь”? и где взял этот айдишник?
Предполагаю, откопал Лукапом и вписываешь как стринг или инт?
Как ни странно, но этому методу надо скармливать объект ElementId.т.е. из полученного вручную айдишника надо ещё сделать этот елементАйди.
Ревитапи в помощь. Комманда ElementId(Int32) создаёт нужный нам объект.
my_id = int(111111111)
my_elemnetid = ElementId(my_id)Надеюсь, идея понятна
ИваСерж, большое спасибо, заработало.
Файл выкладываю по ссылке https://cloud.mail.ru/public/KCD7%2FoHuiEoGyJ
Прошу дальнейшей помощи:
- Каким образом в цикл for (выделил зеленым) возможно встроить проверку по диаметру трубы с условием, например если d>50 то ставь изоляцию толщиной 32 мм. По условию i.getelementparameter(”Диаметер”) выдает ошибку , а при использовании i.lookupParameter(“Диаметр”).AsDouble() не проверяет условие и выдает все элементы
- Каким образом в цикл for (выделил зеленым) возможно встроить проверку по диаметру трубы с условием, например если d>50 то ставь изоляцию толщиной 32 мм. По условию i.getelementparameter(”Диаметер”) выдает ошибку , а при использовании i.lookupParameter(“Диаметр”).AsDouble() не проверяет условие и выдает все элементы
- Как из Python узнать TypeId? family_type_id = family_instance.GetTypeId() Понимаю что надо переписать family_instance на что то другое но знаний не хватает
Спасибо за помощь.
Код по ссылке.
https://pastebin.com/kUaJxR8B
Никакие внешние подключения теперь не нужны.
Всё работает внутри самого питона.
Трубы получаем коллектором.
Тип изоляции можно задать текстом
insulation_name = “ИМЯЛЮБИМОЕТВОЁ”добавил пару полезных функций,
сделал нормальный цикл,
заменил ненужный трай-эксепт на проверку наличия изоляции у трубы,
в блоке if можно назначать толщину изоляции.ИваСерж,
Еще раз спасибо за скрипт, все работает , единственное исправил небольшую опечатку: вместо insulation_id вставил ins_tp.Id
Можете подсказать еще момент: как из Python удалить изоляцию на трубопроводах?
Опечаток нет. С таким изменением не согласен.
в цикле итерируемый элемент ins_tp списка всех изоляций.
Если условие поиска по имени не будет выполнено, то вместо пустого значения,
он примет значение “случайного” последнего элемента.
А это, в свою очередь, приведёт к ошибкам в проекте (багам).
Мой принцип – лучше программа выбьет ошибку, чем выполнится с неправильным и неожидаемым результатом.
Для этого введена дополнительная переменная insulation_Id.
Ошибка будет только в том случае, если изоляция с именем “Phenolschaum 25mm” не найдена (по коду).
Ну дак замени название на нужную тебе изоляцию.Удаление стандартное
doc.Delete(ids)Спасибо!
У меня почему то исходный код не работал, хотя я менял название изоляции на ту, что есть в проекте, возможно что то перепутал.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.