воскресенье, 4 октября 2009 г.

Необычная среда для обычных задач

Я давно перестал верить глазам своим: одну причину я уже демонстрировал, теперь хочу поговорить о еще одной. Так мне кто-нибудь сможет ответить: Blender – это редактор трехмерной графики с возможностью программирования или – среда разработки на Python с мощными графическими возможностями. До недавнего времени, я считал, что первый вариант. Однако, программирование графики – сама по себе, задача не из простых. В некоторых средах программирования разработка графики – дело, требующие хорошей подготовки. Меня поймут те, кому доводилось писать графику, используя библиотеки DirectX или OpenGL. Bender не знаком с Direct’ом, но зато очень близко знает OpenGL. Если в Blender можно программно рисовать, то с задачами на расчеты он должен справляться вполне успешно. Проверим это предположение. Напишем в Blender следующий скрипт:

dt = 1234567
td = 0

while dt > 0:
td = td * 10 +(dt % 10)
dt = dt // 10

print (td)


Как видно, простая школьная задача по программированию решена: данное число записано задам наперед. Этот скрипт продемонстрировал нам возможность решать в Blender целый класс школьных задач по программированию. В частности, мы можем узнать, является ли данное число числом-перевертышем или же является данное число счастливым числом (естественно, сделав необходимые проверки).
В этом скрипте мне не нравится один момент: всегда ли нужно, проверяя новое число, вводить его в скрипт или же есть какая другая возможность? Она есть – и не одна. Можно соорудить свой собственный интерфейс для комфортной работы со скриптом. Правда в большинстве школьных задач, даже олимпиадного уровня, не требуется создания GUI, а ввод и вывод данных осуществляется в текстовые или типизированные файлы. Так как, я уже не школьник, а Blender обладает мощными графическими возможностями, то сооружать я буду именно GUI. Придется мудрить со скриптом, создавая оболочку для контроля его выполнения. А когда нас пугала работа с API – функциями? Никогда. Даже всегда интересовала.



Довольно достойно получилось. Как Вы считаете? Скрипт выкладываю полностью – основная его ценность, конечно, не в решении задачи, которую решать в Blender’е мало кому придет голову, а в том, что основная нагрузка данного скрипта состоит именно в создании GUI.

import Blender
from Blender.BGL import *
from Blender.Draw import *

'''
autor : ArkSmoke
url : http://arkpython.blogspot.com
date : 10.09
'''
DATA = Create(1234567)
ATAD = Create(0)

EVENT_NOEVENT = 1
EVENT_EXIT = 2
EVENT_DRAW = 3

def draw():

global DATA
global EVENT_NOEVENT,EVENT_EXIT,EVENT_DRAW

glClear(GL_COLOR_BUFFER_BIT)
DATA = Number("No. of sides: ", EVENT_NOEVENT, 10, 55, 210, 18, DATA.val, 10, 99999999, "Number of sides of out polygon");
Button("Draw",EVENT_DRAW, 10, 10, 80, 18)
Button("Exit",EVENT_EXIT, 140, 10, 80, 18)

def event(evt, val):
if (evt == QKEY and not val):
Exit()

def bevent(evt):
global DATA
global EVENT_NOEVENT,EVENT_DRAW,EVENT_EXIT

if (evt == EVENT_EXIT):
Exit()
elif (evt== EVENT_DRAW):
ref(DATA.val)


def ref(dt):
td = 0

while dt > 0:
td = td * 10 +(dt % 10)
dt = dt // 10
print('done ',td)

Register(draw, event, bevent)


К вопросу о GUI в Blender я еще вернусь, как и к вопросу о решении олимпиадных задач в нем. Но всему - свое время. От простого к сложному.

Комментариев нет:

Отправить комментарий