IronPython и Nodebox в C # - PullRequest
       36

IronPython и Nodebox в C #

4 голосов
/ 02 января 2011

Мой план:

Я пытаюсь настроить мой проект C # для связи с Nodebox, чтобы вызвать определенную функцию, которая заполняет график и рисует его в новом окне.

Текущая ситуация: [исправлено ... см. Обновление2]

Я уже включил все необходимые модули python, но я все еще получаю

Library 'GL' not found

похоже, что для модуля pyglet нужна ссылка на GL/gl.h, но он не может найти его из-за поведения IronPython.

Требования:

Проект должен оставаться как можно меньше без установки новых пакетов. Вот почему я скопировал все свои модули в папку проекта и хотел бы сохранить это так или иным способом.

Мой вопрос:

Есть ли какой-нибудь обходной путь для моей проблемы или исправление несоответствия папок библиотеки. Прочитал несколько статей о Tao-Opengl и OpenTK, но не могу найти хорошее решение.

Update1:

Обновлен мой исходный код с небольшим примером рендеринга окна pyglet. Проблема в pyglet и ссылочных c-объектах. Как мне включить их в мой c # проект, который будет называться? Пока понятия не имею ... сейчас немного экспериментирую. Держу вас в курсе.

SampleCode C #:

ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(null);
ScriptRuntime runtime = new ScriptRuntime(setup);
ScriptEngine engine = Python.GetEngine(runtime);

ScriptSource source = engine.CreateScriptSourceFromFile("test.py");
ScriptScope scope = engine.CreateScope();
source.Execute(scope);

SampleCode Python (test.py):

from nodebox.graphics import *
from nodebox.graphics.physics import Vector, Boid, Flock, Obstacle

flock = Flock(50, x=-50, y=-50, width=700, height=400)
flock.sight(80)

def draw(canvas):
    canvas.clear()
    flock.update(separation=0.4, cohesion=0.6, alignment=0.1, teleport=True)
    for boid in flock:
        push()
        translate(boid.x, boid.y)
        scale(0.5 + boid.depth)
        rotate(boid.heading)
        arrow(0, 0, 15)
        pop()

canvas.size = 600, 300

def main(canvas):
    canvas.run(draw)

Update2:

Строка 139 [pyglet / lib.py] sys.platform не является win32 ... произошла ошибка. Исправил это, просто используя строку:

from pyglet.gl.lib_wgl import link_GL, link_GLU, link_WGL

Теперь следующая ошибка:

'module' object has no attribute '_getframe'

Вид боли, чтобы исправить это. Обновление с результатами ...

Update3:

Исправлено добавлением следующей строки сразу после первой строки в C # -Code:

setup.Options["Frames"] = true;

Текущая проблема:

No module named unicodedata, но в Python26/DLLs есть только *.pyd file`. Итак ... как мне это реализовать сейчас?!

Update4:

Исправлено с помощью серфинга: текст ссылки и добавление unicodedata.py и '.pyd в папку проекта C #.

Текущая проблема:

'libGL.so not found' ... ребята .. я почти сдался на нодбокс для C # .. продолжение следует

Update5:

я сдался: / обходной путь: c # общение с нодбоксом через xml и файловую системуwatchers. Не оптимально, но дело решено.

1 Ответ

0 голосов
/ 05 января 2011

-X: Frames включает опцию frames как время выполнения (это немного замедляет код, чтобы иметь постоянный доступ к кадрам Python).

Чтобы включить кадры при хостинге, вам нужно просто сделать:

ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(new Dictionary<string, object>() {
    { "Frames", true }
});

Вместо нулевого значения, которое вы передаете сейчас.Это просто создание нового словаря для словаря опций с содержимым «Frames», установленным в true.Там вы также можете установить и другие параметры, и в целом опция -X: Name здесь такая же, как и для командной строки.

...