我的计划:
我正在尝试设置我的 C# 项目以与 Nodebox 通信以调用某个函数来填充图形并将其绘制在新窗口中。
当前情况:[已修复...参见 Update2]
我已经包含了所有需要的 python 模块,但我仍然得到一个
Library 'GL' not found
似乎 pyglet
模块需要对 GL/gl.h
的引用,但由于 IronPython 的行为无法找到它。
要求:
项目需要在不安装新包的情况下保持尽可能小。这就是为什么我已将所有模块复制到项目文件夹中并希望以类似方式保留它。
我的问题:
我的问题是否有特定的解决方法或库文件夹不匹配的修复程序。
看过一些关于Tao-Opengl
和OpenTK
的文章,但找不到好的解决方案。
更新 1:
用一个小的 pyglet 窗口渲染示例更新了我的源代码。问题出在 pyglet 和引用的 c 对象中。我如何将它们包含在我要调用的 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 不是 win32...有错误。仅使用以下行修复它:
from pyglet.gl.lib_wgl import link_GL, link_GLU, link_WGL
现在出现以下错误:
'module' object has no attribute '_getframe'
修复它有点痛苦。正在更新结果...
更新3:
通过在 C# 代码的第一行之后添加以下行来修复:
setup.Options["Frames"] = true;
当前问题:
没有名为 unicodedata 的模块
,但在 Python26/DLLs
中只有一个 *.pyd
文件`。那么..我现在该如何实现?!
更新4:
通过浏览修复:link text并将 unicodedata.py
和 '.pyd
添加到 C# Projectfolder。
当前问题:
'libGL.so not found'...伙计们..我几乎要放弃 C# 的节点箱了..继续
更新5:
我放弃了:/解决方法:c# 通过 xml 和 filesystemwatchers 与 nodebox 通信。不是最优的,但案例已解决。
最佳答案
-X:Frames 启用 frames 选项作为运行时(它会稍微降低代码速度以便始终访问 Python 框架)。
要在托管时启用框架,您只需要做:
ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(new Dictionary<string, object>() {
{ "Frames", true }
});
而不是您现在传递的 null。这只是为选项字典创建一个新字典,并将内容“Frames”设置为 true。您也可以在那里设置其他选项,通常 -X:Name 选项在这里与命令行相同。
关于c# - C# 中的 IronPython 和 Nodebox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579210/