Библиотека рисования для Ruby

Я пытаюсь написать код генератора блок-схем для языка с использованием Ruby.

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

Я бы действительно предпочел не писать код для рисования основных форм, если я могу помочь.

Может ли кто-нибудь указать мне на справочную документацию с примерами использования этой библиотеки?

Ответов (4)

Решение

Простой ответ заключается в том, что (на момент написания) того, чего вы хотите, почти наверняка не существовало. Извините!

Если вы работаете на Windows, я бы поискал продукт в пространстве .NET, где, я ожидаю, вы что-нибудь найдете. Однако вам, вероятно, придется заплатить реальные деньги. Я полагаю, если вы смелы, вы сможете поговорить с ним с помощью IronRuby.

Из среды, отличной от MS, я бы надеялся на решение на основе Java. Как уже упоминалось, в мире Интернета вы будете надеяться на что-то на основе JavaScript или, что более вероятно, что-то из мира Flash (или, может быть, даже Silverlight?).

На самом деле, если вы хотите остаться в Ruby и не возражаете против некоторого риска, Silverlight может быть подходящим вариантом - при условии, что материал DLR действительно работает (здесь нет опыта). Ruby - насколько я его люблю - вряд ли имеет наиболее зрелую структуру графического интерфейса.

Обновление: с момента написания этого (около 5 лет назад) ситуация немного улучшилась. Хотя я до сих пор не знаю каких-либо конкретных библиотек для рисования графиков Ruby, улучшенная поддержка Graphviz есть здесь (Github ) или от gem install ruby-graphviz . Я обнаружил, что для простых графиков вполне возможно написать сценарий прямо из Ruby.

Напишите свою блок-схему в виде ориентированного или неориентированного графа в Graphviz . В Graphviz есть язык dot, который упрощает создание графиков. Просто сгенерируйте точечный файл, запустите его через Graphiviz, и вы получите свое изображение.

graph {
  A -- B -- C;
  B -- D;
  C -- D [constraint=false];
}

отображается как
ненаправленный

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
}

отображается как
направленный

Вы можете контролировать формы узлов и многое другое в Graphviz.

Похоже, вы будете ограничены в основном возможностями того пользовательского агента, для которого вы создаете; если это веб-проект, возможности рисования будут зависеть от браузера. Поскольку Ruby работает на стороне сервера, вам, как минимум, понадобится некоторый JavaScript, чтобы разрешить перетаскивание / масштабирование и т. Д. Существует множество примеров использования JavaScript для векторного рисования (просто «библиотека графики javascript в Google»), но все они требуют кодирования, и Я не видел библиотеки, которая бы это элегантно абстрагировала.

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

draw.rectangle(x1, y1, x2, y2)
draw.polygon(x1, y1,...,xN, yN)

Я полностью уверен, но посмотрите каирские привязки для рубина. Панго для текста. Я занимаюсь расследованием и наткнулся на эту страницу.