Руководство по настройке altAwin:Написание формул для расстановки отверстий

Материал из AltecDocs
Перейти к:навигация, поиск

Написание формул для расстановки отверстий

расстановка отверстийДля того чтобы в текущий массив отверстий добавить новый элемент необходимо вызвать функцию AddElement(PosX, ShiftX, FromEnd), аргументы которой имеют следующий смысл:

  • posX — расстояние между началом (или концом) балки и точкой сверления;
  • shiftX — некоторые станки выполняют сверление не из центра отверстия на некоторый радиус, а от края до края отверстия — в таком случае необходимо указать в значении posX расстояние от края балки до начала отверстия, а в shiftX — длину этого отверстия;
  • FromEnd — определяет на балке точку, от которой производится отсчет до места расположения отверстия; если значение равно «1» — положение отверстия отсчитывается от конца балки; если «0» — от начала. Этот параметр можно не указывать, в этом случае положение отверстия отсчитывается от начала балки.

Функция AddElement возвращает индекс элемента, добавленного в массив.

IconInfo.png Смещение отверстия поперёк балки определяется типом сверлильного станка, а потому не задаётся в xml-шаблоне.

Пример № 1

В одной из папок узла Сторона створки заведём первую строку со следующими характеристиками:

  • Наименование: отверстие 1
  • Идентификатор: hole3
  • Тип отверстия: <выбрать>

В поле Формула вычисления (через Дизайнер выражений и условий) запишем три строчки:

AddElement(10,0);
AddElement(20,0);
AddElement(30,-3);

В результате в массив hole3 будут добавлены 3 элемента: hole3[0], hole3[1], hole3[2]. Любой элемент массива hole3 можно рассматривать как запись с полями PosX и ShiftX (FromEnd полем не является!); например, hole3[0].PosX — это расстояние между точкой сверления и началом балки, hole3[0].ShiftX — это сдвиг точки сверления (для первого отверстия в массиве).

Заведём вторую строку:

  • Наименование: отверстие 4
  • Идентификатор: hole4
  • Тип отверстия: <выбрать>

В поле Формула вычисления (через Дизайнер выражений и условий) запишем следующий код:

for i:=0 to High(Hole3) do
begin
    AddElement(Hole3[i].PosX+5,Hole3[i].ShiftX);
end;

В данном коде мы обращаемся к массиву Hole3, так как он уже был сформирован на предыдущем шаге.

Чтобы просмотреть информацию из массивов hole3, hole4, необходимо добавить следующий код:

Debug('-- Hole3');
for i:=0 to High(hole3) do
begin
    Debug('PosX=',hole3[i].PosX,' ShifX=',Hole3[i].ShiftX);
end;

Debug('-- Hole4');
for i:=0 to High(hole4) do
begin
    Debug('PosX=',hole4[i].PosX,' ShifX=',Hole4[i].ShiftX);
end;

После расчёта изделия данные об отверстиях заносятся в таблицу PERFORATION, которая привязана к деталям расчета ITEMSDETAIL.

Для формирования массивов отверстий можно применять также следующие функции:

  • DelElement(index) — удаляет элемент из массива;
  • SetElement(index,PosX,ShifX) — устанавливает новое значение для положения отверстия; здесь:
    • index — значение, возвращаемое функцией AddElement;
    • PosX — новое значение расстояния между началом (или концом) балки и точкой сверления;
    • ShifX — новая величина сдвига отверстия; в случае отсутствия сдвига принимает значение «0».

При создании формулы для расстановки отверстий на балке рамы (в строках папки Сторона рамы) можно использовать массив записей Connectors; поля этих записей являются переменными. Названия и свойства этих переменных полностью идентичны названиям и свойствам переменных массива Balka (см. табл. 4.2) за исключением переменной BegPosition, которая хранит величину смещения соединителя (задается в поле Смещение окна Соединитель, РП).

При написании формул можно использовать переменные, введённые через дизайнер выражений и условий, а также поля записей массивов Impost, Stvorka и Shtulp. Особенности работы с этими массивами перечислены в табл. 4.17, которая содержит следующие столбцы:

  • Папка — наименование папки, строки которой содержат код, вызывающий массив;
  • Массив — наименование массива;
  • Элемент — часть конструкции; для каждого экземпляра данной части в пределах рассчитываемой конструкции происходит обращение к соответствующему массиву;
  • Результат — часть конструкции; количество экземпляров этой части вычисляется в результате обращения к соответствующему массиву.

Таблица 4.17. Работа с массивами Impost, Stvorka и Shtulp

