Python и К3

Модераторы: Лабутин Сергей Евгеньевич, Алек(андр

Python и К3

Сообщение Алек(андр » 29 авг 2012 09:52

Бывают случаи когда функционала макроязыка не хватает. Тогда приходится обращаться к разработчикам с просьбой написать новую функцию или другой вариант использовать внешние приложения и обращаться к ним. Одной из таких лазеек стал язык PYTHON. В случае с К3 используется версия 2.6 этого замечательного языка.

Итак вот один из таких случаев. Мне понадобилась функция которая проверяла бы возможность преобразования строки в число. Это isdigit(). Очень распространенная функция, которая встречается во многих языках высокого уровня. В случае с ПИТОН это метод для строкового типа. Столкнулся с проблемкой в виде запятой. Пришлось применить метод replace.

В итоге реализация выглядит так.

Вызов
Код: Выделить всё
      macro ProtoPath+"isDigit.py" ByRef rr ByRef Result;;


сам код файла

Код: Выделить всё
# -*- coding: cp1251 -*-
import k3
params = []
params = k3.getpar()
vString = params[0]
vResult = params[1]
vString.value.replace (",",".")
vResult.value = vString.value.isdigit()

В итоге на вход строка на выходе исправленная строка и логическое значение в переменной Result. 0-невозможно 1-можно

исправление строки заключается в замене запятой на точку

P/S спустя годы дополню

Для версии 7,3 используется версия 3.3. 07 декабря 2015 появилась первая ласточка с 3.5.
Аватара пользователя
Алек(андр
 
Сообщения: 1170
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение Рыжий Пёс » 29 авг 2012 11:54

Алек(андр писал(а):Итак вот один из таких случаев. Мне понадобилась функция которая проверяла бы возможность преобразования строки в число.

А не проще использовать OnError?
Аватара пользователя
Рыжий Пёс
 
Сообщения: 342
Зарегистрирован: 06 фев 2010 00:11

Re: Python и К3

Сообщение Алек(андр » 29 авг 2012 12:41

Рыжий Пёс писал(а):
Алек(андр писал(а):Итак вот один из таких случаев. Мне понадобилась функция которая проверяла бы возможность преобразования строки в число.

А не проще использовать OnError?

Тема эта не о частном случае "как можно", а о использовании ПИТОН.
Ну это частности, конечно можно, но отвечу развернуто. Я уже использую OnError в этом макросе. Кроме того меня не устраивает такой вариант "не делать". То бишь получил жикансел и фиг с ним.
Аватара пользователя
Алек(андр
 
Сообщения: 1170
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение Рыжий Пёс » 29 авг 2012 12:48

Ясное дело, пример неудачный.
Если нужна именно ФУНКЦИЯ, то лучше использовать script.
В данном случае, непонятно в чём преимущества python.
Аватара пользователя
Рыжий Пёс
 
Сообщения: 342
Зарегистрирован: 06 фев 2010 00:11

Re: Python и К3

Сообщение Алек(андр » 29 авг 2012 13:52

Преимущества есть не всегда. Собственно писать на питоне это совсем по другому. И в ряде случаев макросов хватает выше крыши. Питон это скриптовый язык высокого уровня кроссплатформенный(что для К3 значения не имеет, но все же), объектноориентированный. Имеет кучу библиотек, примеров кода и готовых программулин. Если сравнивать программирование VBS и PYTHON, то питон попроще будет. Но это сугубо мое мнение. Если сравнивать скорость, то питон шустрее макроязыка. можем получить до 10 раз перимущество. И главное есть k3.pyd библиотека функций и команд из макроязыка.

в результате выполнения
Код: Выделить всё
import k3
k3.generate_stub()


получим файл с перечнем доступных функций и команд модуля.
поскольку язык регистрозависимый, то имеет значение написание var Var vAr это все разные слова в питоне
Аватара пользователя
Алек(андр
 
Сообщения: 1170
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение Ручей » 29 авг 2012 14:00

Если питон использовать вместо VBScript, то удобнее создавать те же спецификации?
Окошко через питон можно получить в К3 для ввода своих данных?
Ручей
 
Сообщения: 878
Зарегистрирован: 15 июл 2011 19:55

Re: Python и К3

Сообщение Алек(андр » 29 авг 2012 14:37

Ручей писал(а):Если питон использовать вместо VBScript, то удобнее создавать те же спецификации?
Окошко через питон можно получить в К3 для ввода своих данных?

Окошки можно... только отчеты лучше получать все таки или FastReport или CristalReport или по старому MSOfice
Аватара пользователя
Алек(андр
 
Сообщения: 1170
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение Ручей » 29 авг 2012 15:42

Тут иногда такие ответы, что ощущение, что ничего не знаю.
А как эти отчёты использовать? Что из себя представляют?
В К3 их как пихать?
Создали К3 такого вида, сами пользуетесь другими вещами для К3.
Ручей
 
Сообщения: 878
Зарегистрирован: 15 июл 2011 19:55

Re: Python и К3

Сообщение Алек(андр » 30 авг 2012 10:12

Ну FAstReport отчеты используются в штатном К3. Что такое FR. Можно почитать в интернете. Дело в том , что универсальных инструментов не бывает. Важно что бы они могли стыковаться и работать совместно. К3 позволяет стыковать к себе все что как то работает под WINDOWS. Вот и все. Для отчетных форм лучше использовать специализированный инструмент чем писать код на каком бы то ни было языке.

по поводу FastReport завел тему
Аватара пользователя
Алек(андр
 
Сообщения: 1170
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение Ручей » 20 июл 2013 00:00

Запустил отладчик питона IDLE (Python GUI). Добавил в системный путь путь к папке bin. Дальше пытаюсь импортировать библиотеку import k3 или import machine.
Мне выдаёт ошибку


Traceback (most recent call last):
File "<pyshell#164>", line 1, in <module>
import machine
ImportError: DLL load failed: %1 не является приложением Win32.


Почему не получается подключить данные библиотеки из питона? Ведь они подключаются в файлах, что лежат в CNC.
Какими функциями подключаться к базе, что бы можно было отчёт написать? Пока накопал, что надо ставить отдельно pyodbc.
Ручей
 
Сообщения: 878
Зарегистрирован: 15 июл 2011 19:55

Re: Python и К3

Сообщение Алек(андр » 22 июл 2013 08:10

В модуле CNC или в К3 язык PYTHON используется в режиме расширения функционала приложений. Для этого используются файлы с расширением pyd ( Python Dynamic module ). Это значит, что отладчик должен перехватывать процессы python порождаемые в ядре К3 или модуле CNC. IDLE (Python GUI) такую задачу выполнить не сможет. Большинство отладчиков и редакторов Python предназначены только для работы с приложениями написанными полностью на Python. Из известных мне с такой задачей справляются winpdb, WINGide, MS Visual Studio.

winpdb - позволяет отлаживать код из К3, но частенько виснет. Поэтому от него я отказался.
WINGide - коммерческий продукт, но работает безотказно.
MS Visual Studio - имеет возможность перехвата процесса python и в чем то даже лучше WINGIDE

Однако и они без настройки работать не будут. Хотя настройки там простые.Отлаживаемые модули должны импортировать модуль отладки. Сам модуль должен присутствовать в правильной папке (PROTO или рядом с модулем CNC) в самих отладчиках надо поставить правильные галочки в настройках. + настройки антивируса и фаервола .

:arrow: :arrow: :arrow: Видео с демонстрацией отладки кода
Аватара пользователя
Алек(андр
 
Сообщения: 1170
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение bonduran » 30 июн 2014 15:03

Подскажите пожалуйста, можно ли на языке python реализовать выбор объектов в сцене, например заменить команду К3 objident : object, т.е. можно написать k3.objident(k3.k_last,1,object) но не k3.objident(k3.k_:,object)
Юрий С. Интен-центр
bonduran
 
Сообщения: 66
Зарегистрирован: 14 фев 2013 15:23

Re: Python и К3

Сообщение Алек(андр » 01 июл 2014 09:15

bonduran писал(а):Подскажите пожалуйста, можно ли на языке python реализовать выбор объектов в сцене, например заменить команду К3 objident : object, т.е. можно написать k3.objident(k3.k_last,1,object) но не k3.objident(k3.k_:,object)

object - это зарезервированный оператор в питоне используйте свободные имена.Например Obj
вместо двоеточия (:) для точки останова используйте функцию k3.interact() Для использования прерывания ввода в командах используйте ключ k3.k_interact

Obj=k3.Var()
k3.objident(k3.k_interact,Obj)
Аватара пользователя
Алек(андр
 
Сообщения: 1170
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

Re: Python и К3

Сообщение Ручей » 18 авг 2014 09:39

Знатоки по Python, нужна подсказка.
Постепенно пробую писать утилиту, которая создаёт библиотеку материалов для К3 из картинок вложенных в папку.
Т.к., в Python я пока по нулям, по ходу действий ищу ответы.
Мне надо получить список файлов в папке учитывая расширения (jpg, tga, ...).
Опробовал по книжкам примеры, но не получил нужного результата.
Как грамотно написать данную функцию?

Дальше, мне надо каждую картинку записать в базу данных, как значение поля.
Как правильно это сделать?
Пока мысль (но не пробовал) такая:
picture = file("картинка")
sql = "insert таблица (поле) (значение = picture)"

Т.е., переменной присваиваем объект картинка и его, как значение заносим в таблицу?
Не нужно ли перед этим с картинкой что-то делать? переводить в двоичный формат?
Ручей
 
Сообщения: 878
Зарегистрирован: 15 июл 2011 19:55

Re: Python и К3

Сообщение Алек(андр » 18 авг 2014 10:31

Ручей писал(а):Знатоки по Python, нужна подсказка.
Постепенно пробую писать утилиту, которая создаёт библиотеку материалов для К3 из картинок вложенных в папку.
Т.к., в Python я пока по нулям, по ходу действий ищу ответы.
Мне надо получить список файлов в папке учитывая расширения (jpg, tga, ...).
Опробовал по книжкам примеры, но не получил нужного результата.
Как грамотно написать данную функцию?

Дальше, мне надо каждую картинку записать в базу данных, как значение поля.
Как правильно это сделать?
Пока мысль (но не пробовал) такая:
picture = file("картинка")
sql = "insert таблица (поле) (значение = picture)"

Т.е., переменной присваиваем объект картинка и его, как значение заносим в таблицу?
Не нужно ли перед этим с картинкой что-то делать? переводить в двоичный формат?


К сожалению тут вопрос не про питон, а про то как добавить в поле таблицы двоичные данные. Я этот вопрос так и не решил пока. Добавлял через библиотеку материалов все текстуры. Это можно сделать групповым выбором файлов. При этом имя текстуры получается=имя файла. А вот дальше уже можно работать с с загруженными текстурами при помощи SQLзапроса для создания материала.

1. Создать новую библиотеку материалов через РЕДАКТОР БИБЛИОТЕК МАТЕРИАЛОВ/БИБЛИОТЕИ/СОЗДАТЬ.
1.1 Создать структуру папок в библиотеке (ЕСЛИ НАДО!!!).
2. Загрузить Текстуры в эту самую библиотеку РЕДАКТОР БИБЛИОТЕК МАТЕРИАЛОВ/СЕРВИС/ТЕКСТУРЫ.
3. Создать материалы <- вот тут уже поможет SQL.
Аватара пользователя
Алек(андр
 
Сообщения: 1170
Зарегистрирован: 17 ноя 2008 10:16
Откуда: Московская область

След.

Вернуться в К3-Мебель. Программа для производства и продажи мебели.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron