Макропрограммирование K3 в Python: различия между версиями

Материал из K3-Macro
Нет описания правки
Строка 125: Строка 125:


{{#seo:
{{#seo:
|title=Макропрограммирование К3 в Python{{!}} База знаний
|title=Макропрограммирование К3 в Python {{!}} База знаний
|description=Это онлайн-руководство пользователя программ '''К3''', содержащее описание макропрограммирования в '''К3''' и её приложениях при помощи языка Python
|description=Это онлайн-руководство пользователя программ '''К3''', содержащее описание макропрограммирования в '''К3''' и её приложениях при помощи языка Python
|keywords=К3-Мебель, кз-мебель, k3-mebel, К3-Коттедж, кз-коттедж, k3-cottage, К3-Ship, кз-ship, k3-ship, инструкция, база знаний, online руководство, обучение, k3makro wiki, макро, макропрограммирование, макропрограммы, Python, питон, Питон
|keywords=К3-Мебель, кз-мебель, k3-mebel, К3-Коттедж, кз-коттедж, k3-cottage, К3-Ship, кз-ship, k3-ship, инструкция, база знаний, online руководство, обучение, k3makro wiki, макро, макропрограммирование, макропрограммы, Python, питон, Питон
}}
}}

Версия от 14:37, 14 июля 2022

Общие принципы

Команда macro в К3 может запускать два типа файлов – макропрограмму k3 (файл .mac) и макропрограмму на Python (файл .py). Расширение файла показывает системе, какой интерпретатор использовать.

Также в К3 есть возможность вставить блок кода на Python внутрь файла .mac. Для этого необходимо воспользоваться конструкцией

<?python
…
?>

Для всех строчек кода внутри будет использоваться интерпретатор python.

Библиотека, функции и команды. Ключевые слова

Для использования функционала К3 в программу на Python нужно импортировать специальную библиотеку Import k3

Все функции и команды K3 вызываются как функции из этой библиотеки с использованием трёх основных принципов:

  • Имя функции совпадает с именем команды, но обязательно должно быть написано в нижнем регистре;
  • Все аргументы или ключевые слова передаются в функцию в том же порядке, как и при обычном вызове в макропрограмме;
  • В Python нет специального обозначения для возвращения результата работы команды (# в макропрограмме). Поскольку команды – это тоже функции в Python, они возвращают значение обычным образом.

Например, команда рисования линии, возвращающая ссылку на построенный объект

#line1 line 0 0 0 100 0 0 done

В python будет записываться как

line1 = k3.line(0, 0, 0, 100, 0, 0, k3.k_done)

k3.k_done – это объект соответствующий ключевому слову done. Все ключевые слова записываются для использования в Python таким образом: k3.k_<название>, где <название> — название ключевого слова.

Ключевое слово для интерактивного ввода (то, что в макропрограмме записывалось знаком двоеточия ( : ), в Python запишется как k3.k_interact, например:

k3.line(0, 0, 0, k3.k_interact, k3.k_done)

построит линию от точки 0 до точки, введённой пользователем в интерактивном режиме.

Eksklamacia.png Функции К3, запущенные через библиотеку К3 в Python, всегда возвращают числа в формате с плавающей точкой (double). Поэтому часто для дальнейшего использования их нужно перевести в целое, например

k3.getobjnum(k3.sysvar(60))

вернёт ошибку, поскольку функция getobjnum должна получать на вход целое число, а k3.sysvar() вернёт double. Необходимо писать так:

k3.getobjnum(int(k3.sysvar(60)))

Переменные и массивы K3

Все переменные, которые мы объявляем в коде на Python – это обычные переменные Python. Некоторые функции K3 требуют работы именно с переменными или массивами K3, например, функции objident и objgab3

k3.objident(<object>, <variable>)

k3.objgab3(<object>, <array>)

Здесь <variable> - это переменная k3, а <array> — массив К3 и именно такие объекты нужно передавать в функцию.

Переменная К3 в Python — это объект класса k3.Var, создаётся с помощью:

varname = k3.Var(<name>)

Где <name> — строка с именем переменной K3.

У этого объекта есть атрибут varname.value, который содержит значение этой переменной.

В результате, вызов функции objident будет выглядеть таким образом:

varname = k3.Var(‘obj1’)
k3.objident(k3.k_interact, varname)

в результате ссылка на объект, выбранный пользователем в интерактивном режиме (ключ interact), будет присвоена переменной K3 с названием obj1, которой соответствует объект в Python с именем varname. Для того, чтобы добраться до этого объекта, используем обращение к атрибуту value

k3.move(varname.value, k3.k_done, 100, 0, 0)

Этой функцией мы сдвигаем объект, лежащий в переменной K3, на 100 по оси x

Массив K3 создаётся похожим образом:

arrname = k3.VarArray(<length>, <name>)

Здесь <length> — это длина будущего массива, а <name> — его имя в K3.

Eksklamacia.png Не забывайте, что хотя Python может работать с динамическими списками, массивы K3 – статические, то есть содержат ровно столько элементов, какая длина указана при создании.

С точки зрения Python объект VarArray — это список объектов типа Var, каждый из которых – один элемент массива, например

for member in arrname:
	print(member.value)

выведет в консоль (в панель команд) значения всех элементов массива arrname

Аналогичным образом можно использовать и глобальные переменные и массивы, например:

gl_var = k3.GlobalVar(‘name’)

аналогично записи

global
name;

в K3, то есть объявляет глобальную переменную с именем name. В результате её значение можно получить (gl_var.value), проверить, было ли оно раньше присвоено (k3.isvardef(‘name’)) и так далее.

Учтите, что функция isvardef принимает не саму переменную, а её имя, то есть её аргумент должен быть строкой.

Работа с глобальными массивами осуществляется через k3.GlobalVarArray

Получение параметров в макропрограмму (getpar)

Для того, чтобы программа на python могла получить параметры макро, переданные через строку запуска, также как и в макропрограмме, нужно воспользоваться функцией getpar.

income = k3.getpar()

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

val0 = income[0].value
val1 = income[1].value
…
и т.д.

В отличие от макропрограммы в Python при вызове getpar не объявляется явно количество значений, которые мы собираемся получить.