Конструктор G-кода и геометрические функции при генерации файла
В процессе разработки программы, и появления новых пользователей, и идей, возникла необходимость при генерации теста с G-кодом, дополнительно использовать различные геометрические функции, которые добавил в версии 3.3.0.33 (данная версия появится в ближайшее время).
Добавлены следующие функции:
- CreatePoint(X,Y) – создание точки с указанными координатами
- getAngleFrom2Poinычльно оси Х, и прямой образованной 2-мя точками
- GetAngloiычисление угла в точке №2
- GetDistanceBetweenPoints(point1,point2 ) – вычисление дистанции между 2-мя точками
- GetPointInCircle(centerPoint,radius,angle) – получение точки на окружности
Функция CreatePoint(X,Y)
Позволяет создать новую точку, которую можно в дальнейшем использовать в коде. Создание и её использование, будет приведено ниже в данном описании.
Функция getAngleFrom2Points(point1, po/wp:heading –>
Данная функция получает угол образованный отрезком из 2-х точек и осью X, причем угол увеличивается, в положительную сторону, если направление против часовой стрелки, и в минус, если по часовой стрелкеphЕсть следующая особенность, которая заключается в том что после бнно после -179 далее будет 180 градусов. Это связано с тем что без 3-й точки нет возможности понять что угол может быть более 180 градусовagagraph –>
Пример позволяющий использовать функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | FORMAT:SetFormat("#0.00",".") FILE: Create() FILE: AddLine("// начало теста "еста ") for indx = 0, DATA.Items.Count - 1, 1 do primitiv = DATA.Items[indx] lastPoint = primitiv.Items[0]; FILE:AddLine("X"..FORMAT:Fd(lastPoint.X).. " Y"..FORMAT:Fd(lastPoint.Y)) for indxP = 1, primitiv.Items.Count - 1, 1 do point = primitiv.Items[indxP] angle = FORMAT:Fd(GEOMETRY:getAngleFrom2Points(lastPoint,point)) FILE:AddLine("X"..FORMAT:Fd(point.X).. " Y"..FORMAT:Fd(point.Y) .. " .. angle .. "" .. angle .. ")") lastPoint = point end FILE: AddLine(" ") end FILE: AddLine("// окончан |
В строке №18 пример вычисления угла, и ниже скриншот результата:
Функция GetAngleFrom3Points(point1, point2, point3)
Вычисляет угол в точке №2, образованный 2-мя отрезками:

ФуBeint2 )
Данная функция вычисляет расстояние между указанными точками, в та
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | FORMAT:SetFormat("#0.00",".") FILE: Create() FILE: AddLine("// начало теста "еста ") point1 = GEOMETRY:CreatePoint(0,0) point2 = GEOMETRY:CreatePoint(10,10.5) Distance = FORMAT:Fd(GEOMETRY:GetDistanceBetweenPoints(point1,point2)) FILE:AddLine("расстояние между точками = "..FORMAT:Fd(Distance)) FILE: AddLine(" |
Даёт такой результат:
teormatted”>// начало тестарасстояние между точками = 14.50
//e>d –>
Функция GetPointInCircle(centerPoint,radius,angle)
лучить точку на окружности, например такой код:1 2 3 4 5 6 7 8 9 10 11 12 13 | FORMAT:SetFormat("#0.00",".") FILE: Create() FILE: AddLine("// начало теста "еста ") CenterPoint = GEOMETRY:CreatePoint(0,0) point1 = GEOMETRY:GetPointInCircle(CenterPoint,10,0) point2 = GEOMETRY:GetPointInCircle(CenterPoint,10,45) FILE:AddLine("точка 1 ("..FORMAT:Fd(point1.X) ..","..FORMAT:Fd(point1.Y)..")"точка 2 ("Line("точка 2 ("..FORMAT:Fd(point2.X) ..","..FORMAT:Fd(point2.Y)..")") FILE: AddLine("// окон |
Пока так и не понял зачем это необходимо.
Для применения специального ножа, который позволяет вырезать на материале, но у него смещена режущая часть от центра оси, и требуется учитывать эти особенности, когда будет возможность, обязательно опишу данную процедуру! 😉