2009-02-01 5 views
6

Je développe, en C++, un progiciel de conception assistée par ordinateur pour circuits imprimés et schémas (aka EDA CAD). Il utilise Lua pour certaines choses spécifiques, mais j'aimerais étendre le rôle de Lua pour qu'il implémente une grande partie de la logique de l'interface utilisateur. Je voudrais reconstruire les internes d'une manière qui permet aux gens de changer le comportement de l'interface utilisateur facilement en éditant le Lua, et aussi ajouter de nouvelles fonctionnalités. Le problème est, à court d'exposer une sorte d'API massive au code Lua, je ne peux pas penser à un bon moyen de le faire. Je soupçonne qu'une API massive, avec un appel de fonction pour tout ce que je peux penser est probablement un mauvais design. Comment puis-je concevoir un système permettant aux utilisateurs de réaliser des choses auxquelles je n'avais même pas pensé?Comment concevoir la structure d'un logiciel de CAO?

Y a-t-il un bon document ou un bon livre que je puisse lire, ou un forum où les gens parlent de ce genre de chose? J'ai cherché et réfléchi pendant plusieurs mois maintenant, et je ne suis toujours pas sûr de la réponse. Le projet s'appelle LiquidPCB.

Un grand merci

Hugo

Répondre

0

Essayez SWIG (Wrapper simplifié et générateur Interface). Il peut générer des wrappers Lua pour les fichiers d'en-tête C/C++ existants. Cela vous permettra d'exposer rapidement toutes les API à Lua. En fonction de votre expérience, vous pouvez décider d'une architecture différente.

+0

Ma question est beaucoup moins sur Lua, et beaucoup plus sur la * structure de l'application *. Je pourrais utiliser Lua, ou Python, ou C++. La question est vraiment: "Quelle devrait être l'interface entre l'application et les plugins?" – Rocketmagnet

1

Il est clair que vous devrez exposer certaines fonctions à lua via votre API afin que les développeurs puissent composer et combiner ces fonctionnalités.

Je trébuche à travers ce bon presentation sur la façon de concevoir correctement une API et les recommandations incluses correspondent à ce que j'ai fait dans le passé. Cela vous aidera à guider votre conception.

Une fois que vous avez une API, je recommande d'utiliser le command pattern en lua ou en C++ pour créer un pont avec l'interface utilisateur. Dans le passé, j'ai encapsulé chaque appel d'API dans une commande et la commande pouvait alors être appelée via un script. Je ne connais pas lua mais je sais que Python est un bon langage de script à utiliser avec vos commandes.

Bonne chance pour votre projet.

0

Ouvre le projet? Par la suite, vos utilisateurs vont avoir un certain niveau de connaissances en programmation, et ils vont également vouloir mettre en œuvre de nouvelles fonctionnalités. De cette façon, les deux rôles sont remplis, en tant que client et développeur. Pourquoi ne pas avoir une arborescence de sources publiques en lecture seule sur laquelle ils peuvent extraire, travailler et soumettre des correctifs. Si vous estimez que leur travail est suffisant et pertinent, vous pouvez l'inclure dans la prochaine version.

Si vous estimez que le développeur est assez bon en général, vous pouvez lui donner un accès direct en écriture à l'arborescence source et commencer à planifier de nouvelles fonctionnalités avec lui.

+0

Cela fait longtemps sur Sourceforge. Ça s'appelle Liquidpcb. – Rocketmagnet

1

Je voudrais souligner ce qui se passe dans le développement de la nouvelle version de Blender, 2.50. L'API Python précédente était une couche manuscrite essayant d'envelopper la plupart des fonctionnalités. Le new API enveloppera automatiquement l'accès à la structure de données via un Data API.Plus de documents here.

0

La nouvelle API Sketchup Ruby est un très bon exemple de ce que vous cherchez. Comparez-le avec l'API plus ancienne pour quelques idées intéressantes sur ce que pas à faire.

Questions connexes