PipingSystemType

Просмотр 15 сообщений - с 16 по 30 (из 33 всего)
  • Автор
    Сообщения
  • #5801 Score: 4
    Legantmar
    Хранитель
    474 pts

    Пару слов для понимания (пригодится другим)

    ВАРИАНТ 1
    OUT = UnwrapElement(IN[0]).Location.Curve.ToProtoType().StartPoint # Получение точки через преобразование к линии динамо
    В этой строчке разворачивается входной элемент UnwrapElement(IN[0]) (для доступа к основным свойствам).
    Через команду Location получаем расположение элемента (для протяженных элементов, таких как стены, трубы и пр. это будет линия (curve), для элементов типа колонна это будет точка)
    ToProtoType() – преобразуем в элемент динамо (в данном случае преобразовали линию ревита в линию динамо)
    и дальше по аналогии с одноименным нодом находим стартовую точку StartPoint.
    Можем получить, например, координату X, с помощью записи OUT = UnwrapElement(IN[0]).Location.Curve.ToProtoType().StartPoint.X – значение в мм.!!

    ВАРИАНТ 2

    OUT = UnwrapElement(IN[0]).Location.Curve.GetEndPoint(0) # Получение XYZ не путать с точкой при этом не нужны никакие библиотеки (revitapi подхватывается “на подсознательном уровне динамо”)
    Если нужно получить координату X, то запись будет вида OUT = UnwrapElement(IN[0]).Location.Curve.GetEndPoint(0).X
    Обращаю внимание, что размер будет в футах!! и для перевода  в мм нужно умножить на 304,8
    Т.е. окончательная запись будет: OUT = UnwrapElement(IN[0]).Location.Curve.GetEndPoint(0).X *304.8

    Приведенные выше варианты равнозначны (на форуме можно найти применение обоих).

    p.s. до недавнего времени я пользовался первым вариантом, т.к. все команды перекликаются с одноименными нодами динамо, что интуитивно понятнее, но если “уходить от динамо”, то использовать нужно второй вариант.

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

    как получить не ValueString , а Value ? когда пишу в конце вместо …AsValueString() – Value не получается

    #5817 Score: 2
    Legantmar
    Хранитель
    474 pts

    вот тебе 3 на выбор ))
    OUT = UnwrapElement(IN[0]).get_Parameter(BuiltInParameter.RBS_PIPE_DIAMETER_PARAM).AsDouble()*304.8
    OUT = UnwrapElement(IN[0]).LookupParameter(“Диаметр”).AsDouble()*304.8
    OUT = UnwrapElement(IN[0]).Diameter*304.8

    p.s. размеры в футах, поэтому 304.8 для перевода в мм

    Ну и бонус – можно использовать ноды динамо в питоне
    clr.AddReference(“RevitNodes”)
    from Revit.Elements import *
    OUT = IN[0].GetParameterValueByName(“Диаметр”)*304.8  # это запись из нода динамо

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

    Спасибо за развернутый ответ !

    Здесь только у LookupParameter есть минус – ищет первый попавшийся по названию параметр , то есть лучше применять при уникальном имени параметра. Если же есть параметры с одинаковыми именами , то лучше использовать get_Parameter

    Верно?)

    #5820 Score: 0
    Legantmar
    Хранитель
    474 pts

    даж не знаю..
    а почему у тебя два параметра? ))

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

    видимо когда-то создал общий параметр “Диаметр” для какого-то элемента для записи туда какого-то рассчитываемого параметра и/или чтобы вытащить нужные значения в спецификацию

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

    пытаюсь в питоне вытащить такое значение уровня, как в код блоке :

    в питоне:

    level=IN[0].get_Parameter(BuiltInParameter.RBS_START_LEVEL_PARAM).AsValueString()

    .AsValueString() и AsElementId() не дают значения как в ноде

    Так как необходимо задать далее SetParameter Value для базового уровня другого элемента, который принимает не вход не строки, ай ди или число , а вид, представленный на выходе нода (подчеркнуто)

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

    уже было написано ранее:

    вот результат как выводит нод:

    level=doc.GetElement(UnwrapElement(IN[1]).get_Parameter(BuiltInParameter.RBS_START_LEVEL_PARAM).AsElementId())

    Однако , когда загоняю в SetParameter:

    UnwrapElement(IN[2]).SetParameterByName(“Базовый уровень”, level)

    выдает ошибку

    Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
    Traceback (most recent call last):
    File "<string>", line 28, in <module>
    Exception: Наиболее подходящий перегруженный метод для "Revit.Elements.InternalUtilities.ElementUtils.SetParameterValue(Autodesk.Revit.DB.Parameter, double)" имеет несколько недопустимых аргументов

     

     

    #5833 Score: 0
    Legantmar
    Хранитель
    474 pts

    убери Unwrap, должно быть IN[2].SetParameterByName(“Базовый уровень”, level)
    но ошибка у тебя похоже в другом месте, либо из-за одноименных команд в разных библиотеках (что врятли)

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

    выложу картинку:

    #5835 Score: 0
    Legantmar
    Хранитель
    474 pts

    а ошибка какая у python script нода ?

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

    та же:

    Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
    Traceback (most recent call last):
    File "", line 33, in
    Exception: Наиболее подходящий перегруженный метод для "Revit.Elements.InternalUtilities.ElementUtils.SetParameterValue(Autodesk.Revit.DB.Parameter, double)" имеет несколько недопустимых аргументов

    #5837 Score: 0
    Legantmar
    Хранитель
    474 pts

    внимательно посмотри 5817, там где про бонус, ничего не забыл ?! ))

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

    добавил библиотеку

    clr.AddReference(“RevitNodes”)
    from Revit.Elements import *

    но чет не фурычит, та же ошибка

    #5840 Score: 0
    Legantmar
    Хранитель
    474 pts

    выложи скрипт dyn

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