224

Волшебная кнопка для подсчета линий в Sketchup

Без прелюдий сразу к делу.

Чтобы было комфортно пользоваться понадобится версия Sketchup 2020 или старше.

В этой версии немного прокачали вкладку "Иерархия" добавив возможность скрывать через нее группы и компоненты. Это нужно для того чтобы не страдать ерундой добавляя десятки ненужных слоев, чтобы скрывать/показывать группу объектов.

Мне удобен вариант при котором видимость/невидимость всех всех групп управляется через иерархию. А все что нельзя скрыть через иерархию управляется через слои.

Например можно скрыть запасы кабеля для распределительной коробки или розетки и обозначить их пунктиром.

Линиями нарисованными пунктиром можно можно управлять через слои.

Линиями нарисованными пунктиром можно можно управлять через слои.

Выше вы видите созданную группу с именем E-W, в ней находятся группы с отдельными линиями.

Каждая группа с именем типа 5Р1 это отдельная линия на щит. (5 номер помещения, Р-розетки,1 номер розеточной группы в комнате)

Группа 5Р1

Группа 5Р1

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

С другой стороны появляется проблема с измерением длины кабеля в каждой группе. Обычно это происходит довольно нудно.

Нужно зайти в интересующую группу выделить всю линию и только потом увидим результат в данном случае ~ 27957 mm

Далее записываем результат в excel/блокнот/листочек и повторяем процедуру со всеми группами, что является довольно неудобным если учесть что бывают объекты на которых может быть и сто линий (монтаж СКС).

Есть способ вывести результат по всем линиям сразу и этот способ использовать скрипты на языке Ruby. Окно > Консоль языка "Ruby"

Вставляем скрипт:

model = Sketchup.active_model

group_name_pattern = /^[1-9][0-9]?([А-Яа-яA-Za-z]+)[1-9][0-9]?$/

group_lengths = Hash.new(0.0)

matching_groups = Hash.new { |hash, key| hash[key] = [] }

scale = 0.0254

def process_group(group, group_name_pattern, group_lengths, matching_groups, scale)

group_name = group.name

match = group_name.match(group_name_pattern)

if match

letter = match[1]

edges = group.entities.grep(Sketchup::Edge)

total_length_mm = edges.reduce(0.0) { |sum, edge| sum + edge.length * scale }

group_lengths[letter] += total_length_mm

matching_groups[letter] << group

end

group.entities.each do |entity|

if entity.is_a?(Sketchup::Group)

process_group(entity, group_name_pattern, group_lengths, matching_groups, scale)

end

end

end

root_groups = model.entities.grep(Sketchup::Group)

root_groups.each do |group|

process_group(group, group_name_pattern, group_lengths, matching_groups, scale)

end

group_lengths.each do |letter, total_length_mm|

if total_length_mm > 0.0

total_length_meters = total_length_mm

puts "Группы с буквой #{letter}, Общая длина линий: #{total_length_meters.to_i} м"

matching_groups[letter].each do |group|

group_name = group.name

edges = group.entities.grep(Sketchup::Edge)

total_length_mm = edges.reduce(0.0) { |sum, edge| sum + edge.length * scale }

total_length_meters = total_length_mm

puts " Гр: #{group_name}, Длина кабеля: #{total_length_meters.to_i} м"

end

end

end

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

Итого:
Группы с буквой С, Общая длина линий: 169 м (освещение 3х1,5)
Группы с буквой Р, Общая длина линий: 186 м (розетки 3х2,5)
Группы с буквой ВП, Общая длина линий: 15 м (варочная поверхность)

Итого: Группы с буквой С, Общая длина линий: 169 м (освещение 3х1,5) Группы с буквой Р, Общая длина линий: 186 м (розетки 3х2,5) Группы с буквой ВП, Общая длина линий: 15 м (варочная поверхность)

Чтобы скрипт сработал линии необходимо поместить в группу с именем вида 1Р1, 21Р1, 1Р22, 1РС22 и тому подобное. То есть (одна-две цифры)(одна-две буквы)(одна две цифры). Буквы подходят как латиница так и кириллица.

Если предпочитаете другое называние можете изменить переменную group_name_pattern

Не знаю насколько правильно написан код, но он работает, не это ли самое главное)

Если это читают программисты знакомые с Ruby, подскажите что исправить или улучшить.

Наверное можно сделать экспорт в excel файл.

Пользуйтесь на здоровье

Материал и работа без цен

Материал и работа без цен

Лига электриков

6K постов26.1K подписчиков

Правила сообщества

Запрещён оффтоп, нарушение основных правил пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества