в коде бардак, elementListSection к чему сделан пустым списком изначально, если он является просто промежуточной переменной в цикле? лишняя скобка в последней строке цикла. Метод для получения параметра записан неверно. Unwrap для провода зачем нужен? Если нетрудно, поделись файлом для примера, а то у меня ничего электрического нет. Опытным путем мной было установлено, что получать параметры методом библиотеки RevitNods можно вот так
лучше конечно освоить метод получения параметров стандартными средствами Ревит АПИ, на форуме об этом достаточно информации
Ок, можно обсудить. Я предполагаю, что в ближайшее время Алексей Лобанов поделится своими наработками, он дальше моего ушел, демонстрировал на вебинаре по динамо. Но можно конечно и мой скрипт развивать.
Я в настоящий момент создаю потолки перекрытиями автоматически по параметру в помещениях “Высота потолка”. К данному параметру соответственно и привязываю расчет площади стен. Можно и предложенным вариантом сделать (предлагаете добавить в скрипт?)
думаю в пределах погрешности норм
У окон по-моему точка вставки на уровне пола, не могу представить как она в перекрытии может оказаться. Но то, что окно к нижнему помещению отнесется это да. Было дело долго на эту тему думал, методику расчета придумывал, потом плюнул на 1% помещений проекта решил доп параметром учесть, вручную внести где добавить а где вычесть.
Проблему не вычитания витражей из стен решил довольно просто, создал прозрачные панели в категории Окна (а не в Панели витража, как по умолчанию). Промежуточные панели решил вручную учитывать пока. Но методика частично уже была разработана. Столкнулся с такой проблемой, что чем сложнее вычисления, тем они нестабильнее работают и на одной срабатывают, а на другой косячат. Пока оставил это, предполагая, что на торцах стен и перекрытий должны быть импосты и панели на несколько помещений – это ошибка.
Довольно просто подправить скрипт, чтобы не учитывал, всё руки не доходят. Когда срочно кому-то надо было учесть такой случай, предложил им добавить параметры “Вычесть площадь стены” и “Прибавить площадь стены”. Понимаю, что ручная работа, но всё же не больше 5% помещений с такой ручной настройкой. В одном объекте например у нас границу помещения рисовали перед витражной системой наружной стены, т.е. в этом случае мы в минус по всему бы объекту ушли по отделке. А так в запас пока идет)) Но конечно надо исправить и подчеркну, что возможность искусственной корректировки должна быть и всё в любом случае надо просматривать.
По поводу идей как можно с геометриями играться и пересечениями, я скрипт давненько выкладывал Теплотехнический расчет, там вот я пытался через Geometry много чего насчитать.
Со всеми аргументами метода вроде разобрался, вот что делать кривыми (curve)? Ревит требует list curve. Как можно получить этот list curve, если есть polycurve для этой арматуры со всеми вершинами и сегментами?
Legantmar, ну как, нет идей у тебя, почему изоляция не работает в только что созданном виде? Кстати, такая же хрень не только в dynamo, но и в revit python shell — если создать вид и что-то пытаться в нём заизолировать (предположу, что это случится и на других платформах). Другие свойства вида меняются, а изоляция — нет. Сам режим изоляции на виде включается (голубая рамочка), а вот элементы он не схватывает из System.Collections.Generic.List.
Но обратный инструмент HideElements работает! Можно конечно скрыть то, что не нужно, но если модель объёмная, мне кажется, не очень хорошо будет собирать коллектором все остальные элементы из модели (которые нужно скрыть на виде).
Привет, собственно, проблема такая, как быть?
Есть elements_to_isolate, который является System.Collections.Generic.List'1[Autodesk.Revit.DB.ElementId].
Сам объект содержит следующие ElementId:
Открываю транзакцию, меняю разные свойства вида sec_view, что мне нужно. Самым последним шагом, хочу изолировать все объекты по elements_to_isolate. sec_view.IsolateElementsTemporary(elements_to_isolate)
Выполняю код, на виде включается режим “Временная изоляция”, но при этом элементы не из elements_to_isolate не скрыты! Как с этим бороться?
ent1g, посмотрел скрипт. мне понравился.
единственное – неудобно выбирать помещения.
я его немного доработал – добавил нод питон скрипта со строчкой list(set(IN[0]) & set(IN[1])), стало удобнее. https://yadi.sk/d/deFeTQOtnk4MT
в архиве скрипт и видео.
Хочу поделиться очень полезным блоком Питон: является ли элемент списком. Такая проверка очень важна для скрипта Питона, поскольку Питон не обрабатывает как Динамо массивы автоматом, для обработки массива необходимо писать цикл. Часто бывает что приходится в скрипте Питона обрабатывать как одиночные элементы, так и массивы. Предложенный блок сам определяет является ли входная информация массивом или одиночным элементом и исходя из этого обрабатывает информацию. Блок довольно прост.
ifisinstance(IN[0], list) == True:
elem = [UnwrapElement(i) for i in IN[0]] else: elem = UnwrapElement(IN[0])
В ошибке пишет “Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
Traceback (most recent call last):
File “<string>”, line 23, in <module>
TypeError: expected float, got list”
интуитивно я конечно понимаю что он хочет мне сказать, что-то вроде того что я пытаюсь вставить список туда где должно быть одно знаение, но вот как это поправить я не знаю
import clr
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import *
from System.Collections.Generic import *
import clr
clr.AddReference(‘ProtoGeometry’)
from Autodesk.DesignScript.Geometry import *
r=UnwrapElement(IN[0])
list=[]
for i in r:
f=i.GetParameters(“Длина”)
list.append(f.AsDouble())
OUT = list
не желает распознавать AsDouble(), вроде все импортировал, но
Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
Traceback (most recent call last):
File “<string>”, line 12, in <module>
AttributeError: ‘List[Parameter]’ object has no attribute ‘AsDouble’