我的计划:

我正在尝试设置我的 C# 项目以与 Nodebox 通信以调用某个函数来填充图形并将其绘制在新窗口中。

当前情况:[已修复...见更新 2]

我已经包含了所有需要的 python 模块,但我仍然得到一个



似乎 pyglet 模块需要对 GL/gl.h 的引用,但由于 IronPython 的行为而无法找到它。

要求:

该项目需要在不安装新包的情况下尽可能小。这就是为什么我将所有模块复制到项目文件夹中并希望以这种方式或类似方式保留它的原因。

我的问题:

我的问题是否有某种解决方法或库文件夹不匹配的修复程序。
已经阅读了一些关于 Tao-OpenglOpenTK 的文章,但找不到好的解决方案。

更新 1:

用一个小的 pyglet 窗口渲染示例更新了我的源代码。问题出在 pyglet 和引用的 c-Objects 中。我如何将它们包含在我要调用的 c# 项目中?到目前为止不知道......现在尝试一下。让你保持更新。

示例代码 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);

示例代码 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)

更新 2:

第 139 行 [pyglet/lib.py] sys.platform is not win32 ... 有错误。只需使用以下行即可修复它:
from pyglet.gl.lib_wgl import link_GL, link_GLU, link_WGL

现在出现以下错误:
'module' object has no attribute '_getframe'

修复它有点痛苦。正在更新结果...

更新 3:

通过在 C#-Code 中的第一行之后添加以下行来修复:
setup.Options["Frames"] = true;

当前问题:
No module named unicodedata ,但在 Python26/DLLs 中只是一个 *.pyd 文件`。那么..我现在如何实现它?!

更新 4:

通过冲浪修复:link text 并将 unicodedata.py'.pyd 添加到 C# 项目文件夹。

当前问题:

'libGL.so not found'……伙计们……我几乎要放弃C#的nodebox了……继续

更新 5:

我放弃了:/解决方法:c# 通过 xml 和 filesystemwatchers 与 nodebox 通信。不是最优的,但案例解决了。

最佳答案

-X:Frames 启用帧选项作为运行时(它会稍微减慢代码以始终访问 Python 帧)。

要在托管时启用框架,您只需要执行以下操作:

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

而不是你现在传递的空值。这只是为选项字典创建一个新字典,内容“Frames”设置为 true。您也可以在那里设置其他选项,通常 -X:Name 选项在这里与命令行相同。

关于c# - C# 中的 IronPython 和 Nodebox,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4579210/

10-11 02:10