Макропрограммирование K3 в Python

Материал из K3-Macro

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

Команда 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

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