Как вытащить кол-во светильников из одного помещения.

Главная Форумы Dynamo ДизайнСкрипт Как вытащить кол-во светильников из одного помещения.

В этой теме 47 ответов, 14 участников, последнее обновление  Denis 8 мес., 1 неделя назад.

Просмотр 15 сообщений - с 31 по 45 (из 48 всего)
  • Автор
    Сообщения
  • #4975 Score: 0

    iwan4ai
    Участник

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

    параметр не записывается в числовой параметр радиатора “Мощность число” выдает ошибку

    “Предупреждение: Element.SetParameterByName операция не выполнена.
    Тип хранения параметра не является строкой.

    #4976 Score: 0

    Legantmar
    Хранитель
    422 pts

    потому, что ты текст хочешь записать в строку для цифр )) попробуй убрать нод string

    #4977 Score: 0

    iwan4ai
    Участник

    УПС, проблемы когда имеется два пространства . тогда знаменатель b   из формулы a/b   он берет суммарный по всем пространствам.

    а нужно чтобы по каждому пространству он мощность суммарную на пространство делил на количество приборов в этом пространстве

    #4978 Score: 0

    iwan4ai
    Участник

    Пример.  пространство 31 -1000 вт  а пространство 4 – 2000 Вт

    и в каждом пространстве по два прибора , получается что скрипт делит мощность пространства не на 2 а на 4

    получается в левом 2000/4 = 500 вт в приборы записывается а надо делить на 2, и в правом 1000 Вт делится на 4 а надо на 2.

    #4979 Score: 1

    glam
    Участник
    8 pts

    Вань, без питона тебе эту задачу с помощью одних только нодов не решить или это будет слишком топорное неуниверсальное решение.

    Фактически твоя задача сводится к следующей последовательности:

    1. определить типы элементов участвующих в выбранном разделе проекта и пустить на обработку только эти элементы. Это важно, т.к. радиаторы принадлежат категории “Оборудование” и в проекте у тебя могут быть помимо радиаторов и другие типы оборудования, которые также будут лезть в обработку, поэтому их обязательно надо отфильтровывать по какому-то критерию;
    2. определить принадлежность элементов конкретным помещениям/пространствам и затем программно добавить это определение в какой-то вспомогательный параметр семейства, например, “Помещение”
    3. определить сколько элементов каждого типа находится в каждом отдельном помещении, считать из свойства пространства значение нагрузки, которая будет пропорционально делиться между элементами заданного типа и поделить это значение на количество элементов
    4. для каждого помещения записать полученные значения удельной нагрузки на 1 элемент в заданный параметр элемента.

    На самом деле п.3 слишком примитивный способ и я бы наделил его большей интеллектуальностью, т.к. очень часто бывают случаи когда нагрузка делится между точками в помещении не пропорционально, а в каком-то соотношении. Допустим если у тебя угловое помещение с 2 наружными стенами, одна из которых длинная, а другая коротая и отопительные приборы стоят у каждой из стен, но у короткой стены стоит 1 маленький приборчик небольшой мощности, а у длинной несколько длинных и более мощных, то в такой ситуации логично иметь какую-то опцию в обработчике-распределителе нагрузки чтобы либо он пропускал элементы, у которых мощность уже задана, либо пропускал элементы, у которых есть параметр “Мощность задаётся вручную”, либо в элементах был бы параметр “% мощности от общих теплопотерь” и если это значение отличается от нуля, обработчик считал бы указанную долю для одного элемента или группы, потом вычитал эти значения из общей нагрузки помещения, а потом делил остаток пропорционально между другими элементами, для которых не была задана ни мощность вручную, ни процентная доля от общей нагрузки помещения. Короче подход когда для помещений с несколькими точками нагрузки мы тупо пропорционально делим общую нагрузку между количеством приборов в помещении – это только частный случай. Он подходит для того чтобы сначала сделать хотя бы такую базовую логику скрипта, но будет мешать тебе в дальнейшем если не будут описаны всевозможные граничные условия и частные случаи, перечисленные мною выше.

    #4981 Score: 0

    iwan4ai
    Участник

    Леха, про исключения и прочие угловые помещения , на первом этапе можно закрыть глаза, таких мест не много их можно ручками, все равно приедятся проходить по каждому прибору и проверять автоподбор. Также как с вентиляционными решетками придется просматривать каждое помещение и уточнять размер, но зато если можно будет распределить автоматом нагрузки равномерно это съэкономит уйму времени…

    А питон его нужно устанавливать или он встроен в динамо?

    #4983 Score: 0

    iwan4ai
    Участник

    Получается надо каждому оборудованию в пространстве присвоить номер помещения (индекс) и по нему уже посчитать количество семейств в каждом пространстве

    #4984 Score: 0

    glam
    Участник
    8 pts

    Питон уже встроен. Для начала конечно обязательно нужно определить принадлежность каждого элемента какому-то помещению и зафиксировать эту принадлежность в элементе в явном виде с помощью заполняемого параметра. Я бы, кстати, еще помимо параметра “Номер помещения” добавил бы и параметр “Номер этажа” и возможно на перспективу “Номер зоны”. В дальнейшем это позволит более гибко оперировать элементами и анализировать их данные, фильтруя их любым нужным тебе способом.

    Я согласен что для начала нужно научиться хотя бы просто пропорционально делить нагрузку по точкам, а усложнять и наделять инструмент гибкостью и интеллектуальными возможностями можно в процессе его развития. Но ты же не будешь отрицать что в скрипте как минимум должна быть продумана функциональность чтобы он не перезаписывал данные в элементы, у которых данные уже были заданы ранее (вручную или нет не особо важно), а также элементы у которых есть какой-то параметр, позволяющий обработчику понимать что они должны быть исключены из обработки.

    #5144 Score: 1

    Артем Манютин
    Участник
    1 pt

    Если кому еще интересен вопрос подсчета светильников, если в помещении их больше одного типа.

    Через Tool.GetSurroundingElements вытаскиваем номера(либо имена) пространств, затем сортируем по номеру помещения, затем по сортируем по типу светильника.

    #5536 Score: 0

    Dmitry Shelyago
    Участник
    1 pt

    Доброго времени суток, решил не создавать новую тему, а спросить здесь:

    У меня почему-то не получается способом описанным выше с помощью нодов: GetSurroundingElements и Elements in Room вытащить, во втором случае выдаёт ошибку(уже не помню какую) а в первом, почему-то 2 помещения вытаскивает (Tolerance пробовал уменьшать, не помогло.) Идея в том, чтобы всем металлам в проекте заполнить атрибут, например “Комментарий” в котором будет номер помещения в котором они находятся. Металлов всего около 8000, а помещений 90. Пробовал программой воспользоваться, которую тут нашёл( где раковинам задаются номера помещений из линк файла). В ней строятся баундинг боксы, и она работала, но заметил, что много ошибок было, например(см. рис.1) металлам в  помещениях под номерами 1,2 и 3 присваивался номер помещения 4. В баундинг бокс же попадали.

    Решил попробовать воспользоваться нодом Room.IsPointInside ( он вроде не с баундинг боксами работает). Но как потом отфильтровать то, что на выходе (получается этот нод работает в векторном произведении)  ума не приложу. Получаем кучу списков с множеством значений, и как отследить по нему к какому помещению относятся элементы докгадываюсь, но воплотить это технически  (соотнести номера помещений с элементами) не могу. Можете подсказать? или может есть другая альтернатива, если через boundingbox не получилось? Заранее благодарю

    Файл динамо: https://yadi.sk/d/qCp8Bp6p3HTU8H

     

    #5537 Score: 1

    Oleg
    Участник
    30 pts

    Тоже заметил, что если помещение сложной формы (например, Г-образные), то “цепляются” ещё и другие помещения, которые попадают в bounding box. Я фильтрую помещения через ноду GetSurroundingElements, а затем полученные помещения дополнительно проверяю на пересечения нодой Geometry.DoesIntersect. Выглядит это так (на примере поиска стен определенного типа):

     

    Решил эту проблему, возможно, несколько по-колхозному, но вроде как работает

    #5538 Score: 0

    txt
    Модератор
    90 pts

    Товарищи а вы в курсе что в GetSurroundingElements  если значение Tolerance задаем в мм то надо это число разделить на 304,8 ? Переводим мм в футы

    то есть как в вашем примере если вы задаете a=0.1 мм (чего то совсем маловато , ну да ладно) то в Tolerance подаем b=a/304.8

    #5628 Score: 0

    Dmitriy Ershov
    Участник

    В ссылке прикрепляю пример от Dmitry Shelyago с “Г-Т-Ж-образной” обводкой помещений, протестировать можно на имеющихся в помещениях МК, у нас пока не получилось присвоить правильные значения номеров помещений… заранее спасибо.

    https://yadi.sk/d/XNQNQVzw3Hxwf7

    #5784 Score: 1

    Dmitry Shelyago
    Участник
    1 pt

    Удалось решить проблему: Через нод Room.IsPointInside из пакета Clockwork. Через location достаётся точка размещения семейства и по ней проверяется. Всё корректно работает. 2 типа самейства с 1 точкой вставки, и семейства с вставкой через 2 точки. Проверялось по каркасу несущему. Зависало если запускать сразу все металлы(7000 эл.) и 90 помещениями. На 2000 элементах работало 7 минут и не зависало.

    Могу залить в downloads.

    #5790 Score: 0

    Артем Манютин
    Участник
    1 pt

    Дмитрий, буду благодарен!

Просмотр 15 сообщений - с 31 по 45 (из 48 всего)

Для ответа в этой теме необходимо авторизоваться.