Biblioteca para visualización de gráficos de componentes con Qt

Estoy interesado en encontrar una buena biblioteca c ++ (o código base sobre el cual crear uno) para dibujar componentes de gráficos conectados interactivos en Qt.

Por componente de gráfico conectado , me refiero a gráficos cuyos nodos son componentes con secciones de entrada y salida al estilo de los nodos de gráfico en Blender Node Editor o Grasshopper , vea el ejemplo .

Por interactivo , quiero decir que necesito poder acceder a la posición y las ubicaciones de los componentes para permitir que el usuario los seleccione e interactúe con ellos.

Mis requisitos:

  • para Qt en C++
  • menor cantidad de dependencias externas (lo mejor sería solo una biblioteca de encabezado)
  • soporte para diseño automático (o semiautomático, los nodos se configuran, los bordes deben conectarse automáticamente)
  • habilitado para interactividad (es decir, no solo una salida de imagen, muy probablemente basada en QGraphicsScene)

Mi implementación actual usa GraphViz con QGV , pero solo admite nodos de componentes simples (sin elementos de entrada/salida específicos). Si bien GraphViz admite elementos de registro y html, QGV no lo hace y parece una molestia suficiente para implementarlo dentro de una bifurcación de QGV correctamente dadas las restricciones de GraphViz que me pregunto si no hay una mejor opción, tratando de no usar GraphViz.

También podría estar bien con una biblioteca simple que no sea de gráficos que haga el diseño dadas las restricciones de tamaño y las restricciones de posición relativa (los bloques de componentes tienen un tamaño fijo, las posiciones de los nodos de entrada/salida son fijas dada la ubicación del bloque de componentes).

Respuestas (1)

Tal vez sea demasiado tarde, pero aquí está la biblioteca que desarrollo para la edición de gráficos de nodos de propósito general.

https://github.com/paceholder/nodeeditor

Características clave:

  • Basado en Qt 5.x con C++14
  • Residencia enQGraphicsScene
  • Los nodos se comportan de acuerdo con los modelos definidos por el usuario
  • Sin dependencias (solo Qt).
  • Diferentes estilos de color

Mire el video para ver de qué es capaz la biblioteca:1

De hecho, es un poco tarde para usarlo para el proyecto que estaba planeando, pero vale la pena mencionarlo en alguna parte. Puedo mirarlo si sucede que lo necesito en un nuevo sistema. ¿Sabes qué tan bien se escala a gráficos más grandes? Estoy hablando de unos pocos cientos de nodos, lo cual es bastante común para los sistemas basados ​​en algoritmos. Uno que descubrí más tarde (pero en Python es el de Antimony, un proyecto de Media Lab para CAD, mattkeeter.com/projects/antimony/3 ), y parece escalar hasta cierto nivel.
En términos de rendimiento de representación de gráficos, se escala bastante bien, ya que se basa en el motor ultrarrápido QGraphicsScene. Si hablamos de propagación de señales, supongo que debe ser un poco más lento que un script de Python (por ejemplo). Internamente, uso std::shared_ptrpara envolver los datos del usuario y pasarlos al siguiente modelo. Esto requiere algunas asignaciones de memoria y copia de puntero compartido. De todos modos, un chico logró hacer un renderizador GLSL en tiempo real basado en este Editor de nodos con una docena de primitivas que entregaron 30-60 FPS ( github.com/v0q/CollaborativeResearchProject )
Esto es exactamente lo que he estado buscando, ¡absolutamente impresionante! @marcapasos