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

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

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

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

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

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

Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост

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

Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост

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

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

Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост

Группа 5Р1

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

Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост

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

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

Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост

Далее записываем результат в 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

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

Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост

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

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

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

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

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

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

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

Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост
Волшебная кнопка для подсчета линий в Sketchup SketchUp (программа), Ruby, Проектирование, Гайд, Инструкция, Полезное, Длиннопост

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

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

4.7K поста24.8K подписчика

Добавить пост

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

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