2009-02-01 11 views
6

Sto sviluppando, in C++, un pacchetto di progettazione assistita da computer per circuiti stampati e schemi (alias EDA CAD). Usa Lua per alcune cose specifiche, ma mi piacerebbe espandere il ruolo di Lua in modo tale da implementare gran parte della logica dell'interfaccia utente.Come si progetta la struttura di un pacchetto CAD?

Vorrei ricostruire gli interni in un modo che consenta alle persone di cambiare facilmente il comportamento dell'interfaccia utente modificando la Lua e aggiungendo nuove funzionalità.

Il problema è, a meno di esporre una specie di API massiccia al codice Lua, non riesco a pensare a un buon modo per farlo. Sospetto che un'enorme API, con una funzione che richiama tutto ciò a cui riesco a pensare, sia probabilmente un cattivo progetto. Come posso progettare un sistema che consenta agli utenti di implementare cose a cui non avevo nemmeno pensato?

C'è un buon documento o libro che posso leggere, o un forum in cui la gente parla di questo genere di cose. Ho cercato e pensato per molti mesi e non sono ancora sicuro di quale sia la risposta.

BTW, il progetto si chiama LiquidPCB.

Molte grazie

Hugo

risposta

0

Prova SWIG (semplificato Wrapper e Interface Generator). Può generare wrapper Lua per i file di intestazione C/C++ esistenti. Ti permetterà di esporre rapidamente tutte le API a Lua. In base alla tua esperienza, puoi decidere su diverse architetture.

+0

La mia domanda è molto meno su Lua e molto altro sulla * struttura dell'applicazione *. Potrei usare Lua, o Python o C++. La domanda è davvero: "Come dovrebbe essere l'interfaccia tra l'applicazione e i plugin?" – Rocketmagnet

1

È chiaro che sarà necessario esporre alcune funzioni a lua tramite l'API in modo che gli sviluppatori possano comporre e combinare tali funzioni.

Mi imbatto in questo buono presentation su come progettare correttamente un'API ei consigli inclusi corrispondono a quello che ho fatto in passato. Ti aiuterà a guidare il tuo design.

Una volta che si dispone di un'API, si consiglia di utilizzare lo command pattern in lua o in C++ per creare un bridge con l'interfaccia utente. In passato, ho incapsulato ogni chiamata API in un comando e il comando poteva quindi essere chiamato tramite script. Non conosco lua ma so che Python è un buon linguaggio di script da usare con i tuoi comandi.

Buona fortuna per il tuo progetto.

0

Apre il progetto?

A giudicare dai suoni, i tuoi utenti avranno un certo livello di conoscenza della programmazione e vorranno anche implementare nuove funzionalità. In questo modo soddisfano due ruoli, come il cliente e lo sviluppatore.

Perché non disporre di un albero di sorgenti pubbliche di sola lettura che è possibile controllare, elaborare e inviare patch all'utente. Se poi ritieni che il loro lavoro sia abbastanza buono e pertinente, puoi includerlo nella prossima versione.

Se si ritiene che lo sviluppatore abbastanza bene in generale, si potrebbe dare loro accesso diretto in scrittura all'albero di origine e iniziare a pianificare nuove funzionalità con loro.

+0

È su Sourceforge da anni. Si chiama Liquidpcb. – Rocketmagnet

1

Vorrei sottolineare cosa sta succedendo nello sviluppo della nuova versione di Blender, 2.50. La precedente API Python utilizzata per essere un livello scritto a mano cercando di avvolgere la maggior parte delle funzionalità. Lo new API avvolgerà automaticamente l'accesso alla struttura dati attraverso un Data API.Altri documenti here.

0

La nuova API Sketchy Ruby è un ottimo esempio di ciò che stai cercando. Confrontalo con la vecchia API per alcuni approfondimenti interessanti su cosa fare non.

Problemi correlati