Конструктор G-кода 3.3 – Синтаксис кода встроенного редактора

В качестве языка для “файла правила формирования текста G-кода” применяется язык LUA с некоторыми особенностями.

Доступ к данным осуществляется через “DATA”, в таблице ниже описано что можно через неё получить:

СвойствоОписаниеВозвращаемый тип значения
DATA.ItemsДанный параметр содержит список векторных примитивовСписок примитивов
DATA.Items.Count
или


Данный параметр возвращает количество примитивовЧисло


DATA.CountElements

Данный параметр возвращает количество примитивов (аналог предыдущего варианта получения количества)
Число
DATA.Items[xxx]Данный параметр возвращает примитив из списка примитивов, а число “xxx” – указывает номер примитива в списке, нумерация начинается с нуля!примитив

DATA.UsedDataArea
Данный параметр содержит информацию о размере всех данныхструктура описания размеров

Доступные свойства у структуры описания размеров “UsedDataArea”:

СвойствоОписаниеВозвращаемый тип
XminМинимально возможная координата из всех данных по оси XЧисло
YminМинимально возможная координата из всех данных по оси YЧисло
XmaxМаксимально возможная координата из всех данных по оси XЧисло
YmaxМаксимально возможная координата из всех данных по оси YЧисло

Доступные свойства у примитива:

СвойствоОписаниеВозвращаемый тип
typeIВозвращает тип примитива*Число
TAGМетка данного примитиваСтрока
UsedDataAreaДанный параметр содержит информацию о размере всех данныхструктура описания размеров
ItemsСписок точек траекторииСписок координат
Items[xxx]Возвращает конкретную точку из списка, с номером “xxx”Координатная точка

*В зависимости от типа примитива, будут дополнительно доступны дополнительные свойства примитива, о чем будет написано ниже.

Доступные свойства у координатной точки:

СвойствоОписаниеТип значения
XВозвращает положение по оси X Число
YВозвращает положение по оси YЧисло
ZВозвращает положение по оси ZЧисло

Примеры кода:

1
2
-- пример записи в переменную p1 количества примитивов
p1 = DATA.Items.Count
1
2
3
4
5
6
7
8
-- пример получения первого примитива из списка
primitiv = DATA.Items[0]
-- пример получения первой координаты из списка точек
point = primitiv[0]
-- пример записи в переменные pX,pY,pZ числа
pX = point.X
pY = point.Y
pZ = point.Z

Дополнительная функция “FILE”, позволяет записывать данные в файл:

1
2
3
4
5
6
7
8
9
10
11
12
-- создаем новый файл, или перезаписываем существующий
FILE:Create()
-- создаем числовые переменные
a = 5
b = 6
-- добавляем текст              
FILE:AddLine("Пример сложения: a + b")    
FILE:AddLine("Где a= " .. a)
FILE:AddLine("Где b= " .. b)
FILE:AddLine("И сумма равна: " .. (a+b))  
-- сохраняем в файл  
FILE:Save()

В примере выше мы в файл добавили 4 строки, и результат получается такой:

Пример сложения: a + b
Где a= 5
Где b= 6
И сумма равна: 11

Дополнительная функция “FORMAT”, позволяет форматировать числовые значения:

1
2
3
4
5
6
p1 = 1/3
FILE:Create()
FILE:AddLine("p1= " .. p1)
FORMAT:SetFormat("#0.##",".")
FILE:AddLine("Где p1= " .. FORMAT:Fd(p1))
FILE:Save()

Пример выше дает такой результат:

p1= 0.333333333333333
Где p1= 0.33

В строке FORMAT:SetFormat(  “#0.##”  ,  “.”  ) есть 2 параметра, это как форматировать число, и какой символ использовать для разделения целой и дробной части. В таблице ниже я приведу примеры указания 1-го параметра, и получаемый результат, в первой колонке исходное значение, в 3-й результат:

Исходное значениеФорматРезульта
0.333333333
#0.0#
0.33

0.333333333


#0.##
0.33

0.333333333
#.###.333
7
#0.0#
7.0
7
#0.##
7
777.7777#.###777.777

В примерах выше, символ “#” означает необходимость выводить символ, если он имеется, если его нет, то выводить не нужно. 

А символ “0” означает что символ нужно выводить обязательно.

! В последней строке таблицы можно заметить отличие работы форматирования целой части числа, символы “#” и  “0” никак не влияют на длину выводимой целой части.

Доступно использование циклов:

В цикле задается 3 параметра, начальное значение, конечное значение, и шаг инкремента(значение на которое будет увеличиваться значение при каждом повторе цикла)

1
2
3
4
5
6
7
8
9
10
11
12
FORMAT:SetFormat("#0.0#",".")
FILE:Create()
for indx = 0, DATA.Items.Count-1, 1 do
    primitiv = DATA.Items[indx]
    FILE:AddLine("// примитив №: " .. indx)
    for indxP = 0, primitiv.Items.Count-1, 1 do
        point = primitiv.Items[indxP]
        FILE:AddLine("X" .. FORMAT:Fd(point.X) .. " Y" .. FORMAT:Fd(point.Y))
    end
    FILE:AddLine(" ")
end
FILE:Save()

В примере выше, получаем такой результат:

// примитив №: 0
X10.0 Y10.0
X20.0 Y10.0
X20.0 Y20.0
X15.0 Y25.0
X10.0 Y20.0
X10.0 Y10.0
// примитив №: 1
X40.0 Y10.0
X40.0 Y40.0