Есть ли хорошая библиотека макетов графиков, которую можно вызвать из C++?
-
22-09-2019 - |
Вопрос
(ориентированные) графы представляют собой конечные автоматы.До сих пор моя тестовая программа записывала точечные файлы для тестирования.Это очень хорошо как для регрессионного тестирования (сохраняйте проверенные выходные файлы в Subversion, спрашивайте, были ли изменения), так и для визуализации.Однако есть некоторые проблемы...
По сути, мне нужно что-то вызываемое из C++ и которое планирует макет для моих состояний и переходов, но оставляет рисование мне - что-то, что позволит мне рисовать вещи так, как я хочу, и рисовать в окнах с графическим интерфейсом (wxWidgets).
Мне также нужна лицензия, которая позволит коммерческое использование - в настоящее время она мне не нужна, и я вполне могу выпустить ее с открытым исходным кодом, но я не хочу ограничивать свои возможности ATM.
Проблемы с GraphViz заключаются в следующем: (1) предупреждения о сборке из исходного кода в Windows, (2) все ненужные зависимости для рендеринга и синтаксического анализа и (3) (предполагаемое) отсутствие документированного API специально и исключительно для макетирования.
По сути, я хочу иметь возможность указывать свои состояния (с ограничивающими размерами прямоугольников) и переходы, а также считывать позиции состояний и путевых точек для каждого перехода, а затем самостоятельно рисовать на основе этих координат.Я действительно не понял, как следует обрабатывать аннотации к переходам, но должно быть какое-то средство для указания размеров ограничивающего прямоугольника для них, связывания их с переходами и считывания позиций.
Кто-нибудь знает библиотеку, которая может удовлетворить эти требования?
Я не обязательно против реализации чего-то для себя, но в данном случае я бы предпочел этого избежать, если это возможно.
Решение 4
Хотя ответы на данный момент заслуживали одобрения, я не могу принять ни один из них.Хотя я все еще искал.
Одна вещь, которую я нашел, это АГЛО.Код находится под лицензией GPL v1, но существуют документы, описывающие алгоритмы, поэтому при необходимости его будет достаточно легко реализовать с нуля.
Также есть статья Ганснера, Кутсофиоса, Норта и Во — «Техника рисования ориентированных графов», которую можно найти на сайте здесь, на сайте Graphviz.
Я также внимательно присматривался к лицензиям BSD (но Java). Jграф.
Так или иначе, похоже, что я заново реализую колесо, если не заново его изобрету.
Другие советы
Хм, GDToolkit (или GDT) выглядит нормально:многие изображения в руководство выглядит довольно красиво, и не похоже, что он очень сложен в использовании.
Редактировать:Но проверив лицензию, похоже, что это коммерческое ПО :-(.Упс!
В начале этого года я столкнулся с подобной проблемой.Однако одним из важных входных параметров для принятия решения является ожидаемое количество узлов.
Я решил использовать браузер в качестве графического интерфейса и поэтому искал хорошие библиотеки Javascript, я наткнулся на одну: телеграфировать, он очень хорошо подходит для технических макетов (а также редактирования с помощью перетаскивания и макетирования «на лету»).Вы можете легко подключить это к своему C++, запустив небольшой веб-сервер в потоке (в любом случае вам понадобится какая-то штука eventloop/thread для графического интерфейса).
Ну просто мои 2 цента.
Вот хорошая коллекция Graph Libs с функциями сравнения и поиска:
http://gvsr.polytech.univ-nantes.fr/GVSR/task?action=browse#
Возможно, вы найдете библиотеку, которая подойдет вам.