38

Улучшенный скрипт подсчета линий в Sketchup

Как работал старый скрипт

Чтобы он сработал линии необходимо поместить в группу с именем вида 1РОЗ4, 4ОСВ2, 1КОН1 и тому подобное. То есть (цифры)(любые буквы)(цифры).


Пример:
Есть у нас две линии 1РОЗ1 и 1РОЗ2 каждая по 25 метров
При подсчете скрипт выдавал общую длину кабелей с словом РОЗ к примеру 50 метров.


И это означало что для всех групп РОЗ (розетки) необходимо купить кабель 3х2.5 в количестве 50 м

Но иногда возникала необходимость посчитать для одного и того же индекса разные марки кабелей.
Например КОН (кондиционер) может быть подключен к линии 3х1.5 или 3х2.5 или 5х2.5, а скрипт все равно считал его как один кабель

Как работает новый скрипт

Новый скрипт работаем с именами типа 5РОЗ1 -- 3х2.5
То есть также как и раньше:
5 — номер помещения,
РОЗ — розетки,
1 — номер розеточной группы в комнате)

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

Еще из отличий это увеличение точности, старый скрипт считал с точностью до метра, Теперь считаем с точностью до сантиметра.

Ruby Script SketchUp

model = Sketchup.active_model

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

group_lengths = Hash.new(0.0)

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

second_part_lengths = Hash.new(0.0)

scale = 0.0254

def process_group(group, group_name_pattern, group_lengths, matching_groups, second_part_lengths, 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

second_part = match[2].to_s.strip

if !second_part.empty?

second_part_lengths[second_part] += total_length_mm

end

end

group.entities.each do |entity|

if entity.is_a?(Sketchup::Group)

process_group(entity, group_name_pattern, group_lengths, matching_groups, second_part_lengths, 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, second_part_lengths, 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.round(2)} м"

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.round(2)} м"

end

end

end

second_part_lengths.each do |second_part, total_length_mm|

total_length_meters = total_length_mm

cleaned_second_part = second_part.sub(/^--\s*/, '') # Удаляем два тире в начале второй части имени

puts "Общая длина линий для '#{cleaned_second_part}': #{total_length_meters.round(2)} м"

end

Теперь считать большие объемы стало еще легче и точнее.

Проект большого дома в SketchUp

Проект большого дома в SketchUp

Еще пример проекта умного дома.

Весь материал считается с первого раза со всеми запасами и уместился в одну закупку. Всего 1.09 км кабеля

96 отдельный групп. 75 линий приходит на щит.

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

5.8K поста25.9K подписчиков

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

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

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества