2009-02-01 28 views
6

Estoy desarrollando, en C++, un paquete de Diseño asistido por computadora para placas de circuitos impresos y esquemas (también conocido como EDA CAD). Utiliza Lua para algunas cosas específicas, pero me gustaría ampliar el rol de Lua para que implemente gran parte de la lógica de la interfaz de usuario.¿Cómo diseño la estructura de un paquete de CAD?

Me gustaría volver a construir las partes internas de una manera que permita a las personas cambiar fácilmente el comportamiento de la interfaz de usuario editando el Lua, y también agregar nuevas funcionalidades.

El problema es que, a excepción de exponer algún tipo de API masiva al código Lua, no puedo pensar en una buena forma de hacerlo. Sospecho que una API masiva, con una función llamada para todo lo que puedo pensar es probablemente un mal diseño. ¿Cómo puedo diseñar un sistema que permita a los usuarios implementar cosas que ni siquiera había pensado?

¿Hay un buen documento o libro que pueda leer, o un foro donde la gente hable de este tipo de cosas? He estado buscando y pensando durante muchos meses, y todavía no estoy seguro de cuál es la respuesta.

BTW, el proyecto se llama LiquidPCB.

Muchas gracias

Hugo

Respuesta

0

Trate SWIG (simplificado Envoltura y el generador de interfaz). Puede generar contenedores Lua para archivos de encabezado C/C++ existentes. Le permitirá exponer rápidamente todas las API a Lua. En función de su experiencia, puede decidir sobre una arquitectura diferente.

+0

Mi pregunta es mucho menos sobre Lua, y mucho más acerca de la * estructura de la aplicación *. Podría estar usando Lua, o Python, o C++. La pregunta es realmente: "¿Cómo debería ser la interfaz entre la aplicación y los complementos?" – Rocketmagnet

1

Está claro que necesitará exponer algunas funciones a lua a través de su API para que los desarrolladores puedan componer y combinar esas características.

Me tropiezo con esta buena presentation sobre cómo diseñar correctamente una API y las recomendaciones incluidas coinciden con lo que he hecho en el pasado. Te ayudará a guiar tu diseño.

Una vez que tenga una API, le recomiendo usar la command pattern en lua o en C++ para crear un puente con la interfaz de usuario. En el pasado, he encapsulado cada llamada API en un Comando y el comando se podía llamar a través de un script. No sé lua pero sé que Python es un buen lenguaje de script para usar con tus comandos.

Buena suerte con su proyecto.

0

Opensource el proyecto?

Según sus sonidos, sus usuarios tendrán un cierto nivel de conocimiento de programación, y también querrán implementar nuevas características. De esta forma, cumplen dos roles, como el cliente y el desarrollador.

¿Por qué no tener un árbol de fuentes públicas de solo lectura que pueden verificar, trabajar y enviar revisiones a usted? Si luego considera que su trabajo es lo suficientemente bueno y relevante, puede incluirlo en la próxima versión.

Si considera que el desarrollador es lo suficientemente bueno en general, podría darles acceso de escritura directa al árbol de fuentes y comenzar a planificar nuevas funciones con ellos.

+0

Ha estado en Sourceforge por años. Se llama Liquidpcb. – Rocketmagnet

1

Me gustaría señalar lo que está sucediendo en el desarrollo de la nueva versión de Blender, 2.50. La anterior API de Python solía ser una capa escrita a mano que intentaba ajustar la mayoría de las funcionalidades. El new API automáticamente ajustará el acceso a la estructura de datos a través de Data API.Más documentos here.

0

La nueva API Sketchup Ruby es un buen ejemplo de lo que estás buscando. Compárelo con la API anterior para obtener información interesante sobre qué no hacer.

Cuestiones relacionadas