PipingSystemType
Главная › Форумы › Задать вопрос › PipingSystemType
- В этой теме 32 ответа, 2 участника, последнее обновление 7 лет, 6 месяцев назад сделано txt.
-
АвторСообщения
-
Пару слов для понимания (пригодится другим)
ВАРИАНТ 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. до недавнего времени я пользовался первым вариантом, т.к. все команды перекликаются с одноименными нодами динамо, что интуитивно понятнее, но если “уходить от динамо”, то использовать нужно второй вариант.
как получить не ValueString , а Value ? когда пишу в конце вместо …AsValueString() – Value не получается
вот тебе 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.8p.s. размеры в футах, поэтому 304.8 для перевода в мм
Ну и бонус – можно использовать ноды динамо в питоне
clr.AddReference(“RevitNodes”)
from Revit.Elements import *
OUT = IN[0].GetParameterValueByName(“Диаметр”)*304.8 # это запись из нода динамоСпасибо за развернутый ответ !
Здесь только у LookupParameter есть минус – ищет первый попавшийся по названию параметр , то есть лучше применять при уникальном имени параметра. Если же есть параметры с одинаковыми именами , то лучше использовать get_Parameter
Верно?)
даж не знаю..
а почему у тебя два параметра? ))видимо когда-то создал общий параметр “Диаметр” для какого-то элемента для записи туда какого-то рассчитываемого параметра и/или чтобы вытащить нужные значения в спецификацию
пытаюсь в питоне вытащить такое значение уровня, как в код блоке :
в питоне:
level=IN[0].get_Parameter(BuiltInParameter.RBS_START_LEVEL_PARAM).AsValueString()
.AsValueString() и AsElementId() не дают значения как в ноде
Так как необходимо задать далее SetParameter Value для базового уровня другого элемента, который принимает не вход не строки, ай ди или число , а вид, представленный на выходе нода (подчеркнуто)
уже было написано ранее:
вот результат как выводит нод:
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)" имеет несколько недопустимых аргументов
убери Unwrap, должно быть IN[2].SetParameterByName(“Базовый уровень”, level)
но ошибка у тебя похоже в другом месте, либо из-за одноименных команд в разных библиотеках (что врятли)а ошибка какая у python script нода ?
та же:
Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
Traceback (most recent call last):
File "", line 33, in
Exception: Наиболее подходящий перегруженный метод для "Revit.Elements.InternalUtilities.ElementUtils.SetParameterValue(Autodesk.Revit.DB.Parameter, double)" имеет несколько недопустимых аргументов
внимательно посмотри 5817, там где про бонус, ничего не забыл ?! ))
добавил библиотеку
clr.AddReference(“RevitNodes”)
from Revit.Elements import *но чет не фурычит, та же ошибка
выложи скрипт dyn
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.