Есть ли хорошая библиотека компоновки графа, вызываемая из С++?
Графы (направленные) представляют собой конечные автоматы. До сих пор моя тестовая программа записывала файлы точек для тестирования. Это довольно хорошо как для регрессионного тестирования (сохранить проверенные выходные файлы в подрывной деятельности, спросить, произошли ли изменения), так и для визуализации. Однако есть некоторые проблемы...
В принципе, я хочу что-то вызываемое из С++ и которое планирует макет для моих состояний и переходов, но оставляет рисунок для меня - что-то, что позволит мне рисовать вещи, но я хочу и рисовать окна графического интерфейса (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 цента.
Ответ 5
Вот хорошая коллекция Graph Libs с функцией сравнения и поиска:
http://gvsr.polytech.univ-nantes.fr/GVSR/task?action=browse#
Возможно, вы найдете lib, который подходит вам.