2011-01-02 29 views
4

Mein Plan:Ironpython und Nodebox in C#

Ich versuche, meine C# Projekt-Setup mit Nodebox zu kommunizieren, um eine bestimmte Funktion zu nennen, die eine grafische Darstellung auffüllt und zieht es in einem neuen Fenster.

aktuelle Situation: [fixed ... siehe Update2]

ich bereits enthalten sind alle Python-Module benötigt, aber im noch ein

Library 'GL' not found

es scheint, dass die pyglet Modul Bedürfnisse bekommen ein Verweis auf GL/gl.h, kann aber aufgrund des IronPython-Verhaltens nicht gefunden werden.

Voraussetzung:

Das Projekt so gering wie möglich bleiben muss, ohne dass neue Pakete zu installieren. Deshalb habe ich alle meine Module in den Projektordner kopiert und möchte diesen oder einen ähnlichen Weg beibehalten.

Meine Frage:

Gibt es eine bestimmte Abhilfe für mein Problem oder ein Update für die Bibliothek-Ordner missmatch. Habe einige Artikel über Tao-Opengl und OpenTK gelesen, kann aber keine gute Lösung finden.

Update1:

Aktualisierte meinen Quelltext mit einem kleinen Pyglet Fenster-Rendering-Beispiel. Problem ist in Pyglet und referenzierte c-Objekte. Wie schließe ich sie in mein C# -Projekt ein, um angerufen zu werden? Keine Ahnung bis jetzt ... experimentierfreudig jetzt. Halten Sie auf dem Laufenden.

Sample 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); 

Sample 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:

Zeile 139 [pyglet/lib.py] sys.platform ist nicht win32 ... da war der Fehler. Regelt es nur um mit der Zeile:

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

nun folgende Fehler:

'module' object has no attribute '_getframe' 

eine Art Schmerz, es zu beheben. Aktualisierung mit Ergebnissen ...

Update3:

Fest durch folgende Zeile direkt nach der ersten Zeile in C# -Code und fügte hinzu:

setup.Options["Frames"] = true; 

Aktuelles Problem:

No module named unicodedata, aber in Python26/DLLs nur ein *.pyd Datei`. Also ... wie implementiere ich es jetzt ?!

Update4:

durch Surfen Fixed: link text und das Hinzufügen von unicodedata.py und '.pyd zu C# Projectfolder.

Aktuelles Problem:

'libGL.so nicht gefunden' ... Jungs .. im fast Aufgeben auf nodebox für .. C# fortgesetzt

Update5 werden:

Ich gab auf:/Workaround: C# Kommunikation mit Knoten über XML und Dateisystemwächter. Nicht optimal, aber Fall gelöst.

+0

gefunden folgenden Artikel über '_getframe': http://ironpython.codeplex.com/workitem/1042?ProjectName=ironpython Und ich weiß immer noch nicht, wie es zu beheben .. Was bedeutet -X: Frame-Option bedeuten? – proxylittle

Antwort

0

-X: Frames aktiviert die Option frames als Laufzeit (es verlangsamt den Code ein wenig, um jederzeit auf die Python-Frames zugreifen zu können).

Rahmen zu ermöglichen, wenn Hosting Sie gerade tun müssen:

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

Anstelle der Null, die Sie jetzt vorbei sind. Das ist nur ein neues Wörterbuch für das Optionen-Wörterbuch mit dem Inhalt "Frames" auf True festgelegt. Sie können dort auch andere Optionen einstellen und generell ist die Option -X: Name hier genauso wie für die Kommandozeile.

+0

jede helfende Antwort ist eine bessere als keine Antwort. Ich werde es akzeptieren. – proxylittle