Папка Массив Элемент Результат
Сторона створки Impost Балка створки Импост, упирающийся на эту балку
Сторона рамы Impost Балка рамы Импост, упирающийся на эту балку
Импост Impost Импост Импост, опирающаяся на данный импост
Сторона створки Stvorka Балка створки Створка, опирающаяся на эту балку
Сторона рамы Stvorka Балка рамы Створка, опирающаяся на эту балку
Импост Stvorka Импост Створка, опирающаяся на данный импост
Сторона створки Shtulp Балка створки Штульп, опирающийся на эту балку
Сторона рамы Shtulp Балка рамы Штульп, опирающийся на эту балку
Импост Shtulp Импост Штульп, опирающийся на данный импост

Перечислим поля записей массивов Impost, Stvorka и Shtulp.

Поля записи массива Impost
  • PosX — координата на балке, куда входит импост, относительно текущей балки;
  • IsSymmetric — симметричный импост или нет;
  • SizeA1 — размер профиля по A1;
  • SizeB1 — размер профиля по B1;
  • SizeC1 — размер профиля по C1;
  • SizeD1 — размер профиля по D1;
  • SizeFr1 — размер профиля по Fr1;
  • IsShtulp — является штульпом или нет;
  • LReal — длина реальная (после расчета);
  • L — длина габаритная;
  • MrkProfil — артикул балки;
  • SizeA — размер профиля по A;
  • SizeB — размер профиля по B;
  • SizeC — размер профиля по C;
  • SizeD — размер профиля по D;
  • SizeE — размер профиля по E;
  • SizeFr — размер профиля по Fr;
  • SizeTag — размер профиля по Tag; значение поля Дополнительно (окно документа Профиль, вкладка Размеры, см. стр. 349);
  • WidthProfil — ширина профиля;
  • ThickProfil — толщина профиля;
  • LengthProfil — длина профиля;
  • JoinSide — сторона прилегания импоста к балке; значение равно 1 (0), соответственно, если импост примыкает снизу (сверху) к горизонтальной или наклонной балке или справа (слева) к вертикальной балке;
Поля записи массива Stvorka
  • PosX — координата на балке, с которой начинается створка, относительно текущей балки;
  • SideLen — расчетная длина стороны створки, которая прилегает к балке;
  • HasHinge — наличие петель на этой стороне;
  • HasHangle — наличие ручки на данной стороне;
  • MrkTypeOpen — код типа открывания створки;
  • HandleMiddle — позиция ручки: 1 — середина створки, 0 — фиксированная позиция;
  • HandleHeight — расстояние от низа створки до ручки;
  • HandleType — тип ручки: 0 — нет ручки, 1 — ручка окна, 2 — ручка двери стационарная, 3 — ручка двери нажимнaя;
  • SideOpen — сторона открывания: внутрь, наружу;
  • JoinSide — сторона прилегания створки к балке; значение равно 1 (0), соответственно, если створка примыкает снизу (сверху) к горизонтальной или наклонной балке или справа (слева) к вертикальной балке.

Массив Shtulp имеет те же поля, что и массив Impost.

Также можно использовать следующие переменные:

  • ImpCount — количество импостов, входящих в данную балку рамы или импост;
  • StvCount — количество створок, прилегающих к данной балке рамы или импосту.

В массиве Stvorka в качестве свойств доступны также массивы положений отверстий, рассчитанные в части Сторона створки. Например, если для балки створки рассчитан массив HOLE3, то в части Сторона рамы и Импост доступ к элементам этого массива можно будет получить так:

Stvorka[i]. Hole3[j]

Пример № 2

Использование массива Impost в части Сторона створки:

for j:=0 to High(Impost) do
begin
    debug('Impost[',j,'].JoinSide=',Impost[j].JoinSide, ' PosX=', Impost[j].PosX );

    if Impost[j].JoinSide=0 then
        AddElement(-Impost[j].PosX,0)
    else
        AddElement(Impost[j].PosX,0);
end;

Пример № 3

Использование массива створка в части Сторона рамы или Импост:

for i:=0 to High(Stvorka) do
begin
    if Stvorka[i].HasHangle=1 then
    begin
        debug('Створка N',i, ' смещение по габаритам = ',Stvorka[i].PosX);
        debug('Створка N',i, ' положение ручки = ',Stvorka[i].HandleHeight);

        for j:=0 to High(Stvorka[i].Hole3) do
        begin
            AddElement(Stvorka[i].Hole3[j].PosX,Stvorka[i].Hole3[j].ShiftX);
        end;
    end;
end;