如何设计CAD包的结构?

时间:2009-02-01 19:42:11

标签: c++ architecture lua cad

我正在用C ++开发一种用于印刷电路板和原理图(又名EDA CAD)的计算机辅助设计包。它使用Lua来完成某些特定的事情,但我想扩展Lua的角色,以便它实现了很多用户界面逻辑。

我想以一种让人们通过编辑Lua轻松改变用户界面行为的方式重新构建内部,并添加全新的功能。

问题是,如果没有将某种大规模的API暴露给Lua代码,我想不出一个好方法。我怀疑一个庞大的API,函数调用我能想到的一切可能是一个糟糕的设计。如何设计一个允许用户实现我甚至没想过的东西的系统?

是否有我能阅读的好文件或书籍,或人们谈论此类事情的论坛。我一直在寻找和思考好几个月,我仍然不确定答案是什么。

BTW,该项目名为LiquidPCB

非常感谢

雨果

5 个答案:

答案 0 :(得分:1)

很明显,您需要通过API向lua公开一些函数,以便开发人员可以编写和组合这些功能。

我偶然发现了关于如何正确设计API的好presentation,并且所包含的建议与我过去所做的相符。它将帮助您指导您的设计。

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

祝你的项目好运。

答案 1 :(得分:1)

我想指出在新的Blender版本2.50的开发过程中发生了什么。以前的Python API曾经是一个试图包装大多数功能的手写层。 new API将通过Data API自动包装对数据结构的访问。更多文件here

答案 2 :(得分:0)

尝试SWIG(Simplified Wrapper和Interface Generator)。它可以为现有的C / C ++头文件生成Lua包装器。它将允许您快速将所有API公开给Lua。根据您的经验,您可以决定不同的架构。

答案 3 :(得分:0)

开源项目?

通过它的声音,您的用户将具有一定程度的编程知识,并且他们也将要实现新功能。以这种方式履行两个角色,作为客户和开发人员。

为什么不拥有一个公开的只读源树,他们可以检查,处理并向您提交补丁。如果您认为他们的工作足够好并且足够相关,那么您可以将其包含在下一个版本中。

如果您认为开发人员一般情况良好,您可以直接对源树进行写入访问,并开始使用它们规划新功能。

答案 4 :(得分:0)

新的Sketchup Ruby API是您正在寻找的一个很好的例子。将其与较旧的API进行比较,以获得有关的内容的一些有趣见解。