Задать изоляцию трубе через dynamo + python

Главная Форумы Задать вопрос Задать изоляцию трубе через dynamo + python

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Автор
    Сообщения
  • #10557 Score: 0
    qwe
    Участник

    Коллеги, добрый день.

    Задача:

    В зависимости от типа и диаметра трубы задавать изоляцию элементу (трубе).

    Проблем с написанием не возникло бы, если данные параметры можно было бы менять в самой трубе, но они заблокированы и надо сопоставлять конкретную трубу и изоляцию.

    Прошу помощи.

     

    #10559 Score: 0
    txt
    Модератор
    86 pts

    У pipeInsulation есть свойство hostElementId

    #10560 Score: 0
    qwe
    Участник

    Спасибо.

    Просто на данный момент проблем записать толщину или тип изоляции в параметры  трубы нет, но вот применить к трубе изоляцию не получается.

    Часть кода:

    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’)” эту часть, но как не знаю.

     

    #10561 Score: 0
    qwe
    Участник

    Возможно кто то в курсе как исправить 3 строку:

    for el in ST:

    if el.GetParameterValueByName(“Диаметр”) <= 15:
    Plumbing.PipeInsulation.Create(doc,el.Id,1,19)

    Ошибка на 3 элементе (выделил жирным), пишет что введено число, а не Id изоляции, но при вводе точного id изоляции ошибка таже.

     

    #10562 Score: 0
    txt
    Модератор
    86 pts

    задаете Id трубы и Id типа изоляции

    #10563 Score: 0
    qwe
    Участник

    <>

    блин, как модер случайно удалил запись.
    IvaSerge

    #10566 Score: 0
    ИваСерж
    Хранитель
    133 pts

    Если прописать id изоляции то выдает ошибку.

    Привет. А что именно ты “прописываешь”? и где взял этот айдишник?
    Предполагаю, откопал Лукапом и вписываешь как стринг или инт?
    Как ни странно, но этому методу надо скармливать объект ElementId.

    т.е. из полученного вручную айдишника надо ещё сделать этот елементАйди.
    Ревитапи в помощь. Комманда ElementId(Int32) создаёт нужный нам объект.
    my_id = int(111111111)
    my_elemnetid = ElementId(my_id)

    Надеюсь, идея понятна

    #10568 Score: 0
    qwe
    Участник

    ИваСерж, большое спасибо, заработало.

    Файл выкладываю по ссылке https://cloud.mail.ru/public/KCD7%2FoHuiEoGyJ

    Прошу дальнейшей помощи:

    1. Каким образом в цикл for (выделил зеленым) возможно встроить проверку по диаметру трубы с условием, например если d>50 то ставь изоляцию толщиной 32 мм. По условию i.getelementparameter(”Диаметер”) выдает ошибку , а при использовании i.lookupParameter(“Диаметр”).AsDouble() не проверяет условие и выдает все элементы
    2. Каким образом в цикл for (выделил зеленым) возможно встроить проверку по диаметру трубы с условием, например если d>50 то ставь изоляцию толщиной 32 мм. По условию i.getelementparameter(”Диаметер”) выдает ошибку , а при использовании i.lookupParameter(“Диаметр”).AsDouble() не проверяет условие и выдает все элементы
    3. Как из Python узнать TypeId? family_type_id = family_instance.GetTypeId() Понимаю что надо переписать family_instance на что то другое но знаний не хватает

    Спасибо за помощь.

     

    #10571 Score: 1
    ИваСерж
    Хранитель
    133 pts

    Код по ссылке.

    https://pastebin.com/kUaJxR8B
    Никакие внешние подключения теперь не нужны.
    Всё работает внутри самого питона.
    Трубы получаем коллектором.
    Тип изоляции можно задать текстом
    insulation_name = “ИМЯЛЮБИМОЕТВОЁ”

    добавил пару полезных функций,
    сделал нормальный цикл,
    заменил ненужный трай-эксепт на проверку наличия изоляции у трубы,
    в блоке if можно назначать толщину изоляции.

    #10572 Score: 0
    qwe
    Участник

    ИваСерж, огромное спасибо!!

     

    #10573 Score: 0
    qwe
    Участник

    ИваСерж,

    Еще раз спасибо за скрипт, все работает , единственное исправил небольшую опечатку: вместо insulation_id вставил ins_tp.Id

    Можете подсказать еще момент: как из Python удалить изоляцию на трубопроводах?

    #10574 Score: 0
    ИваСерж
    Хранитель
    133 pts

    Опечаток нет. С таким изменением не согласен.
    в цикле итерируемый элемент ins_tp списка всех изоляций.
    Если условие поиска по имени не будет выполнено, то вместо пустого значения,
    он примет значение “случайного” последнего элемента.
    А это, в свою очередь, приведёт к ошибкам в проекте (багам).
    Мой принцип – лучше программа выбьет ошибку, чем выполнится с неправильным и неожидаемым результатом.
    Для этого введена дополнительная переменная insulation_Id.
    Ошибка будет только в том случае, если изоляция с именем “Phenolschaum 25mm” не найдена (по коду).
    Ну дак замени название на нужную тебе изоляцию.

    Удаление стандартное
    doc.Delete(ids)

    #10575 Score: 0
    qwe
    Участник

    Спасибо!

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

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Для ответа в этой теме необходимо авторизоваться.