Семейства для армирования — часть 3

Продолжаю цикл статей о создании семейств арматуры, попадающих в одну спецификацию со стандартной арматурой.
В первой части мы создали rfa-семейство в категории «Несущая арматура», а во второй части — разобрали принцип создания спецификации, выводящей нужные параметры.

В этой части рассмотрим принцип создания остальных параметров, необходимых нам в спецификации — названия, массы, количества.

Часть 1 — Наименование

Самое простое, что часто рекомендуют — просто выводить в столбец «Имя типа». Неплохой способ, вот только у нас может быть два типа арматуры «12 А400» — например, если это нижняя и верхняя арматура плиты. Если в спецификации будет написано «12 А400 верхняя» — это нам явно не подойдет.
Другой способ — создать текстовый параметр, по «типу», и вручную добавить его к типам арматуры и семейств. Этот способ мне тоже не нравится — он увеличивает вероятность ошибки. Есть вероятность того, что человек создаст новый типоразмер, но забудет изменить параметр наименования — с не очень приятными последствиями.
Я предпочитаю потратить больше сил, но сделать так, чтобы система была устойчива к ошибкам. Параметр наименования — «12 А400» — будем вычислять при помощи формулы, точнее, цепочки из if-ов.
Правда, еще один параметр понадобится добавить — для класса арматуры. Сделаем также, как я описывал в статье про ведомость расхода стали, но будем использовать общий параметр.

Создаю общий параметр «Класс арматуры», тип данных — целое:

Добавляю этот параметр как параметр проекта, по типу, для категории «Несущая арматура», прописываю для каждого типа арматуры нужный класс.

Добавляю этот же параметр для семейства арматуры:

Загружаю семейство в проект. Любознательный читатель наверняка подумает — «Интересно, не будут ли конфликтовать параметры проекта и семейства — ведь это один и тот же общий параметр?». Конфликтовать не будут, но кое-что интересное будет происходить — расскажу как-нибудь :)

Добавляю в спецификацию арматуры параметр «АрмКласс». Должно получиться что-то такое:

Дополнительных расчетных параметров не надо, так как используется единый общий параметр.

Создаю расчетный параметр «НаименованиеРасчетное», тип данных — текст. Напишу формулу, подставляющую нужный текст в зависимости от параметров «АрмКласс» и «ДиаметрРасчетный»:

if(and(АрмКласс = 240, ДиаметрРасчетный = 6 мм), «Ø6 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 8 мм), «Ø8 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 10 мм), «Ø10 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 12 мм), «Ø12 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 14 мм), «Ø14 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 16 мм), «Ø16 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 18 мм), «Ø18 А240», if(and(АрмКласс = 240, ДиаметрРасчетный = 20 мм), «Ø20 А240», if(and(АрмКласс = 400, ДиаметрРасчетный = 10 мм), «Ø10 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 12 мм), «Ø12 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 14 мм), «Ø14 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 16 мм), «Ø16 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 18 мм), «Ø18 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 20 мм), «Ø20 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 22 мм), «Ø22 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 25 мм), «Ø25 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 32 мм), «Ø32 А400», if(and(АрмКласс = 400, ДиаметрРасчетный = 40 мм), «Ø40 А400», «Проверьте формулу»))))))))))))))))))

Выглядит страшно, но работает — как из пушки. Для более удобного создания таких формул можно воспользоваться Notepad++ или программкой от Романа Митина.

Должно получиться что-то такое:

Часть 2 — Масса

Обратите внимание — тут я уже создал параметр расчетной длины, по тому же принципу, что и для диаметра — думаю, разберетесь. Длину и диаметр будем использовать для подсчета массы.

Насчет принципа подсчета — опять же, не претендую на истину. Может быть, у вас есть свои способы подсчета массы. Я пользуюсь теми же if-цепочками — тем же способом, что описывал в статье про ведомость расхода стали, но с использованием хитрого округления.

Создаю расчетный параметр «МассПогМетра», в качестве условия использую «ДиаметрРасчетный»:

if(ДиаметрРасчетный = 6 мм, 0.222, if(ДиаметрРасчетный = 8 мм, 0.395, if(ДиаметрРасчетный = 10 мм, 0.617, if(ДиаметрРасчетный = 12 мм, 0.888, if(ДиаметрРасчетный = 14 мм, 1.208, if(ДиаметрРасчетный = 16 мм, 1.578, if(ДиаметрРасчетный = 18 мм, 1.998, if(ДиаметрРасчетный = 20 мм, 2.465, if(ДиаметрРасчетный = 22 мм, 2.984, if(ДиаметрРасчетный = 25 мм, 3.85, if(ДиаметрРасчетный = 28 мм, 4.83, if(ДиаметрРасчетный = 32 мм, 6.31, if(ДиаметрРасчетный = 36 мм, 7.99, if(ДиаметрРасчетный = 40 мм, 9.865, 0))))))))))))))

Создаю параметр «МассаРасчетная», вычисляю массу стержня через длину и массу погонного метра:

if((МассаПогМетра * ДлинаРасчетная) < 1000 мм, 0.01 * roundup(МассаПогМетра * ДлинаРасчетная / 10 мм), 0.1 * roundup(МассаПогМетра * ДлинаРасчетная / 100 мм))

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

Часть 3 — Количество

Тот самый столбец, который задавал нам проблем — и сейчас мы его победим!

Во первых, обратим внимание, что в обычной спецификации арматуры мы используем не параметр «Число», а «Количество» — оно и понятно, ведь объект массива арматуры может быть один, а стержней внутри него — несколько. Построим наши семейства по тому же принципу.

Создаю обычное семейство в «Обобщенной модели» с профилем арматуры, который я буду размножать массивом. Это семейство не следует делать общим! Оно нам нужно только для геометрии:

Загружаю этот хомут в свое семейство категории «Несущая арматура». Не общие семейства, как мы помним, при такой загрузке приобретают в проекте свойства «Родительского» семейства, так что все будет управляться вместе.

Создам общий параметр «АрмКоличество», типа «Целое». Добавлю его к семейству. Создаю массив хомутов с использованием этого параметра:

А вот это семейство уже можно сделать «Общим», если планируется подгружать его в какие-то другие семейства-сборки. Кстати, можно делать каждый стержень и отдельным общим семейством, тогда в параметр «АрмКоличество» надо просто вписывать единицу.

Загружаем семейство в проект. Обратите мнение, что из-за того, что отдельные хомуты — не общие семейства, мы не сможем выбрать их при помощи tab.

 Вывожу в спецификацию параметр «АрмКоличество». По тому же принципу, что и для «Диаметра», создаю параметр «КоличествоРасчетное»:

КоличествоРасчетное = if(АрмВыполненаСемейством, АрмКоличество, Количество)

Ну вот у нас есть все основные параметры для того, чтобы собрать спецификацию арматуры. Нужно скрыть-передвинуть столбцы, настроить границы и получить что-то такое:

Тут уже дело техники, расскажу как-нибудь в следующий раз :)

Удачи!