2010-03-28 4 views
15

Los gráficos (dirigidos) representan autómatas finitos. Hasta ahora, mi programa de prueba ha estado escribiendo archivos de puntos para probar. Esto es bastante bueno para las pruebas de regresión (mantenga los archivos de salida verificados en subversión, pregúntele si ha habido algún cambio) y para la visualización. Sin embargo, hay algunos problemas ...¿Hay una buena biblioteca de diseño gráfico que se pueda llamar desde C++?

Básicamente, quiero algo que puede llamarse desde C++ y qué planes un diseño para mis estados y transiciones, pero deja el dibujo para mí - algo que va a permitir que dibuje cosas como yo quiero y dibujar en ventanas GUI (wxWidgets).

También quiero una licencia que permita el uso comercial; no la necesito en este momento, y puedo lanzarla como código abierto, pero no quiero limitar mis opciones de cajero automático.

Los problemas con GraphViz son (1) las advertencias sobre la compilación desde el origen en Windows, (2) todas las dependencias innecesarias para la representación y el análisis, y (3) la (presunta) falta de una API documentada específicamente y puramente diseño.

Básicamente, quiero poder especificar mis estados (con tamaños de rectángulo delimitadores) y transiciones, y leer las posiciones para los estados y puntos de referencia para cada transición, luego dibujar basados ​​en esas coordenadas por mí mismo. Realmente no he descubierto cómo se deben manejar las anotaciones sobre las transiciones, pero debería haber algún tipo de disposición para especificar los tamaños de caja delimitadora para aquellos, asociándolas con las transiciones y leyendo las posiciones.

¿Alguien sabe de una biblioteca que pueda manejar esos requisitos?

No estoy necesariamente en contra de implementar algo para mí, pero en este caso prefiero evitarlo si es posible.

+0

+1 para una pregunta excelente y bien planteada. Lamentablemente, no tengo una respuesta. – aib

+0

Boost tiene algoritmos de gráficos: http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/index.html Creo que la visualización está fuera de su alcance. –

+0

Hay algoritmos de diseño dentro del módulo gráfico de impulso, pero desafortunadamente no son apropiados para gráficos dirigidos. Consulte la sección 22.12 aquí: http://www.boost.org/doc/libs/1_42_0/libs/graph/doc/table_of_contents.html – Kim

Respuesta

0

Aunque las respuestas hasta el momento valían un upvote, no puedo aceptar ninguna de ellas he. Todavía he estado buscando, sin embargo.

Una cosa que encontré es AGLO.El código es GPL v1, pero hay documentos que describen los algoritmos, por lo que debería ser fácil volver a implementar desde cero si es necesario.

También está el documento de Gansner, Koutsofios, North y Vo - "Una técnica para gráficos dirigidos al dibujo" - disponible en here on the Graphviz site.

También he estado mirando de cerca la licencia BSD (pero Java) JGraph.

De una forma u otra, parece que podría volver a implementar la rueda, si no la reinventar.

+0

Las personas no siempre están tan motivadas para escribir un reemplazo de BSD para una biblioteca de GPL, a menos que haya un nicho de mercado ** realmente ** grande para la biblioteca en primer lugar. –

1

Estaba lidiando con un problema similar a principios de este año. Sin embargo, un parámetro de entrada importante para una decisión es el número esperado de nodos.

Decidí usar el navegador como GUI y, por lo tanto, busqué lindas bibliotecas de Javascript, encontré wireit, es muy adecuado para diseños técnicos (y también para edición con arrastrar y soltar y "sobre la marcha") maquetación). Podrías conectarlo fácilmente a tu C++ ejecutando un pequeño servidor web en un hilo (de todos modos, necesitarás algún tipo de thinglo eventloop/thread para GUI).

Bueno, solo mis 2 centavos.

+0

Esto es más estimulante que práctico. Requerir un servidor web es * no * una opción, pero el uso de un control HTML con soporte JavaScript puede no serlo, y también existe la opción de incorporar un motor Javascript o simplemente traducir el código. +1 de nuevo. – Steve314

+0

Bueno, creo que incrustar un servidor web es más fácil que incorporar un motor de JavaScript (http://code.google.com/p/mongoos/wiki/EmbeddingMongoose). Especialmente al factorizar todas las cosas relacionadas con los gráficos en el navegador, guarda muchas dependencias. Pero tampoco ocultaré que javascript tiene sus propias peculiaridades. Pero creo que el desarrollo de la GUI en javascipt + jQuery UI (o alguna otra lib) es más fácil (y más fácil de mantener) - THNX para el +1 – snies

+0

Un comentario más: cuando usas (X) HTML y JavaScript actualmente no tienes solución para " dibujo libre "compatible con todos los principales navegadores. Si, por otro lado, estás contento con el uso de Firefox, Safari, Chrome, Opera (todos menos IE), puedes usar SVG. Graphviz puede producir directamente salida SVG (o traducción fácil), que usted podría controlar y animar a través de javascript directamente. Por lo tanto, puede reutilizar parte de su configuración actual. (http://code.google.com/p/svgweb/ también permite la compatibilidad con svg en IE) – snies

2

OGDF es bajo la GPL.

Pigale también está bajo la GPL.

GoVisual es un software comercial, pero parece que comienza en $ 1800 para un desarrollador.

+0

Incómodo para uso comercial, pero +1 probablemente no sea imposible (por ejemplo, separar el código GPL en un código binario enlazado dinámicamente, separado del código cerrado). – Steve314

+0

Separar el código GPL en un binario enlazado dinámicamente no ayuda. Todo esto sigue siendo un trabajo derivado del código GPL. –

+0

Realmente, si utilizo el código GPL para escribir un plugin de Photoshop, ¿todo el Photoshop se convierte repentinamente en un trabajo derivado del código GPL? ¡Adobe realmente no estará muy feliz con eso! ¿O es que Adobe no puede usar el código GPL en un plugin de Photoshop de código abierto, pero yo sí? – Steve314

2

Hmm, GDToolkit (o GDT) se ve bien: muchas de las imágenes en el tutorial se ven muy bien, y no parece que sea terriblemente complicado de usar.

Editar:.! Pero el control de la licencia, que parece que es un software comercial :-(¡Vaya

+0

Comercial puede ser mejor que GPL, dependiendo del costo, por lo que +1 nuevamente. – Steve314

Cuestiones relacionadas