Рисование библиотеки для Ruby
Я пытаюсь закодировать генератор блок-схем для языка с использованием Ruby.
Я хотел знать, есть ли какие-либо библиотеки, которые я мог бы использовать для рисования различных фигур для различных элементов блок-схемы и выписывания текста этим формам.
Я бы предпочел не писать код для рисования основных фигур, если я могу ему помочь.
Может ли кто-нибудь указать мне ссылку на справочную документацию с примерами использования этой библиотеки?
Ответы
Ответ 1
Простой ответ заключается в том, что (на момент написания) то, что вы хотите, почти наверняка не существовало. Извините!
Если вы используете Windows, я бы поискал продукт в пространстве .NET, где, как я ожидал, вы найдете что-то. Возможно, вам придется заплатить реальные деньги. Я полагаю, если вы храбры, вы можете поговорить с ним, используя IronRuby.
В среде, отличной от MS, я буду надеяться на решение на базе Java. Как уже упоминалось, в веб-мире вы надеетесь на что-то похожее на JavaScript или, скорее всего, что-то из мира Flash (или, может быть, даже Silverlight?).
На самом деле, если вы хотите остаться в Ruby и не возражаете против какого-либо риска, Silverlight может стать для вас способом - при условии, что DLR-материал действительно работает (никакого опыта здесь нет). Ruby - так же, как мне это нравится - вряд ли у него есть самая зрелая структура графического интерфейса.
Обновление: с момента написания (приближается 5 лет назад) ситуация улучшилась - немного. Хотя я до сих пор не знаю каких-либо конкретных библиотек графического рисования Ruby, улучшена поддержка Graphviz здесь (Github) или gem install ruby-graphviz
. Я нашел, что для простых графиков вполне возможно написать script непосредственно из Ruby.
Ответ 2
Напишите свою блок-схему как направленный или неориентированный граф в Graphviz. Graphviz имеет язык, dot, который позволяет легко генерировать графики. Просто сгенерируйте файл точки, запустите его через Graphiviz, и вы получите свое изображение.
graph {
A -- B -- C;
B -- D;
C -- D [constraint=false];
}
отображает как
![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
}
отображает как
![directed]()
Вы можете управлять формами node и многое другое в Graphviz.
Ответ 3
Похоже, вы ограничены в основном возможностями любого пользовательского агента, для которого вы строите; если это веб-проект, возможности рисования будут зависеть от браузера. Поскольку Ruby работает на стороне сервера, вам понадобится как минимум JavaScript, чтобы позволить перетаскивание/масштабирование и т.д. Существует много примеров использования JavaScript для векторного рисования (только для Google javascript graphics library), но все они требуют кодирования и Я не видел ни одной библиотеки, которая абстрактно объясняет это.
ImageMagick имеет привязку Ruby, называемую RMagick (иногда известный другими именами, в зависимости от репозитория). (Ссылка)
Я не использовал его сам, но я верю, что он сделает то, что вы ищете. Вам нужно будет сделать некоторое кодирование, но оно по строкам
draw.rectangle(x1, y1, x2, y2)
draw.polygon(x1, y1,...,xN, yN)
Ответ 4
Я абсолютно уверен, но проверьте привязки каира на рубин. Pango для текста. В настоящее время я изучаю и натолкнулся на эту страницу.