Есть ли хорошая библиотека компоновки графа, вызываемая из С++?

Графы (направленные) представляют собой конечные автоматы. До сих пор моя тестовая программа записывала файлы точек для тестирования. Это довольно хорошо как для регрессионного тестирования (сохранить проверенные выходные файлы в подрывной деятельности, спросить, произошли ли изменения), так и для визуализации. Однако есть некоторые проблемы...

В принципе, я хочу что-то вызываемое из С++ и которое планирует макет для моих состояний и переходов, но оставляет рисунок для меня - что-то, что позволит мне рисовать вещи, но я хочу и рисовать окна графического интерфейса (wxWidgets).

Я также хочу получить лицензию, которая позволит коммерческое использование - мне это не нужно в настоящее время, и я могу очень хорошо опубликовать ее как открытый, но я не хочу ограничивать свои возможности ATM.

Проблемы с GraphViz - это (1) предупреждения о создании из источника в Windows, (2) все ненужные зависимости для рендеринга и синтаксического анализа и (3) недостаток документально подтвержденного API специально и чисто для макета.

В принципе, я хочу иметь возможность указывать свои состояния (с размерами ограниченных прямоугольников) и переходы, а также читать позиции для состояний и путевых точек для каждого перехода, а затем на основе этих координат нарисовать. Я действительно не понял, как обрабатывать аннотации по переходам, но должно быть какое-то условие для указания размеров ограничивающих квадратов для них, связывания их с переходами и считывания позиций.

Кто-нибудь знает библиотеку, которая может справиться с этими требованиями?

Я не обязательно против реализации чего-то для себя, но в этом случае я предпочел бы избежать этого, если это возможно.

Ответы

Ответ 1

Хотя ответы до сих пор стояли на высоте, я не могу принять ни одного из них. Я все еще искал.

Я обнаружил, что AGLO. Код - это GPL v1, но есть документы, описывающие алгоритмы, поэтому их необходимо легко обновить с нуля, если это необходимо.

Там также статья Ганснера, Koutsofios, North и Vo - "Техника для рисования направляемых графиков" - доступна из здесь, на сайте Graphviz.

Я также внимательно изучал BSD-лицензию (но Java) JGraph.

Так или иначе, похоже, что я мог бы повторно использовать колесо, если не на самом деле его повторно изобретать.

Ответ 2

OGDF находится под GPL.

Pigale также находится под GPL.

GoVisual - это коммерческое программное обеспечение, но похоже, что он начинается с 1800 долларов для одного разработчика.

Ответ 3

Hmm, GDToolkit (или GDT) выглядит хорошо: многие изображения в tutorial выглядят довольно красиво, и это не так, t выглядят так ужасно сложно.

Изменить: но, проверяя лицензию, это похоже на коммерческое программное обеспечение:-(. Whoops!

Ответ 4

В этом году я столкнулся с аналогичной проблемой. Однако одним важным входным параметром для решения является ожидаемое количество узлов.

Я решил использовать Браузер в качестве графического интерфейса и, следовательно, искал хорошие библиотеки Javascript, один из которых я натолкнулся на wireit, он очень хорошо подходит для технических макетов (а также редактирования с перетаскиванием и "на лету" ). Вы можете легко связать это с вашим С++, запустив небольшой веб-сервер в потоке (в любом случае вам понадобится какой-то eventloop/thread thingie для GUI).

Ну только мои 2 цента.