Я пытаюсь написать генератор блок-схем для языка, используя Ruby.
Я хотел узнать, есть ли какие-нибудь библиотеки, которые я мог бы использовать для рисования различных фигур для различных элементов блок-схемы и записи текста на эти фигуры.
Я бы предпочел не писать код для рисования основных фигур, если это возможно.
Может ли кто-нибудь указать мне на какую-нибудь справочную документацию с примерами использования такой библиотеки?
Опишите свою блок-схему как направленный или ненаправленный граф в Graphviz. У Graphviz есть язык, точка, которая облегчает производить графы. Просто произведите точечный файл, управляйте им через Graphiviz, и Вы получаете свое изображение.
graph {
A -- B -- C;
B -- D;
C -- D [constraint=false];
}
отдает как < br> < href =" http://www.flickr.com/photos/rampion/3130993214/" название =" ненаправленный rampion, на Flickr" > < img src =" https://farm4.static.flickr.com/3126/3130993214_af71aa44f6.jpg" ширина =" 183" высота =" 255" высокий звук =" undirected"/>
digraph {
A [label="start"];
B [label="eat"];
C [label="drink"];
D [label="be merry"];
A -> B -> C;
C -> D [constraint=false];
B -> D [ arrowhead=none, arrowtail=normal]; // reverse this edge
}
отдает as< br> < href =" http://www.flickr.com/photos/rampion/3130162313/" название =" направленный rampion, на Flickr" > < img src =" https://farm4.static.flickr.com/3085/3130162313_51e5b00dc9.jpg" ширина =" 212" высота =" 255" высокий звук =" directed"/>
Вы можете управлять формами узла и намного больше в Graphviz.
[3]: https://farm4.static.flickr.com/3085/3130162313_51e5b00dc9.jpg? v=0
Похоже, что вы будете ограничены в основном возможностями того пользовательского агента, для которого вы создаете; если это веб-проект, возможности рисования будут зависеть от браузера. Поскольку Ruby работает на стороне сервера, вам, как минимум, понадобится JavaScript для обеспечения перетаскивания, масштабирования и т.д. Есть много примеров использования JavaScript для векторного рисования (просто погуглите "графическая библиотека javascript"), но все они требуют кодирования, и я не видел ни одной библиотеки, которая абстрагировала бы это элегантно.
У ImageMagick есть привязка к Ruby, называемая RMagick (иногда известная под другими именами, в зависимости от репозитория). (Ссылка) Я сам его не использовал, но думаю, что он сделает то, что вы ищете. Вам придется немного поработать над кодом, но это примерно следующее
draw.rectangle(x1, y1, x2, y2)
draw.polygon(x1, y1,...,xN, yN)
Простой ответ заключается в том, что (на момент написания статьи) того, что вам нужно, почти наверняка не существует. Извините!
Если вы работаете под Windows, то я бы поискал продукт в области .NET, где, я думаю, вы что-нибудь найдете. Однако, вероятно, вам придется заплатить реальные деньги. Полагаю, если вы смелы, вы сможете общаться с ним, используя IronRuby.
В среде, не связанной с MS, я бы надеялся на решение на базе Java. Как уже упоминалось, в мире Web вы будете надеяться на что-то на основе JavaScript, или, возможно, более вероятно, на что-то из мира Flash (или, может быть, даже Silverlight?).
На самом деле, если вы хотите остаться в Ruby и не возражаете против некоторого риска, Silverlight может быть подходящим вариантом - при условии, что DLR действительно работает (здесь опыта нет). Ruby - как бы я его не любил - вряд ли имеет самую зрелую структуру GUI вокруг себя.
Обновление: С момента написания этой статьи (почти 5 лет назад) ситуация немного улучшилась. Хотя я все еще не знаю о каких-либо конкретных библиотеках Ruby для рисования графов, есть улучшенная поддержка Graphviz (здесь (Github)2) или с помощью gem install ruby-graphviz
. Я обнаружил, что для простых графов вполне возможно написать скрипт прямо из Ruby.
Я абсолютно не уверен, но посмотрите привязки cairo для ruby. Pango для текста. Сейчас я изучаю этот вопрос и наткнулся на эту страницу.