2008-08-14 7 views
15

Je suis en train de coder un générateur d'organigramme pour une langue en utilisant Ruby.Bibliothèque pour Ruby

Je voulais savoir s'il y avait des bibliothèques que je pourrais utiliser pour dessiner diverses formes pour les divers éléments de l'organigramme et écrire du texte dans ces formes.

Je préférerais vraiment ne pas avoir à écrire du code pour dessiner des formes de base, si je peux l'aider.

Quelqu'un peut-il me pourrait pointer vers une documentation de référence avec des exemples d'utilisation de cette bibliothèque?

+0

J'ai eu la même question, Laissez-moi savoir id il y a quelque chose comparable à l'espace de noms System.Drawing dans .net – Zasz

Répondre

2

La réponse est simple (au moment de la rédaction) ce que vous voulez certainement n'existait pas. Pardon!

Si vous êtes basé sur Windows alors je chercherais un produit dans l'espace .NET, où je pense que vous trouverez quelque chose. Vous allez probablement devoir payer de l'argent réel. Je suppose que si vous êtes courageux, vous pourrez peut-être en parler avec IronRuby.

À partir d'un environnement non MS, j'espère trouver une solution Java. Comme déjà mentionné, dans le monde du Web, vous allez espérer quelque chose de JavaScript, ou probablement plus, quelque chose du monde Flash (ou peut-être même Silverlight?). En fait, si vous voulez rester dans Ruby et que cela ne vous dérange pas, Silverlight pourrait être un moyen d'y aller - en supposant que les choses DLR fonctionnent réellement (aucune expérience ici). Ruby - autant que je l'aime - a à peine la structure d'interface graphique la plus mature autour d'elle. Mise à jour: Depuis que nous écrivons ceci (il y a 5 ans), la situation s'est améliorée - un peu. Bien que je ne suis toujours pas au courant des bibliothèques graphiques de dessin spécifiques Ruby, il y a un support amélioré pour Graphvizhere (Github) ou par gem install ruby-graphviz. J'ai trouvé que pour des graphes simples, il est tout à fait possible d'écrire le script directement depuis Ruby.

+2

Certaines bibliothèques existent pour le rubis. Bien que vous auriez à travailler uniquement avec des éléments de base. Comme Nathan a fait remarquer, il y a https://rubygems.org/gems/rmagick, mais il y a aussi https://rubygems.org/gems/cairo. Voici un tutoriel simple http://www.hokstad.com/simple-drawing-in-ruby-with-cairo.html. Et voici un autre qui utilise GTK http://zetcode.com/tutorials/rubygtktutorial/cairo/. Je dois admettre que ce n'est pas la meilleure API, mais c'est un début. – Gaston

+4

"Je besoin de quelque chose avec Ruby", "Try .NET", WTF. – Dorian

+0

@Gaston Dommage que vous n'avez pas répondu à cette question. – Blogueira

3

On dirait que vous allez être limité principalement par les capacités de tout agent utilisateur que vous construisez pour; S'il s'agit d'un projet web, les capacités de dessin vont dépendre du navigateur. Comme Ruby fonctionne côté serveur, vous aurez besoin au minimum de JavaScript pour permettre le glisser/zoom, etc. Il y a beaucoup d'exemples de JavaScript utilisés pour le dessin vectoriel (juste "google javascript graphics library"), mais tous nécessitent un codage. Je n'ai vu aucune bibliothèque qui résume cela élégamment.

ImageMagick a une liaison Ruby appelée RMagick (parfois connue sous d'autres noms, selon le référentiel). (Link) Je n'ai pas utilisé moi-même, mais je crois qu'il fera ce que vous cherchez. Vous aurez besoin de faire un peu de codage, mais il est le long des lignes de

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

Je suis tout à fait sûr, mais vérifier des liaisons pour caire rubis. Pango pour le texte. J'étudie alors actuellement et suis tombé sur cette page.

17

Ecrivez votre organigramme en tant que graphique dirigé ou non orienté dans Graphviz. Graphviz a un langage, dot qui le rend facile à générer des graphiques. Générez simplement le fichier de points, exécutez-le via Graphiviz, et vous obtenez votre image.

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

Rendu
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 
} 

Rendu
directed

Vous pouvez contrôler les formes de nœuds et beaucoup plus Graphviz.

Questions connexes