2009-02-01 84 views
6

我正在用C++开发用于印刷电路板和原理图(又名EDA CAD)的计算机辅助设计软件包。它使用Lua来处理一些特定的事情,但我想扩展Lua的角色,以便实现大部分的用户界面逻辑。如何设计CAD包装的结构?

我想重新建立的方式,它可以让人们通过编辑的Lua很容易地改变用户界面行为的内部,也可以增加全新的功能。

的问题是,短期暴露某种巨大的API来的Lua代码的,我想不出一个好办法做到这一点。我怀疑一个庞大的API,带有一个我能想到的所有功能的函数可能是一个糟糕的设计。我如何设计一个让用户实现我从未想过的事情的系统?

有没有一本很好的文档或我可以阅读的书,或者是一个人们谈论这类事情的论坛。我一直在寻找并思考好几个月,而我仍然不确定答案是什么。

顺便说一句,该项目被称为LiquidPCB

非常感谢

雨果

回答

0

尝试SWIG(简体包裹生成器)。它可以为现有的C/C++头文件生成Lua包装器。它可以让你快速将所有的API公开给Lua。根据你的经验,你可以决定不同的架构。

+0

我的问题是关于Lua的问题,关于应用程序的*结构更多。我可以使用Lua,Python或C++。问题的确是:“应用程序和插件之间的界面应该是什么样的?” – Rocketmagnet 2009-02-11 15:30:09

1

很明显,你将需要揭露一些功能,通过您的API来LUA使开发人员可以编写和组合这些功能。

我偶然发现了这个好的presentation关于如何正确设计一个API,并且所包含的建议与我过去所做的相匹配。它会帮助你指导你的设计。

一旦你有一个API,我建议使用LUA或C++中的command pattern创建与UI的桥梁。在过去,我已经将每个API调用封装在一个Command中,然后可以通过脚本调用该命令。我不知道lua,但我知道Python是一种很好的脚本语言,可以与您的命令一起使用。

祝你的项目好运。

0

开源项目?

通过它用户的声音,将有编程知识一定水平,他们也将要实现新的功能。以这种方式履行两个角色,即客户和开发者。

为什么不能有一个公开的只读源代码树,他们可以检出,处理并向您提交补丁。如果您认为自己的工作足够好并且相关程度足够高,则可以将其纳入下一个版本。

如果你认为开发商一般不够好,你可以给他们的源代码树直接写访问,并开始计划他们的新功能。

+0

它已经在Sourceforge上很久了。它被称为Liquidpcb。 – Rocketmagnet 2009-04-22 22:47:05

1

我想指出新的Blender版本2.50的发展情况。以前的Python API曾经是一个手写层,试图包装大多数功能。 new API将通过Data API自动换行访问数据结构。更多文档here

0

新的Sketchup Ruby API是您正在寻找的一个很好的例子。将它与旧API比较,以获得关于不是要做的一些有趣见解。