Как вытащить кол-во светильников из одного помещения.
Главная › Форумы › Dynamo › ДизайнСкрипт › Как вытащить кол-во светильников из одного помещения.
- В этой теме 47 ответов, 14 участников, последнее обновление 7 лет, 2 месяца назад сделано Denis.
-
АвторСообщения
-
iwan4aiУчастник
Получилось, скопировал радаитор и на копии радиатора комментариий прописывался а на оригинале нулл , потом удалил первичный радиатор и снова скопировал теперь все работает. глюк какой то… но теперь новый казус.
параметр не записывается в числовой параметр радиатора “Мощность число” выдает ошибку
“Предупреждение: Element.SetParameterByName операция не выполнена.
Тип хранения параметра не является строкой.потому, что ты текст хочешь записать в строку для цифр )) попробуй убрать нод string
iwan4aiУчастникУПС, проблемы когда имеется два пространства . тогда знаменатель b из формулы a/b он берет суммарный по всем пространствам.
а нужно чтобы по каждому пространству он мощность суммарную на пространство делил на количество приборов в этом пространстве
iwan4aiУчастникПример. пространство 31 -1000 вт а пространство 4 – 2000 Вт
и в каждом пространстве по два прибора , получается что скрипт делит мощность пространства не на 2 а на 4
получается в левом 2000/4 = 500 вт в приборы записывается а надо делить на 2, и в правом 1000 Вт делится на 4 а надо на 2.
АнонимНеактивированный10 ptsВань, без питона тебе эту задачу с помощью одних только нодов не решить или это будет слишком топорное неуниверсальное решение.
Фактически твоя задача сводится к следующей последовательности:
- определить типы элементов участвующих в выбранном разделе проекта и пустить на обработку только эти элементы. Это важно, т.к. радиаторы принадлежат категории “Оборудование” и в проекте у тебя могут быть помимо радиаторов и другие типы оборудования, которые также будут лезть в обработку, поэтому их обязательно надо отфильтровывать по какому-то критерию;
- определить принадлежность элементов конкретным помещениям/пространствам и затем программно добавить это определение в какой-то вспомогательный параметр семейства, например, “Помещение”
- определить сколько элементов каждого типа находится в каждом отдельном помещении, считать из свойства пространства значение нагрузки, которая будет пропорционально делиться между элементами заданного типа и поделить это значение на количество элементов
- для каждого помещения записать полученные значения удельной нагрузки на 1 элемент в заданный параметр элемента.
На самом деле п.3 слишком примитивный способ и я бы наделил его большей интеллектуальностью, т.к. очень часто бывают случаи когда нагрузка делится между точками в помещении не пропорционально, а в каком-то соотношении. Допустим если у тебя угловое помещение с 2 наружными стенами, одна из которых длинная, а другая коротая и отопительные приборы стоят у каждой из стен, но у короткой стены стоит 1 маленький приборчик небольшой мощности, а у длинной несколько длинных и более мощных, то в такой ситуации логично иметь какую-то опцию в обработчике-распределителе нагрузки чтобы либо он пропускал элементы, у которых мощность уже задана, либо пропускал элементы, у которых есть параметр “Мощность задаётся вручную”, либо в элементах был бы параметр “% мощности от общих теплопотерь” и если это значение отличается от нуля, обработчик считал бы указанную долю для одного элемента или группы, потом вычитал эти значения из общей нагрузки помещения, а потом делил остаток пропорционально между другими элементами, для которых не была задана ни мощность вручную, ни процентная доля от общей нагрузки помещения. Короче подход когда для помещений с несколькими точками нагрузки мы тупо пропорционально делим общую нагрузку между количеством приборов в помещении – это только частный случай. Он подходит для того чтобы сначала сделать хотя бы такую базовую логику скрипта, но будет мешать тебе в дальнейшем если не будут описаны всевозможные граничные условия и частные случаи, перечисленные мною выше.
iwan4aiУчастникЛеха, про исключения и прочие угловые помещения , на первом этапе можно закрыть глаза, таких мест не много их можно ручками, все равно приедятся проходить по каждому прибору и проверять автоподбор. Также как с вентиляционными решетками придется просматривать каждое помещение и уточнять размер, но зато если можно будет распределить автоматом нагрузки равномерно это съэкономит уйму времени…
А питон его нужно устанавливать или он встроен в динамо?
iwan4aiУчастникПолучается надо каждому оборудованию в пространстве присвоить номер помещения (индекс) и по нему уже посчитать количество семейств в каждом пространстве
АнонимНеактивированный10 ptsПитон уже встроен. Для начала конечно обязательно нужно определить принадлежность каждого элемента какому-то помещению и зафиксировать эту принадлежность в элементе в явном виде с помощью заполняемого параметра. Я бы, кстати, еще помимо параметра “Номер помещения” добавил бы и параметр “Номер этажа” и возможно на перспективу “Номер зоны”. В дальнейшем это позволит более гибко оперировать элементами и анализировать их данные, фильтруя их любым нужным тебе способом.
Я согласен что для начала нужно научиться хотя бы просто пропорционально делить нагрузку по точкам, а усложнять и наделять инструмент гибкостью и интеллектуальными возможностями можно в процессе его развития. Но ты же не будешь отрицать что в скрипте как минимум должна быть продумана функциональность чтобы он не перезаписывал данные в элементы, у которых данные уже были заданы ранее (вручную или нет не особо важно), а также элементы у которых есть какой-то параметр, позволяющий обработчику понимать что они должны быть исключены из обработки.
Доброго времени суток, решил не создавать новую тему, а спросить здесь:
У меня почему-то не получается способом описанным выше с помощью нодов: GetSurroundingElements и Elements in Room вытащить, во втором случае выдаёт ошибку(уже не помню какую) а в первом, почему-то 2 помещения вытаскивает (Tolerance пробовал уменьшать, не помогло.) Идея в том, чтобы всем металлам в проекте заполнить атрибут, например “Комментарий” в котором будет номер помещения в котором они находятся. Металлов всего около 8000, а помещений 90. Пробовал программой воспользоваться, которую тут нашёл( где раковинам задаются номера помещений из линк файла). В ней строятся баундинг боксы, и она работала, но заметил, что много ошибок было, например(см. рис.1) металлам в помещениях под номерами 1,2 и 3 присваивался номер помещения 4. В баундинг бокс же попадали.
Решил попробовать воспользоваться нодом Room.IsPointInside ( он вроде не с баундинг боксами работает). Но как потом отфильтровать то, что на выходе (получается этот нод работает в векторном произведении) ума не приложу. Получаем кучу списков с множеством значений, и как отследить по нему к какому помещению относятся элементы докгадываюсь, но воплотить это технически (соотнести номера помещений с элементами) не могу. Можете подсказать? или может есть другая альтернатива, если через boundingbox не получилось? Заранее благодарю
Файл динамо: https://yadi.sk/d/qCp8Bp6p3HTU8H
Тоже заметил, что если помещение сложной формы (например, Г-образные), то “цепляются” ещё и другие помещения, которые попадают в bounding box. Я фильтрую помещения через ноду GetSurroundingElements, а затем полученные помещения дополнительно проверяю на пересечения нодой Geometry.DoesIntersect. Выглядит это так (на примере поиска стен определенного типа):
Решил эту проблему, возможно, несколько по-колхозному, но вроде как работает
Товарищи а вы в курсе что в GetSurroundingElements если значение Tolerance задаем в мм то надо это число разделить на 304,8 ? Переводим мм в футы
то есть как в вашем примере если вы задаете a=0.1 мм (чего то совсем маловато , ну да ладно) то в Tolerance подаем b=a/304.8
Dmitriy ErshovУчастникВ ссылке прикрепляю пример от Dmitry Shelyago с “Г-Т-Ж-образной” обводкой помещений, протестировать можно на имеющихся в помещениях МК, у нас пока не получилось присвоить правильные значения номеров помещений… заранее спасибо.
Удалось решить проблему: Через нод Room.IsPointInside из пакета Clockwork. Через location достаётся точка размещения семейства и по ней проверяется. Всё корректно работает. 2 типа самейства с 1 точкой вставки, и семейства с вставкой через 2 точки. Проверялось по каркасу несущему. Зависало если запускать сразу все металлы(7000 эл.) и 90 помещениями. На 2000 элементах работало 7 минут и не зависало.
Могу залить в downloads.
Дмитрий, буду благодарен!
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.