VetCAD

Нумерация форматов в нанокад на примере динамического блока.

   0 оценок

размещено: 01 Января 2023
обновлено: 19 Января 2023

 

Фабула

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

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

Пример реализации в СПДС GraphiCS и нано СПДС

Простой пример

Предварительно подготовим таблицу для более удобного использования в платформе nanocad.

Добавим  «Именованные ячейки» в качестве переменных.

H7 – 1-й Раздел

H8 – 2-й Раздел

H9 – 3-й Раздел

H10 – 4-й Раздел

H11 – 5-й Раздел

H12 – 6-й Раздел

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

J7 – Договор

J8 - Разделитель

J9 - Предприятие

J10- Изделие

Чертежи одной марки должны располагаться на одной линии (Object.OriginY);

В данном примере «Форматы» фильтруются по слою;

В колонки  «B» и «C»  берём  значения =rnd(Object."Position Y"/100) и rnd(Object."Position X"))

В колонке «С» заранее вводим =count()

Теперь мы можем определить, сколько блоков находится в каждом ряду. Для этого открываем диалог «Группировать и объединять»

 

 

 

Присвоение чертежам «Марки» происходит на основании индекса строки  в столбце “G” как: =iff(off(0;-6)==1;1;iff(off(-1;-5)==off(0;-5);off(-1;0);off(-1;0)+1)) где off(0;-5) объединённая колонка по значению Object."Position Y".  Добавляем объединение по «G»

 Дальнейшее определение марки происходит в колонке «Q», в соответствии с индексом объедения по Object.OriginY и присвоению соответствующего значения переменных  This.‘’[i]й-Раздел’’ заданных в виде  «Именованная ячейка» как:

=Select(

off(0;-10)==1;This."1-й Раздел";

off(0;-10)==2;This."2-й Раздел";

off(0;-10)==3;This."3-й Раздел";

off(0;-10)==4;This."4-й Раздел";

off(0;-10)==5;This."5-й Раздел";

off(0;-10)==6;This."6-й Раздел";

TRUE;"Нет раздела")

Тут off(0;-10) – колонка  “G”, описанная выше;

Теперь в колонке “H” мы можем сформировать обозначение

=This."Предприятие"+iff(This."Предприятие"=="";"";This."Разделитель")+This."Изделие"+"."+off(0;9)+" (Листы 1..."+off(0;-4)+")"

Теперь, когда мы определили сколько блоков находится в каждом ряду необходимо, пронумеровать их  по возрастанию параметра  Object."Position X". Для этого в колонку «F» вводим выражение: =iff(off(0;-5)==1;1;iff(off(-1;-4)!=off(0;-4);1;off(-1;0)+1)). Это значит, на самом деле, очень простое действие. Если (iff) ячейка, которая находится (off) в той же строке (0) , на пять колонок влево (-5)  равна «1», то пишем «1». Дальше проверяем, если координата «Y » не равна выше стоящей ячейке off(-1;-4)!=off(0;-4) , то ставим «1», если равна, то берём значение верхней ячейки off(-1;0) и прибавляем «1»

Определяем порядковый номер страницы в комплекте документации в колонке «М»

=iff(This."Отображать номер страницы"==1;off(0;-12)+This."Начальный номер страницы"-1;"")

Общее количество страниц начинается с переменной заданной на форме и вычисляется как:

iff(This."Отображать номер страницы"==1;row+This."Начальный номер страницы"-1;"");

Отображение на чертеже номеров страниц может быть отключено, переменной на форме This."Отображать номер страницы"; дополнительно в колонке «P» добавим проверку для

=iff(This."Отображать номер страницы"==TRUE;"Видим";"Скрыт"). Для отображения поля номера страницы.

В колонки «I», «J», «K» берём атрибуты блока

=Object.NAME_OF_THE_BUILDING             

=Object.NAMEOFTTHECOMPLEX   

=Object.NAME_OF_IMAGES

 

Теперь, когда мы определили все необходимые атрибуты, осталось вернуть их значения в блок. В колонку «P»:

=ctlSetValue(off(0;1);Object.SHEET_NUMBER)+ctlSetValue(off(0;-1);Object.SHEET_COUNT)+ctlsetValue(off(0;10);Object.DESIGNATION)+ctlsetValue(off(0;11);Object."Выбор1")+ctlSetValue(off(0;8);Object.N_SHEET)+"ctlSetValue"   

Вид фрагмента основной надписи в первом ряду.

Теперь  при изменении «Именованной ячейки» H7 (1-й Раздел) или при добавлении, например трёх форматов справа от указанного «Обозначение» пересчитается и  листы будут соответствовать нужным значениям

Все форматы имеют разный размер, но нам нужно привести их к формату А4. В колонке отчёта  «L» вводим:

=Select(

subLeft(Object."Выбор";9)=="Формат А4";1*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1);

subLeft(Object."Выбор";9)=="Формат А3";2*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1);

subLeft(Object."Выбор";9)=="Формат А2";4*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1);

subLeft(Object."Выбор";9)=="Формат А1";8*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1);

subLeft(Object."Выбор";9)=="Формат А0";16*iff(subString(Object."Выбор"+" ";10;1)=="x";subString(Object."Выбор";11;1);1);

TRUE;0)

Функция вернёт только обозначение формата, без кратности

Для А3, нужно умножить это значение на 2, для А2 на 4, для А1 на 8 и для А0 на 16.

Теперь нужно проверить, если в Object.«Выбор» есть  «х»

То взять 11-символ из Object.«Выбор» и использовать его в качестве множителя.

subString(Object."Выбор";11;1)

Добавляем «Итог отчета»

И в колонке:

  • «K» ="Всего листов: "+off(-2;-10)
  • «L»  ="Форматов кратно А4: "+"

"+summ(section(-1))+" шт."

  • «N» =off(0;-2)

Файл с примером тут

Итог

Если вы дочитали до этого места то, наверное, уже поняли, что ничего сложного в этом алгоритме нет. Это не программирование как таковое. Вам не нужно ни определять типы данных, ни создавать сложные функции и процедуры. Ничего такого!!! Вам просто нужно мысленно представить каким путём вы достигаете поставленной задачи при обычном проектировании и последовательно реализовать этот алгоритм в виде отчёта.